From 5bfe1f3c6ec29b8e1ce742769c3846f483d9b74d Mon Sep 17 00:00:00 2001 From: Umut Kantarci Date: Tue, 6 Oct 2026 19:47:06 +0200 Subject: [PATCH] =?UTF-8?q?Build=20H=C3=BCfner=20Gartenbau=20as=20a=20nint?= =?UTF-8?q?h=20installation,=20let=20buttons=20call=20and=20write,=20colou?= =?UTF-8?q?r=20the=20button=20arrow=20like=20its=20text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Website of Garten- und Landschaftsbau Hüfner GmbH rebuilt from the delivered design with imprint, privacy, 404 and the enquiry form (scripts/reset-huefner.sh, ports 8102/8103), Barlow and Barlow Condensed served locally with their licence. - Buttons, icon cards, calls to action, icons and linked images accept tel: and mailto: links, the same targets menus and rich text already allowed (ADR 107). - The arrow inside a button takes the button's text colour instead of the accent colour. Co-Authored-By: Claude Opus 5.5 --- .claude/launch.json | 20 + README.md | 4 + docs/ARCHITECTURE.md | 12 + docs/STATUS.md | 22 + public/assets/editor.js | 10 +- public/assets/fonts/LIZENZ.md | 4 + .../assets/fonts/barlow-400-latin-ext.woff2 | Bin 0 -> 14268 bytes public/assets/fonts/barlow-400-latin.woff2 | Bin 0 -> 22196 bytes .../assets/fonts/barlow-600-latin-ext.woff2 | Bin 0 -> 14968 bytes public/assets/fonts/barlow-600-latin.woff2 | Bin 0 -> 22772 bytes .../assets/fonts/barlow-700-latin-ext.woff2 | Bin 0 -> 14836 bytes public/assets/fonts/barlow-700-latin.woff2 | Bin 0 -> 22788 bytes public/assets/fonts/barlow-OFL.txt | 93 ++ .../barlow-condensed-700-latin-ext.woff2 | Bin 0 -> 14640 bytes .../fonts/barlow-condensed-700-latin.woff2 | Bin 0 -> 22444 bytes .../barlow-condensed-800-latin-ext.woff2 | Bin 0 -> 14548 bytes .../fonts/barlow-condensed-800-latin.woff2 | Bin 0 -> 22464 bytes public/assets/fonts/fonts.css | 20 + public/assets/site.css | 3 + scripts/build-huefner-assets.php | 45 + scripts/reset-huefner.sh | 26 + scripts/seed-huefner.php | 1251 +++++++++++++++++ src/Content/DocumentValidator.php | 42 +- tests/CmsTest.php | 35 +- 24 files changed, 1576 insertions(+), 11 deletions(-) create mode 100644 public/assets/fonts/barlow-400-latin-ext.woff2 create mode 100644 public/assets/fonts/barlow-400-latin.woff2 create mode 100644 public/assets/fonts/barlow-600-latin-ext.woff2 create mode 100644 public/assets/fonts/barlow-600-latin.woff2 create mode 100644 public/assets/fonts/barlow-700-latin-ext.woff2 create mode 100644 public/assets/fonts/barlow-700-latin.woff2 create mode 100644 public/assets/fonts/barlow-OFL.txt create mode 100644 public/assets/fonts/barlow-condensed-700-latin-ext.woff2 create mode 100644 public/assets/fonts/barlow-condensed-700-latin.woff2 create mode 100644 public/assets/fonts/barlow-condensed-800-latin-ext.woff2 create mode 100644 public/assets/fonts/barlow-condensed-800-latin.woff2 create mode 100644 scripts/build-huefner-assets.php create mode 100644 scripts/reset-huefner.sh create mode 100644 scripts/seed-huefner.php diff --git a/.claude/launch.json b/.claude/launch.json index c49ac5a..749b8ec 100644 --- a/.claude/launch.json +++ b/.claude/launch.json @@ -148,6 +148,26 @@ "$env:APP_ENV='prod'; $env:APP_DEBUG='0'; $env:DATABASE_URL='sqlite:///C:/Django Project/KantSites/var/kantarci-markt.db'; $env:MEDIA_DIRECTORY='C:/Django Project/KantSites/var/kantarci-markt-media'; $env:SITE_ORIGIN='http://127.0.0.1:8101'; & C:/php84/php.exe -d upload_max_filesize=8M -d post_max_size=10M -d memory_limit=256M -S 127.0.0.1:8101 -t public bin/dev-router.php" ], "port": 8101 + }, + { + "name": "huefner", + "runtimeExecutable": "powershell", + "runtimeArgs": [ + "-NoProfile", + "-Command", + "$env:APP_ENV='dev'; $env:DATABASE_URL='sqlite:///C:/Django Project/KantSites/var/huefner.db'; $env:MEDIA_DIRECTORY='C:/Django Project/KantSites/var/huefner-media'; $env:SITE_ORIGIN='http://127.0.0.1:8102'; & C:/php84/php.exe -d upload_max_filesize=8M -d post_max_size=10M -d memory_limit=256M -S 127.0.0.1:8102 -t public bin/dev-router.php" + ], + "port": 8102 + }, + { + "name": "huefner-prod", + "runtimeExecutable": "powershell", + "runtimeArgs": [ + "-NoProfile", + "-Command", + "$env:APP_ENV='prod'; $env:APP_DEBUG='0'; $env:DATABASE_URL='sqlite:///C:/Django Project/KantSites/var/huefner.db'; $env:MEDIA_DIRECTORY='C:/Django Project/KantSites/var/huefner-media'; $env:SITE_ORIGIN='http://127.0.0.1:8103'; & C:/php84/php.exe -d upload_max_filesize=8M -d post_max_size=10M -d memory_limit=256M -S 127.0.0.1:8103 -t public bin/dev-router.php" + ], + "port": 8103 } ] } \ No newline at end of file diff --git a/README.md b/README.md index 1798974..b03bb8c 100644 --- a/README.md +++ b/README.md @@ -389,6 +389,10 @@ Die Landingpage „KANTARCI Immobilien – Mietanfrage“ (KANTARCI Immobilien G Die Seite „Kantarci Markt – Neueröffnung“ (Wilhelm-Drapp-Straße, Baden-Baden) liegt in `var/kantarci-markt.db` mit Medien in `var/kantarci-markt-media`; die Startkonfiguration `kantarci-markt` in `.claude/launch.json` nutzt Port 8100, `kantarci-markt-prod` denselben Bestand im Produktionsmodus auf Port 8101 zum Messen. `sh scripts/reset-kantarci-markt.sh [Bilderordner]` (Standard `var/kantarci-markt-assets` mit `kantarci-markt-logo.png`, `market.jpg` und `vegetables.jpg` aus dem gelieferten Paket) schneidet das Logo zu und rastert Seitensymbol und Stempel (`node scripts/build-kantarci-markt-assets.mjs`), wirft die Installation weg, baut mit `scripts/seed-kantarci-markt.php` Gestaltung, Kopf- und Fußbereich, Startseite, Impressum, Datenschutz, 404 und Einstellungen auf und holt DM Sans auf den eigenen Server (`cms:fonts:fetch`, ersetzt in `fonts.css` nur die Regeln für DM Sans). Gemessen mit `MSYS_NO_PATHCONV=1 CMS_URL=http://127.0.0.1:8101 CMS_PATHS=/,/impressum,/datenschutz CMS_AUDIT_DIR=reports/lighthouse-kantarci-markt node scripts/audit.mjs` (in Git Bash verhindert `MSYS_NO_PATHCONV`, dass `/impressum` zu einem Windows-Pfad wird). Die bewussten Abweichungen vom Paket stehen im Kopf des Skripts. Die Demo der Eröffnungsseite liegt unter `/eroeffnung` (noindex) und bettet die Angebote aus `app.kantarci-markt.de` ein; die App erlaubt das nur von `localhost`, deshalb misst man sie mit `CMS_HOST_RULES="MAP localhost 127.0.0.1" CMS_URL=http://localhost:8101 CMS_PATHS=/eroeffnung`. +### Neunte lokale Referenzwebsite: Hüfner Gartenbau + +Die Website der Garten- und Landschaftsbau Hüfner GmbH (Iffezheim) liegt in `var/huefner.db` mit Medien in `var/huefner-media`; die Startkonfiguration `huefner` in `.claude/launch.json` nutzt Port 8102, `huefner-prod` denselben Bestand im Produktionsmodus auf Port 8103 zum Messen. `sh scripts/reset-huefner.sh [Entwurfsordner]` kopiert die Fotos aus dem gelieferten Entwurf nach `var/huefner-assets` und schneidet den Baum aus dem Logo als Seitensymbol (`scripts/build-huefner-assets.php`; ohne Argument nimmt es die schon vorbereiteten Bilder), wirft die Installation weg, baut mit `scripts/seed-huefner.php` Gestaltung, Kopf- und Fußbereich, Startseite, Impressum, Datenschutz, 404, Menü, Einstellungen und das Formular `anfrage` auf und holt Barlow und Barlow Condensed auf den eigenen Server. Gemessen mit `MSYS_NO_PATHCONV=1 CMS_URL=http://127.0.0.1:8103 CMS_PATHS=/,/impressum,/datenschutz npm run audit`. Die bewussten Abweichungen vom Entwurf stehen im Kopf des Skripts. + Zusätzliche Prüfung mit den lokalen Kant-IT-Inhalten: `node scripts/admin-quality-check.mjs` (PHP über `PHP_BINARY` wählbar). Das Skript benötigt `var/kantit.db` und `var/kantit-media`, erstellt eine eigene Datenbankkopie und ein zufälliges Testkonto darin; es ändert die Pilotdatenbank nicht. Screenshots und Bericht landen in `reports/admin-quality/`. Die Livesuche prüft `npm run test:search` mit derselben isolierten Pilotkopie: Eingabe ohne Enter, langsame Antworten, Fehler/Wiederholen, Filter, Browserhistorie, Mediathek, Tastaturfokus, mobile Ansicht und axe. Ergebnisse stehen in `reports/live-search/`. Die allgemeine Verwaltungsprüfung ohne erneuten öffentlichen Bewegungstest startet `npm run test:admin -- --admin-only`. diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index af581a4..72f2294 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -2,6 +2,18 @@ Stand: 15.09.2026. Arbeitstitel KantSites; Produktname offen. +## ADR 107 – Knöpfe dürfen anrufen und schreiben, der Pfeil hat die Schriftfarbe (06.10.2026) + +Beim Aufbau von Hüfner Gartenbau fielen zwei Lücken auf, die Umut im Kern geschlossen haben wollte. + +**`tel:` und `mailto:` als Linkziel von Bausteinen.** Menüeinträge (`MenuRepository::url`), Links im formatierten Text (`RichText::safeHref`) und Plugin-Felder kannten beide längst. Nur die Linkziele der Bausteine – Button, Symbolkarte, Handlungsaufruf, Symbol, verlinktes Bild – liefen über `DocumentValidator::url()` und nahmen bloß Pfad, Sprungmarke und HTTPS. Ein Knopf „Jetzt anrufen“ ging deshalb nur als Textlink im Knopf-Aussehen. Jetzt prüft `link()` diese fünf Stellen: zuerst wie bisher, dazu `tel:` mit Ziffern, `+`, Klammern und Bindestrich (keine Leerzeichen, wie im Menü) und `mailto:` mit einer gültigen Adresse und höchstens einer prozentkodierten Abfrage (`?subject=…`). Bildquellen und eingebettete Inhalte bleiben bei `url()`: `tel:` ist dort kein sinnvolles Ziel. + +Das Dokumentschema bleibt bei v24. Die Änderung erlaubt nur zusätzliche Werte in einem bestehenden Feld und braucht keinen Migrationsweg. Ein Dokument mit `tel:` an einem Knopf lässt sich aber auf einem Kern vor dieser Fassung nicht speichern. Eine Installation, die solche Dokumente bekommt, braucht also zuerst das Update. + +**Der Pfeil im Knopf folgt der Schriftfarbe.** Das Pfeilsymbol trägt die Klasse `block-icon`, und die färbt jedes Symbol in der Akzentfarbe. Auf einem roten Knopf mit weißer Schrift stand so ein grüner Pfeil, und auch die Farbe beim Überfahren erreichte ihn nicht. `.button-arrow .block-icon{color:inherit}` in `site.css` setzt das richtig. Wo eine Website ihren Pfeil absichtlich anders färbt, tut sie das weiter über das eigene CSS des Knopfs; das geht vor. + +**Geprüft:** `CmsTest::testButtonsAndLinkedBlocksMayCallOrWrite` (speichern, ausgeben, Bildquelle mit `tel:` abgewiesen), neue Ungültig-Fälle in `invalidDocuments` (Buchstaben oder Leerzeichen in der Nummer, `mailto:` ohne Adresse oder mit Anführungszeichen bzw. `<`), `testTheButtonArrowTakesTheColourOfTheButtonText`. + ## ADR 106 – „Eigenes HTML“ als Baustein, und warum der Rahmen trotzdem „Externer Inhalt“ bleibt (16.09.2026) Umut: „Als Baustein im Editor, dass man individuelles HTML einfügen kann. Z. B. möchte ich eine neue Angebotsseite bei DEEG, da soll ein iframe rein.“ Das sind zwei Wünsche, und nur einer davon fehlte. diff --git a/docs/STATUS.md b/docs/STATUS.md index 2eed8b4..fbfcb4b 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -1,5 +1,27 @@ # Projektstatus +## Fassung 1.23.1: neunte Installation „Hüfner Gartenbau“, Knöpfe mit tel: und mailto:, Pfeil in der Schriftfarbe (06.10.2026) + +**Anlass:** Umut: „Hier liegt ein Designentwurf für Hüfner Gartenbau. Kannst du mir db und media erstellen für KantSites bitte. […] Effekte rein. Nichts am Code ändern, sondern alles an KantSites-Designelementen anpassen/bauen. Falls was nicht geht, Rückmeldung.“ Vorlage: `Downloads/huefner-website/huefner-website` (statisches `index.html`, 16 Fotos, Logo). + +**Neu (nur Inhalt, kein Kerncode):** Datenbank `var/huefner.db`, Medien `var/huefner-media`, Bildquellen `var/huefner-assets`, Startkonfigurationen `huefner` (Port 8102, dev) und `huefner-prod` (Port 8103). `sh scripts/reset-huefner.sh ` kopiert die Bilder und schneidet den Baum aus dem Logo als Seitensymbol (`build-huefner-assets.php`), baut mit `seed-huefner.php` alles neu und holt Barlow und Barlow Condensed auf den eigenen Server. Ohne Argument nimmt es die schon vorbereiteten Bilder. + +- **Startseite** mit allen elf Abschnitten des Entwurfs: Hero mit Verlauf und Vorteilsband, Collage, Leistungs- und Referenzkacheln (Foto zoomt, Kachel bekommt Schatten), Chips, Ablauf mit gestrichelter Linie, Fuhrpark, Über uns, Karriere (Stellen als Links mit E-Mail-Betreff), Instagram-Raster, Abschlussband, Kontakt mit dem CMS-Formular `anfrage` (Versand an info@huefner-gartenbau.de). Dazu Impressum, Datenschutz, 404, Menü mit Sprungmarken, klebender Kopf, Einblendungen beim Scrollen. +- **Inhaltliche Ergänzungen** statt der Platzhalter der Vorlage: Öffnungszeiten Mo–Fr 8–17, Sa 8–12 (von Umut, auch als strukturierte Daten), Firmengeschichte und Impressum aus dem Handelsregister (HRB 742159, AG Mannheim, GF Florian Hüfner; Simone Hüfner war nur bis 27.04.2026 Prokuristin), Hoster IONOS, alle Fotos eigene Aufnahmen. Kennzahlen „[XX] Jahre“/„[XXX] Projekte“ ersetzt durch Aussagen der Vorlage (100 % Detailarbeit, Bagger bis 15 t, ein Team). Keine USt-IdNr. bekannt, deshalb keine Zeile. + +**Grenzen des Kerns:** + +- Nachtrag, gleicher Tag – auf Umuts Wunsch im Kern behoben (ADR 107): Knöpfe und andere verlinkbare Bausteine nehmen `tel:` und `mailto:` an, und der Pfeil im Knopf hat die Schriftfarbe statt der Akzentfarbe. Die Anrufknöpfe bei Hüfner sind jetzt echte Knöpfe, der Pfeil braucht keine eigene Regel mehr. Vorher: Textlink im Knopf-Aussehen und `color:inherit` im CSS des Knopfs. +- Kein LKW im Symbolsatz: Das Symbol steht als „Eigenes HTML“ mit dem SVG der Vorlage. +- Leiste und Kopf kleben gemeinsam (die Einstellung gilt für den ganzen Kopfbereich). +- Zeilen sind durchsichtig, farbige Karten deshalb Spalten mit Flex. +- Eigenes CSS ohne `@media`/`*`: gerätespezifische Werte über die Gestaltungswerte (Bildhöhe, Raster-Spalten, Ränder je Gerät). +- Das HTML-Budget von 150 KB (`test:browser`) war mit dem CSS je Kachel überschritten (152 KB). Die gemeinsamen Regeln stehen jetzt einmal am Abschnitt, Ergebnis 147,5 KB. + +**Geprüft:** Lighthouse im Produktionsmodus (Port 8103, je drei Läufe, Median): Startseite mobil 97 / Desktop 98, Impressum und Datenschutz 100 / 100; Barrierefreiheit, Best Practices, SEO und agentisches Browsing überall 100. `test:links` ohne toten Verweis, `test:browser` grün (axe in sechs Ansichten, Tastatur, ohne JavaScript, Budget). Ganzseitige Bildschirmfotos bei 1440, 820 und 375 px gegen den Entwurf verglichen, kein waagerechtes Scrollen, keine Konsolenfehler. Zoom, Schatten, Chip- und Knopf-Hover sowie das Klappmenü per Playwright nachgemessen. Keine Felddaten, kein INP. Das Formular wurde nicht abgeschickt (Mailversand nicht ausprobiert). + +**Nächster Schritt:** Livegang nach `docs/LIVEGANG.md` (Mailversand einmal echt testen). Die Hüfner-Datenbank braucht einen Kern mit ADR 107 (`tel:` an Knöpfen). + ## Kantarci Markt: Demo der Eröffnungsseite mit Angeboten aus der App (24.09.2026) **Anlass:** Umut: „Setze mal die demoseite um wie du es dir vorstellst ich überlasse dir alles. Links und logo zu playstore und ios app, wilhelm drapp str. in baden baden, Rest Platzhalter“. Die Angebote kommen aus der Web-Ansicht seiner App: `https://app.kantarci-markt.de/embed/angebote.php?ton=dunkel`, dazu sein Skript für die Höhe. diff --git a/public/assets/editor.js b/public/assets/editor.js index 6a9702c..dd876da 100644 --- a/public/assets/editor.js +++ b/public/assets/editor.js @@ -402,7 +402,7 @@ function renderContent(block, panel) { field('Symbol', 'icon', block.props.icon, { choices: Object.fromEntries(ICONS.map(name => [name, name])) }); field('Titel', 'title', block.props.title, { maxLength: 120 }); field('Text', 'text', block.props.text, { multiline: true, maxLength: 600 }); - field('Linkziel', 'href', block.props.href || '', { help: 'Optional. Lokaler Pfad, Sprungmarke oder HTTPS-Adresse – oder ein PDF.' }); + field('Linkziel', 'href', block.props.href || '', { help: 'Optional. Lokaler Pfad, Sprungmarke oder HTTPS-Adresse, Telefon (tel:+49…) oder E-Mail (mailto:…) – oder ein PDF.' }); } if (block.type === 'stat') { field('Zahl', 'value', block.props.value, { maxLength: 16, help: 'Zum Beispiel 15+, 24/7 oder 100 %.' }); @@ -418,7 +418,7 @@ function renderContent(block, panel) { field('Titel', 'title', block.props.title, { maxLength: 160 }); field('Text', 'text', block.props.text, { multiline: true, maxLength: 600 }); field('Beschriftung der Schaltfläche', 'buttonText', block.props.buttonText, { maxLength: 80 }); - field('Linkziel', 'href', block.props.href, { help: 'Lokaler Pfad (/kontakt), Sprungmarke (#abschnitt) oder HTTPS-Adresse – oder ein PDF.' }); + field('Linkziel', 'href', block.props.href, { help: 'Lokaler Pfad (/kontakt), Sprungmarke (#abschnitt) oder HTTPS-Adresse, Telefon (tel:+49…) oder E-Mail (mailto:…) – oder ein PDF.' }); } if (block.type === 'contact') { field('Telefon', 'phone', block.props.phone || '', { maxLength: 80, help: 'Wird als anrufbarer Link ausgegeben.' }); @@ -439,7 +439,7 @@ function renderContent(block, panel) { field('Größe', 'size', String(block.props.size), { number: true, choices: Object.fromEntries(ICON_SIZES.map(size => [String(size), `${size} px`])), help: 'Feste Stufen, weil die Größe eine Klasse ist – ein freier Wert hätte keine und das Symbol wäre unsichtbar.' }); field('Nur Dekoration', 'decorative', block.props.decorative, { checkbox: true, help: 'Dekorative Symbole werden Screenreadern verschwiegen. Trägt das Symbol eine Aussage, nimm das Häkchen weg und beschrifte es.' }); if (!block.props.decorative) field('Beschriftung', 'label', block.props.label, { maxLength: 120 }); - field('Linkziel', 'href', block.props.href || '', { help: 'Optional. Lokaler Pfad, Sprungmarke oder HTTPS-Adresse – oder ein PDF.' }); + field('Linkziel', 'href', block.props.href || '', { help: 'Optional. Lokaler Pfad, Sprungmarke oder HTTPS-Adresse, Telefon (tel:+49…) oder E-Mail (mailto:…) – oder ein PDF.' }); } if (block.type === 'social') { field('Größe', 'size', String(block.props.size), { number: true, choices: Object.fromEntries(ICON_SIZES.map(size => [String(size), `${size} px`])), help: 'Die Adressen stehen unter Einstellungen → Unternehmensdaten → Soziale Profile. Farbe, Abstand und Ausrichtung unter Design.' }); @@ -556,7 +556,7 @@ function renderContent(block, panel) { field('Auszug zeigen', 'showExcerpt', block.props.showExcerpt !== false, { checkbox: true }); field('Kategorie zeigen', 'showTerms', block.props.showTerms !== false, { checkbox: true, help: 'Alle drei aus: ein Raster aus Bild und Titel, wie es zu Projekten passt.' }); } - if (block.type === 'button') field('Linkziel', 'href', block.props.href, { help: 'Lokaler Pfad (/kontakt), Sprungmarke (#abschnitt) oder HTTPS-Adresse – oder ein PDF.' }); + if (block.type === 'button') field('Linkziel', 'href', block.props.href, { help: 'Lokaler Pfad (/kontakt), Sprungmarke (#abschnitt) oder HTTPS-Adresse, Telefon (tel:+49…) oder E-Mail (mailto:…) – oder ein PDF.' }); if (block.type === 'image') { renderImageWidth(block, panel); imagePreview = createMediaPreview({ src: block.props.sources?.[0]?.src || block.props.src, label: block.props.alt || block.props.caption }); @@ -568,7 +568,7 @@ function renderContent(block, panel) { const galleryZoom = holder?.type === 'gallery' && holder.props?.lightbox === true; const clickAction = block.props?.click || (block.props?.href ? 'link' : (galleryZoom ? 'vergroessern' : 'keine')); field('Beim Klick', 'click', clickAction, { choices: { keine: 'Nichts tun', vergroessern: 'Bild vergrößern', link: 'Zu einer Adresse führen' }, onInput: showLinkOptions }); - field('Linkziel', 'href', block.props.href || '', { container: linkOptions, help: 'Lokaler Pfad (/kontakt), Sprungmarke (#abschnitt) oder HTTPS-Adresse – oder ein PDF. Für ein Logo im Kopfbereich meist /.' }); + field('Linkziel', 'href', block.props.href || '', { container: linkOptions, help: 'Lokaler Pfad (/kontakt), Sprungmarke (#abschnitt) oder HTTPS-Adresse, Telefon (tel:+49…) oder E-Mail (mailto:…) – oder ein PDF. Für ein Logo im Kopfbereich meist /.' }); showLinkOptions(clickAction); panel.append(linkOptions); const picker = document.createElement('button'); picker.className = 'secondary'; picker.textContent = 'Bild aus Mediathek wählen'; picker.addEventListener('click', () => chooseMedia(false)); panel.append(picker); diff --git a/public/assets/fonts/LIZENZ.md b/public/assets/fonts/LIZENZ.md index 8537b62..fecc530 100644 --- a/public/assets/fonts/LIZENZ.md +++ b/public/assets/fonts/LIZENZ.md @@ -28,6 +28,10 @@ in `dm-sans-OFL.txt`. Copyright 2014 The DM Sans Project Authors (github.com/goo DM Sans ist eine variable Schrift: `dm-sans-400-…`, `-500-…` und `-700-…` sind dieselbe Datei, `fonts.css` nennt nur die erste, mit dem Gewichtsbereich 400–700. +**Barlow** und **Barlow Condensed** (Fließtext und Überschriften der Seite „Hüfner Gartenbau“) +stehen unter der SIL Open Font License 1.1, Text in `barlow-OFL.txt` (für beide Familien gleich). +Copyright 2017 The Barlow Project Authors (github.com/jpt/barlow). + Wer hier andere Schriften ablegt, prüft deren Lizenz selbst: nicht jede Schrift, die Google Fonts ausliefert, steht unter der OFL – einige stehen unter der Apache-Lizenz 2.0, und eine gekaufte Schrift eines Schriftenhauses darf meist gar nicht weitergegeben werden. Die Lizenzdatei gehört in diff --git a/public/assets/fonts/barlow-400-latin-ext.woff2 b/public/assets/fonts/barlow-400-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5c6eb7a330f8f5a19e93864290e83ce7d04bbea0 GIT binary patch literal 14268 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 H0ssI2wBg|@ literal 0 HcmV?d00001 diff --git a/public/assets/fonts/barlow-600-latin-ext.woff2 b/public/assets/fonts/barlow-600-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3d7c7a2d9371ca6e7a0ec125b0697870cb553f3a GIT binary patch literal 14968 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

+n!c>-Vno1H$$tkmod^{i|alu7;_#|dy- z05)@6JN@nloFv)+B9|OdYFbNY2dri$pbDB0_eWhIv=$skh8E!SJJGAcL$Hhnv|0c# CU8ZgT literal 0 HcmV?d00001 diff --git a/public/assets/fonts/barlow-600-latin.woff2 b/public/assets/fonts/barlow-600-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b1a019f9d0eb0043beac510d1c932e8bc58cbbcc GIT binary patch literal 22772 zcmV(`K-0f>Pew8T0RR9109f<@5dZ)H0MEDp09cU#0RR9100000000000000000000 z0000QfjS$mG8~C^24Db%4hVrD37i!X2nvFv5P|u83xpy70X7081BgHbAO(X&2Z(kI zfmRz*w+F=24)VCWRi)4&=-L8`o&rwh0-bi>BM*cl$m{{K%)Dl%r%Nz$&v z0aMi9=qMt>VRk7hGEKwwr_$ze*52V-b5_5`JZmroB22qr#aiiwvH8{I%vym3q6yyE z<=pC)Be!_?eSAzfjj56)1`-M19<*?7h$gB#X(#^tw>MhK%guD}XKYy9$OjK(%gsLw zg(`s%yn!Gh4`btak#+;2_zxL}gv1l~3L~tnY$0wl`X^b+f4rF5g!(SpfHsTsTL6Uq!^8n-)XPZMc;1GE+Q{nT+NlMxNuQ-+jZ`G z{{P$3y71orRn;wfh6Tm}K(#?&8R|#|(o%0}pr@B8)afNm^3A*%P`dGEn*}~5qQ+o* z_lP%Iqlq?#M3pAm5<{gCDmnO3ffvqRp5Uo~T9c}l<9{t(b~d!D&KwSnP^}sld(Zxz z2!mx1s!9|QYU_OFl1?pY_HaMnk$u95T6G8vbP4VTaO5_ZY0(uhtN-aZAO5%X|7&l; z0z^ebQ7mFB>KKKIG1Ja?TJC)j@$+}y-_M*^ZQ4{nO{s@Uc>yc}2~FtP84z?Vv=;$w z0Gy=QhdS+Ul~!_+BEhzH{$Fbsm_j9R9gv;9hdNU_Ilv}NB3pNo?GUuAtu$=YLtEe4 z+p^c7tJX3TvRCqqdz4mo5B_*C5+@PD08jt>wYlGH#bi)Rdr0y=Qt{d;fe39W*yaZj zL<~#9!s=3qXQ3_SqDokSQ8qw#0Ww@jPe#xNCI9)0`ioj!HIfm3)vjLpwZN> z)CFr(O@bg@*a55iVaQH3tkMQzts_)emUK1=yK zXMWBgoBsiizayOj6LQ{#5YK+{V%5u8rrqw(dKSxlFUNm=tzYHN`DW)UGzOK>M3bfR zv*_Kk51UVTY$R=52G>w5lL(C{W?3}SiKL$3`S)*p2p@=rU1@EJ^uYSd>2uT)3RFC8 zTH9y`!{Kjq=zlF%4~C)3a>-U1d=Qiuv>k%By3lWZXy%!oUxi3mBrMxQtYjFQ z^{C6_%58|KL@8M7pS8VxrP{d;m%+J$43cd`LL-d?X+$1jewTfyiw**jx<_b-`DKwU z8@n=j_1hUH1=3PUDzJwP=Ij-487KyY#^y(lOMnRg-JnJY0u%&%G!ppiU5g=xWP%|L z9x{o8Y*HW>7vzx(6)1#CR6teQK^=63dg%@IH3%AF2sF${Xp{+vOD-X(RCF3V4y>yheo?&U-EPz-_Ct39f<5;X+Gea1i#G zJs4f8fn~73Ge!?)!DC?r#zX&;59Aej0(~KS79P>qoxTFP4PAwX zXd@M&br$XE-~Q;Q7wDUOmXGovALM2(=Um>wPJ~yn|G^78vpZX}9$V$>&%zR~ugi-` zQSHL3zbOR336O@X-8As9tKd_h7wNu!jwqzm9nu->KkrGC=+wKNFi*P(e4ppCp>7Laj87|e>RJCfK<5QMH!l*1=^j{-exA+rhUC$ z&g$U>vUnu1ieX})Zd83QNCDJZnp&^wegp(aG+Fd@QMHOTDfo6^T^SkaP0tAOIZ!$r zOgFbf7RU^Yu)?jte(QUo{sApfiz7)J#0~`J`u!LMKnStjvM$BymPd&Q!T_`AAp+_J z2;D+Z1uCE#-Jk{y5CMutc#!XtNCfl?o+FdhXoB23G5FG9%2dgVCk@#$uY(3!w|ZbKYtTLiY4j z7~$Vj#t_+NyM5}NaLQ>HTttLnNQlVDDQIXY7#T^K#Za(_TePyeJt*gR6;3J_0gp67 z8S=;!k3=P;s`9A44#X|kpXja!v7Qk1qF8TA^nDQ3&mfG!hF}eSJXvX&5m;l5Lyb4S ziIMn78wf52G6ZKIiF$HQkUB-iX|eUaA0nj-1~k_?L`DOc`;)v~8LG#VN+gXhJ8<~y%$cB!k>KSSBY2|yfS6UmLpfbVc)t~r7G2Y+GyJkx2{pEPA8pp(X}ho z)56vF@IQK(;YJv*!N=f$2=6x0J_C~vlrNtY5P^*<)j_FNlxah$whHP$i8@cJo`YQM zUgEk9;>Z~pk~pwYWfoG}#{NP(?4-6A2B@b(14T|2NY^zAt`-b*DhL*sSM$n6g&XZC zgb;y5%4d=SVoCIJ>ZPt2r9`U`u@JD}B&bC~l2EvaG%*rD5(oOXoaPY*w02z3QV9h* z3V^ed^b##a6A;#VDy7gN00>X7{JS5_PRIJS+YYa36*IV#A@8^bjeE>T$b4lRVQX*d zWm`SpD4y-Cm`fSz0(sLOsz2aUT2IkowK?c$Hw2T&R_t97dR_UxHBJ|%D6k$?z%VRM zOu=wtM2V*ge!kLc7F?Iy6dU+_ZwtMdH{UnHOt5PKE;l3F*az%g8s~U76Ro6&A$;m@ zlO2|}ew$q_DXmsTza57zggmDy=8BrQ-rYI zrfB-&+Ek7jN!1aI<&s-qisk+X!r?meGi@_;Q!-r_XE&^NC+Y;IW`K}DdNbB zIi--O7p2@#CQtJAK@NF}kmqVJsLv<|9_h|$Ms-Vi`J5AaRPFHTJPgX)v?uj9LLy?) z%AR$?#7kghW9N}E;{WbrsC|%gpYUbO@67zp&hOm7`GJjr&4I0f3wtQsL(v|J_fTR= zl_^(IRl{o3s!ON0&bsKTTYC20dzQJ`JNDd8tquARoZm0(B~!n*-luBZ9F5z1Nlaac z6^?+Ah?peOL6538$cbWy20DgROsu4JW!(Qvgb|&Ilqk_+Si~h>G^2eFW$YhbWXh5) zN3OgoSWclL#Y&VaQ?6oOxs$4ewckXCM`}>3PN#H67hQEr_dY#H&$(Xn-dpK2UH4A< zp}zqJ8dQUKHY7v0VTNY}J#xrcGj1Heb+&D}?bMDPvh!NMqZ+o;M_vTy{|9pKIwht) z!h$0pBqAnZU)-^`EW5*H?$ooB($a1F;$#7b7+BO32JH`f=+3VkvOMFId79eOt$7Tv zLJWeLqH8`47Pt{{%WVWTHAvhdb=z<#^a%#eV>TM@WaA%BH%r7g0-5+6@5kkJEfQ0G z+n$Tz58ZGwcF21%yC8g2eD;lcJ7AX$R{8A{e=ukLu4yJ1Wr%)yXv+twOg6<-(@ZzR zOtZ{3$Iq5pW|cKI*^BhRtEo^w?z!J+EEWK5+Ib{j8blAO8h_bGCQsQDB!^SKwQ=%x zt}Qle|Kdx0Z&4{6YXA|RpO$yMC~s9CyY4#N>K78@ySrStIPR`L#Om?%?+~Nu^Qg)D z+-HcG`LeGexG=wVm`DkdWhC~;kyA4=iG* z0)+?{%fY=A5MlxJc=y@4&{yF_ zbnJhfww7?LSG{RB%Q!l9SnXjyc49NuVnuIS^lsjtV4i>Yxj>kK5*v+ZYZSs~9I8@VV{hc++87yilkTFu;G;IW-=*IXM?ZtB z??BL8KL8zoB8nJ=0w608pf>{jXbDK0Vd(%awa#+>rqX;4&#iZt1qs^B7;`z^&db-Wz4%_R$iPdLni6I>@!{7uqxTLej&gbzKP@Ru;5rZ;YdDPqzR3(BqR z1Y0X}h%axy4}?M983Lf zHT1WL{~r6>Czm~O*&bKiaMewp{Td3qG2a=F{qJo?!F%7>U}H$|%qyouhV>>nYm3dc z+DC}R5fc!RkP8+dP>@i1AqLKRAtDc4d{ z%`{i6qt0s8>8g`^x)`Lt0R|ebhY{j*^VPrp4*^a&?U)lzI?fjdU03uXNadWqY#KF4 z(COXO3(BUMF&TxOuO5Z{>Jh$qPW;-O99Qbk+KAEGR!T{WMAKnkXH7%=qAY z3anm2xmu-o^UHI*PWBW=NFN?aJzm8{D0M?QGS(6iagc5Sk=)=a60lZA6)D7ut;hlG z3Ab=#!gZJ7qPe zUiC1yIsYD?KPfU8j4hc`VscFC^F9&$KLaDA&vk>O9&Wsb=E-kq3e!YTOyw`a{L$;!1(;-xA>?7WwP)T*{oNn%!{2R%sY6sHvhpa=3ETQJ7JLX4SX+?=sC zJyj}-rj`j}EXT$UAyL&ZqLV{{LUDr>MmF&9iB$W2O_BRuhkV}lVavoF^`ch6@Wzv6 zEOv;ow~8?^!B+*ej3K^!!kmC;x=1=6k$e^j#zrog03^*;IK1SgHXJUKVNnnZ-S8tN zQ4;f#+jB3i(?H7YM21A6mxTBR$a^?#O3jMa&^FA{kav0N42_i_=TW0u{7mGmQQ996 zMI%s%G8rfGtkAu{($s zpBczWmxRQokd$Ui=P{8%_x3!q=Fp=urYRc*zpQlawnQMQ7skpYR1?=GTtlp&X`cxC zAhI^;^AEB9NGs~d$iJGQAQ3Pm3Pp*7lEi~42~d_qs7Nueq&QTi#1%fI6lzi|t9xEh zlf2a#*_L+_>UIBj+itz<|9LyqFu`;v%k=c0k+DlRtYZxusMthB8xLa3s(?;vtWdLA+G98jQC!KrgSZ*|jAsY{6 zrMKsHd*Wb}g|yi7Z&gEcWSWxksWI?L>J1Z2fNA#l?TRGiV5k+Lp8^1m-()V2Q(n)v z%M@rZkUc>hjBGzZGt{@5it}_9i8q`&IY6eOeu7#jiDsQiFQ?B3){aH^Bh&UyHdp3} zEM9-9vKJt97OE)k9Zi$Sk{stv@zrta8PKFTw6p9&P0ONq>mW>m-)UJUhgbfD*V&pG z$MS4RU3@=y}5UGPYOVv>9oKysZMmG;!ZN7E{@vV#s!T*x3H&D?YSI>sbU z>jPm(DloD^Q$?7S<=czA_ca=^MxAiTWb%no(N7i2H!!ROi+Z|JQQX`;vRzTjD{~(1 zay-@TC|@hY%4-YC{n7>cEwiH@jn=uJv{#Y!cb{^{Y)!w9Q!YW?#W|47zU`+3JZ%DPwAr#Y91aTIOiy-ykPD?$Y1D?);1xcrek2bYXKF znKRZ`;#OsZ+bghmWfA@EB6eY`jFb>1#$+}br?a5}mm59vo_kVBL+(w^da zFv01=LGKA_^i#81%6^73%YpEg^@0N2Xgo`S6})p6;5!9FD1=r~0kQiNoDd{1si<@V znWXF?KrSlZKq1{CKO~nnP`QALQ*{WHnpM4khI>t!5YyUF?FKsOb-@C9QT+x6$&0pm zh)gLxF^WaWTK^b1J~22Akk_VWKj@udKG2LPV{QePtcrEYJRq_|%AR(sEj zHCELXTgMx6J6q$P`X6jn4iHwqqk!}Rlu;l(07iZVjQb8~y9&zxQl|d`3_z*tEJ7h8 z=|qGeaK+V;BkwV+hQ*1=w->k5jkF~O**S?+dd0bxdsuwIew`e3rbVifvw)o4AfuVp zwTpMSmeir2n%ir`kSv$V%Sjr>^M{{0E5&3hksM5hj!8x;i7Qa0Rp3K-m85LROwLnz zS#DqZO0C>+rX97`E%e>fkEgCA?G;0=$`!?tS60pN+cnph4{6!S1aDA1hIV?=)tRKK zQa;~PL!)Wqbb6+x9n~o~s=Zi@Sh3UbZ0Vw2T&b(+lBDKavZ`sSqLfFw$9}I?Syt`x zF{Np1z0S03R}U8Zy_>cku?lUFzsOeZgQ~wwSGoU&q^QN>Xk=Mx1M(S?q7*X()whh_ptCA$kZ>_Wx(~7(7SsOObU9Kc@IE@=u$e2g-YPfl!- z+Pc@v)&4CS^|pjigg+_!qwpvt7CBm)o(_h0Ohs7Zj5{CUF!ZwT%*pO%iYG(EP91zu^d9 z7B5OBa&)F}+r8uiTF_zC%9mNzXDdWaY6zZm&Q;Srn+(}&y zuJS=9gUG!|C)>{=1g?UeCa5+Rjie^Ib|wjkcr`BeN=kL11US&n`da$E#yvX`Ipy6I zTw_cof&|g~qXC2K03ivJ);f`EtY5drnx!>#)s#NI;8P3o4bbu{K0ggpmkl}9awz5K z%FDCi42t=z{Ou4CG{!t;-nBYh8LF{>h<84^7MxIth;CGF3eDX#g(3uww$t6EU&`|5 zHR}xwa_$WOSI_Zu5YPM{@aS_~sI7;Lr>e8Hr3x)iYYoV01G!&UDP=x>x099 zyro$canScEtbq#D*!Ha^crt6|s|Yeoxpg}qH96on@L_XN?hfTc>Hax1&X6D+(8buC z+d3o7&K_~I3($dc(cV+R@|>SIpz&4bnDhZG68&AZ7!V{G_~s$aClvU+t@1ozzIXcv zkKjzO35ifn7DFyaawt!X2_(n{GH@`SF^fSf5yST9%Ej&suz(`{e|N*6+BEbVV?eZ= zlDgfBfK4i{SrZe6mloyCl2*m{J*V&Q4=L+O#olFlX--j?TFvicMsDN4DMVQCt8NRkC#jgB|83>+@pcTsQ#eo z-3ErfEgRP?+?)2q4{|`bX5lvQbNL_xhb6WwI4SCrIV)gUbQ6iMAMiZejX`ABA;`in z-1dV2RX)&5?q%$X3VQdk>tIdVH}mZPN6P+gm73tsc$trYv_iB7OL$9;ryq|&eRJYZ zoO4K~TXMi(;uNeeg@F^KlC@xXCFW($O5_9pXpA3u;7->yn`-QdJY|ZGNRW+nH|Z{J zR==;&?j)(x9N0X#a9R!h*F2Ys;Z((r8q*gTj z@%%*gJ9T3BO8NOvZDQSc7HDrNR?LeVlD1dN@!QBu#xJ;_-q7(WU0q68qC%g1#x%yk}ak!>Yqw6h{YiWd5LV|Ps z$`Leh@W^WDGM4#=+q<}aMi71N%EzmWQz<+uSc zZH`B(%&0P@0$rueMN03<@3(3TCfzw&9+xMRjklaRdLB7*2d^;}98^7kdB)o&Q(zi{ z!Mnmz3Xw2DC`;o?4Lg(80aOD0D~0iIK?wjtX<5Z~Rek+BC_@+NmX9Rlj8@}`oDnQF z>ku>-M{}TbxvCT$o!%*n(u-4v%QBAT^N1WRNTyl~0x!k6?(V7$P+CiH977u5%P#cS zV#1ZP##&Ei5!NT=IkEts&%XkmtyCSesh=UCMyBH;e_lLt@6xD5Evc{$7EE9v(evS# zFmYTFJ>yacoX^YMGog66het8lnOdp|%dzxWHo?EQK&Byo1JsK!K8 z_r={mnwCg@d&c86718bL+oI539u}N$qfOjldiQ%((x?8u14%m)LGpk{be2a}owPhc zF)9=iJpn>hNgw6JrKn>?^d??fX#?$uNMFia31Lm(X%<}^Wf5ETL5==NISHhDUYc~A z*kj|8i8DB~n^7Nsn%l+KzDTv6MG{AoCQ96izR9kJ)Y>g+KgP`Xl9Gy${87mY>>Im; zmE^K{^nf@z)6W2m%RZ1c+EWPpG0L1(%h2edGKE{cqZM=!2@Ow!2CM5h#$jd67(%eI zIN>)Zo02qoZEQ#01NP1V18#{9^V0L1U^`e})dv$+O`?R1k9^3Eu_>h_#9}{b*3M0P z*W-<|)B`v78sf_c%e7$??eBt4gubnYgT#JZH1*uL7@&PTl=!z;y6MzgHRny8)wO*{ z8eQ^W7NM2#D8?8gNW&Jm2-GeHIB})>eTupE{}8shTqJP*9O}E^nc4P$F`{GblSc+qv0a zk~!xh6BD-c8k_?m_aYtI+;Sk)waU_}DsPii(Oq}5;6ikCw(c-YDaV0)woKisU;(XA z|HRt*k8(P&za7~t^(^d+!f%wg(E1EE=Ss<0ZAbgNNXa5-i||gA8|^-FU-pjC^w6wT zIs!9;=2$0|P8$rD_guE^}~Pjq|~i_6&tx~?Oej+dBl82W!NUGVdygOgql77 zdF^4^uLD@8`eK!oMPL%RcUcZTCMMpS4xYBF>E!Y~IaMtm}mru5}51{OlPhiekh&u)|sSRP1_3MLeIo zIDmu*t2WG4?k@B3Dc2x5)_|Df!=59u&549=Bpb?TH52}0O17U2YGa{Sjp2q!OlPiv zG3V@-_2V{L5n!8n6mgKd% zh@3CiL!Cc)#iJ!D7oR)MLugAgTtPubmxI_`(1`Me=2fFd;YmFLX|%>qVs2&}7ekcW z2N1{iJ@=~|It!IzA&(bzW)qcTc27^UmkIE28JObJDA?tRxLnwsdTE!_)NoOb(FfBa zRvxZ7UJw;yXomnZwyO5ml#(XZR4vr7$)y3FFFch6h@GvU{v)^~w|52+675SR1vILB z2%USgEI?c7l@Nc7G2)avO_GPLa{c49tx~VXk%(&k*lZgeLo8GIbi32**@0gix8 zJaLYlk`^6QPv#V2>P`iO3)B!NFuo6MqEUATY5!7!Nn+Nl5F-*1}p01OPaNqjv!YVl2*mn(MNJ=1akE(5SK=S$)QyQ?+$Jm_kj zV2eg3SX|Ay00T)pmEs7YE>{?JyjX;n`9nbmg_?vxGv4pQQoiUBr|NOjUlDcFreZ`M zOuMQXC7+|>r`?~A1gUp+lW2tu##aM09r`QenH!UgZ|J2YLAoMt^H* z1j|frAMrnTj?cUlfNvC6PbEe}zoifA0FX|-R)Db$*abvKJe7ill&M*ThN{>dKxrT? zPf(*oiQNOA`#ukp;IO$D+A&{Q>3ng!#UiUnmQFe^tOm_!5B`F>+7=mddTg%79MT}% z4+3*2kS`Z<{+%8Vxt)Hu#SOspM?Hf0<#pyvdU^Il-=z};GI*yf0A8?RK%^t$={l3C zmpMn!Yn>%_njMY4-1#E8X1~vFMSbSSQoP&8K4)W>8P#W83ni?h!TM72c!UUxK1&zU ze;>od5s_9hddXlCg-aOl9ino6`Vka>gdJXENHq2oS+rl@hp-o#aTX_ws^`zQ0 z=(BK6H&2SW8>4a0*WSv?aYKXmYme<#8DX*50V1GlLlAtzPqakw9i6}|TCEQ#7gQJ% zk8rXv}%2LTuah(*4X{VM2hbGHR=p)=lf zgu^aZA9uWaGH@&CYKz)YnQuHbzs0`42SzB36!|(bgooCW<&=6t8S~B_Inu-*k)PZP zlPL{>(1a`Ljw^DcZVyemx^4GWIi-5E>ge9-Fe&oMParMa{X~wGOT_yhl_k@XxJfQrZ6T4A+i8xiYLmQc8i6(TngQSt2u zPL=uBm_<@ypoEC#e@tV*Xb0teer;tAp;l>#=?YZ+j^x2w8mNxeMWcBgrH$hD+@)8$&Cuna|5^p zz&QDYutZ{;pk%-GELW=%0Z?K(&(Ffk_W$Sep<<@DK8yx0(seM`fB!9b2H@*U_qaR1n`Y_X*7C<3={}+!025DOOValgJd5ezd z4A&l41ZSMJ8O}C*Wke&Fl3n3wq%&0YAQ-xL^};H-%<>+OPtW=n`LT5zElIusCeHKI zy`o=sAMsETzJY|r4EzF?mLy*fljga`GE%h4hUsl@+ieTxutXx(oIZ4NN`*B8~D?jg2`Yosxzbc=TO1J?) zx^q4%bH`p_9sfup0E-lp=YHS@2ykyp_ws}B%wUSpVlacF#HkS=?a%3b9{n(Sf98s| z$=nZiQlSFM=;5?z&>kegTH4a6x80kXdplC}kF!4HOPr?b;B?3)kV<%o9->5)w)2$J zy>UlKEPXx}n@^~#Eei2|ue2JgQi*DGt^*%l7g|tcuJiYCxm(NVNAoKjg;rh;OJAA* z?7*oaT@?8>fEuBmoAb9W1t$3Uz+qWIjj$M3tG{_!sy-tmE3ADraXpO&#hpJO0CE;S$MQ+BB;y(3?*rzd|UjDvI{o*E48EiG{*V6J8 zeCfFoJDQKiQLR}NO zo2Hu?sJTzP@p3FY^>v$Z2Nq8(+M+WZYW$_3FnXBgYs$-wFQ92*$1*#h{@~jm-MVO? zKBDZrVU$XZH7liJ;b+@$_~Uro_PZjnWp>xJ=WX7YmNpoOuu4H_kkvJY(Bpq4Wu8dafO5zy{iQdF_5EN0t$v8Z1jHkV922Jie1UKiShr4m`-XCx<8EK%%8*3pv)L1L0)DnWM z*G8oWvjc^hF`|k@5@Mi)?Ejq?ASr1UxX`sqNF{&sOvK+$x0$Ta3j!@%ZYT9^VtN2* zwHvhJDy)K4B4-)s`-OR37TzmMclea00WBK+xcM~{RfBfy=;BN z;bFo`89V^&l6S_ji5W9HF+dBl8T^iDnBNi5QEz2yPyZ9t>NL68l-JeDWB&$pngkh} z#uGR7l36TrZ=WD@CdN)%bru8qrfUN55PXBkwBBY;)3nL0turP!ahhlJwi=qA7)8cD zYPjj%{7r-Ez$s##!H>)e>Blx^jfL?60C|x~?IzCk7WlCRWBRLV6(Mp-G{14m7s)n@ ze2qpkU&-nHez+)^wnT%{mD{K@m6{7n+y3e7t8hNea9feCR(~|o5$Qfdqf)D>RPMx; zc%g6UO^xB%1`q9m4hDgzA{ZF%@+p;ZYrYl-g2?bO4po)U#9)LKLV96Ns%2wAHa zax>&tpvV8ouZzxh&*hnDtZ0( zD#ul$G$xEJW=}6s=94R$6rHe+wlU%;*KIG~FISH_>u|6BUMs)W>&sc^?2kXmWfJZK zpw<||CAjY&xAFcN z+?IpNxdwenMEYf_0O_}y-~L?6I&k@&tc-Ww99p5*{55;)ID%+38Alw}jix6|Q5*Df zC3Z=N)?me8#O3O5$w8xS{?5k58p+LGpJ&}OiJE)X?q2QOkMz3InZ1*noBOr?Q?IsZ zEA(yEWglN7Ta|GN0jOK>v_VUz6d?m=eVmIn!0{hyEg3&;OJ1`5SI}HgukyH? z70QDc~^j5kL9;<4Yp{D{xIcJhpi-UJ>PAPR+#48)W&45-K@!LU7d7B`K`;fx|8 z1gl|7q7a2@K{yKUaR&dpH7xer zZ~0?~+O3EkVBnMMjxO)NRdxeVO(;Ao60iLwCf~*5_l@{fYL!>{*<#*t1L|!FMW?-1Z4fy4 zCnRoTmu{Y9gS9oj9vR9L^xnx;YV^y?jij=w5}>nFk2?+2*vae3Q-kKU`z(lqIOCe{ zHYbCut)z;cBGmj*D*H1z#hOK*?tjAPQh7Wom-oHEzYPQFj}S`1XqE1f0x>J*e2W3( zO;4t?%pmUT7A_a-pf|6Nt2%#S=z?SS2T|Eiu}VOEB=Hk>F(B9eePYxsp|nP&nIL7p zCO^CuFveynZ`6A0Ct)S39~a7GspAAWdMNh_o708u{e8{H!C3Fwg|+X-Sg~BAUw>5V5gJ@AFk@ zy>d~RXr3==9IJyH0R~hL_#~Cz*bEaJsF zc}~^~$y9+}z4(XV*E!E0%-($ZtPR>%c*7Vw-2AEiw-s++c%2$RcHMbfInqB>FI$X( zJm!<>#BKm?1JFZd_(OfqJal~=yUiH!@M68>?-)23?B`0p8ky72U^;w_QSh_C;$|{> z<8K4-TR}=DeO$^4o|hxu(W>lWIi-Bd-$dHBQ>IOzw`?#TLW-naCX@KFg&7}~Q38Y@ zu<$??@LdfuI1lXkh7q1C( ze{T`E?!~9H;Fwo{ivn$D9*TcEc&%Sepi>KQ;maR@lpx;wusrnhyTY0|Up&7+=`ThA zZHF|A~AqNSxwp1wr>1`5MFn5-jV_ zrQu&Q2h={FCfn;BJ!(#9d|vlqkdFH1QpAf-@yZ0gtkO{pSb|-O;`j2+ac8b$&x`zV zY?qH+q_(7ERrLvqT-76pi)h8r*q)$?lGpUjA&Qz*}kHt;O==^`}tru`)5SzGoku1%MNbYRsJc;z6F{U@ijY zmN~;sO+@iv*^7K!CN0g#=LRKJdlymg33m%CQb-$a5Y`xYR`y464aQ)NxfTIyuNp8) z{wGx63fxu40p5UNG(4@jSwCqq;Gv@MSzus8i3!3rjUR7}oWj1fjT0@LLF?6{&lV@Q3;Nj)jpL)OhDek$WWHc}VWD8!OXM=*Cy2r0*#xbX`U5)r~v@e&v!u7KhpKe%si%IUH<~X z0^9R4y^0;1@qQMIaqN8Sy8R1mtdK^j<*MS#dgYV^MZUbZC5H&F`A`GZbCIaD=lOGZ z$NQk?E8x9cKzPf14bJOB|CPz|g5D!ppf@6%9{KJpw?EmMp1`AFKW)P1kIHi z8Y@wFZcNOe(Vy`XG7+kUN@bq|l&s6+1RBp$Yev_+{?5W>X!&A7O&Sumb+tLd+7jj* z9}N4y5W&D_pTu=1mnPz?>qn0xcTGHStP(SPsa&6|P&&qv$1%T6XSXky(`X+{W=klX zm;BwAdf1eqQ8D@Bq(Sqs!x|7$sdUp{ zH?GvCR{Ae6YJ?du0RRiYKo^QT4${j0Nn6AOLIB1hLu6zK8T$e@KSv(^ioB6h09beZ zz#1(~vyhdWiMBiY{}k5I4N;U#C8NeDT?c=fj^H%qJsreo05?oVS3HiYR8ftZnxaaL zrb!u9Yh=vQh+{&DB$EtFTTh&dCvM3o{!uE+Ejgu%eNL6Kf;X@6nl|4FQhs2#MVc~! z0c|xgnBXc`X)|#~gW2%UroYh|{A+j;QbmzlhG8-#K#|3Vd1KrCFWYKKh#`oC_{gZg z`3gQyf?_dak`cE>JY`rY31Z0PTM8xncy6cF6dfNVw~~V}uMkf}f@D#y3xjO`;DYpa>Nht!k>qh{jKJvzSAzZ zP_nFkJP@8Qm0pYU*DxzzP{sjRJk`=74az)Ra(LBfif+_s*ZU>{5DfSTfF3_2P^e{T zY5{F#<-AL(uA8NqnI&1BtYr5`SCTT=1t=d3AhZIy;P+fWKy>8d6-KIZj*6ez7bFB3 z9H54i2?Np*5pUQZ5PeA@_-ca2d^IEB)k<;QVDM2?c4Q z0Pn}NGcPrBMl*LcuaB_i!ZaY{GV-Dcr zO0n-?a6KgzaqUiUf0yI9C9F=99F#U8+$L)p6+isv8i41Ywm0>@?H5#KI*4MQHEghk zgVu1;nyjNPz%Kh`JsLTHMoyr?+6+_uw}60-(Q6Z)mEhz{@gUox`x--F->(xgEM0p1 z2?ycNI23=u;pVR?{0#@=?>I8B$XuL@OUw}^e6N_3e)%oVWEn8lCU=3x&$$8;fnWVA zj!SN=5|P<{_}{6Mo0r>qR77fDd7MUHIqck@LUp{Z3 z@ZlLc{*~78k2`CcMHb_QrFiM5VebeSxe+&txWJ1?Y%eezl#^%bN40fv;FHFgiuJLT z2UV;?(0{@4(ewo``lJrzai4NubjO*=wRbalQMGk(>zQ(A%;ts8b!g;aLqGnmy3-+4 zd4S`OIQtyu-uH9mL7flK>;itVc8yR99?=JOFCGVc(2;%B-^)E~~7p5tAk8)oTF=v|)0L;L&bj&t6wG~<2Fq||b3xq82Xx*}oYRO*@cas}^w znUP9be$Mq=0yyXvp}A#qhyG_40p$lF&2f+%ccni@C!Etou0rHH@U8m<{ebkd&k`?^ zce=F!$QU>0UeZ!Vaj*2OwNKU$wYF8usH>}ZbULM1+d0*qfsB~J*xJBqi#)YAdzAZD#TbItneWu3;_1{nc6vI-p8hp z189LYvAOGfEz1KDwgNHX7K_%xN#!BPGN6=l;mkNd#Cbly@{YB3COH16JdVam3uN`M zF$J(XLE;pK&U703?sTgn{%DzR$>-;}P`p+J>fMutE29@sA*(n;gr{-rb%R>LRX>x%`xZ?@K?wG!iidA8y;%|+e z*d-vSR|I8BkAlL9z3Vy@$$>3vY}-8YX&kBwNJu@+9W!RpOOzo-DVt(qg7I6~HIp89 z#~yvp@33+bk87(MlzJq@)QksMoj8n|&|U1P8Z~SoWfAO=BoN8;HH2GtIdgt*u^Wgls4&4Q{UbAMUON^r?_)P6{Qsw!nI>t+ks9QY*I z{9P=YWyn_jb(XLURBzZl+2Gg0YBrZSxjgSPr-Y9Z;r{Wp@pK7GpxQd2aKOfm6CyYc z9k6RAeA?76f9_EzZNlleGmYF0`2WKEc{QFcp}7m@0>#^sPj|qfH8XsHEo>R)@|)Tf zMGPVh?+o7IH~{?ivT;g=vSSdmlG4t!?OduH$?`nfHV3GaE6i}1aRZu0S-4bQ(E{lx z3bXqr|7HK&X1ZOIe5MA2>)d=gJ%sS66Y=X3QQ+k5R+$Z3Fu>sxNI=^2 z2F(HH$_*>SoWTcbH!4p(KZnQ@Aet&7dh|D#$-z2B%Tsf3)wj$>V~XLZp-t-scSv9> z2f`o)e?2@zga$|(Cy?6vrIuK@v?I!Kib8O2N%1HJMy9YwMM;lf0YL(9BI}BV1`ha8&sw1#Pg=^LZO~<*rRbsE&=UPn~l^=G!eDsX#K) zazBdh@qc!sk?G5gr)^o9MzND&hJFc9lsZ_C!5pIYcx?Uj7NCPq1$&c^=yGh0?=}@hDg8-0T zR~6tuV!kk)K(p07P)G|Htmy9Wn+|ORo0$OSn6XS4(2TAp+);{LE0B5a(cINOHLVZ7Q}&lMQQQjPdHO#yS(! zW0>keIOuOoiE0T7KfHUqzv^~4kQaLyTTiML3?heUVy1DEF#v9KtqL&BZnnRub84u@ zhAjLXS1q3L<^Y^(U}N;iEGTDGAxs!V?6YYyKc#1a;3oWK6p#mY9l%F{ZwVMJD<&(G z!kq7L0v*^kl#-#$;(4BM6sDHDM$3rgxI3YCRN~>MU_4?Abg!P+9ED2M#`abTg$u&a_;Q79Mer|;*R0L)*@K_4nGkV%ZlGfk8{I7=G z#3jo@$R3hnK<%(Ythf{A0TB!b=hgqJe}mmqvpeRQm|f|t`~ zg-z=eeB$RiDY{95@}{qhqeMoJ29Zt7QlUywrMHho(rSnO_y{~kkC(S^?rt_KHpRpx zL;c+P{#w*>2%%9UEffJva{NcaKbo$AeYp{^QM=Qj1<)HmTw_^*a6r1oH;VlD3STH zmi=f&uQLnn+;3_T`IeI?J-#>h$jD!sfI6U~=+Xgl$=4l<2xYMxY0-p$@d<^nu_4QG z@|-ru)Xz{;b7Dl|Z|+PpXS2sjVzIW{vkd6o-Lh@2_j=oNe6%JyS+O&+tI3$R&{u#7;$9xv;&Dcl_w9TtDS+jb45MC!H8={j(=C(l2g( zM<0bQ@cZBX{HNdj*5%`y^W)t<8e{yzGmZ z+T|i%E>$u56irhHDN?PWrxd0MZw5f7ynQs^|L)h(hqq4;*T<qeOkeJIUap_kYNq@&bL0kf4I9ote4OGzE`!} zVhGH({@xx;^)N z`{3jyCO3IHYw;HM7RFy`HQnBq71`oeXzJ)%2_!O|<+hhZB^en2fB;yR)h7(|#zo+SSwR5+^VD5V42c`h{u zA4r&^L0-JSXUI?wIjmSKkSNZfyaUpcbN!KD_W+41)`W)wwxq! zj6yfek{eZ!{F#f!TIc0fy)Cl;slCg+dv{6J4zTIF6; zWysbYx(>s;ldl1W9=Px8T5)mpTq^ z&3OUu{eQvM-=~^NvTG~1hv~>{H=byTkzlf1&CbCLQ(r?$q1D8<^v+QbMSs1M?FQJp zMWxpzMf++hQ7Wo{N$lFT`<~a@S3>(e^C*FU#8i&u6=!X;nBaKSxtI4AcE4mDxx(k& zlYe#KvS+kZ>Bm3%?sqytz z4Cu_Z4n>T2B)As3%6Goz$f}Yd?b}nn_atx55dGfcDC%+vm7oFv3PAwCu|NRU zV9G3ETc~3h5LYVeXvH`4-Qi#)oo&G@S?GTIDywnypYm5^w>fEU{Y#c8i%jNik?Zm-H+jqH6DQ4$ zLlISs%T~**?f^yP<=&n4HVq~$AbW0BeVk26Q_MF_GkPUKvM0CXSR-`HcdL%=H^;K} z$!1}~DrSTDgk5{0G#wn8k)1ckYT3TG#C`)-eWQi>KJrS*6$qP3^*=zaKm@CGe!e-b zm%Ad7xJICDdh~?A$a9I*^za0QC7gNF|2%z{3W7Rxs?|yjqatdaF=M>iN zv%@%u^n}Pq5tlLy8T?a{DP`1n%*#0hfPH050gAo*+ue3_rkx(L@9dwBNU7(28s%9W zyC~M&wwWq1HWxtu{_F4t(e!$t~hIB0$iH{WQag2G8fYj=7i z(ym7$-W_|cBfi!I>-oW2gtL!>N(%f!oQR}DohD%k&e)P!*CyuOc{z!7uYz$iu*YN*;qlYCv+QY*H~ z8Rc#7kqp~@4o$8!3k%HT8~tM|o$TeWD_5Fey4MML#SG2!UCSt0BR(2Y$v0cz32gTP zi3cOjTQ=;O<~8?5V8?YiQshz$)7&!h2&K!75(+=^Kd+^yOX#PV9a)ld6f|vVz7cIl zN+coKw%*KDY~?hgobKI4v3Is;5vXI-x*3aVuF2w4*R9tKi|fTP+_XP-A1 zia2Cx9CRbb zeP(ZOgW$(kw^48tTz8$zD=M~RCEuGzs&Ya5YIqM++$xfB8%-yEJ<}q}4vq^%s`qU$ z`A1{~E=ss8P->KVn4lsm4go@Z?^PM0gE;K$o*9lyu#Je~Z=XOE7SCtk{GIc+FCVdo z-TCx%Fhn@Dp*4QoB3ag{jWilG>1KhZE}{}#2;xLFm5j1n9kX?9=P68je`+=lk~}J2 zuhm?ap>|z6?ly}L*Yly*=x*F~8qYbVs%)($x8QBvI?$j!O*U^48RXBJ z^|+l5oqh-;Ya1T-Dci(*o!oN@KbrbN#XSneqD4(fzi2`rvHvp#GUccv`Cm0##+##E z<>Z2Oc0&zp86@GDf#=sAh%=5p3Wi`rn*hPkorikBsKJ~O_DDvoY zS%=H>z99$e9uH|6(f__=KS|!=UI{fP6*iQ1VkU^Hq@m}UTW<;N?&#RJ?r3FZ167+F z@!Xp*3{#u*pp-a+=`3Mon7cA)f`h!9CxS!DB}G@MVQT5226zz`W07rIu%57$A%{pX zKdzsUL!?tIYbgRaup5e+*Ym2~nab>{S^DZ4XJ3!tuW*?(-1!=7wi7e;`BKgK#{=Yh z(!O-yyS`KKmzQK{^v>}H>-wWY79f!0pMLRb70!R0NFM-xxcu+8{Kx9A5bOW_crDMA z3qhbG0ubFBo_7;s0(pPgP^W_)%3`6@Sr?(rNG)-J`Z<62tU6nFRe<)cAw?qOzk z2nhL~!_{p-Uh=8if$jir1h#$Zom|N-dT5;;tkWX7^^8W@+C2S*POvnWsWaqa@dn1z zMc488mMvdZ3Xw&C4<7$ZHCtvG?DB4Ol>1sTIh%o_O25#GSIJMXpTYp%DJFvyO1M|y2q~KYuAHS)b9$V& z@wrr|hRL_)tkGGEhml~nzG(i#YB@(*Ae+$^@Gho>79nJ0SEhnJJ((L2>}SDwNYkRn z>Cq^uYhmeht~My{Ybwg8&$sxuD5Sx#;(`RZ<> z$~1|En8DNzhz!FZO|zi=T|%`Nw$Niv{8Trl{+{q}IQYY|_N2=~{0!`xZCu%BE6*GC69@dvW8T5;W0SZ{6jP z_R>jn4an-_@B836SS7J@eJz@%DW4pzPN$IhVpoHI2MCViEt~h;EcG*7yt-C(W1f?p zLn>a=n{_@xzE>&s)uU7$H)b20>Q=1}JU7Lt69(Rvy6V0e2dkCWjl6fE9(w5`TX}8a zR4l@OVRbvFSb7a=Am2;O8vLu)dUZCKCsLG7qCFI&v;X|>uvivx;vI3+F~=nw^LWy` z7-FfkP* zuULsvWzHL9h@pXDu=3!cLS+C{sWyzya3hT}!eXOs*2FW@rtgXAT4-sEamE{~mDbv5 z>xn(uIix-W6rd1AD28ACCQy)IUn%DL^#5z2pcG{&M+GXQMUPQx%vhzB9y?Cs$|$p} zxbfmANSG*blBCI!r$}j^H-7gA8ii0sYcZBGS>jJq$#4Q>l8|bzBd;vVsBE!Sj=%hE zo9%YkX|**DIEW=qLK>6oCy32t-$hIAxfkBT3m0agWol$cM<{~GG*iqp!z>e{&!B?` zF=on~C2O|qIdbO8U5?qVxnPc5mt1x614UjEi;-J39o>x`#f4Ggl&)5-el+8IP2H18 z;o69%qqU_T!D_ME)|szknAB3+Rt8!*@#`++OvVV^UCpIExo=63jH$!Oi7~2a9&7F0 zchaQRei|2>q}2YJbg{11lLh%&B(9rID%pgHAP`XrvS>@hjv=B@u^AORh={^O;fd28YIAlU*=Adde~&q`FrwEF zCg*gS2obyuf{8YJUGaVH*ylUd(4X%(OZ?EcuxPZifn4AChD??1=5YKLcI3&e9ZkKw zvE1tJZnxMbTT;}f?#a=$$-*~q$hh)%{MS!?A^g++pSaSj@S88F8-K<21a$!~v7b=7 zm8x7 zPjcb;TGRKJ?oy;p%LgS0xiY97Ux(Tv7+I$}8J?e8zuxx$--vV!fdzw&+*lH0!IBu= z6O~Fk5vwRKFax*~#S4r(lRL~iyD$j=|9ewkPq_EJ#gadz3UU0wLH2x;ox{j!-?mslzvF_ppCuD!K^ zB0=_lcPCMzjm-+Xpe^w#aVprue(sxWH4@^qk>U~Wu|_h_cqkUiOvJ4H-rUEsBFapf z`;awm3j`0xw?@{kDkoyZU)*<&-*IN|TmF*Qxg8z?Y?QOp~(}etJqD(=N?c$KF1m&j# zz14H)5pok^aNvej3kr$G;*j9N|6fP7@L!Fo{cmqCs1m7Cup$893hc_`ft2j{3Wd6C zRki5;-qcFs@R{JKHi-!lAoKd!ZC~5pt5!kRNT*+_as;bHmSv1>l6~X%_Tg`SRbbV6 z`vi#+BqkGR|8D>15P`@cpb5b)T|%y0MXujOZr_FxKY+ue4Q%fKJB@?g++hz-n8k&8 zJecnf2L{6;F)WqAiU>GT1#673ITp4g!>M_2K`~rf22YvlZsVJOD+0dsqEX?RdP+G7aiB)f$QwHeEC}$INZBY+Bn0 zR&A54#PTe|lFr4Jfn;h6OC)n!du|7{PPXR3yyCAePK}@Kx}|-QD29ArGwL^fmOPl# zW^Lg+9`Thm7yO4$?bBDPD#c31DpDg6JZS$&YEp9KsQ0n;SofRTyuoc=<^{2x1vaIv z7w=TM%tiRUB4F+sfnc5#=5e8A-+lB&@~{5Bt-~ zmo=3pweii}xWpMq=sV7A7}ml(mK>*vE9y|iIJc^VvjpcgLFVyjwGf2v_CW4nbcts^ z9CrgPoWKx;Ah#PEbt*z}9D<|(xmX|X50a|vgf$ynQhS_&Hn=o=BqOOi7f9R4I^xxN zq-R$0c!gUJuM&>{5*wTY#o}J7rU+01}&uX4YRHd2g{-q%`b)HXFnh10Wkn*hpB7r0plGv*xD`pH9 zi$7<4_QOD6;E>qih%*e_@PGvu9)1KMMvf9AF~pNV2Duba$^^=&pqhFbXkseUSw`!V zYf*vGvPGE8gywhG8;HsKp5s7!JVR9eN+P+O>{&j9x>x&Ow?V)`Tnz~#2xK-) zXLjK7HlLyLv3zrePcHHq<73Fy1p0KfUXIEZ@Do+k>t_ zRQAA=mP_`2>L=odJ)fCiilCsdsJPTx);Mk1ini5j)^FH2Vgr|Tbk5}NJ$v`JW0aOE7uIc1FHw1t?PnkWU7@1{k0S4L_!_-bR3S zop9+E^#gK(Jx*o6qa1LYgF=f446LJY69^kiVrZU_ky(-=X0MG)p~oMUUrxDm?k}OK063?_}%=&pa>; z_V&&#Xt!(5kuJTg_Jw1CD_*-#=RO*P_g|HGQ=a+0 zyA$qhJH^wYuhmZC@q6l@JZYCde2ZUq!zma2PH%`)J}>*X6K~J-wol`?Z#L*}&%9!2 zgp+sEeObGH-prX`02HX;kkGK%npRuUAM+95hd&}h5N|EFRS-%T5i_e5MMuxT$Shin zSQ#>9%aNx-r7G2GEQjE`wKm#)8Zb8BJe3y}n1i`pa>xCfq%9SMfe-;MbgK+z;7&RU z8QTzEr{+UJp@V~igNs_?*nwk*&9fvucCjsVQP*(U6*nX{&ypN+gsp`Tv6f*Ey-X5J z*ty{Jz=Z9Igj!)a6-X5dWJg5{!V?yeWQUQtIYPF8fhuZZ9m#S;R)}xV=K0{mIYNkh zQ-;ym+79Uh0Qo9s0I_Qo*Aay5l^4-twt=ba1FrIZPn!v~gQkr@A4LJwI*3nGfo}!^ z8|nLm6$Kg=9l103!j8H9k$)I9z<3}A!J@sK#eB5ao3%}A)6vXtwxsk3{>|8{ zar^(j#<}rq@bCS;z4rezmv!ADP4`F9-e*x&9`;9mYIn4(*c1Nxlf64!u0v&EO6 zTo+9R(oC!O!jX+f%Cl#eqOb@G@coX1KEdWcMx$BnCpk=Zt#+vzSL0N{Y<6pOZ^_v0 zIm2TbcRqXWY|cE^9NwbLJ^W>UD+J3|`nLwQW$g`G9lS=oab3s;>DKIhvTcg?@UF1V z(2kt_svjbE7?0?7X?`*sj@qd|6n)&%AD?UT$bCj2 zCC~rx-b6h!yKdfaZiO-@E2JG>8~|!OI^8gt1BNY%Ni07W>eHcmk7R5>Jk8VFAp)Mla~)2Q?4JYDKC43BszOQqT*C5q_M z5A-IaP4Vg|13ggk)PN;!1(wXSY~EO_M1`Z$+q?mhDy7O}5$ddLT900HDHpvV<*B7B zPGslrLyD61DW$v};+9D}8bqyv;yxH^eihP^9XXc33ab|IAcJyx#k_#994Qf3BceLY z(sYbe0Ihi%hnJF6h>uYeS|bp;0Tl_g=%zqiu{)b!IxRyi~jB37g15xwk}X!=@( z{&1|IvqjNgVG^&)-3EqI|FoY$4}_wpKttV0JE<>7mn!Yv8nOD`IyO*n=a9cqwL0n; zML?v%mCrk$Ve={>3_oT1Xn`jG!hNz^TuM@BzhsjU`4<}bGLYT2u(}tD)O7VF>#dA) zV6<(A)!i$n7JyFa5|MDxqLgl~n1yQvruG6`=Fy{Oo^_*K zc+kvOi$vu`XZ`xYnCJt_gJ|}lz}j~db0*=>vGqb7Z4|JosJ0<>46AEIJ(JWoSp!ov zw30?v*4Qd*31k?aq*AQz1wl>pxzZGe`{|;j?LUQ+B=g@#ad3?r-K`|*XXVQa$>HMQ zq4+2P3PoWkAqq!{P-1j@3e1$PX2&Bt1v>K9>5Oa>t?lX5{WBRj3(lsFa{vPjs&Guw zglykS4@)L>un;a|MH?JWyzw}n7CEi-!beS!EqkX7LOch)>26-(8VqtMSeYo45buOw zp8^1zb23r#WF`7BDS#Oa)Q1U2|3&1uM*U#MaZ}SrBs-hCZ&9$UzC!IH1b?MTF6Z~h zwxtrnk=gimH{Wg&TDkk4GIt=@Y~TEnKX9#ZQRQvK8mr?xHDD%hpn-i5HJgu0PN)&^ z7n_#u;x?Q}dfPF3D&Ov@-{5vsiR{zE(vN;XuC-F!=m|TgQ6$DjC^I#aC>_)!QrzGf zMrcW(-9wgsnlQpD`^0`=iH$~_N&-}5DGr4udt$>n5lXoYCZ}X~ZBPq@mZ;-dCMcwk zoFObT6NM?~0ak-zA5fEM3_TYC+!Z0ue13$_LyZ}+#(gD0l_D+nE1vdSK7;~c{dlK~D3hzjM9=iRp%w#<$O%xGP*WLCBMhsHZ*Yw)YclIidB z5!^*{>DS;svNNLs+r+%7nL&j$Gd;KofL)w&&U-jforI2~J5erR?V^?m_S3g0)t-B} zS1|?ihsJs<>I3p9r7R$`4O5Lr&uF6U4J}u5OD`&M-8a=>6*IMbvEv(B34%2zW)9Kg?TInd-p&Dr!0No@bhhi{| ztPFr{I_}^Eg$Roq$jbuwK??FHAPf{`0pg%`A_!$^*(l2Z7nKL?Ub$MKF0bOhd<~141_jv&%}&7{!6mV;>~LZdb4nfv{edc+dA$3q)$a8n-lO zklsJ8(|c8SChaYo(qjhIg8KOvQDd}o;%(xvq<-8L)ekz;M2-m?+tk{*{94s@)v~7g zf)}Rgo4Fb6Kg(bFLQAceo0J9hi^Eq}^)##Ls;+5Tr>&|~r|Mwb?r55BT*yi_ZqjYCJB*Xh({KOd~2=Dv{d8i zy3_B~Px&InD3%oRyrrNsr{$Hr3nRSyQyoMo!$;7NT*z^bh(QxSfa*#0(eGu>$-P5} zU6&x#FE45;iaOqyT3BX|TWo7PROF3ky!kM2s)A;uCQ zmZW%cK~WCqIkqOuQ^&eckNq14)l`^vXW!Z%4MHYb)F&798&bOXAz?V`W%Xf2fl;vD zt-|xQ#W;@W!WTpWQ3YR^+7}QhxczmbVU6%fU$p+jpomX&dx_|Kp<`V7iCFtvmv3K= z^Om=n5Gh8BQt&HpJkRB%lwBUVhhFBGL;4n?bM<996muuwWv_#dl@}>~Z;wn|oUOCA zrgyl~e`NbtY)v?4QBf#-9a*V}{J7JGiX|91N1hd*_4nC*$!XZbD?-#lx$a}yWQE{H z`F_c^>wfMIEw>X2D%M+Nmjm3o%j(&Xh#6kn7udZ68gHC$4=9_#1cR7}459BhPu4-F zM}IB4g{3LSr%8a*v@=x@+wCPJDA4GKk%iWfz#4~Pc}ib}M9MFmCr%q=G(kFGGBO;l zjNq&Ct(x0X7uH{e5qi88_AX78#{j4EAX}G5KaX2>%1d}dT*6p%p#<_nRESdQv|`a z6468dA4L*Vd}!S9WBWFgim#tn;SR}96nqI3mD=6q5OWul59nL*=UwEbKBl4vZz(IA z8X)X~jcBh_ulKpk8dj7>_7dLz!e5vsyE?tXxn!fHGzQn2mrT%(rl|rE=Dai*f#oaz z(%9#v>y)O4EYVH$_Sh8n&0Ba`x=QEg0|sfuG|pX{?uaMADy^dKc%R=zwM-6rU5eGK zqTO_wULTRX*ByjX2bk?Yoo-168S)%fiRIEgYk@A(qYQm z{If2`Q`JTjl3hk+)s%?TPd+034sOoq73(1ClLdQi6D8%;A;znuzplDqg98;Qu8>Zp z-{s)*O9b*7mAG%@4!EqC=}eU&A}bAOiUt+(VxSL^7hlozrA-QK-FIG_iW3(cg($`N zH(nCM6I)at=KRARSg~YoDzqJi*qN<^ukNecU*9dzHRJfr?yl^VWmr=r~(Y=k}wJ z_`Kb-j_pfTf*N@UrQneua*+d*@pGbYJr9q*EOrB%55Bl$O#uHQGwMar7{Aa(EdV?`?@MsVcA9N5DcS?iU( zgFbpBb}AX6G8ToP!FCgQguo}(OqPL1*v*LBqU%uE^Wt2&45q)ZXcq`pZ%U@~R7?mB+e7u<{an-G|PtpsOe*HwQ)N|fL z`=x{$E{FQ#IJ>=>25Iu`E~ZKTfp7AG5E1#!gomkhTTZo~OyjCIUcf?=T( z`av7x3kBp%N}B6%R}60@1?CQdQGzy;dIRjExMcECA(GAyz;XN@wIM=PVR~p%RWyWK z;_4OZGCi@so`R4xsahqKvG29SQrUTr5*oc81ErW=J+VGCPKJlw>a3s}Si$FmYKbym z<*Y*fdFf(4&uRuOLCetxlI6l?08aXy?5!DuHO}@{J^-9UGXbkrfg=O|^^<1Ml4u7Y zVE`nIbp(JZLDQWqILCbUfz1XEYlXlXBcKyt;pg-Ma^0I(s73zibfHcTWqvmPvjaKo zp-%S#+NDl{nd*Xh>=z*ej5aR?Z-3f{5z#46`(S%wjy;Csg(yB}h{aLP_NNCnv7OMp zZ!g$=YJ*Z;X})7tS2aY$#ny+bttzTa8}I_5LEoi?S}S`b(`#jtYob5^s%Mx(-*NYO zv8t;2usAIqg8L5PE8TSM&H&s5yFs7XCeub#ooNNe3O?-VWR$dN^qhV zBzNK8EKT>i39B-393P-oE0k89sy9a^>=BEe2(JLGXYtDC?W{G5=n%pigMkVi9(bk^ z^Kgaq)_AVt(haeFGfKlyaROE;GdU6T^^3(et+#l zOaYb>RyIth=h+M-b}$jA@7;7Z=%?Lx1w14hRhrtEYtfpT#z;#%^D!BHEk;vkM~s&> zN9n_EglP>5Iihnly*%LkY}CP?n=MD^XCeLWMsgEi`aU%UXzBDwP)1dG!~gfOY&8^sDjfP=Y>os1gA}XqXjzwnCqwE^R<3+H8_5Q z+7zPBQ@N^XEni_fzFDS{Mz9&L$_{H?bAlt2lo86zieOW0qf}d$AMm3HHR8K0)p(ToY0_pyE1X<1QA>jL{)O9&gH(>DQNTJSYCB!Xq~OO*jk9HVVY&zc#T zR=OyCEL^l5tlw6DuSOOPRz2OI6a5e zRTJa*dBMJJl%P!`1$paG49#BaN4C%e#p@8^vu=&H0bSh!T2s+hx-TrNjz=E4!ZWH9y&}wb^bzB{VFmfEVHV zQ@^)20H#2;mwO(onIMKI6GQ=q*AB5cfwTQ>Bo%BYbR4TR(iE=A_hvkKD!-(cWv9sX zPMqibSJ09()cSaa9@a%c3x>&`M5 zgAm$4t-~q;Pj%Kd$HYr&WBJX?MuiUR%!ZOUmnc+kbgn9jHk)c3Md&r?#Zjr&fZ)aj zQ4z)^qQE6Zesk;$uuqQ%Z6Y3kHmd|}3Llq`Zws&w4lw=wYa!I|q|v1mXKvm4gjZTA zK*dIb4nw5)gn-Dj#yB^L$gD3G4S(dbVdA4r4DOMa^a?*>{+EPXk$^tIdH3&U}e&pq{3UF%e(AJR~T3%r1 zPK0~w7Upo&G%Fvyo+vyz#YFKL`Oh8T@do(*5aeThvqW0FcY&C2ZiApH`Uj<3Wqu!+ z&*GSj@`~fR8`e48-Wd7||DYkGs#Ui&>IQZPo#B;*?+AW-_w1YT3-)5lW zz7YP1^x1qk^Uo;b7Qp%8X9vtp_JE9u>+r%ib72xup~J$hR(w85MZIUVJ0WW#q8*qz zM$uzf4XfgvkT%51d^{W+RU_IrBGlsPx)4;>UZVS`$bO#)rTTDnP6#ErO3B6|2fnbM zp&<@tz6b$&9|KEzWV4Jbp$nS)dUymv?Th84=JT^5Iz5w4?-cT2p+us4+p#Pup|CJz zYW^u|Q@TscEqVAYS94QxN>W|YIP+_HamyvHF(ZZ5JlrqD9&Que?nd|T7jcVMLbEhaKie4?_kdJKM$lJNZaunERCWUaS?0syYC_jhM^cNXw*4W!gPL>@co#ifBFTtCxQXlrG*Y=Shkc zv{GClHI^8NWamTaaKM9d9D|%qVF8Md*q^4g7<;IVc>p{hZWnBCqw;(sCQP(Z?`POV z;CIV0Dqc|x-EE~VMO+VWtp4o3eN@EHoleY|^s`{)6O^R2&;-Un1Vf?&1+gYkV`-nPQM8U0-@xBwJHxzI+CVjocD>%+i_>L)a#Y=#9JR+O6ocz7 zD#Ii;<+9VL0eBeA%L*prX?H#p_3|}3fnj5hN!0X*A6&Vgjjr5me*!<@+1;{eD1w^H~$ButRR};U|gsjL^iMfH(fRr8Bmv8si zCcDRYL8t5xZK>G`3_EG=8n^~h;7q9GBkp1iLm?pf2qf^H>D=$gq`%$h4Rku9(>KkF z$w4yV06P7%TG*SN)f7Gj#oG$qMX29PWsoJ^{MokL7rd{TvmqmdXnvBg6A1h}En7!9D}mmnPu)K54!ra5N^6>j0dL#P)MZ9@NnC1HqB|;bn8C&RgZee!TuWrA%95x_EL)tTVF4&PUFEFmpKC`=&P>$13!Rx?prfEAI2`W*L6R1Yt zVIuQ)8pDeUsB$OFOAJ?9O=Wk?e8L!0#zk>j7Ga#m<4rRXS^QU`uT&a@r0pY_y2ax? zewH%HFgmG8*Jz~MLyQKgl+BV6jS?sG4HwrN&Mr4x&F@kd#oUNv46_f-D^-U9?$R>j zml}@KpOZuaIn9eI0e~Bu<}*~lTkV;U;-j`eoLz8bXU|L<(uQW^eo+qqhoPka$NVSU zzy$wsK^%iAYtDp#X~UaXoDFRD1`ex-gDhM{6hAZ=~^*D(xOPFE|keM>zJgLPU_O5G*aeX z3@3Y}6RwcPOf>Y>Qd60LY3xH^G1Xc1CF>-gaG+u3BpyX$1;*se#-<;8e$*sMmF!1S zK=NHHj@S7Y#0SIy15y{d#}>zN{vXrVKcv@*?I<4UA&`iGU)9wH^7omYAJ&uXvKEhQ z`RD4%IRrbVaExVIZS$8kFMG&l7#r>}+pm?#BvepAj1Txndi!3-8R4kSvWIy+{5L88 zp9_u6t}A5ZZRdM>_$F+;3hza6OJ{+yJ6ae4G#*7ja;!m^T{9;Y(iM^@22u$XArJ6p zDxcVp4eM4YGimLI>8>*QVb9B7^33dt>BP0e zaQHZ^xTJ?WP~6rkpgL;0>S-%(dP=24cTJ?^fn#aPcnQufs~pCfJL=46_>55cV-57D z61Jd>|7aoSU{k7OW|IGmI?%lX$55U1lfMPu#XLNlqLPU0st&8fzu*01G+aUr&Ms>b z6SG^s8s*$vh;ka%+GID>6?MQ5qXvDwQ_}|SM1wFRX#*`W)m%EoaXbJ&&%u~gPVNh) znNisSuSc^|)@LZW&&}X6|FeEEvSt>Davo4DR6uAfmZU$HjxwIHbZw)(zjQwT%v(BZ ze#h3_Se0vz_gD2!h_$*o&04>vu?A-knH8HD*b`eIZK?QrvtqlSZT;=+axg6pMz?l; ziyu|kK!qpAwSr1he5F;{?41{j%Z_=m3bUZU)aB~6*+sXxWCdnlIihLhSnw-H zKfP+6$qzd$f60>UicYDIzf4qwsn=>ArhO3+s3A1A2K7Lk$|MW=r(!v(3NymC;(k&4 z_y3b|;@|R)VG#ZRVm6n1l)yOAKmp}`(;BT_ok36C4gG&O^DW9Zpl;tAweKFRzL-7r zY2$}8PRa7Hbw#_H&6Py%^VHOx89 zee-5iBe#ZSlbfYg4ct_=5stXInvekTiZ!oo8k5V5iu3NvaMr%0X5a*KimOSP&Mr+C zQG-N+VKt!OyOavUHFDY9{gXBW22dSTjohYV zH{tK<=WAtFIwA(Uy8JSy+I8%Yjjj@liQ|daGa{91jCl zcFU;#^FH8u?H%|YmoM(qM&Og zy(+oxBYg-_LiB6ZmU~)%q=W1#M&MBUbPr|_B3|x`3R=-|ey&EA+}qrjuSsHnfHcml zwZ;p6Ar(p@VG42xh_iABei^bYNjb~Fb6y)apY*STk#FjwLTrBSL%{VCZ+ZukBpF6z z4x~3G$37gn!34xjjQ;J)NV2lMgd8gWr~?k-0_4Aq40q?qeK;gkk9-F5y{IDqH^$EI z`zt-;KDfR{5a%lw*~FL2oKX$1M)<>h&1P$X{86*h5qU@%iL^Rv=XIfbm|4wA zxsZs+K_PYoz`%D%!;@^0BQymUiqNA|3QVOvle~%FzkmM%;73X<0jb%WdPP{_JtXu1 zTSs7L@0hu5rvP{0aZ~b7#@Md8Lhj!5-(gy?b$>; z^-=g1>k-966H_npx+|lzR3WRlAi}el_V5IK@g2s9ci>HBk;PHq!I)uchm{nMC@vEp zBTJ5f0~C)N*lOm&WCtNr3xJ%FIlTMIVn)PBnx@QRmaDYq)A%Spxx2(@c(!|qN)#^8 z%xD^a#3}8hCnzO*GB@osU4;?n1(o(vfq>`zZ~zaUp{&U)wWVyj1-CK#sfx=OMP5S= zbxNr5C z-*6A34=l<1P<(cMwlAg=CCe=$SIn_yXGRWldY~Ujqr3jiKsO*cPT55im2s8^(`og)TV@&>0>;$S%>41 zR-iH$VGeBozgO<7QoTr)~MTtCVHl{rxG#gBkH<^O?8O+3+Mp8 zGYSzr^0%2L5f39dNlce4x^&_~N2!|>M_xdPrizHY&{SWWljJ&w1mjQTm&3Zl{gvl*HO`BJ`0)OU1mYM zMDWq-z=S$Qz%y*u4%*bwF7)Mgj#2MMN(OPQS>k!qAXe;*G8i+c>jgDftNBF&)bd%( za?9<-MVj7gs38SFLFEL2>3h_SA;u+Lv8cH=7=HD{#|L|1!1_Ov;!;I=043X$dSHqJ1skZ1C)&|}>IHNKr?zy8|EMdK`zAEJ`$AryE2 zj3_1?z}BedBKn*9=;WyEL;+z&e0^R72ox$9E6SdrzK}s!Ndj=Mk`#*!VxlDAtg^h6 zxL?_gfVi*QBva zh=UY0CM_|8aAHY0Yk{WWyY65hbchia7XNI6K}6dt#w~+x#d3<@g}nJEzr{v_8K?`o8m@De?7iD+=~mG;fyBO4Ujxw@GiyCnXIS;$+3c`s$u-{iFrs|j+v_ON_G6Xgz>7FY0(jiWj2;RkI`0q0SN zD92j8bt;?`7lk7dl`;gzP!Cv_W5EaLiibj(+bf2Iu6fnlDQ6*bOGgne6hvKxPK*Ze z5|zP33+26vTAUHL+4+H|nQ|bUASts{qAgf57$lI;4Z5P~kh8xcup9qFXvp5KI z7k2pV?we0uSlbRc3jx|lV%bCCtB7&*s|NHmn@k_V1oErl7A&QVhU`TE|&5F7eYvvZ6}H{k_fPRG;q1vZVg&DMW7^nM*$ZSV~~p7Xy?HDs|n_|SX(TG$c| zF72#H8J9@WgCC&q76O-@$n(BR;9S4agc{oGa(fDVHav!A`M-`Md9r68$Ps%iFeiG) zh!2bfJ&@3bLrBKss_Ve|W%W|WZtByUO6^{mps|rLKs_J@ALIiZ$4E@cZ$1l3NZd)= zwScAGF?gM}+Y&{U52+*j>KbCtA$P`Bqn5e^I7DWMO?VMrT$XyZhiT)HpkYRR5wW2) zdT{Py?F|>Pj!Hq)-{-0K1FU#4$hq#A9>k&&4CVIZz$RDR8;}lT15U=#^+2~7jr_0> z4mU8FsLKR6o|$Yk0E1S3LRF~AXwyM^*~rCKU0iRnS3X&DdM!l0WLP|7tA^E0BYxbD z@DUQpOgnGuxZhGgl2kcH?V^pLgCrX0v6jxG#u{_`P#||E^ zuii@qES73%t8@Jp>ySXz;0-ya2!Zj(C7dgsg)X5$KPf`WR}xbU!bb%D4X!; z8`q{wYgO;~1ezuwyd%J~_yaxldKlH6V$49T4;qFtq4^>fDIlN_3*@%&jZjNo)T6;2 ziygP_E-y%_(<(-JVgFZd*6=09~34j4j&wR9xo`A!@!A9VTszZ1f zhL${vY2L5@)+FCSJDa)0dfm|pJwnL(Hp zC4A5FA~yHF*sC3E_(>nHAL6d(l8m>XI-(0B9e2WzO9kX3 zvt~Wy!GW8apIm2T1^4FnE7aDVjhvMBAQs%9-=aA!;$2YSJ(VGy-sme?#~LBw0I+28jDNMNcCQGvoW z4Ws94zRIG3QBMRr5Ds{S5Kt^J=^tmG%VvI7EhdTQFh?$@lehA#O)<#r2@>BJv>Dtj z?~#HXb1Tkepu2GeGR73(oHAfR^C(lVCL3 z!)#T>HlW#x)W4Y2o~<;jaTNi@Ho)=&Ji%&-4g6@MhWN`8n?HWQq0(FUa3`^r{ahv) zZvp@rT3RZT)B)%-hGA`|)RV0@P$5*&rw?W=;wR`>-B199r7j{a^;Y)Lcufx^S>YAp zpfpV)Lg_>#m|yEB$SzFhXCVU|={o)xWnO@1RJO4RQip3I$ZS3MR|M$CRnVz~&vHMK zX!(wSV+Tx-39K^PAv*pHBsx?mKbO$wURZ#@zw~Yw{uQq2l!1SZ7UyPVliZ6m&4n|R zK`%a^$-YfAj}Y${oxOx_gn(uU+AT5O+QEo-lLxWe`&m0^IEaMP(gqI0sWJIdOK(hOsoLR?1^7%1o`>rm+bptF1&zX z$0U^AN~)olpm7Po_Ii{Moud>LNHWG=^Bo>^4BLnkyrx=|jyV1WdG3uU8&?p#z>0F= z$#@^W4L_S1f1DdooPer;Q5#=2PsF29AS|3PtW`EDLV^fTRoNc5=Y_lByFdp2wQ~@d zwU?J(<9mV}0MGs~s)mb1&3iy_1je8zJV%(3fAta(%(*AB>k!{FC>S1Z7bMepr|KYN zV6=t*?wI+cntxDQUq$x#2|7xpLVj&_3 z2|^U-Q&4^YXKy)LqaC3kquuiij5LXobWk<%g%fMci=#2(#Ck!-T-TK1Kk@|6TJs z1c+f;vAzZE!XB$QaW&WT`HLH+Yv!-TD4@?w7P~<0f(q8r)$9L6`UZxD7#VYta(T)4 z-Rp}0O^yju;3Ba^YGPWLnatdx2+MkzmBKouO%H7C?43Dx;hcI&q=Uf`$P9glpwJmH zfW_kQ1R{w{DY{Qo8l6!Llf^E!VG%BmFDOnZ$|5daB9+OzTcSd#DoL%;>gsSxsRm&@4~sd>`BwEqADwENqt)pR zMw8iMwb>m`m)qm@`T4iJ>uM_Usu~N~DobGb-TfV}dGh%_VpG-J$4+b+j=ftP;xF4G z|3RRnBFf{fp)pvOkrv)HebhK10ixz7VcAl zJEyhn9KMDRq8awR9Yo=!tOv5sERSST^I$9Oaqr&FlQ;-`r*EyQK`KiRLZ<>9VY9KW zW2nGOP3|T$uLoh)VphHaw#8cCQmj^6EY-Gt#WLTH+a83o^g7P=(kZ9zulnUnwas1q z19-w&L3Ir8*7ZS2t7r~?X-&${q0rW#h@Gx6-CS`;j$pI!HfQ;fO@MjDjLYg4bqY(_ zuNwIm%TaNar4nicJ*|?hj8~(HU)O0GnbNo@wN7pB(z|WXwg_0KeVNhq?3z=$DP!)0 z>$j8YTF+Y;J+S zfq!;3$PQUzkzF0Yd>xw4HBP@e%15ou%WPu;>xzi}UvOuYC8N13pj=hlf;)1BdZ=_z zN6*UZ-`)Q4x4!_qz?U^&s=vDZ+fM*5I1Md|id&!E2AKx13UKt`ukbtfM1z-s}olO8}gF&PK literal 0 HcmV?d00001 diff --git a/public/assets/fonts/barlow-700-latin.woff2 b/public/assets/fonts/barlow-700-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4ee6cd865407b088a6c37b0a9e42938d3026d003 GIT binary patch literal 22788 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 mvgPfrq6VcT`0rR4gdg0f;+$f literal 0 HcmV?d00001 diff --git a/public/assets/fonts/barlow-condensed-700-latin.woff2 b/public/assets/fonts/barlow-condensed-700-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3726e9dccc00171c2b54534fc148d5dc5dcfddf7 GIT binary patch literal 22444 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 literal 0 HcmV?d00001 diff --git a/public/assets/fonts/barlow-condensed-800-latin.woff2 b/public/assets/fonts/barlow-condensed-800-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..33c8a26ee2cd79dc94efb1b5a0364b250693d47e GIT binary patch literal 22464 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 P|4y3<|D;?|#iauPsBc8_ literal 0 HcmV?d00001 diff --git a/public/assets/fonts/fonts.css b/public/assets/fonts/fonts.css index 1737f39..efccc89 100644 --- a/public/assets/fonts/fonts.css +++ b/public/assets/fonts/fonts.css @@ -18,3 +18,23 @@ @font-face{font-family:'DM Sans';font-style:normal;font-weight:400 700;font-display:swap;src:url(/assets/fonts/dm-sans-400-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF} /* latin */ @font-face{font-family:'DM Sans';font-style:normal;font-weight:400 700;font-display:swap;src:url(/assets/fonts/dm-sans-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +/* latin-ext */ +@font-face{font-family:'Barlow';font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/barlow-400-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF} +/* latin */ +@font-face{font-family:'Barlow';font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/barlow-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +/* latin-ext */ +@font-face{font-family:'Barlow';font-style:normal;font-weight:600;font-display:swap;src:url(/assets/fonts/barlow-600-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF} +/* latin */ +@font-face{font-family:'Barlow';font-style:normal;font-weight:600;font-display:swap;src:url(/assets/fonts/barlow-600-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +/* latin-ext */ +@font-face{font-family:'Barlow';font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/barlow-700-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF} +/* latin */ +@font-face{font-family:'Barlow';font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/barlow-700-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +/* latin-ext */ +@font-face{font-family:'Barlow Condensed';font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/barlow-condensed-700-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF} +/* latin */ +@font-face{font-family:'Barlow Condensed';font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/barlow-condensed-700-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +/* latin-ext */ +@font-face{font-family:'Barlow Condensed';font-style:normal;font-weight:800;font-display:swap;src:url(/assets/fonts/barlow-condensed-800-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF} +/* latin */ +@font-face{font-family:'Barlow Condensed';font-style:normal;font-weight:800;font-display:swap;src:url(/assets/fonts/barlow-condensed-800-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} diff --git a/public/assets/site.css b/public/assets/site.css index f53396a..0c0462f 100644 --- a/public/assets/site.css +++ b/public/assets/site.css @@ -267,6 +267,9 @@ body.consent-open{padding-bottom:320px} /* Das eingebettete SVG traegt dieselbe Klasse wie seine Huelle und setzte deshalb die Akzentfarbe erneut - eine am Symbolblock eingestellte Farbe kam nie an. */ .block-icon .block-icon{color:inherit} +/* Der Pfeil im Knopf ist dasselbe Symbol und nahm deshalb die Akzentfarbe statt der Schriftfarbe + des Knopfs: grün auf Rot, auch beim Überfahren (Hüfner, 06.10.2026). */ +.button-arrow .block-icon{color:inherit} .icon-size-12{width:12px;height:12px}.icon-size-16{width:16px;height:16px}.icon-size-20{width:20px;height:20px} .icon-size-24{width:24px;height:24px}.icon-size-32{width:32px;height:32px}.icon-size-40{width:40px;height:40px} .icon-size-48{width:48px;height:48px}.icon-size-56{width:56px;height:56px}.icon-size-64{width:64px;height:64px} diff --git a/scripts/build-huefner-assets.php b/scripts/build-huefner-assets.php new file mode 100644 index 0000000..780c192 --- /dev/null +++ b/scripts/build-huefner-assets.php @@ -0,0 +1,45 @@ + + */ +$quelle = rtrim($argv[1] ?? '', '/\\'); +$ziel = rtrim($argv[2] ?? '', '/\\'); +if ('' === $quelle || '' === $ziel || !is_dir($quelle.'/images')) { + fwrite(STDERR, "Aufruf: php scripts/build-huefner-assets.php \n"); + exit(1); +} +if (!is_dir($ziel) && !mkdir($ziel, 0775, true)) { + fwrite(STDERR, "Zielordner lässt sich nicht anlegen: $ziel\n"); + exit(1); +} + +foreach (glob($quelle.'/images/*.{jpg,png}', GLOB_BRACE) ?: [] as $datei) { + copy($datei, $ziel.'/'.basename($datei)); +} + +// Baum und Steine: im 1600 x 607 px großen Logo etwa x 15–500, y 10–560. +$logo = imagecreatefrompng($quelle.'/images/logo.png'); +if (false === $logo) { + fwrite(STDERR, "logo.png lässt sich nicht lesen.\n"); + exit(1); +} +$kante = 512; +$symbol = imagecreatetruecolor($kante, $kante); +imagesavealpha($symbol, true); +imagealphablending($symbol, false); +imagefill($symbol, 0, 0, imagecolorallocatealpha($symbol, 0, 0, 0, 127)); +imagealphablending($symbol, true); +[$x, $y, $b, $h] = [15, 10, 490, 550]; +$massstab = min(($kante - 24) / $b, ($kante - 24) / $h); +$zb = (int) round($b * $massstab); +$zh = (int) round($h * $massstab); +imagecopyresampled($symbol, $logo, (int) (($kante - $zb) / 2), (int) (($kante - $zh) / 2), $x, $y, $zb, $zh, $b, $h); +imagepng($symbol, $ziel.'/favicon.png'); +echo "Bilder kopiert, Seitensymbol geschnitten: $ziel\n"; diff --git a/scripts/reset-huefner.sh b/scripts/reset-huefner.sh new file mode 100644 index 0000000..0b9838a --- /dev/null +++ b/scripts/reset-huefner.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# Wirft die Hüfner-Installation weg und baut sie neu auf. Nur fuer den Aufbau gedacht. +# Erstes Argument: der entpackte Entwurf (Ordner mit index.html und images/). +set -e +root="C:/Django Project/KantSites" +php="${PHP_BINARY:-C:/php84/php.exe}" +export DATABASE_URL="sqlite:///$root/var/huefner.db" +export MEDIA_DIRECTORY="$root/var/huefner-media" +assets="$root/var/huefner-assets" +if [ -n "$1" ]; then + "$php" scripts/build-huefner-assets.php "$1" "$assets" +fi +if [ ! -f "$assets/favicon.png" ]; then + echo "Bilder fehlen: erst mit dem Ordner des Entwurfs als Argument aufrufen." >&2 + exit 1 +fi +rm -f "$root/var/huefner.db" +rm -rf "$root/var/huefner-media" +"$php" vendor/bin/doctrine-migrations migrate --no-interaction -q +"$php" -d memory_limit=512M scripts/seed-huefner.php "$assets" +# Barlow und Barlow Condensed vom eigenen Server; der Abruf ergaenzt fonts.css nur. +if [ -f "$root/var/cacert.pem" ]; then + "$php" -d curl.cainfo="$root/var/cacert.pem" -d openssl.cafile="$root/var/cacert.pem" bin/console cms:fonts:fetch +else + "$php" bin/console cms:fonts:fetch +fi diff --git a/scripts/seed-huefner.php b/scripts/seed-huefner.php new file mode 100644 index 0000000..a5ec07c --- /dev/null +++ b/scripts/seed-huefner.php @@ -0,0 +1,1251 @@ +fetchOne('SELECT id FROM page LIMIT 1')) { + fwrite(STDERR, "Diese Datenbank enthält bereits Seiten. Abbruch, damit nichts überschrieben wird.\n"); + exit(1); +} + +$media = new MediaLibrary($db, $mediaDirectory); +$settings = new SiteSettings($db, $media); +$pages = new PageRepository($db, new DocumentValidator(), $settings); +$partials = new PartialRepository($db, new DocumentValidator()); +$menus = new MenuRepository($db, $settings); +$forms = new FormRepository($db); +$theme = new Theme($db); + +$firma = 'Garten- und Landschaftsbau Hüfner GmbH'; +$kurz = 'Hüfner Garten- und Landschaftsbau'; +$mail = 'info@huefner-gartenbau.de'; +$telefon = '07229 6992826'; +$tel = 'tel:+4972296992826'; +$strasse = 'Am Forlenspitzen 6'; +$plz = '76473'; +$ort = 'Iffezheim'; +$instagram = 'https://www.instagram.com/galabau_florianhuefner/'; +$facebook = 'https://www.facebook.com/huefnergalabau/'; +$SCHEMA = 24; +// Öffnungszeiten von Umut (06.10.2026, aus dem Google-Eintrag): Mo–Fr 8–17 Uhr, Sa 8–12 Uhr. +$zeiten = 'Mo–Fr 8–17 Uhr · Sa 8–12 Uhr'; +$zeitenDaten = [ + ...array_map(static fn (string $tag): array => ['day' => $tag, 'opens' => '08:00', 'closes' => '17:00'], ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']), + ['day' => 'Saturday', 'opens' => '08:00', 'closes' => '12:00'], +]; + +// --------------------------------------------------------------------------------------------- +// Bausteine +// --------------------------------------------------------------------------------------------- + +$seiten = static fn (string $w): array => ['top' => $w, 'right' => $w, 'bottom' => $w, 'left' => $w]; +$nurOben = static fn (string $w): array => ['top' => $w, 'right' => '0px', 'bottom' => '0px', 'left' => '0px']; +$nurLinks = static fn (string $w): array => ['top' => '0px', 'right' => '0px', 'bottom' => '0px', 'left' => $w]; +$nurUnten = static fn (string $w): array => ['top' => '0px', 'right' => '0px', 'bottom' => $w, 'left' => '0px']; +$rund = static fn (string $w): array => ['topLeft' => $w, 'topRight' => $w, 'bottomRight' => $w, 'bottomLeft' => $w]; + +$section = static function (string $id, array $children, array $style = [], ?string $anchor = null, string $css = ''): array { + $block = ['id' => $id, 'type' => 'section', 'children' => $children, 'style' => $style]; + if (null !== $anchor) { + $block['anchor'] = $anchor; + } + if ('' !== $css) { + $block['css'] = $css; + } + + return $block; +}; + +$row = static function (string $id, array $children, array $design = [], array $style = [], string $css = ''): array { + $block = ['id' => $id, 'type' => 'row', 'children' => $children]; + if ([] !== $design) { + $block['layout'] = ['design' => $design]; + } + if ([] !== $style) { + $block['style'] = $style; + } + if ('' !== $css) { + $block['css'] = $css; + } + + return $block; +}; + +/** Zwei Spalten auf dem Desktop, eine darunter. */ +$zweiSpalten = ['desktop' => ['columns' => 'two'], 'tablet' => ['columns' => 'one'], 'mobile' => ['columns' => 'one']]; + +/** Eine Zeile, die nebeneinander stellt statt zu rastern. */ +$zeile = static function (string $id, array $children, string $gap, array $extra = [], array $mobil = [], array $tablet = [], string $css = '') use ($row): array { + $style = ['desktop' => ['display' => 'flex', 'alignItems' => 'center', 'gap' => $gap, 'margin' => ['top' => '0px'], ...$extra]]; + if ([] !== $tablet) { + $style['tablet'] = $tablet; + } + if ([] !== $mobil) { + $style['mobile'] = $mobil; + } + + return $row($id, $children, [], $style, $css); +}; + +/** Wie $zeile, aber als Spalte: nur eine Spalte trägt eine Fläche (Zeilen sind im Kern durchsichtig). */ +$karte = static function (string $id, array $children, string $gap, array $extra = [], array $mobil = [], array $tablet = [], string $css = '') use (&$zeile): array { + $block = $zeile($id, $children, $gap, $extra, $mobil, $tablet, $css); + $block['type'] = 'column'; + + return $block; +}; + +$column = static function (string $id, array $children, array $style = [], string $css = '', string $sichtbar = 'all'): array { + $block = ['id' => $id, 'type' => 'column', 'children' => $children]; + if ([] !== $style) { + $block['style'] = $style; + } + if ('' !== $css) { + $block['css'] = $css; + } + if ('all' !== $sichtbar) { + $block['layout'] = ['visibility' => $sichtbar]; + } + + return $block; +}; + +$heading = static function (string $id, string $text, int $level, array $style = [], string $css = ''): array { + $block = ['id' => $id, 'type' => 'heading', 'props' => ['text' => $text, 'level' => $level]]; + if ([] !== $style) { + $block['style'] = $style; + } + if ('' !== $css) { + $block['css'] = $css; + } + + return $block; +}; + +$text = static function (string $id, string $inhalt, array $style = [], string $css = '', string $sichtbar = 'all'): array { + $block = ['id' => $id, 'type' => 'text', 'props' => ['text' => $inhalt]]; + if ([] !== $style) { + $block['style'] = $style; + } + if ('' !== $css) { + $block['css'] = $css; + } + if ('all' !== $sichtbar) { + $block['layout'] = ['visibility' => $sichtbar]; + } + + return $block; +}; + +/** Eine reine Fläche: Striche, Linien. */ +$flaeche = static function (string $id, array $style, string $css = '', string $sichtbar = 'all'): array { + $block = ['id' => $id, 'type' => 'spacer', 'props' => ['size' => 'small'], 'style' => $style]; + if ('' !== $css) { + $block['css'] = $css; + } + if ('all' !== $sichtbar) { + $block['layout'] = ['visibility' => $sichtbar]; + } + + return $block; +}; + +$bild = static function (string $id, array $eintrag, string $alt, array $style = [], ?string $href = null, string $css = ''): array { + $gross = end($eintrag['variants']); + $props = [ + 'src' => $gross['src'], 'alt' => $alt, 'decorative' => '' === $alt, 'width' => $gross['width'], 'height' => $gross['height'], + 'mediaId' => $eintrag['id'], + 'sources' => array_map(static fn (array $v): array => ['src' => $v['src'], 'width' => $v['width']], $eintrag['variants']), + ]; + if (null !== $href) { + $props['href'] = $href; + $props['click'] = 'link'; + } + $block = ['id' => $id, 'type' => 'image', 'props' => $props, 'style' => $style]; + if ('' !== $css) { + $block['css'] = $css; + } + + return $block; +}; + +$symbol = static function (string $id, string $name, int $groesse, array $style = []): array { + return ['id' => $id, 'type' => 'icon', 'props' => ['icon' => $name, 'size' => $groesse, 'decorative' => true, 'label' => ''], 'style' => $style]; +}; + +/** + * Ein Button. Der Pfeil des Kerns zeigt schräg nach oben; um 45 Grad gedreht zeigt er nach + * rechts wie in der Vorlage. Alle heben sich beim Überfahren leicht an. + * + * @param string $art rot (Theme), glas (durchsichtig auf Bild), weiss, dunkel + */ +$knopf = static function (string $id, string $inhalt, string $href, string $art = 'rot', bool $pfeil = true, array $style = [], string $sichtbar = 'all'): array { + $farbe = [ + 'rot' => '', + 'glas' => "background:rgba(255,255,255,.12);color:#fff;box-shadow:inset 0 0 0 1px rgba(255,255,255,.5);\n&:hover{background:rgba(255,255,255,.22);color:#fff}\n", + 'weiss' => "background:#fff;color:#17221a;\n&:hover{background:#eef5e9;color:#17221a}\n", + 'dunkel' => "background:#17221a;color:#fff;\n&:hover{background:#2f6b22;color:#fff}\n", + 'linie' => "background:transparent;color:#fff;box-shadow:inset 0 0 0 1px rgba(255,255,255,.35);\n&:hover{background:rgba(255,255,255,.1);color:#fff}\n", + ][$art]; + $css = "gap:12px;min-height:58px;padding:0 30px;margin-top:0;transition:transform .2s ease,box-shadow .2s ease,background-color .2s ease;\n" + .$farbe + ."&:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(0,0,0,.18)}\n" + .($pfeil ? "& .button-arrow svg{transform:rotate(45deg)}\n& .button-arrow{display:inline-flex}" : '& .button-arrow{display:none}'); + $block = ['id' => $id, 'type' => 'button', 'props' => ['text' => $inhalt, 'href' => $href], 'css' => $css]; + if ([] !== $style) { + $block['style'] = $style; + } + if ('all' !== $sichtbar) { + $block['layout'] = ['visibility' => $sichtbar]; + } + + return $block; +}; + +/** + * Setzt die Einblendungen nach einer Liste. + * + * @param array $plan Block-ID => [Art, Verzögerung] + */ +$einblenden = static function (array $dokument, array $plan): array { + $gehen = function (array $bloecke) use (&$gehen, $plan): array { + foreach ($bloecke as $i => $block) { + if (isset($plan[$block['id'] ?? ''])) { + [$art, $verzug] = [...$plan[$block['id']], 'none']; + $bloecke[$i]['layout'] = [...($block['layout'] ?? []), 'effects' => ['entrance' => $art, 'delay' => $verzug]]; + } + if (isset($block['children'])) { + $bloecke[$i]['children'] = $gehen($block['children']); + } + } + + return $bloecke; + }; + $dokument['blocks'] = $gehen($dokument['blocks']); + + return $dokument; +}; + +// Wiederkehrende Gestaltungswerte der Vorlage. +$h2Stil = [ + 'desktop' => ['fontSize' => '64px', 'fontWeight' => '800', 'lineHeight' => 0.98, 'letterSpacing' => '0px', 'textTransform' => 'uppercase', 'color' => '@tinte', 'margin' => ['top' => '18px', 'bottom' => '28px']], + 'tablet' => ['fontSize' => '46px'], + 'mobile' => ['fontSize' => '38px', 'margin' => ['top' => '14px', 'bottom' => '22px']], +]; +$h3Stil = static fn (string $groesse, string $farbe = '@tinte', string $unten = '10px'): array => [ + 'desktop' => ['fontSize' => $groesse, 'fontWeight' => '800', 'lineHeight' => 1.0, 'letterSpacing' => '0px', 'textTransform' => 'uppercase', 'color' => $farbe, 'margin' => ['top' => '0px', 'bottom' => $unten]], +]; +$fliess = static fn (string $groesse = '17px', string $farbe = '@text', string $unten = '18px', float $zeile = 1.7): array => [ + 'desktop' => ['fontSize' => $groesse, 'lineHeight' => $zeile, 'color' => $farbe, 'margin' => ['top' => '0px', 'bottom' => $unten]], +]; +$em = '& em{font-style:normal;color:#8fd16f}'; +$linkCss = "& a{color:#2f6b22;text-decoration:underline;text-underline-offset:3px}\n& a:hover{color:#1f4a16}"; +$emGruen = '& em{font-style:normal;color:#2f6b22}'; + +/** Die Kleinzeile in Versalien mit dem kurzen Strich davor („— LEISTUNGEN“), auf Wunsch auch dahinter. */ +$kleinzeile = static function (string $id, string $inhalt, string $farbe = '@rot', bool $beidseitig = false, string $unten = '0px') use ($text, $zeile, $flaeche): array { + $strich = static fn (string $sid): array => $flaeche($sid, ['desktop' => ['width' => '32px', 'height' => '2px', 'backgroundColor' => $farbe, 'flexShrink' => 0, 'margin' => ['top' => '0px', 'right' => '0px', 'bottom' => '0px', 'left' => '0px']]], 'min-height:0'); + $kinder = [$strich($id.'-strich'), $text($id.'-text', $inhalt, ['desktop' => [ + 'fontFamily' => 'heading', 'fontSize' => '17px', 'fontWeight' => '700', 'letterSpacing' => '0.2em', 'lineHeight' => 1.2, + 'textTransform' => 'uppercase', 'color' => $farbe, 'margin' => ['top' => '0px', 'bottom' => '0px'], + ]])]; + if ($beidseitig) { + $kinder[] = $strich($id.'-strich-2'); + } + + return $zeile($id, $kinder, '12px', ['justifyContent' => $beidseitig ? 'center' : 'flex-start', 'margin' => ['top' => '0px', 'bottom' => $unten]]); +}; + +/** Ein Symbol im grünen Kreis (Kontaktkarten, Direkter Draht). */ +$kreis = static fn (string $id, string $icon, string $groesse = '48px') => ['id' => $id, 'type' => 'column', 'children' => [ + ['id' => $id.'-icon', 'type' => 'icon', 'props' => ['icon' => $icon, 'size' => 20, 'decorative' => true, 'label' => ''], 'style' => ['desktop' => ['color' => '@papier']]], +], 'style' => ['desktop' => ['display' => 'flex', 'alignItems' => 'center', 'justifyContent' => 'center', 'width' => $groesse, 'height' => $groesse, 'flexShrink' => 0, 'backgroundColor' => '@gruen', 'borderRadius' => ['topLeft' => '50%', 'topRight' => '50%', 'bottomRight' => '50%', 'bottomLeft' => '50%']]]]; + +// Ein Link über die ganze Karte: Die Karte ist positioniert, der Text darin nicht, also spannt +// das ::after des Links die ganze Karte auf. Ein Link, ein Name, ganze Fläche klickbar. +$ganzeKarte = "position:relative;\n& a{color:inherit;text-decoration:none}\n& a::after{content:'';position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit}\n& a:focus-visible{outline:none}\n&:focus-within{outline:3px solid #2f6b22;outline-offset:3px}"; + +// --------------------------------------------------------------------------------------------- +// Website, Gestaltung, Medien +// --------------------------------------------------------------------------------------------- + +$db->insert('website', ['id' => 'default', 'name' => $kurz, 'default_locale' => 'de', 'theme' => '{}']); + +$theme->save( + [ + ['key' => 'gruen', 'name' => 'Grün (Akzent)', 'value' => '#2f6b22'], + ['key' => 'gruen-dunkel', 'name' => 'Grün dunkel (Links beim Überfahren)', 'value' => '#1f4a16'], + ['key' => 'hellgruen', 'name' => 'Hellgrün (auf Dunkel)', 'value' => '#8fd16f'], + ['key' => 'rot', 'name' => 'Rot (Knöpfe, Kleinzeilen)', 'value' => '#b71c22'], + ['key' => 'rot-dunkel', 'name' => 'Rot dunkel (Knöpfe beim Überfahren)', 'value' => '#931419'], + ['key' => 'tinte', 'name' => 'Schrift', 'value' => '#17221a'], + ['key' => 'nacht', 'name' => 'Nachtgrün (Leiste, Referenzen)', 'value' => '#14201a'], + ['key' => 'fuss', 'name' => 'Fuß', 'value' => '#0f1813'], + ['key' => 'mint', 'name' => 'Hellgrün (Seitengrund)', 'value' => '#f3f8ef'], + ['key' => 'chip', 'name' => 'Hellgrün (Flächen)', 'value' => '#eef5e9'], + ['key' => 'linie', 'name' => 'Linien', 'value' => '#dce8d4'], + ['key' => 'text', 'name' => 'Fließtext', 'value' => '#55635a'], + ['key' => 'text-stark', 'name' => 'Fließtext kräftig', 'value' => '#3a483d'], + ['key' => 'auf-dunkel', 'name' => 'Schrift auf Dunkel', 'value' => '#b9c7b5'], + ['key' => 'papier', 'name' => 'Weiß', 'value' => '#ffffff'], + ], + [ + ['key' => 'body', 'name' => 'Fließtext', 'family' => 'Barlow', 'source' => 'google', 'weights' => [400, 600, 700], 'fallback' => 'sans-serif'], + ['key' => 'heading', 'name' => 'Überschriften', 'family' => 'Barlow Condensed', 'source' => 'google', 'weights' => [700, 800], 'fallback' => 'sans-serif'], + ], + ['fontFamily' => 'body', 'headingFontFamily' => 'heading', 'fontSize' => '16px', 'lineHeight' => 1.6, 'color' => '@tinte', 'backgroundColor' => '@mint', 'linkColor' => '@gruen', 'containerWidth' => '1280px', 'headingScale' => 1.25, 'linkUnderline' => false, 'imageRadius' => '0px'], + ['shape' => 'pill', 'appearance' => 'solid', 'size' => 'normal', 'fontFamily' => 'heading', 'fontSize' => 19, 'fontWeight' => 700, 'letterSpacing' => 1.5, 'textTransform' => 'uppercase', 'backgroundColor' => '@rot', 'color' => '@papier', 'hoverBackgroundColor' => '@rot-dunkel', 'hoverColor' => '@papier'], +); +echo "Farben, Schriften und Buttons gesetzt\n"; + +$medien = []; +foreach ([ + 'logo' => ['logo.png', 'Garten- und Landschaftsbau Hüfner GmbH'], + 'favicon' => ['favicon.png', 'Baum aus dem Hüfner-Logo'], + 'hero' => ['hero-pool-stufen.jpg', 'Pool mit Sitzstufen in Anthrazit und Keramikumrandung'], + 'pool-stufen' => ['pool-stufen.jpg', 'Pool mit Sitzstufen und Keramikumrandung'], + 'plattenweg' => ['plattenweg.jpg', 'Plattenweg im Rasen entlang eines Neubaus'], + 'pool-fachwerk' => ['pool-fachwerk.jpg', 'Pool mit Natursteinterrasse am Fachwerkhaus'], + 'terrasse' => ['terrasse.jpg', 'Keramikterrasse am Pool'], + 'pflaster-verlegt' => ['pflaster-verlegt.jpg', 'Neu verlegtes Pflaster in Grau- und Brauntönen'], + 'naturstein' => ['naturstein.jpg', 'Natursteinmauer mit Trittplatten im Rasen'], + 'rasen' => ['rasen.jpg', 'Frisch verlegter Rollrasen'], + 'pool-garten' => ['pool-garten.jpg', 'Pool mit Hortensien und Gartenanlage'], + 'pool-terrasse' => ['pool-terrasse.jpg', 'Pool mit Natursteinterrasse und Gabionen'], + 'sichtschutz' => ['sichtschutz.jpg', 'Moderner Sichtschutz aus Aluminium'], + 'pflaster' => ['pflaster.jpg', 'Hanggarten mit Natursteinmauer und Treppe'], + 'baustelle' => ['poolbau-baustelle.jpg', 'Poolbau im Rohbau mit Minibagger und Radlader im Hintergrund'], + 'team' => ['team.jpg', 'Das Hüfner-Team in Arbeitsjacken mit Firmenlogo'], +] as $schluessel => [$datei, $alt]) { + $pfad = rtrim($assets, '/\\').'/'.$datei; + if (!is_file($pfad)) { + fwrite(STDERR, "Bild fehlt: $pfad\n"); + exit(1); + } + $eintrag = $media->upload(new UploadedFile($pfad, basename($datei), null, null, true)); + $media->update($eintrag['id'], ['title' => pathinfo($datei, PATHINFO_FILENAME), 'alt' => $alt, 'archived' => false, 'version' => $eintrag['version']]); + $medien[$schluessel] = $media->find($eintrag['id']); + echo "Bild übernommen: $datei\n"; +} + +// --------------------------------------------------------------------------------------------- +// Formular +// --------------------------------------------------------------------------------------------- + +$forms->save('anfrage', 'Projektanfrage', [ + ['name' => 'name', 'type' => 'text', 'label' => 'Name', 'required' => true, 'help' => 'Vor- und Nachname'], + ['name' => 'telefon', 'type' => 'phone', 'label' => 'Telefon', 'required' => false, 'help' => 'Für Rückfragen'], + ['name' => 'email', 'type' => 'email', 'label' => 'E-Mail', 'required' => true], + ['name' => 'leistung', 'type' => 'select', 'label' => 'Leistung', 'required' => true, 'options' => ['Pool', 'Terrasse', 'Pflaster', 'Natursteine', 'Komplette Außenanlage', 'Sonstiges']], + ['name' => 'vorhaben', 'type' => 'textarea', 'label' => 'Ihr Vorhaben', 'required' => true, 'help' => 'Kurze Beschreibung, Größe der Fläche, Wunschtermin …'], + ['name' => 'datenschutz', 'type' => 'consent', 'label' => 'Ich stimme der Verarbeitung meiner Angaben gemäß Datenschutzhinweisen zu.'], +], ['recipient' => $mail, 'subject' => 'Neue Projektanfrage über die Website', 'success' => 'Vielen Dank! Ihre Anfrage ist bei uns angekommen. Wir melden uns zeitnah und vereinbaren einen Termin bei Ihnen vor Ort.', 'replyToField' => 'email', 'buttonLabel' => 'Anfrage absenden'], 0); +echo "Formular angelegt: anfrage\n"; + +// --------------------------------------------------------------------------------------------- +// Kopfbereich: dunkle Leiste, darunter der weiße Kopf mit Menü, Profilen und Knopf +// --------------------------------------------------------------------------------------------- + +$leistenLink = "& a{color:#fff;text-decoration:none;transition:color .2s}\n& a:hover{color:#8fd16f}"; +$leistenPunkt = static fn (string $id, string $icon, string $inhalt, string $sichtbar = 'all') => $zeile($id, [ + $symbol($id.'-icon', $icon, 16, ['desktop' => ['color' => '#8fcb7c']]), + $text($id.'-text', $inhalt, ['desktop' => ['fontSize' => '14px', 'lineHeight' => 1.4, 'color' => '#c9d6c5', 'margin' => ['bottom' => '0px']]], $leistenLink), +], '8px') + ('all' === $sichtbar ? [] : ['layout' => ['visibility' => $sichtbar]]); + +$kopf = [ + 'schemaVersion' => $SCHEMA, 'title' => 'Kopfbereich', 'description' => 'Erscheint auf jeder Seite über dem Inhalt.', + 'blocks' => [ + $section('kopf-leiste', [ + $zeile('kopf-leiste-zeile', [ + $zeile('kopf-leiste-kontakt', [ + $leistenPunkt('kopf-telefon', 'phone', ''.$telefon.''), + $leistenPunkt('kopf-mail', 'mail', ''.$mail.'', 'hide-mobile'), + $leistenPunkt('kopf-adresse', 'pin', $strasse.', '.$plz.' '.$ort, 'desktop'), + ], '28px', ['flexWrap' => 'wrap', 'rowGap' => '8px']), + ['id' => 'kopf-leiste-profile', 'type' => 'social', 'props' => ['size' => 16, 'shape' => 'plain', 'layout' => 'horizontal', 'labels' => true, 'networks' => ['instagram', 'facebook']], + 'style' => ['desktop' => ['fontSize' => '15px', 'color' => '#c9d6c5', 'gap' => '24px']], + 'css' => "& a{font-weight:400}\n& a:hover{color:#fff;transform:none}", + 'layout' => ['visibility' => 'hide-mobile']], + ], '28px', ['justifyContent' => 'space-between']), + ], [ + 'desktop' => ['backgroundColor' => '@nacht', 'color' => '#c9d6c5', 'padding' => ['top' => '9px', 'bottom' => '9px']], + 'mobile' => ['padding' => ['top' => '7px', 'bottom' => '7px']], + ]), + $section('kopf-haupt', [ + $zeile('kopf-haupt-zeile', [ + $bild('kopf-logo', $medien['logo'], $kurz.' – zur Startseite', [ + // Feste Breite: sonst bekommt das Logo seine Breite erst nach dem Laden (CLS). + 'desktop' => ['width' => '153px', 'maxWidth' => '153px', 'flexShrink' => 0, 'margin' => $seiten('0px')], + 'mobile' => ['width' => '121px', 'maxWidth' => '121px'], + ], '/', '& img{display:block;width:100%;height:auto;border-radius:0}'), + $column('kopf-navigation', [ + ['id' => 'kopf-menue', 'type' => 'menu', 'props' => ['slot' => 'header', 'layout' => 'horizontal', 'collapse' => 'tablet', 'burgerLabel' => 'icon'], + 'style' => ['desktop' => [ + 'fontFamily' => 'heading', 'fontSize' => '18px', 'fontWeight' => '700', 'letterSpacing' => '0.06em', 'textTransform' => 'uppercase', 'color' => '@tinte', + 'burgerColor' => '@papier', 'burgerBackgroundColor' => '@tinte', 'burgerBorderColor' => '@tinte', 'burgerBorderRadius' => '999px', + ]], + // Unterstrich, der beim Überfahren von links einläuft. Das Klappmenü auf + // Tablet und Telefon liegt als Fläche unter dem ganzen Kopf. + 'css' => "& .menu-list{gap:4px 34px;justify-content:center;align-items:center}\n" + ."& .menu-list a{position:relative;padding:6px 0;text-decoration:none;color:#17221a}\n" + ."& .menu-list a::after{content:'';position:absolute;left:0;right:100%;bottom:0;height:2px;background:#2f6b22;transition:right .25s ease}\n" + ."& .menu-list a:hover::after{right:0}\n" + ."& .menu-burger summary{width:46px;height:46px;display:flex;align-items:center;justify-content:center;padding:0}\n" + ."& .menu-burger-body{position:absolute;left:0;right:0;top:100%;background:#fff;padding:4px 20px 20px;border-top:1px solid #dce8d4;box-shadow:0 18px 30px rgba(20,32,26,.12);font-size:22px}\n" + ."& .menu-burger-body .menu-list{flex-direction:column;align-items:stretch;gap:0}\n" + ."& .menu-burger-body .menu-list a{display:block;padding:14px 0;border-bottom:1px solid #e6efe0}\n" + .'& .menu-burger-body .menu-list a::after{display:none}'], + ], ['desktop' => ['flexGrow' => 1, 'display' => 'flex', 'justifyContent' => 'center'], 'tablet' => ['justifyContent' => 'flex-end', 'order' => 3, 'flexGrow' => 0], 'mobile' => ['justifyContent' => 'flex-end', 'order' => 3, 'flexGrow' => 0]]), + $zeile('kopf-aktionen', [ + ['id' => 'kopf-profile', 'type' => 'social', 'props' => ['size' => 20, 'shape' => 'plain', 'layout' => 'horizontal', 'labels' => false, 'networks' => ['instagram', 'facebook']], + 'style' => ['desktop' => ['color' => '@tinte', 'gap' => '10px']], + 'css' => "& a{width:46px;height:46px;justify-content:center;border-radius:50%;box-shadow:inset 0 0 0 1px #d3e3ca}\n& a:hover{background:#eef5e9;color:#2f6b22}", + 'layout' => ['visibility' => 'hide-mobile']], + $knopf('kopf-knopf', 'Angebot anfragen', '/#kontakt', 'rot', true, [], 'desktop'), + ], '10px', ['flexShrink' => 0], ['margin' => ['left' => 'auto']], ['margin' => ['left' => 'auto']]), + ], '24px', ['justifyContent' => 'space-between', 'minHeight' => '82px'], ['minHeight' => '66px', 'gap' => '12px']), + ], [ + 'desktop' => ['backgroundColor' => '#fffffff5', 'padding' => ['top' => '0px', 'bottom' => '0px'], 'borderWidth' => $nurUnten('1px'), 'borderStyle' => 'solid', 'borderColor' => '@linie'], + ], null, 'box-shadow:0 8px 24px rgba(20,32,26,.06)'), + ], +]; + +// Der rote Knopf im Kopf ist kleiner als die im Inhalt. +$kleinerKnopf = static fn (array $b): array => [...$b, 'css' => str_replace('min-height:58px;padding:0 30px', 'min-height:50px;padding:0 22px;font-size:16px;white-space:nowrap', $b['css'])]; +$kopf['blocks'][1]['children'][0]['children'][2]['children'][1]['css'] = str_replace('min-height:58px;padding:0 30px', 'min-height:46px;padding:0 24px;font-size:17px', $kopf['blocks'][1]['children'][0]['children'][2]['children'][1]['css']); + +// --------------------------------------------------------------------------------------------- +// Fußbereich +// --------------------------------------------------------------------------------------------- + +$fussLink = "& a{color:#b9c7b5;text-decoration:none;transition:color .2s}\n& a:hover{color:#fff}"; +$fussTitel = static fn (string $id, string $inhalt) => $text($id, $inhalt, ['desktop' => [ + 'fontFamily' => 'heading', 'fontSize' => '17px', 'fontWeight' => '700', 'letterSpacing' => '0.14em', 'textTransform' => 'uppercase', 'color' => '@papier', 'margin' => ['bottom' => '16px'], +]]); +$fussListe = static fn (string $id, array $links) => $text($id, implode('
', array_map(static fn (array $l): string => ''.$l[0].'', $links)), [ + 'desktop' => ['fontSize' => '15px', 'lineHeight' => 2.1, 'color' => '@auf-dunkel', 'margin' => ['bottom' => '0px']], +], $fussLink); + +$fuss = [ + 'schemaVersion' => $SCHEMA, 'title' => 'Fußbereich', 'description' => 'Erscheint auf jeder Seite unter dem Inhalt.', + 'blocks' => [ + $section('fuss', [ + $column('fuss-raster', [ + $column('fuss-marke', [ + $column('fuss-logo-flaeche', [ + $bild('fuss-logo', $medien['logo'], $firma, ['desktop' => ['width' => '137px', 'maxWidth' => '137px', 'margin' => $seiten('0px')]], null, '& img{display:block;width:100%;height:auto;border-radius:0}'), + ], ['desktop' => ['display' => 'inline-block', 'backgroundColor' => '@papier', 'borderRadius' => $rund('12px'), 'padding' => ['top' => '12px', 'right' => '16px', 'bottom' => '12px', 'left' => '16px']]]), + $text('fuss-spruch', 'Garten- und Landschaftsbau auf Premium-Niveau – aus Iffezheim für die Region.', ['desktop' => ['maxWidth' => '300px', 'fontSize' => '15px', 'lineHeight' => 1.65, 'color' => '@auf-dunkel', 'margin' => ['top' => '20px', 'bottom' => '20px']]]), + ['id' => 'fuss-profile', 'type' => 'social', 'props' => ['size' => 20, 'shape' => 'plain', 'layout' => 'horizontal', 'labels' => false, 'networks' => ['instagram', 'facebook']], + 'style' => ['desktop' => ['color' => '@auf-dunkel', 'gap' => '10px']], + 'css' => "& a{width:44px;height:44px;justify-content:center;border-radius:50%;box-shadow:inset 0 0 0 1px #2c3a2f}\n& a:hover{color:#fff;box-shadow:inset 0 0 0 1px #8fd16f}"], + ], ['desktop' => ['display' => 'flex', 'flexDirection' => 'column', 'alignItems' => 'flex-start']]), + $column('fuss-leistungen', [ + $fussTitel('fuss-leistungen-titel', 'Leistungen'), + $fussListe('fuss-leistungen-liste', [['Pools', '/#leistungen'], ['Terrassen', '/#leistungen'], ['Pflaster', '/#leistungen'], ['Natursteine', '/#leistungen'], ['Außenanlagen', '/#leistungen']]), + ]), + $column('fuss-unternehmen', [ + $fussTitel('fuss-unternehmen-titel', 'Unternehmen'), + $fussListe('fuss-unternehmen-liste', [['Über uns', '/#ueber-uns'], ['Referenzen', '/#projekte'], ['Ablauf', '/#ablauf'], ['Karriere', '/#karriere'], ['Kontakt', '/#kontakt']]), + ]), + $column('fuss-kontakt', [ + $fussTitel('fuss-kontakt-titel', 'Kontakt'), + $text('fuss-kontakt-text', 'Garten- und Landschaftsbau
Hüfner GmbH
'.$strasse.'
'.$plz.' '.$ort.'

'.$telefon.'
'.$mail.'', [ + 'desktop' => ['fontSize' => '15px', 'lineHeight' => 1.7, 'color' => '@auf-dunkel', 'margin' => ['bottom' => '0px']], + ], $fussLink."\n& a{overflow-wrap:anywhere}"), + ]), + ], [ + 'desktop' => ['display' => 'grid', 'gridColumns' => 4, 'gap' => '48px', 'padding' => ['top' => '80px', 'bottom' => '48px']], + 'tablet' => ['gridColumns' => 2], + 'mobile' => ['gridColumns' => 1, 'gap' => '36px', 'padding' => ['top' => '56px', 'bottom' => '36px']], + ]), + $zeile('fuss-unten', [ + $text('fuss-copyright', '© 2026 '.$firma, ['desktop' => ['fontSize' => '14px', 'color' => '@auf-dunkel', 'margin' => ['bottom' => '0px']]]), + $zeile('fuss-links', [ + ['id' => 'fuss-rechtliches', 'type' => 'legal', 'props' => ['label' => 'Rechtliches'], + 'style' => ['desktop' => ['fontSize' => '14px', 'gap' => '24px', 'color' => '@auf-dunkel']], + 'css' => $fussLink], + $text('fuss-agentur', 'Website by Kant-IT Solutions', ['desktop' => ['fontSize' => '14px', 'margin' => ['bottom' => '0px']]], $fussLink), + ], '24px', ['flexWrap' => 'wrap'], ['rowGap' => '10px', 'columnGap' => '18px']), + ], '24px', ['justifyContent' => 'space-between', 'flexWrap' => 'wrap', 'rowGap' => '12px', 'borderWidth' => $nurOben('1px'), 'borderStyle' => 'solid', 'borderColor' => '#22302a', 'padding' => ['top' => '24px', 'bottom' => '36px']], + ['flexDirection' => 'column', 'alignItems' => 'flex-start']), + ], [ + 'desktop' => ['backgroundColor' => '@fuss', 'color' => '@auf-dunkel', 'padding' => ['top' => '0px', 'bottom' => '0px']], + ]), + ], +]; + +$partials->create('header', 'default', 'Kopfbereich', $kopf); +$partials->create('footer', 'default', 'Fußbereich', $fuss); +echo "Kopf- und Fußbereich angelegt\n"; + +// --------------------------------------------------------------------------------------------- +// Startseite +// --------------------------------------------------------------------------------------------- + +/** + * Eine Bildkachel: Foto über die ganze Fläche, dunkler Verlauf von unten, Text darauf. Beim + * Überfahren zoomt nur das Foto, die Kachel bekommt Schatten. Mit $href ist das Foto der Link + * (sein Alternativtext ist dann der Name des Links), der Text darüber lässt Klicks durch. + */ +$kachel = static function (string $id, array $foto, string $alt, array $inhalt, string $innen, ?string $href = null, array $hoehe = [], string $verlauf = '', bool $mehr = false) use ($column, $bild, $seiten, $rund): array { + return $column($id, [ + // Foto, Verlauf und Fokusrahmen stehen einmal im CSS des Abschnitts ($kachelFlaeche), + // nicht in jeder Kachel: sonst wird die Seite über das HTML-Budget von 150 KB schwer. + $bild($id.'-foto', $foto, $alt, ['desktop' => ['position' => 'absolute', 'top' => '0px', 'right' => '0px', 'bottom' => '0px', 'left' => '0px', 'margin' => $seiten('0px'), 'zIndex' => 0]], $href), + ...$inhalt, + ], [ + 'desktop' => ['position' => 'relative', 'overflow' => 'hidden', 'display' => 'flex', 'flexDirection' => 'column', 'justifyContent' => 'flex-end', 'backgroundColor' => '#2a372c', 'color' => '@papier', + 'borderRadius' => $rund('18px'), 'padding' => $seiten($innen), ...($hoehe['desktop'] ?? [])], + ...array_diff_key($hoehe, ['desktop' => true]), + ], "transition:box-shadow .3s ease;\n&:hover{box-shadow:0 18px 40px rgba(20,30,22,.22)}\n&:hover img{transform:scale(1.06)}\n&:focus-within img{transform:scale(1.06)}".($mehr ? "\n& .block-row{position:relative;pointer-events:none;transition:gap .25s ease}\n&:hover .block-row{gap:14px}" : '')); +}; + +/** Was alle Kacheln eines Abschnitts teilen; die Kacheln sind dort die einzigen Bilder. */ +$kachelFlaeche = "& .block-image img{width:100%;height:100%;object-fit:cover;border-radius:0;transition:transform .7s cubic-bezier(.2,.7,.2,1)}\n" + ."& .image-link{height:100%}\n" + ."& .image-link:focus-visible{outline:3px solid #8fd16f;outline-offset:-8px}\n" + ."& .block-image::after{content:'';position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(0deg,rgba(10,18,13,.88) 0%,rgba(10,18,13,0) 58%);pointer-events:none}\n" + ."& .block-image+h3{position:relative;pointer-events:none}\n" + ."& .block-image~.block-text{position:relative;pointer-events:none}\n" + .'& .block-image~h3{position:relative;pointer-events:none}'; + +$kachelTitel = static fn (string $id, string $titel, string $groesse = '30px') => $heading($id, $titel, 3, [ + 'desktop' => ['fontSize' => $groesse, 'fontWeight' => '800', 'lineHeight' => 1.0, 'letterSpacing' => '0px', 'textTransform' => 'uppercase', 'color' => '@papier', 'margin' => ['top' => '4px', 'bottom' => '6px']], + 'mobile' => ['fontSize' => '30px'], +]); +$kachelSatz = static fn (string $id, string $satz, string $groesse = '15px', string $unten = '0px', string $breite = 'none') => $text($id, $satz, ['desktop' => ['fontSize' => $groesse, 'lineHeight' => 1.5, 'color' => '#dce6d8', 'maxWidth' => $breite, 'margin' => ['bottom' => $unten]]]); +$kachelKlein = static fn (string $id, string $klein, string $groesse = '13px') => $text($id, $klein, ['desktop' => ['fontSize' => $groesse, 'fontWeight' => '600', 'letterSpacing' => '0.06em', 'textTransform' => 'uppercase', 'color' => '@hellgruen', 'margin' => ['bottom' => '2px']]]); + +/** Ein Vorteil im Band unter dem Hero; die Trennlinien hängen am Platz im Raster. */ +$vorteil = static function (int $n, array $icon, string $titel, string $satz) use ($zeile, $text): array { + $rahmen = static fn (bool $oben, bool $links): array => ['borderWidth' => ['top' => $oben ? '1px' : '0px', 'right' => '0px', 'bottom' => '0px', 'left' => $links ? '1px' : '0px'], 'borderStyle' => 'solid', 'borderColor' => '#ffffff24']; + // Desktop: vier nebeneinander, Linie links ab dem zweiten. Darunter zwei mal zwei. + $zwei = $rahmen($n > 2, 0 === $n % 2); + $mobil = ['flexDirection' => 'column', 'alignItems' => 'flex-start', 'gap' => '8px', 'padding' => ['top' => '16px', 'right' => '16px', 'bottom' => '16px', 'left' => '16px'], ...$zwei]; + + return $zeile('vorteil-'.$n, [ + $icon, + $text('vorteil-'.$n.'-text', ''.$titel.''.$satz, [ + 'desktop' => ['fontSize' => '14px', 'lineHeight' => 1.45, 'color' => '@auf-dunkel', 'margin' => ['bottom' => '0px']], + 'mobile' => ['fontSize' => '12.5px'], + ], "& strong{display:block;margin-bottom:2px;font-size:16px;color:#fff}"), + ], '14px', ['padding' => ['top' => '24px', 'right' => '32px', 'bottom' => '24px', 'left' => '32px'], ...$rahmen(false, $n > 1)], $mobil, $zwei); +}; + +$vorteilIcon = static fn (int $n, string $name) => $symbol('vorteil-'.$n.'-icon', $name, 32, ['desktop' => ['color' => '@hellgruen', 'flexShrink' => 0]]); +// Der LKW fehlt im Symbolsatz des Kerns; der Pfad ist der aus der Vorlage. +$lkw = ['id' => 'vorteil-3-icon', 'type' => 'html', 'props' => ['html' => ''], + 'style' => ['desktop' => ['flexShrink' => 0]], 'css' => '& svg{display:block}']; + +$haken = static fn (string $id, string $inhalt) => $zeile($id, [ + $symbol($id.'-icon', 'check', 24, ['desktop' => ['color' => '@gruen', 'flexShrink' => 0]]), + $text($id.'-text', $inhalt, ['desktop' => ['fontSize' => '16px', 'fontWeight' => '600', 'lineHeight' => 1.4, 'color' => '@tinte', 'margin' => ['bottom' => '0px']]]), +], '10px'); + +$chip = static fn (string $id, string $inhalt) => $text($id, $inhalt, [ + 'desktop' => ['fontSize' => '15px', 'fontWeight' => '600', 'lineHeight' => 1.3, 'color' => '@tinte', 'backgroundColor' => '@chip', 'borderRadius' => $rund('999px'), 'padding' => ['top' => '10px', 'right' => '18px', 'bottom' => '10px', 'left' => '18px'], 'margin' => ['bottom' => '0px']], +], "transition:background-color .2s ease,color .2s ease;\n&:hover{background-color:#2f6b22;color:#fff}"); + +$schritt = static fn (int $n, string $titel, string $satz, string $farbe = '@gruen') => $column('schritt-'.$n, [ + $text('schritt-'.$n.'-nummer', sprintf('%02d', $n), [ + 'desktop' => ['display' => 'flex', 'alignItems' => 'center', 'justifyContent' => 'center', 'width' => '72px', 'height' => '72px', 'margin' => ['top' => '0px', 'right' => 'auto', 'bottom' => '24px', 'left' => 'auto'], + 'borderRadius' => $rund('50%'), 'backgroundColor' => $farbe, 'color' => '@papier', 'fontFamily' => 'heading', 'fontSize' => '28px', 'fontWeight' => '800', 'lineHeight' => 1.0], + ], 'position:relative;z-index:1;box-shadow:0 0 0 10px #f3f8ef;transition:transform .3s cubic-bezier(.2,.7,.2,1)'), + $heading('schritt-'.$n.'-titel', $titel, 3, $h3Stil('26px')), + $text('schritt-'.$n.'-satz', $satz, ['desktop' => ['maxWidth' => '260px', 'fontSize' => '16px', 'lineHeight' => 1.6, 'color' => '@text', 'margin' => ['top' => '0px', 'right' => 'auto', 'bottom' => '0px', 'left' => 'auto']]]), +], ['desktop' => ['textAlign' => 'center']], '&:hover [id="schritt-'.$n.'-nummer"]{transform:scale(1.08)}'); + +$geraet = static fn (string $id, string $titel, string $satz) => $text($id, ''.$titel.''.$satz, [ + 'desktop' => ['fontSize' => '14px', 'lineHeight' => 1.5, 'color' => '@text', 'backgroundColor' => '@mint', 'borderRadius' => $rund('12px'), 'padding' => $seiten('18px'), 'margin' => ['bottom' => '0px']], +], "& strong{display:block;font-size:16px;color:#17221a;hyphens:auto;overflow-wrap:break-word}"); + +$kennzahl = static fn (string $id, string $zahl, string $satz, bool $linie) => $column($id, [ + $text($id.'-zahl', $zahl, ['desktop' => ['fontFamily' => 'heading', 'fontSize' => '52px', 'fontWeight' => '800', 'lineHeight' => 1.0, 'color' => '@gruen', 'margin' => ['bottom' => '6px']], 'mobile' => ['fontSize' => '40px']]), + $text($id.'-satz', $satz, ['desktop' => ['fontSize' => '15px', 'lineHeight' => 1.4, 'color' => '@text', 'margin' => ['bottom' => '0px']]]), +], $linie ? ['desktop' => ['borderWidth' => $nurLinks('1px'), 'borderStyle' => 'solid', 'borderColor' => '@linie', 'padding' => ['left' => '24px']], 'mobile' => ['padding' => ['left' => '14px']]] : []); + +$stelle = static fn (string $id, string $titel, string $satz, string $betreff) => $karte($id, [ + $text($id.'-text', ''.$titel.'
'.$satz, [ + 'desktop' => ['fontSize' => '14px', 'lineHeight' => 1.5, 'color' => '#cdebbe', 'margin' => ['bottom' => '0px']], + ], '& strong{font-size:18px;color:#fff}'), + $symbol($id.'-pfeil', 'arrow-right', 20, ['desktop' => ['color' => '@papier', 'flexShrink' => 0]]), +], '16px', [ + 'justifyContent' => 'space-between', 'backgroundColor' => '#ffffff1f', 'borderWidth' => $seiten('1px'), 'borderStyle' => 'solid', 'borderColor' => '#ffffff33', 'borderRadius' => $rund('14px'), + 'padding' => ['top' => '18px', 'right' => '22px', 'bottom' => '18px', 'left' => '22px'], +], [], [], $ganzeKarte."\ntransition:background-color .2s ease;\n&:hover{background-color:rgba(255,255,255,.2)}\n& .block-icon{transition:transform .25s ease}\n&:hover .block-icon{transform:translateX(4px)}"); + +$kontaktKarte = static fn (string $id, string $icon, string $klein, string $wert, ?string $href) => $karte($id, [ + $kreis($id.'-kreis', $icon), + $text($id.'-text', $klein.'
'.(null === $href ? $wert : ''.$wert.'').'', [ + 'desktop' => ['fontSize' => '13px', 'lineHeight' => 1.5, 'color' => '#6a766c', 'minWidth' => '0', 'margin' => ['bottom' => '0px']], + ], '& strong{display:block;font-size:18px;color:#17221a;overflow-wrap:anywhere}'), +], '16px', [ + 'backgroundColor' => '@papier', 'borderRadius' => $rund('14px'), 'padding' => ['top' => '16px', 'right' => '18px', 'bottom' => '16px', 'left' => '18px'], + 'shadowY' => '6px', 'shadowBlur' => '18px', 'shadowColor' => '#14201a0d', +], [], [], null === $href ? '' : $ganzeKarte."\ntransition:transform .2s ease,box-shadow .2s ease;\n&:hover{transform:translateY(-2px);box-shadow:0 14px 30px rgba(20,32,26,.1)}"); + +$instaBild = static fn (string $id, array $foto, string $was) => $bild($id, $foto, $was.' – Beiträge auf Instagram ansehen', ['desktop' => ['margin' => $seiten('0px'), 'borderRadius' => $rund('12px'), 'overflow' => 'hidden']], $instagram, + "& img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:0;transition:transform .5s cubic-bezier(.2,.7,.2,1)}\n&:hover img{transform:scale(1.05)}\n& .image-link:focus-visible{outline:3px solid #2f6b22;outline-offset:-6px}"); + +// Formular im Zuschnitt der Vorlage: volle Breite statt der 640 px des Kerns, Name und Telefon +// nebeneinander, Felder hellgrün auf weiß. +$formularCss = '& .block-form{max-width:none;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:20px;row-gap:20px} +& .block-form>.form-field{grid-column:1/-1} +& .block-form>.cms-button{grid-column:1/-1} +& .block-form>.form-error-summary{grid-column:1/-1} +& .block-form>.form-success{grid-column:1/-1} +& .block-form>.form-missing{grid-column:1/-1} +& .block-form>[data-label="Name"]{grid-column:span 1} +& .block-form>[data-label="Telefon"]{grid-column:span 1} +& .form-field{align-content:start} +& .form-field label{font-size:14px;font-weight:700;letter-spacing:0.02em;color:#17221a} +& .form-field input{background:#f8fbf6;border:1px solid #cfe0c5;border-radius:10px;padding:14px 16px;font-size:16px;color:#17221a} +& .form-field select{background:#f8fbf6;border:1px solid #cfe0c5;border-radius:10px;padding:14px 16px;font-size:16px;color:#17221a} +& .form-field textarea{background:#f8fbf6;border:1px solid #cfe0c5;border-radius:10px;padding:14px 16px;font-size:16px;color:#17221a;min-height:140px} +& .form-field input:focus{border-color:#2f6b22} +& .form-field textarea:focus{border-color:#2f6b22} +& .field-note{font-size:13px;color:#55635a;opacity:1} +& .check-row label{font-weight:400;font-size:14px;line-height:1.6;color:#55635a} +& .check-row input{accent-color:#2f6b22} +& .cms-button{width:100%;justify-content:center;min-height:58px;transition:transform .2s ease,box-shadow .2s ease,background-color .2s ease} +& .cms-button:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(0,0,0,.18)} +& .cms-button .button-arrow{display:none}'; + +$abschnitt = static fn (string $farbe = '', array $extra = []) => [ + 'desktop' => [...('' === $farbe ? [] : ['backgroundColor' => $farbe]), 'padding' => ['top' => '128px', 'bottom' => '128px'], ...($extra['desktop'] ?? [])], + 'tablet' => ['padding' => ['top' => '80px', 'bottom' => '80px'], ...($extra['tablet'] ?? [])], + 'mobile' => ['padding' => ['top' => '64px', 'bottom' => '64px'], ...($extra['mobile'] ?? [])], +]; + +$startseite = [ + 'schemaVersion' => $SCHEMA, + 'title' => 'Gärten auf Premium-Niveau', + 'description' => 'Garten- und Landschaftsbau auf Premium-Niveau aus Iffezheim: Terrassen, Pools, Pflaster, Natursteine und komplette Außenanlagen – geplant, gebaut und übergeben aus einer Hand.', + 'blocks' => [ + // 1 – Hero: Foto über die ganze Fläche, Verlauf von links und von unten, Text unten links, + // rechts die Karte „Direkter Draht“, darunter das Band mit vier Vorteilen. + $section('hero', [ + $zeile('hero-zeile', [ + $column('hero-text', [ + $heading('hero-titel', 'Gärten auf
Premium-Niveau.', 1, [ + 'desktop' => ['fontSize' => '104px', 'fontWeight' => '800', 'lineHeight' => 0.92, 'letterSpacing' => '-0.01em', 'textTransform' => 'uppercase', 'color' => '@papier', 'margin' => ['bottom' => '0px']], + 'tablet' => ['fontSize' => '72px'], + 'mobile' => ['fontSize' => '50px'], + ], $em), + $text('hero-intro', 'Terrassen, Pools, Pflaster, Natursteine und komplette Außenanlagen – geplant, gebaut und übergeben aus einer Hand. Mit 100 % Detailarbeit.', [ + 'desktop' => ['maxWidth' => '580px', 'fontSize' => '21px', 'lineHeight' => 1.55, 'color' => '#e3ebe0', 'margin' => ['top' => '28px', 'bottom' => '40px']], + 'mobile' => ['fontSize' => '18px', 'margin' => ['top' => '22px', 'bottom' => '30px']], + ]), + $zeile('hero-knoepfe', [ + $knopf('hero-beratung', 'Kostenlose Beratung', '#kontakt', 'rot', true, ['mobile' => ['width' => '100%', 'justifyContent' => 'center']]), + $knopf('hero-referenzen', 'Referenzen ansehen', '#projekte', 'glas', false, ['mobile' => ['width' => '100%', 'justifyContent' => 'center']]), + ], '14px', ['flexWrap' => 'wrap']), + ], ['desktop' => ['flexGrow' => 1, 'flexBasis' => '560px', 'maxWidth' => '760px'], 'mobile' => ['flexBasis' => 'auto']]), + $column('hero-karte', [ + $text('hero-karte-klein', 'Direkter Draht', ['desktop' => ['fontSize' => '13px', 'fontWeight' => '700', 'letterSpacing' => '0.12em', 'textTransform' => 'uppercase', 'color' => '@gruen', 'margin' => ['bottom' => '8px']]]), + $text('hero-karte-titel', 'Vor-Ort-Termin vereinbaren', ['desktop' => ['fontFamily' => 'heading', 'fontSize' => '30px', 'fontWeight' => '800', 'lineHeight' => 1.05, 'textTransform' => 'uppercase', 'color' => '@tinte', 'margin' => ['bottom' => '18px']]]), + $zeile('hero-karte-telefon', [ + $kreis('hero-karte-kreis', 'phone', '44px'), + $text('hero-karte-nummer', 'Rufen Sie uns an
'.$telefon.'', ['desktop' => ['fontSize' => '13px', 'lineHeight' => 1.45, 'color' => '@text', 'margin' => ['bottom' => '0px']]], '& strong{display:block;font-size:20px;color:#17221a}'), + ], '12px', [], [], [], $ganzeKarte), + $text('hero-karte-hinweis', 'Mo–Fr 8–17 Uhr · Sa 8–12 Uhr', ['desktop' => ['fontSize' => '14px', 'lineHeight' => 1.5, 'color' => '@text', 'borderWidth' => $nurOben('1px'), 'borderStyle' => 'solid', 'borderColor' => '#e3ecdd', 'padding' => ['top' => '14px'], 'margin' => ['top' => '14px', 'bottom' => '0px']]], '& strong{color:#17221a}'), + ], ['desktop' => ['flexBasis' => '300px', 'flexShrink' => 0, 'backgroundColor' => '#fffffff2', 'borderRadius' => $rund('16px'), 'padding' => $seiten('24px'), 'shadowY' => '24px', 'shadowBlur' => '60px', 'shadowColor' => '#0000004d']], '', 'desktop'), + ], '40px', ['justifyContent' => 'space-between', 'alignItems' => 'flex-end', 'flexWrap' => 'wrap', 'padding' => ['bottom' => '72px']], ['padding' => ['bottom' => '36px']]), + // Das Band reicht über die ganze Breite; der Abschnitt schneidet ab, was übersteht. + $column('hero-vorteile', [ + $column('hero-vorteile-raster', [ + $vorteil(1, $vorteilIcon(1, 'home'), 'Alles aus einer Hand', 'Planung bis Übergabe'), + $vorteil(2, $vorteilIcon(2, 'star'), '100 % Detailarbeit', 'Saubere Ausführung'), + $vorteil(3, $lkw, 'Eigener Fuhrpark', 'LKW, Bagger & Maschinen'), + $vorteil(4, $vorteilIcon(4, 'pin'), 'Regional vor Ort', 'Iffezheim, Rastatt, Baden-Baden'), + ], [ + 'desktop' => ['display' => 'grid', 'gridColumns' => 4, 'gap' => '0px', 'maxWidth' => '1280px', 'margin' => ['left' => 'auto', 'right' => 'auto']], + 'tablet' => ['gridColumns' => 2], + 'mobile' => ['gridColumns' => 2], + ]), + ], ['desktop' => ['backgroundColor' => '#0c140f8c', 'borderWidth' => $nurOben('1px'), 'borderStyle' => 'solid', 'borderColor' => '#ffffff24']], + 'margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);backdrop-filter:blur(6px)'), + ], [ + 'desktop' => ['position' => 'relative', 'overflow' => 'hidden', 'display' => 'flex', 'flexDirection' => 'column', 'justifyContent' => 'flex-end', 'minHeight' => '800px', 'backgroundColor' => '#2a372c', + 'backgroundImage' => $medien['hero']['id'], 'backgroundSize' => 'cover', 'backgroundPosition' => 'center', + 'gradientFrom' => '#0c140fdb', 'gradientTo' => '#0c140f1a', 'gradientAngle' => 90, + 'padding' => ['top' => '160px', 'bottom' => '0px']], + 'tablet' => ['minHeight' => '680px', 'padding' => ['top' => '120px', 'bottom' => '0px']], + // Auf dem Telefon steht der Text über der ganzen Breite: dort deckt der Verlauf überall. + 'mobile' => ['minHeight' => '0px', 'gradientFrom' => '#0c140fd9', 'gradientTo' => '#0c140f8c', 'padding' => ['top' => '64px', 'bottom' => '0px']], + ], null, "&::before{content:'';position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(0deg,rgba(12,20,15,.9) 0%,rgba(12,20,15,0) 40%);pointer-events:none}\n& .section-inner{position:relative}"), + + // 2 – Einleitung: Text links, Collage rechts. + $section('willkommen', [ + $row('willkommen-zeile', [ + $column('willkommen-text', [ + $kleinzeile('willkommen-label', 'Willkommen bei Hüfner'), + $heading('willkommen-titel', 'Wir bauen Außenanlagen, die bleiben.', 2, $h2Stil), + $text('willkommen-lead', 'Ob neue Terrasse, Pool oder die komplette Außenanlage am Neubau: Wir begleiten Ihr Projekt vom ersten Gespräch bis zur Übergabe – mit eigenem Team, eigenem Fuhrpark und hochwertigen Materialien.', [ + ...$fliess('20px', '@text-stark', '18px', 1.65), 'mobile' => ['fontSize' => '18px'], + ]), + $text('willkommen-satz', 'Klare Linien, saubere Fugen, stimmige Übergänge. Darauf legen wir Wert – bei jedem Projekt, ob privat oder öffentlich.', $fliess('17px', '@text', '36px')), + $column('willkommen-haken', [ + $haken('haken-1', 'Persönliche Beratung'), + $haken('haken-2', 'Transparentes Angebot'), + $haken('haken-3', 'Geschultes Fachpersonal'), + $haken('haken-4', 'Saubere Baustelle'), + ], ['desktop' => ['display' => 'grid', 'gridColumns' => 2, 'rowGap' => '14px', 'columnGap' => '24px'], 'mobile' => ['gridColumns' => 1]]), + ]), + $column('willkommen-collage', [ + $bild('collage-pool', $medien['pool-stufen'], 'Pool mit Sitzstufen und Keramikumrandung', [ + 'desktop' => ['position' => 'absolute', 'top' => '0px', 'right' => '0px', 'width' => '78%', 'height' => '78%', 'margin' => $seiten('0px'), 'overflow' => 'hidden', 'borderRadius' => $rund('18px'), 'backgroundColor' => '#2a372c', + 'shadowY' => '30px', 'shadowBlur' => '60px', 'shadowColor' => '#14201a2e'], + ], null, "& img{width:100%;height:100%;object-fit:cover;border-radius:0;transition:transform .7s cubic-bezier(.2,.7,.2,1)}\n&:hover img{transform:scale(1.04)}"), + $bild('collage-weg', $medien['plattenweg'], 'Plattenweg im Rasen entlang eines Neubaus', [ + 'desktop' => ['position' => 'absolute', 'left' => '0px', 'bottom' => '0px', 'width' => '52%', 'height' => '56%', 'margin' => $seiten('0px'), 'overflow' => 'hidden', 'borderRadius' => $rund('18px'), 'zIndex' => 1, + 'borderWidth' => $seiten('8px'), 'borderStyle' => 'solid', 'borderColor' => '@mint', 'backgroundColor' => '#2a372c', 'shadowY' => '30px', 'shadowBlur' => '60px', 'shadowColor' => '#14201a33'], + 'mobile' => ['borderWidth' => $seiten('6px')], + ], null, "& img{width:100%;height:100%;object-fit:cover;border-radius:0;transition:transform .7s cubic-bezier(.2,.7,.2,1)}\n&:hover img{transform:scale(1.04)}"), + $column('collage-abzeichen', [ + $text('collage-abzeichen-zahl', '100 %', ['desktop' => ['fontFamily' => 'heading', 'fontSize' => '48px', 'fontWeight' => '800', 'lineHeight' => 1.0, 'color' => '@papier', 'margin' => ['bottom' => '2px']], 'mobile' => ['fontSize' => '38px']]), + $text('collage-abzeichen-text', 'Detailarbeit', ['desktop' => ['fontSize' => '15px', 'fontWeight' => '600', 'color' => '#dcefd3', 'margin' => ['bottom' => '0px']]]), + ], [ + 'desktop' => ['position' => 'absolute', 'right' => '24px', 'bottom' => '36px', 'zIndex' => 2, 'backgroundColor' => '@gruen', 'borderRadius' => $rund('16px'), 'padding' => ['top' => '20px', 'right' => '24px', 'bottom' => '20px', 'left' => '24px'], + 'shadowY' => '20px', 'shadowBlur' => '40px', 'shadowColor' => '#14201a40'], + 'mobile' => ['right' => '0px', 'bottom' => '20px', 'padding' => ['top' => '14px', 'right' => '18px', 'bottom' => '14px', 'left' => '18px']], + ]), + ], ['desktop' => ['position' => 'relative', 'height' => '600px'], 'tablet' => ['height' => '520px'], 'mobile' => ['height' => '420px']]), + ], $zweiSpalten, [ + 'desktop' => ['gap' => '96px', 'alignItems' => 'center', 'margin' => ['top' => '0px']], + 'tablet' => ['gap' => '48px'], + ]), + ], $abschnitt()), + + // 3 – Leistungen: Kopf mit Satz rechts, links die große Pool-Kachel, rechts vier kleine, + // darunter weitere Leistungen als Chips. + $section('leistungen-bereich', [ + $row('leistungen-kopf', [ + $column('leistungen-kopf-titel', [ + $kleinzeile('leistungen-label', 'Leistungen'), + $heading('leistungen-titel', 'Alles für Ihren Außenbereich', 2, ['desktop' => [...$h2Stil['desktop'], 'margin' => ['top' => '18px', 'bottom' => '0px']], 'tablet' => $h2Stil['tablet'], 'mobile' => $h2Stil['mobile']]), + ], ['desktop' => ['maxWidth' => '680px']]), + $text('leistungen-kopf-text', 'Vom Erdbau über Pflaster- und Natursteinarbeiten bis zur fertigen Gartenanlage – alles aus einer Hand.', [ + 'desktop' => ['maxWidth' => '420px', 'fontSize' => '18px', 'lineHeight' => 1.65, 'color' => '@text', 'margin' => ['bottom' => '0px']], + ]), + ], [], [ + 'desktop' => ['display' => 'flex', 'flexWrap' => 'wrap', 'justifyContent' => 'space-between', 'alignItems' => 'flex-end', 'rowGap' => '24px', 'columnGap' => '64px', 'margin' => ['top' => '0px', 'bottom' => '56px']], + 'mobile' => ['margin' => ['bottom' => '36px']], + ]), + $row('leistungen-raster', [ + $kachel('leistung-pool', $medien['pool-fachwerk'], 'Pools & Schwimmbecken – Beratung anfragen', [ + $kachelTitel('leistung-pool-titel', 'Pools & Schwimmbecken', '44px'), + $kachelSatz('leistung-pool-satz', 'Poolanlagen inklusive Umrandung, Technik und stimmiger Gestaltung rundherum – vom Aushub bis zur fertigen Terrasse.', '17px', '18px', '460px'), + $zeile('leistung-pool-mehr', [ + $text('leistung-pool-mehr-text', 'Beratung anfragen', ['desktop' => ['fontSize' => '15px', 'fontWeight' => '700', 'letterSpacing' => '0.06em', 'textTransform' => 'uppercase', 'color' => '@papier', 'margin' => ['bottom' => '0px']]]), + $symbol('leistung-pool-mehr-pfeil', 'arrow-right', 16, ['desktop' => ['color' => '@papier']]), + ], '8px'), + ], '36px', '#kontakt', ['desktop' => ['minHeight' => '620px'], 'tablet' => ['minHeight' => '380px'], 'mobile' => ['minHeight' => '440px', 'padding' => $seiten('24px')]], '', true), + $column('leistungen-klein', [ + $kachel('leistung-terrasse', $medien['terrasse'], 'Terrassen – Beratung anfragen', [ + $kachelTitel('leistung-terrasse-titel', 'Terrassen'), + $kachelSatz('leistung-terrasse-satz', 'Keramik, Naturstein, Holz oder WPC.'), + ], '24px', '#kontakt'), + $kachel('leistung-pflaster', $medien['pflaster-verlegt'], 'Pflaster – Beratung anfragen', [ + $kachelTitel('leistung-pflaster-titel', 'Pflaster'), + $kachelSatz('leistung-pflaster-satz', 'Einfahrten, Wege und Plätze.'), + ], '24px', '#kontakt'), + $kachel('leistung-naturstein', $medien['naturstein'], 'Natursteine – Beratung anfragen', [ + $kachelTitel('leistung-naturstein-titel', 'Natursteine'), + $kachelSatz('leistung-naturstein-satz', 'Mauern, Stufen, Einfassungen.'), + ], '24px', '#kontakt'), + $kachel('leistung-aussen', $medien['rasen'], 'Außenanlagen – Beratung anfragen', [ + $kachelTitel('leistung-aussen-titel', 'Außenanlagen'), + $kachelSatz('leistung-aussen-satz', 'Rasen, Bepflanzung, Gesamtanlage.'), + ], '24px', '#kontakt'), + ], ['desktop' => ['display' => 'grid', 'gridColumns' => 2, 'gap' => '20px'], 'mobile' => ['gridColumns' => 1]], 'grid-auto-rows:300px'), + ], $zweiSpalten, ['desktop' => ['gap' => '20px', 'margin' => ['top' => '0px']]]), + $zeile('leistungen-chips', [ + $text('leistungen-chips-label', 'Außerdem', ['desktop' => ['fontFamily' => 'heading', 'fontSize' => '16px', 'fontWeight' => '700', 'letterSpacing' => '0.14em', 'textTransform' => 'uppercase', 'color' => '@text', 'margin' => ['right' => '8px', 'bottom' => '0px']]]), + $chip('chip-erdbau', 'Erdbau'), + $chip('chip-rollrasen', 'Rollrasen'), + $chip('chip-sichtschutz', 'Sichtschutz & Zäune'), + $chip('chip-gabionen', 'Gabionen'), + $chip('chip-bewaesserung', 'Bewässerung'), + $chip('chip-entwaesserung', 'Entwässerung & Rinnen'), + $chip('chip-spielplaetze', 'Spielplätze'), + ], '12px', ['flexWrap' => 'wrap', 'margin' => ['top' => '40px']]), + ], $abschnitt('@papier'), 'leistungen', $kachelFlaeche), + + // 4 – Referenzen auf Nachtgrün. + $section('referenzen-bereich', [ + $row('referenzen-kopf', [ + $column('referenzen-kopf-titel', [ + $kleinzeile('referenzen-label', 'Referenzen', '@hellgruen'), + $heading('referenzen-titel', 'Der Hüfner-Look', 2, ['desktop' => [...$h2Stil['desktop'], 'color' => '@papier', 'margin' => ['top' => '18px', 'bottom' => '0px']], 'tablet' => $h2Stil['tablet'], 'mobile' => $h2Stil['mobile']]), + ]), + $kleinerKnopf($knopf('referenzen-instagram', 'Alle Projekte auf Instagram', $instagram, 'linie', true, [])), + ], [], [ + 'desktop' => ['display' => 'flex', 'flexWrap' => 'wrap', 'justifyContent' => 'space-between', 'alignItems' => 'flex-end', 'gap' => '24px', 'margin' => ['top' => '0px', 'bottom' => '56px']], + 'mobile' => ['margin' => ['bottom' => '36px']], + ]), + $row('referenzen-raster', [ + $kachel('referenz-garten', $medien['pool-garten'], 'Pool mit Hortensien und Gartenanlage', [ + $kachelKlein('referenz-garten-klein', 'Pool · Garten · Terrasse', '14px'), + $kachelTitel('referenz-garten-titel', 'Poolanlage mit Gartengestaltung', '36px'), + ], '32px', null, ['desktop' => ['minHeight' => '620px'], 'tablet' => ['minHeight' => '380px'], 'mobile' => ['minHeight' => '360px', 'padding' => $seiten('24px')]], '45%'), + $column('referenzen-klein', [ + $kachel('referenz-terrasse', $medien['pool-terrasse'], 'Pool mit Natursteinterrasse und Gabionen', [ + $kachelKlein('referenz-terrasse-klein', 'Pool · Naturstein'), + $kachelTitel('referenz-terrasse-titel', 'Pool & Terrasse', '26px'), + ], '24px', null, [], '55%'), + $kachel('referenz-zaun', $medien['sichtschutz'], 'Moderner Sichtschutz aus Aluminium', [ + $kachelKlein('referenz-zaun-klein', 'Zaun'), + $kachelTitel('referenz-zaun-titel', 'Sichtschutz', '26px'), + ], '24px', null, [], '55%'), + $kachel('referenz-hang', $medien['pflaster'], 'Hanggarten mit Natursteinmauer und Treppe', [ + $kachelKlein('referenz-hang-klein', 'Hanggarten'), + $kachelTitel('referenz-hang-titel', 'Mauer & Treppe', '26px'), + ], '24px', null, [], '55%'), + ], ['desktop' => ['display' => 'grid', 'gridColumns' => 2, 'gap' => '20px'], 'mobile' => ['gridColumns' => 1]], "grid-auto-rows:300px\n& [id=\"referenz-terrasse\"]{grid-column:1/-1}"), + ], $zweiSpalten, ['desktop' => ['gap' => '20px', 'margin' => ['top' => '0px']]]), + $karte('referenzen-kommunen', [ + $text('referenzen-kommunen-titel', 'Auch für Kommunen', ['desktop' => ['fontFamily' => 'heading', 'fontSize' => '22px', 'fontWeight' => '800', 'letterSpacing' => '0.04em', 'textTransform' => 'uppercase', 'color' => '@hellgruen', 'margin' => ['bottom' => '0px']]]), + $text('referenzen-kommunen-text', 'Zum Beispiel der Spielplatz an der Pagodenburg in Rastatt oder frischer Spielsand für die Spielplätze der Stadt Karlsruhe.', ['desktop' => ['flexGrow' => 1, 'flexBasis' => '300px', 'fontSize' => '16px', 'lineHeight' => 1.6, 'color' => '#c9d6c5', 'margin' => ['bottom' => '0px']], 'mobile' => ['flexBasis' => 'auto']]), + ], '40px', ['flexWrap' => 'wrap', 'rowGap' => '16px', 'margin' => ['top' => '32px'], 'padding' => ['top' => '28px', 'right' => '32px', 'bottom' => '28px', 'left' => '32px']], + ['padding' => $seiten('24px')], [], 'background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:18px'), + ], $abschnitt('@nacht', ['desktop' => ['color' => '@papier']]), 'projekte', $kachelFlaeche), + + // 5 – Ablauf in vier Schritten mit gestrichelter Linie hinter den Nummern. + $section('ablauf-bereich', [ + $column('ablauf-kopf', [ + $kleinzeile('ablauf-label', 'So arbeiten wir', '@rot', true), + $heading('ablauf-titel', 'In vier Schritten zum Gartentraum', 2, ['desktop' => [...$h2Stil['desktop'], 'textAlign' => 'center', 'margin' => ['top' => '18px', 'bottom' => '0px']], 'tablet' => $h2Stil['tablet'], 'mobile' => $h2Stil['mobile']]), + ], ['desktop' => ['maxWidth' => '760px', 'margin' => ['left' => 'auto', 'right' => 'auto', 'bottom' => '72px']], 'mobile' => ['margin' => ['bottom' => '48px']]]), + $column('ablauf-schritte', [ + $flaeche('ablauf-linie', ['desktop' => ['position' => 'absolute', 'left' => '12.5%', 'right' => '12.5%', 'top' => '36px', 'height' => '2px', 'margin' => $seiten('0px')]], + "min-height:0;background:repeating-linear-gradient(90deg,#9dc38c 0 10px,transparent 10px 18px)", 'desktop'), + $column('ablauf-raster', [ + $schritt(1, 'Beratung vor Ort', 'Wir schauen uns Ihr Grundstück an und hören zu, was Sie sich wünschen.'), + $schritt(2, 'Planung & Angebot', 'Sie erhalten ein klares Konzept und ein transparentes Angebot.'), + $schritt(3, 'Ausführung', 'Unser Team baut termintreu, sauber und mit Liebe zum Detail.'), + $schritt(4, 'Übergabe', 'Gemeinsame Abnahme Ihres fertigen Außenbereichs.', '@rot'), + ], [ + 'desktop' => ['display' => 'grid', 'gridColumns' => 4, 'gap' => '32px'], + 'tablet' => ['gridColumns' => 2, 'rowGap' => '48px'], + 'mobile' => ['gridColumns' => 1, 'rowGap' => '44px'], + ]), + ], ['desktop' => ['position' => 'relative']]), + ], $abschnitt(), 'ablauf'), + + // 6 – Fuhrpark: weiße Karte mit Baustellenfoto und vier Geräten. + $section('fuhrpark-bereich', [ + $column('fuhrpark-karte', [ + $row('fuhrpark-zeile', [ + $column('fuhrpark-foto-spalte', [ + $bild('fuhrpark-foto', $medien['baustelle'], 'Poolbau im Rohbau mit Minibagger und Radlader im Hintergrund', ['desktop' => ['height' => '100%', 'margin' => $seiten('0px')]], null, + '& img{width:100%;height:100%;min-height:360px;object-fit:cover;border-radius:0}'), + ], ['desktop' => ['backgroundColor' => '#2a372c']]), + $column('fuhrpark-text', [ + $kleinzeile('fuhrpark-label', 'Fuhrpark & Maschinen'), + $heading('fuhrpark-titel', 'Eigenes Gerät. Kurze Wege.', 2, ['desktop' => [...$h2Stil['desktop'], 'fontSize' => '52px', 'margin' => ['top' => '18px', 'bottom' => '20px']], 'tablet' => ['fontSize' => '44px'], 'mobile' => $h2Stil['mobile']]), + $text('fuhrpark-satz', 'Weil wir mit eigenem Fuhrpark arbeiten, sind wir unabhängig, flexibel und schnell auf der Baustelle – auch bei großen Flächen.', $fliess('17px', '@text', '28px', 1.65)), + $column('fuhrpark-geraete', [ + $geraet('geraet-lkw', 'LKW & Kipper', 'für Material & Aushub'), + $geraet('geraet-bagger', 'Bagger bis 15 t', 'inkl. Tieflader'), + $geraet('geraet-pflaster', 'Pflasterverlegemaschine', 'für große Flächen'), + $geraet('geraet-container', 'Abrollcontainer', 'für Entsorgung'), + ], ['desktop' => ['display' => 'grid', 'gridColumns' => 2, 'gap' => '12px']]), + ], ['desktop' => ['padding' => $seiten('56px')], 'mobile' => ['padding' => ['top' => '32px', 'right' => '24px', 'bottom' => '32px', 'left' => '24px']]]), + ], $zweiSpalten, ['desktop' => ['gap' => '0px', 'margin' => ['top' => '0px'], 'columnWidths' => '11 10', 'alignItems' => 'stretch']]), + ], ['desktop' => ['backgroundColor' => '@papier', 'borderRadius' => $rund('24px'), 'overflow' => 'hidden', 'shadowY' => '30px', 'shadowBlur' => '60px', 'shadowColor' => '#14201a14']]), + ], ['desktop' => ['padding' => ['top' => '0px', 'bottom' => '128px']], 'tablet' => ['padding' => ['top' => '0px', 'bottom' => '80px']], 'mobile' => ['padding' => ['top' => '0px', 'bottom' => '64px']]]), + + // 7 – Über uns. + $section('ueber-bereich', [ + $row('ueber-zeile', [ + $column('ueber-foto-spalte', [ + $bild('ueber-foto', $medien['team'], 'Das Hüfner-Team in Arbeitsjacken mit Firmenlogo', [ + 'desktop' => ['margin' => $seiten('0px'), 'overflow' => 'hidden', 'borderRadius' => $rund('18px'), 'backgroundColor' => '#2a372c', 'imageHeight' => '560px'], + 'mobile' => ['imageHeight' => '320px'], + ], null, '& img{width:100%;object-fit:cover;border-radius:0}'), + $text('ueber-abzeichen', 'Miteinander. 100 %.', [ + 'desktop' => ['position' => 'absolute', 'left' => '-1px', 'bottom' => '32px', 'backgroundColor' => '@rot', 'color' => '@papier', 'fontFamily' => 'heading', 'fontSize' => '22px', 'fontWeight' => '800', 'letterSpacing' => '0.06em', 'textTransform' => 'uppercase', 'lineHeight' => 1.2, + 'padding' => ['top' => '16px', 'right' => '24px', 'bottom' => '16px', 'left' => '24px'], 'borderRadius' => ['topLeft' => '0px', 'topRight' => '12px', 'bottomRight' => '12px', 'bottomLeft' => '0px'], 'margin' => ['bottom' => '0px']], + 'mobile' => ['fontSize' => '18px', 'bottom' => '20px'], + ]), + ], ['desktop' => ['position' => 'relative']], '', 'all'), + $column('ueber-text', [ + $kleinzeile('ueber-label', 'Über uns'), + $heading('ueber-titel', 'Handwerk mit Anspruch.', 2, $h2Stil), + $text('ueber-lead', 'Hinter Garten- und Landschaftsbau Hüfner steht Florian Hüfner mit seinem Team. Wir bauen Außenanlagen, die lange Freude machen – sauber geplant, präzise ausgeführt und bis ins Detail durchdacht.', [ + ...$fliess('20px', '@text-stark', '18px', 1.65), 'mobile' => ['fontSize' => '18px'], + ]), + $text('ueber-satz', 'Unsere Mitarbeiter bilden sich regelmäßig weiter – etwa in moderner Bewässerungstechnik oder im Einbau und der Verdichtung von Asphalt.', $fliess('17px', '@text', '18px')), + // Laut Handelsregister (North Data, 06.10.2026): bis April 2022 „Garten- und + // Landschaftsbau Florian Hüfner e. K.“, seither GmbH mit Sitz in Iffezheim. + $text('ueber-geschichte', 'Angefangen hat alles als Einzelunternehmen von Florian Hüfner. Seit 2022 sind wir die Garten- und Landschaftsbau Hüfner GmbH – mit Sitz in Iffezheim und Baustellen in der ganzen Region.', $fliess('17px', '@text', '36px')), + $column('ueber-zahlen', [ + $kennzahl('zahl-detail', '100 %', 'Detailarbeit', false), + $kennzahl('zahl-bagger', '15 t', 'Bagger im eigenen Fuhrpark', true), + $kennzahl('zahl-team', '1', 'Team von Planung bis Übergabe', true), + ], ['desktop' => ['display' => 'grid', 'gridColumns' => 3, 'gap' => '0px', 'borderWidth' => $nurOben('1px'), 'borderStyle' => 'solid', 'borderColor' => '@linie', 'padding' => ['top' => '28px']], 'mobile' => ['gridColumns' => 3]], 'column-gap:24px'), + ]), + ], $zweiSpalten, [ + 'desktop' => ['gap' => '96px', 'alignItems' => 'center', 'margin' => ['top' => '0px']], + 'tablet' => ['gap' => '48px'], + ]), + ], $abschnitt('@papier'), 'ueber-uns'), + + // 8 – Karriere: grüne Karte. + $section('karriere-bereich', [ + $karte('karriere-karte', [ + $column('karriere-text', [ + $text('karriere-klein', 'Karriere', ['desktop' => ['fontFamily' => 'heading', 'fontSize' => '17px', 'fontWeight' => '700', 'letterSpacing' => '0.2em', 'textTransform' => 'uppercase', 'color' => '#cdebbe', 'margin' => ['bottom' => '0px']]]), + $heading('karriere-titel', 'Werde Teil unseres Teams!', 2, ['desktop' => [...$h2Stil['desktop'], 'fontSize' => '52px', 'color' => '@papier', 'margin' => ['top' => '12px', 'bottom' => '14px']], 'tablet' => ['fontSize' => '44px'], 'mobile' => $h2Stil['mobile']]), + $text('karriere-satz', 'Du arbeitest gerne draußen, packst mit an und bist zuverlässig im Team? Dann melde dich bei uns – ein Anruf genügt.', $fliess('17px', '#e1f0da', '0px', 1.6)), + ], ['desktop' => ['flexGrow' => 1, 'flexBasis' => '340px'], 'mobile' => ['flexBasis' => 'auto']]), + $column('karriere-stellen', [ + $stelle('stelle-helfer', 'Mitarbeiter & Helfer (m/w/d)', 'Vollzeit · Garten- und Landschaftsbau', 'Mitarbeiter und Helfer (m/w/d)'), + $stelle('stelle-lkw', 'LKW-Fahrer C/CE (m/w/d)', 'Vollzeit · Fuhrpark', 'LKW-Fahrer C/CE (m/w/d)'), + $knopf('karriere-anrufen', 'Jetzt anrufen: '.$telefon, $tel, 'weiss', false, ['desktop' => ['alignSelf' => 'flex-start', 'margin' => ['top' => '6px']], 'mobile' => ['fontSize' => '16px', 'width' => '100%', 'justifyContent' => 'center']]), + ], ['desktop' => ['flexGrow' => 1, 'flexBasis' => '300px', 'display' => 'flex', 'flexDirection' => 'column', 'gap' => '12px'], 'mobile' => ['flexBasis' => 'auto']]), + ], '64px', [ + 'flexWrap' => 'wrap', 'rowGap' => '32px', 'justifyContent' => 'space-between', 'backgroundColor' => '@gruen', 'color' => '@papier', 'borderRadius' => $rund('24px'), + 'padding' => ['top' => '56px', 'right' => '64px', 'bottom' => '56px', 'left' => '64px'], + ], ['padding' => ['top' => '32px', 'right' => '24px', 'bottom' => '32px', 'left' => '24px']]), + ], ['desktop' => ['padding' => ['top' => '96px', 'bottom' => '96px']], 'mobile' => ['padding' => ['top' => '64px', 'bottom' => '64px']]], 'karriere'), + + // 9 – Instagram. + $section('social-bereich', [ + $row('social-kopf', [ + $column('social-kopf-titel', [ + $kleinzeile('social-label', 'Social Media'), + $heading('social-titel', 'Live von der Baustelle', 2, ['desktop' => [...$h2Stil['desktop'], 'fontSize' => '48px', 'lineHeight' => 1.0, 'margin' => ['top' => '12px', 'bottom' => '0px']], 'mobile' => ['fontSize' => '36px']]), + ]), + $zeile('social-knoepfe', [ + ['id' => 'social-instagram', 'type' => 'social', 'props' => ['size' => 20, 'shape' => 'plain', 'layout' => 'horizontal', 'labels' => true, 'networks' => ['instagram']], + 'css' => "& a{min-height:50px;padding:0 24px;border-radius:999px;background:#17221a;color:#fff;font-family:var(--kf-heading);font-size:17px;font-weight:700;letter-spacing:0.06em}\n& a:hover{background:#2f6b22;box-shadow:0 10px 24px rgba(0,0,0,.18)}"], + ['id' => 'social-facebook', 'type' => 'social', 'props' => ['size' => 20, 'shape' => 'plain', 'layout' => 'horizontal', 'labels' => true, 'networks' => ['facebook']], + 'css' => "& a{min-height:50px;padding:0 24px;border-radius:999px;background:#1f4fa0;color:#fff;font-family:var(--kf-heading);font-size:17px;font-weight:700;letter-spacing:0.06em}\n& a:hover{background:#173d7d;box-shadow:0 10px 24px rgba(0,0,0,.18)}"], + ], '10px', ['flexWrap' => 'wrap']), + ], [], [ + 'desktop' => ['display' => 'flex', 'flexWrap' => 'wrap', 'justifyContent' => 'space-between', 'alignItems' => 'flex-end', 'gap' => '20px', 'margin' => ['top' => '0px', 'bottom' => '28px']], + ]), + $column('social-raster', [ + $instaBild('insta-1', $medien['pool-stufen'], 'Pool mit Sitzstufen'), + $instaBild('insta-2', $medien['naturstein'], 'Natursteinmauer mit Trittplatten'), + $instaBild('insta-3', $medien['pool-garten'], 'Pool mit Gartenanlage'), + $instaBild('insta-4', $medien['plattenweg'], 'Plattenweg im Rasen'), + $instaBild('insta-5', $medien['terrasse'], 'Keramikterrasse am Pool'), + $instaBild('insta-6', $medien['team'], 'Das Hüfner-Team'), + ], ['desktop' => ['display' => 'grid', 'gridColumns' => 6, 'gap' => '12px'], 'tablet' => ['gridColumns' => 3], 'mobile' => ['gridColumns' => 2]]), + ], ['desktop' => ['padding' => ['top' => '0px', 'bottom' => '128px']], 'tablet' => ['padding' => ['top' => '0px', 'bottom' => '80px']], 'mobile' => ['padding' => ['top' => '0px', 'bottom' => '64px']]]), + + // 10 – Abschlussband auf Foto. + $section('band', [ + $column('band-inhalt', [ + $heading('band-titel', 'Bereit für Ihren Gartentraum?', 2, [ + 'desktop' => ['fontSize' => '72px', 'fontWeight' => '800', 'lineHeight' => 0.95, 'letterSpacing' => '0px', 'textTransform' => 'uppercase', 'color' => '@papier', 'textAlign' => 'center', 'margin' => ['bottom' => '22px']], + 'tablet' => ['fontSize' => '56px'], + 'mobile' => ['fontSize' => '40px'], + ], $em), + $text('band-satz', 'Erzählen Sie uns von Ihrem Vorhaben. Wir melden uns und vereinbaren einen Termin bei Ihnen vor Ort.', [ + 'desktop' => ['maxWidth' => '560px', 'fontSize' => '19px', 'lineHeight' => 1.6, 'color' => '#dce6d8', 'textAlign' => 'center', 'margin' => ['left' => 'auto', 'right' => 'auto', 'bottom' => '36px']], + ]), + $zeile('band-knoepfe', [ + $knopf('band-anfragen', 'Projekt anfragen', '#kontakt', 'rot', false), + $knopf('band-anrufen', $telefon, $tel, 'weiss', false), + ], '14px', ['flexWrap' => 'wrap', 'justifyContent' => 'center']), + ], ['desktop' => ['maxWidth' => '820px', 'margin' => ['left' => 'auto', 'right' => 'auto']]]), + ], [ + 'desktop' => ['backgroundColor' => '#2a372c', 'backgroundImage' => $medien['pool-fachwerk']['id'], 'backgroundSize' => 'cover', 'backgroundPosition' => 'center', 'overlayColor' => '#0c140f', 'overlayOpacity' => 0.72, + 'color' => '@papier', 'padding' => ['top' => '120px', 'bottom' => '120px']], + 'mobile' => ['padding' => ['top' => '72px', 'bottom' => '72px']], + ]), + + // 11 – Kontakt mit Formular. + $section('kontakt-bereich', [ + $row('kontakt-zeile', [ + $column('kontakt-text', [ + $kleinzeile('kontakt-label', 'Kontakt'), + $heading('kontakt-titel', 'Ihr Projekt. Unser Handwerk.', 2, ['desktop' => [...$h2Stil['desktop'], 'margin' => ['top' => '18px', 'bottom' => '24px']], 'tablet' => $h2Stil['tablet'], 'mobile' => $h2Stil['mobile']]), + $text('kontakt-satz', 'Schreiben Sie uns oder rufen Sie direkt an – wir melden uns zeitnah und vereinbaren einen Termin bei Ihnen vor Ort.', $fliess('18px', '@text', '40px', 1.65)), + $column('kontakt-karten', [ + $kontaktKarte('kontakt-telefon', 'phone', 'Telefon', $telefon, $tel), + $kontaktKarte('kontakt-mail', 'mail', 'E-Mail', $mail, 'mailto:'.$mail), + $kontaktKarte('kontakt-adresse', 'pin', 'Adresse', $strasse.', '.$plz.' '.$ort, null), + $kontaktKarte('kontakt-zeiten', 'clock', 'Öffnungszeiten', $zeiten, null), + ], ['desktop' => ['display' => 'flex', 'flexDirection' => 'column', 'gap' => '14px']]), + ]), + $column('kontakt-formular', [ + $heading('kontakt-formular-titel', 'Anfrage senden', 3, $h3Stil('30px', '@tinte', '20px')), + ['id' => 'kontakt-formular-block', 'type' => 'form', 'props' => ['form' => 'anfrage'], 'css' => $formularCss], + $text('kontakt-formular-hinweis', 'Ihre Angaben verwenden wir nur für Ihre Anfrage. Mehr dazu in unseren Datenschutzhinweisen.', [ + 'desktop' => ['fontSize' => '13px', 'lineHeight' => 1.6, 'color' => '@text', 'margin' => ['top' => '16px', 'bottom' => '0px']], + ], $linkCss), + ], [ + 'desktop' => ['backgroundColor' => '@papier', 'borderRadius' => $rund('24px'), 'padding' => $seiten('48px'), 'shadowY' => '30px', 'shadowBlur' => '60px', 'shadowColor' => '#14201a14'], + 'mobile' => ['padding' => $seiten('24px')], + ]), + ], $zweiSpalten, [ + 'desktop' => ['gap' => '80px', 'alignItems' => 'flex-start', 'margin' => ['top' => '0px'], 'columnWidths' => '9 11'], + 'tablet' => ['gap' => '48px'], + ]), + ], $abschnitt(), 'kontakt'), + ], +]; + +// --------------------------------------------------------------------------------------------- +// Seiten anlegen und veröffentlichen +// --------------------------------------------------------------------------------------------- + +$anlegen = static function (string $slug, array $dokument, string $seoTitel = '', string $teilbild = '') use ($pages, $db): string { + $id = $pages->createPage($slug, null, 'page', $dokument); + if ('' !== $seoTitel) { + $db->executeStatement('UPDATE page SET seo_title = ? WHERE id = ?', [$seoTitel, $id]); + } + if ('' !== $teilbild) { + $db->executeStatement('UPDATE page SET og_media_id = ? WHERE id = ?', [$teilbild, $id]); + } + $seite = $db->fetchAssociative('SELECT draft_revision_id, version FROM page WHERE id = ?', [$id]); + $pages->publish($id, $seite['draft_revision_id'], (int) $seite['version']); + echo 'Seite angelegt: /'.$db->fetchOne('SELECT path FROM page WHERE id = ?', [$id])."\n"; + + return $id; +}; + +// Wie die Vorlage: der Hero-Text steigt beim Laden auf, das Foto nicht (LCP). Weiter unten +// erscheinen Köpfe und Raster beim Scrollen. +$startseite = $einblenden($startseite, [ + 'hero-titel' => ['rise', 'short'], + 'hero-intro' => ['rise', 'medium'], + 'hero-knoepfe' => ['rise', 'medium'], + 'hero-karte' => ['rise', 'medium'], + 'willkommen-text' => ['rise'], + 'willkommen-collage' => ['rise', 'short'], + 'leistungen-kopf' => ['rise'], + 'leistungen-raster' => ['rise', 'short'], + 'leistungen-chips' => ['fade', 'short'], + 'referenzen-kopf' => ['rise'], + 'referenzen-raster' => ['rise', 'short'], + 'ablauf-kopf' => ['rise'], + 'schritt-1' => ['rise'], + 'schritt-2' => ['rise', 'short'], + 'schritt-3' => ['rise', 'medium'], + 'schritt-4' => ['rise', 'long'], + 'fuhrpark-karte' => ['rise'], + 'ueber-foto-spalte' => ['rise'], + 'ueber-text' => ['rise', 'short'], + 'karriere-karte' => ['rise'], + 'social-kopf' => ['rise'], + 'social-raster' => ['fade', 'short'], + 'band-inhalt' => ['rise'], + 'kontakt-text' => ['rise'], + 'kontakt-formular' => ['rise', 'short'], +]); + +$homeId = $anlegen('home', $startseite, 'Garten- und Landschaftsbau Hüfner GmbH – Terrassen, Pools, Pflaster & Natursteine', $medien['pool-fachwerk']['id']); + +/** Eine Rechtsseite: Kleinzeile, Titel und Vorspann auf Nachtgrün, dann Absätze mit Zwischenüberschriften. */ +$rechtsseite = static function (string $praefix, string $label, string $titel, string $vorspann, array $absaetze) use ($section, $row, $column, $kleinzeile, $heading, $text, $nurOben, $linkCss): array { + $kopf = $section($praefix.'-kopf', [ + $kleinzeile($praefix.'-label', $label, '@hellgruen'), + $heading($praefix.'-h1', $titel, 1, [ + 'desktop' => ['fontSize' => '72px', 'fontWeight' => '800', 'lineHeight' => 0.95, 'letterSpacing' => '0px', 'textTransform' => 'uppercase', 'color' => '@papier', 'margin' => ['top' => '18px', 'bottom' => '20px']], + 'mobile' => ['fontSize' => '46px'], + ]), + $text($praefix.'-vorspann', $vorspann, [ + 'desktop' => ['maxWidth' => '640px', 'fontSize' => '18px', 'lineHeight' => 1.7, 'color' => '@auf-dunkel', 'margin' => ['bottom' => '0px']], + 'mobile' => ['fontSize' => '16px'], + ]), + ], [ + 'desktop' => ['backgroundColor' => '@nacht', 'color' => '@papier', 'padding' => ['top' => '88px', 'bottom' => '72px']], + 'mobile' => ['padding' => ['top' => '56px', 'bottom' => '48px']], + ]); + + $punkte = []; + foreach ($absaetze as $i => [$zwischentitel, $inhalt]) { + $punkte[] = $row($praefix.'-punkt-'.$i, [ + $column($praefix.'-punkt-'.$i.'-titel', '' === $zwischentitel ? [] : [ + $heading($praefix.'-h2-'.$i, $zwischentitel, 2, [ + 'desktop' => ['fontSize' => '22px', 'fontWeight' => '800', 'lineHeight' => 1.2, 'letterSpacing' => '0.02em', 'textTransform' => 'uppercase', 'color' => '@tinte', 'margin' => ['bottom' => '0px']], + ]), + ], [ + 'desktop' => ['flexBasis' => '260px', 'flexShrink' => 0], + 'tablet' => ['flexBasis' => '200px'], + 'mobile' => ['flexBasis' => 'auto'], + ]), + $column($praefix.'-punkt-'.$i.'-text', [ + $text($praefix.'-p-'.$i, $inhalt, ['desktop' => ['fontSize' => '16px', 'lineHeight' => 1.75, 'color' => '@text', 'margin' => ['bottom' => '0px']]], $linkCss), + ], ['desktop' => ['flexGrow' => 1, 'flexBasis' => '0', 'minWidth' => '0'], 'mobile' => ['flexBasis' => 'auto']]), + ], [], [ + 'desktop' => ['display' => 'flex', 'alignItems' => 'flex-start', 'gap' => '44px', 'margin' => ['top' => '0px'], + 'borderWidth' => $nurOben('1px'), 'borderStyle' => 'solid', 'borderColor' => '@linie', 'padding' => ['top' => '26px', 'bottom' => '26px']], + 'tablet' => ['gap' => '28px'], + 'mobile' => ['flexDirection' => 'column', 'gap' => '8px', 'padding' => ['top' => '20px', 'bottom' => '20px']], + ]); + } + + $inhalt = $section($praefix, [ + $column($praefix.'-inhalt', $punkte, ['desktop' => ['maxWidth' => '920px']]), + ], ['desktop' => ['padding' => ['top' => '48px', 'bottom' => '96px']], 'mobile' => ['padding' => ['top' => '24px', 'bottom' => '64px']]]); + + return [$kopf, $inhalt]; +}; + +$anlegen('impressum', [ + 'schemaVersion' => $SCHEMA, 'title' => 'Impressum', + 'description' => 'Anbieterangaben der Garten- und Landschaftsbau Hüfner GmbH, Iffezheim.', + 'blocks' => [ + ...$rechtsseite('impressum', 'Rechtliche Angaben', 'Impressum', 'Angaben gemäß § 5 DDG und § 18 Abs. 2 MStV.', [ + ['Anbieter', $firma.'
'.$strasse.'
'.$plz.' '.$ort], + // Von Umut am 06.10.2026: HRB 742159, Mannheim. Laut Netzwerkauszug ist heute Florian + // Hüfner mit der GmbH verbunden, Simone Hüfner nur früher. + ['Vertreten durch', 'Geschäftsführer: Florian Hüfner'], + ['Registereintrag', 'Eintragung im Handelsregister
Registergericht: Amtsgericht Mannheim
Registernummer: HRB 742159'], + ['Kontakt', 'Telefon: '.$telefon.'
E-Mail: '.$mail.''], + // Eine USt-IdNr. gehört nur hinein, wenn es eine gibt; weder Register noch North Data + // nennen eine (06.10.2026). Falls doch: hier als ['Umsatzsteuer', '… nach § 27a UStG: DE…']. + ['Verantwortlich für den Inhalt', 'Florian Hüfner, Anschrift wie oben.'], + ['Verbraucherstreitbeilegung', 'Wir sind nicht bereit und nicht verpflichtet, an einem Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.'], + ['Haftung für Inhalte', 'Als Diensteanbieter sind wir für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Wir sind jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Bei Bekanntwerden von Rechtsverletzungen entfernen wir diese Inhalte umgehend.'], + ['Haftung für Links', 'Diese Website verweist auf unsere Profile bei Instagram und Facebook. Für deren Inhalte ist der jeweilige Anbieter verantwortlich.'], + ['Urheberrecht', 'Die von uns erstellten Inhalte, Fotos und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechts bedürfen der schriftlichen Zustimmung.'], + ['Bildnachweis', 'Alle Fotos sind eigene Aufnahmen der '.$firma.'. Logo: '.$firma.'.'], + ]), + ], +], 'Impressum | '.$kurz); + +$anlegen('datenschutz', [ + 'schemaVersion' => $SCHEMA, 'title' => 'Datenschutz', + 'description' => 'Welche Daten beim Besuch der Website der Garten- und Landschaftsbau Hüfner GmbH und bei einer Anfrage verarbeitet werden.', + 'blocks' => [ + ...$rechtsseite('datenschutz', 'Ihre Daten', 'Datenschutz', 'Hier erfahren Sie, welche Daten beim Besuch dieser Website und bei einer Anfrage verarbeitet werden – und welche Rechte Sie haben.', [ + ['1. Verantwortlicher', $firma.', '.$strasse.', '.$plz.' '.$ort.'. Telefon '.$telefon.', E-Mail '.$mail.'.'], + ['2. Besuch dieser Website', 'Beim Aufruf verarbeitet der Hostingdienst technisch erforderliche Verbindungsdaten: IP-Adresse, Zeitpunkt, angeforderte Adresse, Browserangaben und HTTP-Status. Das dient der sicheren Bereitstellung und der Fehlersuche. Rechtsgrundlage ist unser berechtigtes Interesse an einem störungsfreien Betrieb, Art. 6 Abs. 1 lit. f DSGVO.

Unser Hostinganbieter ist die IONOS SE, Elgendorfer Straße 57, 56410 Montabaur. Mit IONOS besteht ein Vertrag über die Auftragsverarbeitung nach Art. 28 DSGVO. Die Serverprotokolle werden nach spätestens sieben Tagen gelöscht oder anonymisiert, sofern sie nicht zur Aufklärung eines Sicherheitsvorfalls länger gebraucht werden.'], + ['3. Cookies und externe Dienste', 'Diese Website setzt keine Analyse- oder Werbecookies. Bilder, Schriften und Gestaltung kommen vom eigenen Server; es werden keine Karten, Videos oder Schriften von Dritten nachgeladen. Deshalb gibt es auch keinen Einwilligungsdialog.'], + ['4. Anfrageformular', 'Wenn Sie uns über das Formular schreiben, verarbeiten wir Ihren Namen, Ihre E-Mail-Adresse, auf Wunsch Ihre Telefonnummer, die gewählte Leistung und Ihre Beschreibung, um Ihre Anfrage zu beantworten und ein Angebot vorzubereiten (Art. 6 Abs. 1 lit. b DSGVO). Die Anfrage wird in unserem System gespeichert und per E-Mail an uns weitergeleitet. Wir löschen sie, wenn sie erledigt ist und keine gesetzliche Aufbewahrungspflicht besteht.'], + ['5. Kontakt per E-Mail oder Telefon', 'Wenn Sie uns anrufen oder schreiben, verarbeiten wir Ihre Angaben, um Ihr Anliegen zu bearbeiten (Art. 6 Abs. 1 lit. b oder f DSGVO).'], + ['6. Instagram und Facebook', 'Auf dieser Seite stehen nur Links zu unseren Profilen. Erst wenn Sie einem Link folgen, gelangen Sie zum jeweiligen Anbieter (Meta Platforms Ireland Ltd.); dort gelten dessen Datenschutzhinweise.'], + ['7. Ihre Rechte', 'Sie haben unter den gesetzlichen Voraussetzungen das Recht auf Auskunft, Berichtigung, Löschung, Einschränkung der Verarbeitung und Datenübertragbarkeit. Einer Verarbeitung auf Grundlage von Art. 6 Abs. 1 lit. f DSGVO können Sie widersprechen.'], + ['8. Beschwerderecht', 'Sie können sich bei einer Datenschutz-Aufsichtsbehörde beschweren, für uns beim Landesbeauftragten für den Datenschutz und die Informationsfreiheit Baden-Württemberg.'], + ['', 'Fragen zum Datenschutz beantworten wir gern unter '.$mail.'.'], + ]), + ], +], 'Datenschutz | '.$kurz); + +$fehlerId = $anlegen('404', [ + 'schemaVersion' => $SCHEMA, 'title' => 'Seite nicht gefunden', + 'description' => 'Die gesuchte Seite gibt es nicht oder sie wurde verschoben.', + 'blocks' => [ + $section('fehler', [ + $kleinzeile('fehler-label', 'Fehler 404'), + $heading('fehler-titel', 'Hier wächst noch nichts.', 1, [ + 'desktop' => ['fontSize' => '80px', 'fontWeight' => '800', 'lineHeight' => 0.95, 'letterSpacing' => '0px', 'textTransform' => 'uppercase', 'color' => '@tinte', 'margin' => ['top' => '18px', 'bottom' => '22px']], + 'mobile' => ['fontSize' => '48px'], + ], $emGruen), + $text('fehler-text', 'Diese Seite gibt es nicht oder sie wurde verschoben. Über die Startseite finden Sie zurück.', [ + 'desktop' => ['maxWidth' => '480px', 'fontSize' => '18px', 'lineHeight' => 1.7, 'color' => '@text', 'margin' => ['bottom' => '32px']], + ]), + $knopf('fehler-knopf', 'Zur Startseite', '/', 'rot', true), + ], [ + 'desktop' => ['padding' => ['top' => '120px', 'bottom' => '140px']], + 'mobile' => ['padding' => ['top' => '64px', 'bottom' => '80px']], + ]), + ], +]); +$db->executeStatement('UPDATE page SET robots = ? WHERE id = ?', ['noindex', $fehlerId]); + +// --------------------------------------------------------------------------------------------- +// Menü, Einstellungen, Konto +// --------------------------------------------------------------------------------------------- + +$sprung = static fn (string $label, string $anchor): array => ['label' => $label, 'type' => 'page', 'pageId' => $homeId, 'anchor' => $anchor, 'children' => []]; +$menus->save('header', 'Hauptnavigation', [ + $sprung('Leistungen', 'leistungen'), + $sprung('Referenzen', 'projekte'), + $sprung('Ablauf', 'ablauf'), + $sprung('Über uns', 'ueber-uns'), + $sprung('Karriere', 'karriere'), + $sprung('Kontakt', 'kontakt'), +], 0); +echo "Menü angelegt\n"; + +$settings->assignNotFoundPage($fehlerId, ''); +$settings->save([ + 'legalName' => $firma, + 'description' => 'Garten- und Landschaftsbau auf Premium-Niveau aus Iffezheim: Terrassen, Pools, Pflaster, Natursteine und komplette Außenanlagen – geplant, gebaut und übergeben aus einer Hand.', + 'phone' => '+49 7229 6992826', 'email' => $mail, + 'street' => $strasse, 'postalCode' => $plz, 'city' => $ort, 'country' => 'DE', + 'social' => ['instagram' => $instagram, 'facebook' => $facebook], + 'areaServed' => implode("\n", ['Iffezheim', 'Rastatt', 'Baden-Baden', 'Karlsruhe', 'Mittelbaden']), + 'openingHours' => $zeitenDaten, + 'localBusiness' => true, 'llmsTxt' => true, + 'faviconMediaId' => $medien['favicon']['id'], + 'stickyHeader' => true, 'headerOverlay' => false, + 'motion' => 'always', + 'homePath' => 'home', 'imprintPath' => 'impressum', 'privacyPath' => 'datenschutz', + // Die Seite lädt nichts von Dritten; deshalb keine Einwilligungsleiste. + 'consentBanner' => false, 'scrollTop' => true, 'postMetaHeader' => false, +]); +echo "Einstellungen gespeichert\n"; + +$passwort = bin2hex(random_bytes(12)); +$db->insert('cms_user', ['id' => bin2hex(random_bytes(16)), 'username' => 'umut', 'password_hash' => password_hash($passwort, PASSWORD_BCRYPT), 'roles' => '["ROLE_ADMIN"]']); + +echo "\nFertig.\nVerwaltung: Benutzer „umut“, Passwort: $passwort\n"; diff --git a/src/Content/DocumentValidator.php b/src/Content/DocumentValidator.php index 99971ef..7cf4973 100644 --- a/src/Content/DocumentValidator.php +++ b/src/Content/DocumentValidator.php @@ -236,14 +236,14 @@ final class DocumentValidator } } if ('button' === $type) { - $this->url($props['href'] ?? null); + $this->link($props['href'] ?? null); } if ('iconcard' === $type) { $this->require(in_array($props['icon'] ?? null, self::ICONS, true), 'Unknown icon.'); $this->text($props['title'] ?? null, 120); $this->text($props['text'] ?? null, 600, true); if ('' !== ($props['href'] ?? '')) { - $this->url($props['href']); + $this->link($props['href']); } } if ('stat' === $type) { @@ -261,7 +261,7 @@ final class DocumentValidator $this->text($props['title'] ?? null, 160); $this->text($props['text'] ?? null, 600, true); $this->text($props['buttonText'] ?? null, 80); - $this->url($props['href'] ?? null); + $this->link($props['href'] ?? null); } if ('contact' === $type) { foreach (['phone', 'email', 'address'] as $field) { @@ -329,7 +329,7 @@ final class DocumentValidator $this->text($props['label'] ?? null, 120, $props['decorative']); $this->require(!$props['decorative'] || '' === $props['label'], 'Ein dekoratives Symbol hat keine Beschriftung.'); if ('' !== ($props['href'] ?? '')) { - $this->url($props['href']); + $this->link($props['href']); } } if ('social' === $type) { @@ -414,7 +414,7 @@ final class DocumentValidator // Kopfbereich ohne Verweis auf die Startseite ist der erste Klick, den jeder sucht. if ('' !== ($props['href'] ?? '')) { $this->require($schemaVersion >= 17, 'Ein verlinktes Bild braucht Schema v17.'); - $this->url($props['href']); + $this->link($props['href']); } // Was ein Klick auf das Bild tut. Ohne Angabe: nichts - wie bisher. if (isset($props['click'])) { @@ -498,6 +498,38 @@ final class DocumentValidator $this->require($local || $external || 1 === preg_match('/^#[a-zA-Z][a-zA-Z0-9_-]*$/D', $url), 'Only local paths, fragments and HTTPS URLs are allowed.'); } + /** + * Ein Linkziel: alles, was url() erlaubt, dazu tel: und mailto: - dieselben Ziele, die Menü + * (MenuRepository::url) und formatierter Text (RichText::safeHref) schon kennen. Ein Knopf + * „Jetzt anrufen“ war sonst nur als Textlink im Knopf-Aussehen zu bauen (Hüfner, 06.10.2026). + * Bildquellen und eingebettete Inhalte bleiben bei url(): dort ist tel: kein Ziel. + */ + private function link(mixed $url): void + { + if (is_string($url) && strlen($url) <= 2048 && !preg_match('/[\x00-\x20\\\\]/', $url)) { + if (1 === preg_match('/^tel:\+?[0-9()-]{3,32}$/D', $url)) { + return; + } + // Adresse vor dem ersten ?, danach höchstens Betreff und Text, prozentkodiert. + if (1 === preg_match('/^mailto:([^?]+)(\?[A-Za-z0-9%._~=&+-]{0,500})?$/D', $url, $teile) + && false !== filter_var(rawurldecode($teile[1]), FILTER_VALIDATE_EMAIL)) { + return; + } + } + $this->require(true === $this->isUrl($url), 'Erlaubt sind lokale Pfade, Sprungmarken, HTTPS-Adressen sowie tel: und mailto:.'); + } + + private function isUrl(mixed $url): bool + { + try { + $this->url($url); + + return true; + } catch (InvalidDocument) { + return false; + } + } + private function require(bool $condition, string $message): void { if (!$condition) { diff --git a/tests/CmsTest.php b/tests/CmsTest.php index 12c5711..25ae2df 100644 --- a/tests/CmsTest.php +++ b/tests/CmsTest.php @@ -187,7 +187,10 @@ final class CmsTest extends TestCase $bad = $base; $bad['blocks'][] = $base['blocks'][0]; yield 'duplicate IDs' => [$bad]; - foreach (['javascript:alert(1)', 'data:text/html,hi', '//evil.test', '/\\evil.test', "https://example.test/\nfoo"] as $url) { + // tel: und mailto: sind Linkziele, aber nur in sauberer Form: keine Buchstaben in der + // Nummer, eine echte Adresse, kein Weg aus dem Attribut. + foreach (['javascript:alert(1)', 'data:text/html,hi', '//evil.test', '/\\evil.test', "https://example.test/\nfoo", + 'tel:ruf-mich-an', 'tel:+49 7229 6992826', 'mailto:keine-adresse', 'mailto:a@b.de?subject="x"', 'mailto:a@b.de?subject=