"""Quelle aller Seiten. Inhalte hier ändern, dann:
python3 tools/build_pages.py
"""
import hashlib, os, re
from PIL import Image
OUT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SITE = "https://schmacko-napf.de"
def version(path):
# Prüfsumme als ?v=… – Browser laden CSS/JS nach jeder Änderung neu statt aus dem Cache
return hashlib.md5(open(os.path.join(OUT, path), "rb").read()).hexdigest()[:8]
CSS_V, JS_V = version("assets/site.css"), version("assets/site.js")
LOGO = "assets/img/logo.webp"
CERT = "assets/img/gh-siegel.webp"
CERT_ALT = "Zertifiziert nach G&H Tierernährung – Gesund gefüttert Heidi Herrmann"
# Buchungsportal (PetWorkers) – & als & 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 + "index.php?id=11"),
"groups": ("Gruppenstunden", PW + "index.php?id=12"),
"courses": ("Kurse & Workshops", PW + "index.php?id=13"),
"food": ("Ernährungsberatung", PW + "index.php?id=107"),
"cal": ("Stundenplan", PW + "index.php?view=kalender"),
}
EXT = ' target="_blank" rel="noopener"'
BARF = "assets/img/barf-teller.webp"
def img(name, alt, sizes="(max-width: 980px) 100vw, 55vw", lazy=True):
"""Foto aus assets/img mit kleiner (-900) und großer Variante."""
big, small = f"assets/img/{name}.webp", f"assets/img/{name}-900.webp"
wb = Image.open(os.path.join(OUT, big)).width
ws = Image.open(os.path.join(OUT, small)).width
load = ' loading="lazy"' if lazy else ""
return f''
PHONE, PHONE_HREF = "+49 176 569 329 42", "tel:+4917656932942"
MAIL = "info@schmacko-napf.de"
WA = "https://wa.me/4917656932942"
def ic(d, sw="1.8"):
return f''
I = {
"arrow": ic('
{text}