Prüfdurchgang: Buchungslinks, alte Adressen, Tablet/Handy-Layout

- Buchungslinks direkt auf Portal-IDs; Ernährungsberatung auf id=107,
  Kaufberatung entfernt (im Portal gibt es keine Seite dafür)
- .htaccess: alte WordPress-Adressen per 301 auf die neuen Seiten
- Tablet bis 980 px: Logo-Siegel über den Kacheln statt darauf
- Handy: lange Wörter werden nicht mehr abgeschnitten, Pfeile
  überdecken keinen Text mehr, „Buchen“ neben dem Menü-Knopf
- Dreier-Karten: Überschriften auf einer Linie (Subgrid)
- Menü schließt mit Escape und Tipp daneben; sichtbarer Fokusrahmen
- Startseite Handy/Tablet: Kopfleiste, sobald das Siegel weg ist
- 404: Pfade ab der Wurzel statt <base>, Sprunglink bleibt auf der Seite

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
NotPika69andClaude Opus 5.5 committed 2026-10-04 13:32:54 +02:00
1 parent d154ea13c2
commit fef4ac8eae
14 files changed
+152 -97

No files matched your search

+19 -14
View File
@@ -2,7 +2,7 @@
python3 tools/build_pages.py
"""
import hashlib, os
import hashlib, os, re
from PIL import Image
OUT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -17,14 +17,16 @@ LOGO = "assets/img/logo.webp"
CERT = "assets/img/gh-siegel.webp"
CERT_ALT = "Zertifiziert nach G&amp;H Tierernährung – Gesund gefüttert Heidi Herrmann"
# Buchungsportal (PetWorkers) – & als &amp; für HTML-Attribute
# Buchungsportal (PetWorkers) – & als &amp; für HTML-Attribute.
# Direkt die Seiten-IDs verlinken: Die seite.php?name=…-Adressen leiten um bzw. landen bei
# Ernährungs- und Kaufberatung nur auf der Portal-Startseite. Für Kaufberatung gibt es im
# Portal (Stand Okt. 2026) keine eigene Seite – sobald es eine gibt, hier wieder aufnehmen.
PW = "https://schmacko-napf.petworkers.app/"
BOOK = {
"coach": ("Einzelcoaching", PW + "seite.php?name=einzelcoaching&amp;id=11&amp;sysname=coaching"),
"groups": ("Gruppenstunden", PW + "seite.php?name=gruppenstunden&amp;id=12&amp;sysname=groups"),
"coach": ("Einzelcoaching", PW + "index.php?id=11"),
"groups": ("Gruppenstunden", PW + "index.php?id=12"),
"courses": ("Kurse &amp; Workshops", PW + "index.php?id=13"),
"food": ("Ernährungsberatung", PW + "seite.php?name=ernaehrungsberatung"),
"buy": ("Kaufberatung", PW + "seite.php?name=kaufberatung"),
"food": ("Ernährungs&shy;beratung", PW + "index.php?id=107"),
"cal": ("Stundenplan", PW + "index.php?view=kalender"),
}
EXT = ' target="_blank" rel="noopener"'
@@ -183,7 +185,7 @@ PAGES = [] # für die Sitemap
# ================================================================ Startseite
tiles = [
("hundeschule.html", "Hundeschule", "", "katha-abendlicht", "Katha mit ihrem Hund auf einer Wiese im Abendlicht"),
("ernaehrung.html", "Ernährungsberatung", "", "futternapf", "Hund schnuppert an einem Napf mit Trockenfutter"),
("ernaehrung.html", "Ernährungs&shy;beratung", "", "futternapf", "Hund schnuppert an einem Napf mit Trockenfutter"),
("shop.html", "Shop", "", "laden", "Hund in einem Laden mit Hundezubehör"),
("transportboxen.html", "Transportboxen", "Maßanfertigung fürs Auto", "kofferraum", "Hund sitzt im offenen Kofferraum hinter einem Trenngitter"),
]
@@ -241,7 +243,7 @@ index = head("Schmacko Napf & Hundetraining by Katha",
<div class="panel panel--sage plate-panel reveal"><img src="{BARF}" alt="Teller mit frischem Fleisch, Gemüse und Obst für die Rohfütterung" width="900" height="900" loading="lazy"></div>
<a class="panel panel--cream reveal d1" href="ernaehrung.html">
<span class="panel-arrow panel-arrow--ink">{I["arrow"]}</span>
<span class="kicker">Ernährungsberatung</span>
<span class="kicker">Ernährungs&shy;beratung</span>
<h2 class="display">Gesund<br>gefüttert.</h2>
<p class="big">Individuelle Futterpläne – für jedes Alter, auch bei Magen-Darm- oder Pankreas-Problemen.</p>
<div class="facts"><span class="fact">BARF</span><span class="fact">Koch-BARF</span><span class="fact">Nass- &amp; Trockenfutter</span></div>
@@ -279,7 +281,7 @@ index = head("Schmacko Napf & Hundetraining by Katha",
</a>
</div>
{booking(["coach", "groups", "courses", "food", "buy", "cal"])}{contact()}''' + footer()
{booking(["coach", "groups", "courses", "food", "cal"])}{contact()}''' + footer()
write("index.html", index)
PAGES.append("index.html")
@@ -337,14 +339,14 @@ page("hundeschule.html", "Hundetraining – Schmacko Napf",
</div>
</div>
{booking(["coach", "groups", "courses", "buy", "cal"])}{contact("katha-heide", "Katha sitzt mit ihrer Schäferhündin im Grünen")}''')
{booking(["coach", "groups", "courses", "cal"])}{contact("katha-heide", "Katha sitzt mit ihrer Schäferhündin im Grünen")}''')
PAGES.append("hundeschule.html")
# ================================================================ Ernährung
page("ernaehrung.html", "Ernährungsberatung – Schmacko Napf",
"Individuelle Futterpläne und Gesundheitsberatung für Hunde jeden Alters – BARF, Koch-BARF, Nass- und Trockenfutter.",
"ernaehrung.html",
page_hero("futternapf", "Ernährungs- &amp; Gesundheitsberatung", "Fürsorge<br>in Napfform.",
page_hero("futternapf", "Ernährungs- &amp; Gesundheits&shy;beratung", "Fürsorge<br>in Napfform.",
"Individuelle Futterpläne – gesund, sensibel oder mit Diagnose.",
"Hund schnuppert an einem Napf mit Trockenfutter") + f'''
<div class="row">
@@ -498,7 +500,7 @@ page("impressum.html", "Impressum – Schmacko Napf", "Impressum von Schmacko Na
<p><b>Kontakt</b>Telefon: <a href="{PHONE_HREF}">{PHONE}</a><br>E-Mail: <a href="mailto:{MAIL}">{MAIL}</a></p>
<p><b>Erlaubnis und Aufsichtsbehörde</b>Erlaubnis zur gewerbsmäßigen Ausbildung von Hunden für Dritte nach § 11 Abs. 1 Nr. 8 f TierSchG, erteilt im Oktober 2024 durch das Veterinäramt Landshut.</p>
<p><b>Verantwortlich für den Inhalt nach § 18 Abs. 2 MStV</b>Katharina Schulz, Anschrift wie oben</p>
<p><b>Verbraucherstreitbeilegung</b>Ich bin nicht bereit und nicht verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.</p>
<p><b>Verbraucher&shy;streit&shy;beilegung</b>Ich bin nicht bereit und nicht verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.</p>
<p><b>Bildnachweis</b>Fotos von Katha und ihren Hunden: Steffi Biller, KK-Fotografie. Weitere Bilder: Unsplash.</p>
</div>
</div>
@@ -548,9 +550,12 @@ page("404.html", "Seite nicht gefunden – Schmacko Napf", "Diese Seite gibt es
</div>
''', robots="noindex")
# 404 wird vom Server unter beliebigen Pfaden ausgeliefert – Links und Bilder relativ zur Wurzel auflösen
# 404 wird vom Server unter beliebigen Pfaden ausgeliefert – Links und Bilder ab der Wurzel (/…) angeben.
# Kein <base href="/">: damit würde „Zum Inhalt springen“ (#inhalt) auf die Startseite führen.
p404 = os.path.join(OUT, "404.html")
html404 = open(p404).read().replace("<head>", '<head>\n <base href="/">', 1)
html404 = open(p404).read()
html404 = re.sub(r'srcset="([^"]+)"', lambda m: 'srcset="' + ", ".join("/" + s.strip() for s in m.group(1).split(",")) + '"', html404)
html404 = re.sub(r'\b(href|src)="(?![a-z]+:|#|/)', r'\1="/', html404)
open(p404, "w").write(html404)
# ================================================================ robots.txt & sitemap.xml