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

+14
View File
@@ -1,6 +1,20 @@
# Für Apache-Webspace (z. B. IONOS, Strato, All-Inkl). Auf anderen Servern wird die Datei ignoriert.
ErrorDocument 404 /404.html
# Adressen der alten WordPress-Seite auf die neuen Seiten umleiten
# (Google-Treffer, Lesezeichen und die Links im PetWorkers-Portal auf /impressum/ und /kontakt/)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(hundetraining|einzeltraining-hausbesuch|gruppenstunden-aussentraining|preise-hundetraining)/?$ /hundeschule.html [R=301,L]
RewriteRule ^(einfache-rationspruefung|beratungsablauf|erst-anamnesegespraech|futterplaene|welpe-zum-junghund|welpe-und-junghund|erwachsener-hund|seniorenplan|der-seniorenplan|erkrankter-hund|aufbau-reduktionsplan|urlaubsplan-2|der-urlaubsplan)/?$ /ernaehrung.html [R=301,L]
RewriteRule ^category/futterplan(/.*)?$ /ernaehrung.html [R=301,L]
RewriteRule ^(ueber-mich|qualifikationen)/?$ /ueber-mich.html [R=301,L]
RewriteRule ^(shop|coming-soon)/?$ /shop.html [R=301,L]
RewriteRule ^impressum/?$ /impressum.html [R=301,L]
RewriteRule ^datenschutz/?$ /datenschutz.html [R=301,L]
RewriteRule ^kontakt/?$ /#kontakt [R=301,NE,L]
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript image/svg+xml
</IfModule>
+22 -23
View File
@@ -1,7 +1,6 @@
<!doctype html>
<html lang="de">
<head>
<base href="/">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Seite nicht gefunden – Schmacko Napf</title>
@@ -16,23 +15,23 @@
<meta property="og:description" content="Diese Seite gibt es leider nicht.">
<meta property="og:url" content="https://schmacko-napf.de/404.html">
<meta property="og:image" content="https://schmacko-napf.de/assets/img/vorschau.jpg">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="preload" href="assets/fonts/questrial-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="assets/site.css?v=00c6919d">
<link rel="icon" href="/assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="preload" href="/assets/fonts/questrial-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/site.css?v=ee527775">
</head>
<body>
<a class="skip" href="#inhalt">Zum Inhalt springen</a>
<header class="site-header">
<div class="header-inner">
<a class="brand" href="index.html" aria-label="Schmacko Napf – Startseite"><img src="assets/img/logo.webp" alt="Schmacko Napf &amp; Hundetraining by Katha" width="68" height="68"></a>
<a class="brand" href="/index.html" aria-label="Schmacko Napf – Startseite"><img src="/assets/img/logo.webp" alt="Schmacko Napf &amp; Hundetraining by Katha" width="68" height="68"></a>
<nav class="nav" aria-label="Hauptmenü">
<a href="hundeschule.html">Hundetraining</a>
<a href="ernaehrung.html">Ernährung</a>
<a href="shop.html">Shop</a>
<a href="transportboxen.html">Transportboxen</a>
<a href="ueber-mich.html">Über mich</a>
<a href="index.html#kontakt">Kontakt</a>
<a href="/hundeschule.html">Hundetraining</a>
<a href="/ernaehrung.html">Ernährung</a>
<a href="/shop.html">Shop</a>
<a href="/transportboxen.html">Transportboxen</a>
<a href="/ueber-mich.html">Über mich</a>
<a href="/index.html#kontakt">Kontakt</a>
</nav>
<a class="book-btn" href="https://schmacko-napf.petworkers.app/" target="_blank" rel="noopener"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3.5" y="5" width="17" height="15" rx="2.5"/><path d="M3.5 10h17M8 3v4M16 3v4"/></svg><span class="book-long">Termin buchen</span><span class="book-short" aria-hidden="true">Buchen</span></a>
<button class="burger" type="button" aria-label="Menü öffnen" aria-expanded="false"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 7h16M4 12h16M4 17h16"/></svg></button>
@@ -43,26 +42,26 @@
<span class="kicker">Fehler 404</span>
<h1 class="display">Hier ist leider<br>nichts zu finden.</h1>
<p class="big">Vielleicht hat ein Hund die Seite vergraben. Über die Startseite findest du alles wieder.</p>
<div class="btn-row"><a class="btn btn--sage" href="index.html">Zur Startseite <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></a></div>
<div class="btn-row"><a class="btn btn--sage" href="/index.html">Zur Startseite <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></a></div>
</div>
<footer class="site-footer">
<div class="footer-brand">
<a class="footer-logo" href="index.html"><img src="assets/img/logo.webp" alt="Schmacko Napf &amp; Hundetraining by Katha" width="88" height="88" loading="lazy"></a>
<a class="footer-logo" href="/index.html"><img src="/assets/img/logo.webp" alt="Schmacko Napf &amp; Hundetraining by Katha" width="88" height="88" loading="lazy"></a>
<span>Ernährung, Gesundheit und Training –<br>mit Herz und Verstand.</span>
<img class="footer-cert" src="assets/img/gh-siegel.webp" alt="Zertifiziert nach G&amp;H Tierernährung – Gesund gefüttert Heidi Herrmann" width="480" height="329" loading="lazy">
<img class="footer-cert" src="/assets/img/gh-siegel.webp" alt="Zertifiziert nach G&amp;H Tierernährung – Gesund gefüttert Heidi Herrmann" width="480" height="329" loading="lazy">
</div>
<nav class="footer-links" aria-label="Footer">
<a href="hundeschule.html">Hundetraining</a>
<a href="ernaehrung.html">Ernährung</a>
<a href="shop.html">Shop</a>
<a href="transportboxen.html">Transportboxen</a>
<a href="ueber-mich.html">Über mich</a>
<a href="impressum.html">Impressum</a>
<a href="datenschutz.html">Datenschutz</a>
<a href="/hundeschule.html">Hundetraining</a>
<a href="/ernaehrung.html">Ernährung</a>
<a href="/shop.html">Shop</a>
<a href="/transportboxen.html">Transportboxen</a>
<a href="/ueber-mich.html">Über mich</a>
<a href="/impressum.html">Impressum</a>
<a href="/datenschutz.html">Datenschutz</a>
</nav>
<div class="footer-meta"><span>© 2026 Schmacko Napf &amp; Hundetraining by Katha</span><span>Fotos: Steffi Biller, KK-Fotografie · Unsplash</span></div>
</footer>
</main>
<script src="assets/site.js?v=4a2c8d49"></script>
<script src="/assets/site.js?v=1b827e6e"></script>
</body>
</html>
+7
View File
@@ -24,8 +24,14 @@ Neue Website für Katha (bisher WordPress auf `schmacko-napf.de`). Statisches HT
Alle „Termin buchen“-Knöpfe führen zu Kathas Buchungsportal **PetWorkers** (`https://schmacko-napf.petworkers.app`): Kopfleiste, Kontakt-Fläche, Buchungs-Fläche auf Start/Hundetraining/Ernährung und die Buchen-Knöpfe in den Trainings-Flächen. Die einzelnen Links stehen zentral in `BOOK` in `tools/build_pages.py`.
Verlinkt werden die Portal-Seiten direkt über ihre ID (`index.php?id=…`). Die Adressen `seite.php?name=ernaehrungsberatung` und `…name=kaufberatung` leiten im Portal nur auf die Startseite um. Für die Kaufberatung gibt es im Portal noch keine eigene Seite, deshalb fehlt sie in den Buchungs-Flächen. Sobald Katha eine anlegt, in `BOOK` ergänzen.
Die alte Seite verlinkte für das Ernährungs-Erstgespräch teilweise auch Microsoft Bookings – die neue Seite nutzt einheitlich PetWorkers.
## Alte Adressen
`.htaccess` leitet die Adressen der alten WordPress-Seite (z. B. `/hundetraining/`, `/futterplaene/`, `/impressum/`, `/kontakt/`) per 301 auf die neuen Seiten um. So landen Google-Treffer, Lesezeichen und die Links im PetWorkers-Portal nicht auf der Fehlerseite.
## Lokal ansehen
```bash
@@ -53,3 +59,4 @@ Alles außer `tools/`, `README.md` und `.git` in das Hauptverzeichnis des Webspa
- Texte für Shop und Transportboxen mit Katha abstimmen (aktuell allgemein formuliert).
- Impressum und Datenschutz rechtlich prüfen lassen; im Datenschutz ggf. den Hosting-Anbieter namentlich nennen.
- Nutzungsrecht der Fotos von KK-Fotografie (Steffi Biller) für die neue Seite bestätigen.
- Im PetWorkers-Portal (Katha): Die Knöpfe „Ernährungsberatung“ und „Kaufberatung“ auf der Portal-Startseite führen ins Leere. Der Text der Ernährungs-Seite (`id=107`) spricht noch von „DogWorkers“ (Vorlagentext).
+40 -18
View File
@@ -46,7 +46,7 @@ body {
overflow-x: hidden;
}
a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; }
img { display: block; max-width: 100%; height: auto; }
h1, h2, h3 { font-weight: 400; line-height: 1.05; letter-spacing: -.025em; margin: 0; }
p { margin: 0; }
svg { flex: none; }
@@ -60,6 +60,10 @@ svg { flex: none; }
}
.skip:focus { transform: none; }
/* Tastatur-Fokus: dunkler Ring auf hellem Grund, Salbei auf dunklen Flächen */
:focus-visible { outline: 3px solid var(--ink); outline-offset: 3px; }
.panel--ink :focus-visible, .panel--photo :focus-visible, .site-footer :focus-visible { outline-color: var(--sage); }
/* ===== Header: Logo und Menü als zwei schwebende Elemente ===== */
.site-header {
position: sticky; top: 0; z-index: 50;
@@ -239,7 +243,6 @@ svg { flex: none; }
.tile:hover .tile-arrow { background: var(--sage); border-color: var(--sage); color: var(--ink); }
.tile:hover .tile-arrow svg { transform: rotate(-45deg); }
}
.tile:focus-visible, .btn:focus-visible, .nav a:focus-visible { outline: 3px solid var(--sage); outline-offset: 3px; }
/* Logo-Siegel in der Mitte */
.seal {
@@ -375,6 +378,8 @@ a.panel:hover .panel-arrow { background: var(--sage); border-color: var(--sage);
a.panel:hover .panel-arrow svg { transform: rotate(-45deg); }
.panel-arrow--ink { background: var(--ink); border-color: var(--ink); }
/* Steht die Überschrift oben (Handy), darf sie nicht unter den Pfeil laufen */
.panel-arrow--ink ~ .kicker { padding-right: 64px; }
/* Kurze Fakten als Pillen */
.facts { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 30px; }
@@ -461,6 +466,14 @@ a.panel:hover .panel-arrow svg { transform: rotate(-45deg); }
.price-rows small { display: block; font-size: 1.05rem; color: var(--muted); margin-top: 6px; letter-spacing: 0; }
.price-rows strong { font-weight: 400; white-space: nowrap; font-size: clamp(1.6rem, 2.6vw, 2.4rem); }
/* Dreier-Reihen: Überschriften, Texte und Preise auf einer Linie, auch wenn ein Text kürzer ist */
@media (min-width: 981px) {
.row--3 { grid-template-rows: 1fr auto auto; min-height: min(62svh, 620px); } /* Höhe wie .panel--mid – im Subgrid zählt die der Flächen nicht */
.row--3 > .panel { display: grid; grid-row: span 3; grid-template-rows: subgrid; row-gap: 0; justify-content: stretch; }
.row--3 > .panel > * { align-self: start; }
.row--3 > .panel > .kicker { align-self: end; }
}
/* Icon in Flächen */
.panel-icon {
width: 76px; height: 76px;
@@ -490,7 +503,7 @@ a.panel:hover .panel-arrow svg { transform: rotate(-45deg); }
.book-links a:hover { background: var(--ink); color: var(--bg); }
.book-links svg { width: 22px; height: 22px; transition: transform .4s var(--ease); }
.book-links a:hover svg { transform: translate(2px, -2px); }
.book-links a:only-child { grid-column: 1 / -1; }
.book-links a:last-child:nth-child(odd) { grid-column: 1 / -1; }
/* G&H-Zertifikat */
.cert { display: block; width: clamp(150px, 13vw, 200px); height: auto; margin-top: 36px; }
@@ -549,18 +562,28 @@ a.panel:hover .panel-arrow svg { transform: rotate(-45deg); }
.d1 { transition-delay: .1s; }
.d2 { transition-delay: .2s; }
.tile:focus-visible, .btn:focus-visible, .nav a:focus-visible, a.panel:focus-visible { outline: 3px solid var(--sage); outline-offset: 3px; }
/* ===== Responsive ===== */
@media (max-width: 1100px) {
.steps { grid-template-columns: repeat(2, 1fr); row-gap: 34px; }
.nav a { padding: 10px 12px; font-size: 1rem; }
}
@media (max-width: 980px) {
.header-inner { gap: 10px; }
.nav { display: none; }
.burger { display: grid; margin-left: 10px; }
.burger { display: grid; margin-left: 0; }
.book-btn { margin-left: auto; }
.booking { grid-template-columns: 1fr; align-items: start; }
.booking { grid-template-columns: minmax(0, 1fr); align-items: start; }
/* Logo-Siegel über den Kacheln – mittig wäre es den Beschriftungen im Weg */
.tiles { grid-template-rows: auto 1fr 1fr; }
.seal {
position: static;
grid-column: 1 / -1;
width: 190px;
margin: 0 auto;
transform: scale(.9);
}
@keyframes seal { to { opacity: 1; transform: none; } }
.seal-joint { display: none; }
.menu-open .nav {
display: flex; flex-direction: column; gap: 4px;
position: fixed; top: 88px; left: var(--pad); right: var(--pad);
@@ -583,7 +606,7 @@ a.panel:hover .panel-arrow svg { transform: rotate(-45deg); }
.header-inner { height: 76px; }
.brand { width: 62px; height: 62px; }
.book-btn { height: 54px; padding: 0 18px; font-size: 1rem; }
.book-links { grid-template-columns: 1fr; }
.book-links { grid-template-columns: minmax(0, 1fr); }
.footer-cert { height: 72px; }
.brand img { width: 58px; height: 58px; }
.burger { width: 54px; height: 54px; }
@@ -592,15 +615,10 @@ a.panel:hover .panel-arrow svg { transform: rotate(-45deg); }
.tiles { grid-template-columns: 1fr; grid-template-rows: none; gap: 12px; }
.tile { height: 44svh; min-height: 260px; }
.tile:nth-of-type(even) .tile-foot { flex-direction: row; text-align: left; }
.tile-arrow { width: 50px; height: 50px; }
.seal {
position: static;
width: 210px;
margin: 4px auto -6px;
transform: scale(.9);
}
@keyframes seal { to { opacity: 1; transform: none; } }
.seal-joint { display: none; }
.tile-foot { gap: 12px; }
.tile-label { font-size: clamp(1.4rem, 6.6vw, 1.7rem); }
.tile-arrow { width: 46px; height: 46px; }
.seal { width: 210px; margin: 4px auto -6px; }
.scroll-hint { display: none; }
.mosaic { gap: 12px; padding: 0 16px 16px; }
.row { gap: 12px; }
@@ -610,6 +628,10 @@ a.panel:hover .panel-arrow svg { transform: rotate(-45deg); }
.contact-links a { padding: 18px 18px; }
.page-hero { min-height: calc(100svh - 76px - 16px); }
.footer-brand { flex-direction: column; align-items: flex-start; }
/* lange Wörter („Transportboxen“, „Konsequenz“) passen auch auf schmale Handys */
.page-hero h1 { font-size: min(3.2rem, 11vw); }
.display { font-size: min(2.8rem, 12.5vw); }
.words li { font-size: min(2.4rem, 10.5vw); }
}
.book-short { display: none; }
@@ -627,6 +649,6 @@ a.panel:hover .panel-arrow svg { transform: rotate(-45deg); }
.scroll-hint { animation: none; }
.reveal { opacity: 1; transform: none; transition: none; }
}
@media (prefers-reduced-motion: reduce) and (max-width: 767px) {
@media (prefers-reduced-motion: reduce) and (max-width: 980px) {
.seal { transform: none; }
}
+22 -12
View File
@@ -1,31 +1,41 @@
(() => {
const body = document.body;
// Mobiles Menü
// Mobiles Menü – schließt auch mit Escape oder Tipp daneben
const burger = document.querySelector('.burger');
if (burger) {
burger.addEventListener('click', () => {
const open = body.classList.toggle('menu-open');
const setMenu = open => {
body.classList.toggle('menu-open', open);
burger.setAttribute('aria-expanded', open);
burger.setAttribute('aria-label', open ? 'Menü schließen' : 'Menü öffnen');
};
burger.addEventListener('click', () => setMenu(!body.classList.contains('menu-open')));
document.querySelectorAll('.nav a').forEach(a => a.addEventListener('click', () => setMenu(false)));
document.addEventListener('keydown', e => {
if (e.key === 'Escape' && body.classList.contains('menu-open')) { setMenu(false); burger.focus(); }
});
document.addEventListener('click', e => {
if (body.classList.contains('menu-open') && !e.target.closest('.nav, .burger')) setMenu(false);
});
document.querySelectorAll('.nav a').forEach(a =>
a.addEventListener('click', () => {
body.classList.remove('menu-open');
burger.setAttribute('aria-expanded', 'false');
})
);
}
// Startseite: Header einblenden, sobald der Hero verlassen wird
// Startseite: Header einblenden, sobald der Hero verlassen wird. Auf Handy/Tablet steht das
// Siegel über den Kacheln – dort kommt der Header schon, sobald das Siegel aus dem Bild ist.
const hero = document.querySelector('.hero');
const seal = document.querySelector('.seal');
if (body.classList.contains('is-home') && hero) {
new IntersectionObserver(([e]) => body.classList.toggle('scrolled', !e.isIntersecting), {
const past = { hero: false, seal: false };
const update = () => body.classList.toggle('scrolled', past.hero || past.seal);
new IntersectionObserver(([e]) => { past.hero = !e.isIntersecting; update(); }, {
rootMargin: '-120px 0px 0px 0px'
}).observe(hero);
if (seal) new IntersectionObserver(([e]) => {
past.seal = !e.isIntersecting && e.boundingClientRect.top < 0 && getComputedStyle(seal).position === 'static';
update();
}).observe(seal);
}
// Ring um das Logo-Siegel: Kreis + die vier Kachel-Lücken, Übergänge mit Radius f abgerundet
const seal = document.querySelector('.seal');
const joint = document.querySelector('.seal-joint');
if (seal && joint) {
const drawJoint = () => {
+2 -2
View File
@@ -18,7 +18,7 @@
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="preload" href="assets/fonts/questrial-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="assets/site.css?v=00c6919d">
<link rel="stylesheet" href="assets/site.css?v=ee527775">
</head>
<body>
<a class="skip" href="#inhalt">Zum Inhalt springen</a>
@@ -86,6 +86,6 @@
<div class="footer-meta"><span>© 2026 Schmacko Napf &amp; Hundetraining by Katha</span><span>Fotos: Steffi Biller, KK-Fotografie · Unsplash</span></div>
</footer>
</main>
<script src="assets/site.js?v=4a2c8d49"></script>
<script src="assets/site.js?v=1b827e6e"></script>
</body>
</html>
+4 -4
View File
@@ -17,7 +17,7 @@
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="preload" href="assets/fonts/questrial-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="assets/site.css?v=00c6919d">
<link rel="stylesheet" href="assets/site.css?v=ee527775">
</head>
<body>
<a class="skip" href="#inhalt">Zum Inhalt springen</a>
@@ -39,7 +39,7 @@
<main class="mosaic" id="inhalt">
<section class="panel panel--photo page-hero">
<img src="assets/img/futternapf.webp" srcset="assets/img/futternapf-900.webp 900w, assets/img/futternapf.webp 1800w" sizes="100vw" alt="Hund schnuppert an einem Napf mit Trockenfutter">
<span class="kicker">Ernährungs- &amp; Gesundheitsberatung</span>
<span class="kicker">Ernährungs- &amp; Gesundheits&shy;beratung</span>
<h1>Fürsorge<br>in Napfform.</h1>
<p class="big">Individuelle Futterpläne – gesund, sensibel oder mit Diagnose.</p>
</section>
@@ -91,7 +91,7 @@
<p class="big">Erstgespräch und Futterplan direkt online buchen – vor Ort, am Telefon oder online.</p>
</div>
<div class="book-links">
<a href="https://schmacko-napf.petworkers.app/seite.php?name=ernaehrungsberatung" target="_blank" rel="noopener"><span>Ernährungsberatung</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/index.php?id=107" target="_blank" rel="noopener"><span>Ernährungs&shy;beratung</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
</div>
</div>
@@ -126,6 +126,6 @@
<div class="footer-meta"><span>© 2026 Schmacko Napf &amp; Hundetraining by Katha</span><span>Fotos: Steffi Biller, KK-Fotografie · Unsplash</span></div>
</footer>
</main>
<script src="assets/site.js?v=4a2c8d49"></script>
<script src="assets/site.js?v=1b827e6e"></script>
</body>
</html>
+6 -7
View File
@@ -17,7 +17,7 @@
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="preload" href="assets/fonts/questrial-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="assets/site.css?v=00c6919d">
<link rel="stylesheet" href="assets/site.css?v=ee527775">
</head>
<body>
<a class="skip" href="#inhalt">Zum Inhalt springen</a>
@@ -50,7 +50,7 @@
<h2 class="title">Individuell.<br>Bei dir zu Hause.</h2>
<p class="big">Für Grundgehorsam, Unsicherheit, Leinenführigkeit oder einen neuen Hund im Haus.</p>
<div class="price-big"><strong>60 €</strong><span>pro Stunde · nach dem Erstgespräch (120 €, ca. 2 Std.)</span></div>
<div class="btn-row"><a class="btn btn--ink" href="https://schmacko-napf.petworkers.app/seite.php?name=einzelcoaching&amp;id=11&amp;sysname=coaching" target="_blank" rel="noopener">Einzelcoaching buchen <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a></div>
<div class="btn-row"><a class="btn btn--ink" href="https://schmacko-napf.petworkers.app/index.php?id=11" target="_blank" rel="noopener">Einzelcoaching buchen <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a></div>
</div>
<div class="panel panel--photo plain reveal d1"><img src="assets/img/hund-wald.webp" srcset="assets/img/hund-wald-900.webp 900w, assets/img/hund-wald.webp 1417w" sizes="(max-width: 980px) 100vw, 55vw" alt="Schwarze Schäferhündin steht aufmerksam im Wald" loading="lazy"></div>
</div>
@@ -63,7 +63,7 @@
<p class="big">In der Stadt, im Grünen, in Geschäften – mit max. 6 Mensch-Hund-Teams.</p>
<div class="price-big"><strong>18 €</strong><span>pro Mensch-Hund-Team</span></div>
<div class="btn-row">
<a class="btn btn--sage" href="https://schmacko-napf.petworkers.app/seite.php?name=gruppenstunden&amp;id=12&amp;sysname=groups" target="_blank" rel="noopener">Gruppenstunde buchen <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a class="btn btn--sage" href="https://schmacko-napf.petworkers.app/index.php?id=12" target="_blank" rel="noopener">Gruppenstunde buchen <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a class="btn btn--line" href="https://schmacko-napf.petworkers.app/index.php?view=kalender" target="_blank" rel="noopener">Stundenplan <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
</div>
</div>
@@ -98,10 +98,9 @@
<p class="big">Freie Termine, Kurse und der Stundenplan – direkt in meinem Buchungsportal.</p>
</div>
<div class="book-links">
<a href="https://schmacko-napf.petworkers.app/seite.php?name=einzelcoaching&amp;id=11&amp;sysname=coaching" target="_blank" rel="noopener"><span>Einzelcoaching</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/seite.php?name=gruppenstunden&amp;id=12&amp;sysname=groups" target="_blank" rel="noopener"><span>Gruppenstunden</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/index.php?id=11" target="_blank" rel="noopener"><span>Einzelcoaching</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/index.php?id=12" target="_blank" rel="noopener"><span>Gruppenstunden</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/index.php?id=13" target="_blank" rel="noopener"><span>Kurse &amp; Workshops</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/seite.php?name=kaufberatung" target="_blank" rel="noopener"><span>Kaufberatung</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/index.php?view=kalender" target="_blank" rel="noopener"><span>Stundenplan</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
</div>
</div>
@@ -137,6 +136,6 @@
<div class="footer-meta"><span>© 2026 Schmacko Napf &amp; Hundetraining by Katha</span><span>Fotos: Steffi Biller, KK-Fotografie · Unsplash</span></div>
</footer>
</main>
<script src="assets/site.js?v=4a2c8d49"></script>
<script src="assets/site.js?v=1b827e6e"></script>
</body>
</html>
+3 -3
View File
@@ -18,7 +18,7 @@
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="preload" href="assets/fonts/questrial-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="assets/site.css?v=00c6919d">
<link rel="stylesheet" href="assets/site.css?v=ee527775">
</head>
<body>
<a class="skip" href="#inhalt">Zum Inhalt springen</a>
@@ -46,7 +46,7 @@
<p><b>Kontakt</b>Telefon: <a href="tel:+4917656932942">+49 176 569 329 42</a><br>E-Mail: <a href="mailto:info@schmacko-napf.de">info@schmacko-napf.de</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>
@@ -68,6 +68,6 @@
<div class="footer-meta"><span>© 2026 Schmacko Napf &amp; Hundetraining by Katha</span><span>Fotos: Steffi Biller, KK-Fotografie · Unsplash</span></div>
</footer>
</main>
<script src="assets/site.js?v=4a2c8d49"></script>
<script src="assets/site.js?v=1b827e6e"></script>
</body>
</html>
+7 -8
View File
@@ -17,7 +17,7 @@
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="preload" href="assets/fonts/questrial-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="assets/site.css?v=00c6919d">
<link rel="stylesheet" href="assets/site.css?v=ee527775">
</head>
<body class="is-home">
<a class="skip" href="#inhalt">Zum Inhalt springen</a>
@@ -50,7 +50,7 @@
<a class="tile" href="ernaehrung.html">
<img src="assets/img/futternapf.webp" srcset="assets/img/futternapf-900.webp 900w, assets/img/futternapf.webp 1800w" sizes="(max-width: 767px) 100vw, 50vw" alt="Hund schnuppert an einem Napf mit Trockenfutter">
<span class="tile-foot">
<span class="tile-label">Ernährungsberatung</span>
<span class="tile-label">Ernährungs&shy;beratung</span>
<span class="tile-arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span>
</span>
</a>
@@ -104,7 +104,7 @@
<div class="panel panel--sage plate-panel reveal"><img src="assets/img/barf-teller.webp" 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"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></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>
@@ -149,11 +149,10 @@
<p class="big">Freie Termine, Kurse und der Stundenplan – direkt in meinem Buchungsportal.</p>
</div>
<div class="book-links">
<a href="https://schmacko-napf.petworkers.app/seite.php?name=einzelcoaching&amp;id=11&amp;sysname=coaching" target="_blank" rel="noopener"><span>Einzelcoaching</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/seite.php?name=gruppenstunden&amp;id=12&amp;sysname=groups" target="_blank" rel="noopener"><span>Gruppenstunden</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/index.php?id=11" target="_blank" rel="noopener"><span>Einzelcoaching</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/index.php?id=12" target="_blank" rel="noopener"><span>Gruppenstunden</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/index.php?id=13" target="_blank" rel="noopener"><span>Kurse &amp; Workshops</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/seite.php?name=ernaehrungsberatung" target="_blank" rel="noopener"><span>Ernährungsberatung</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/seite.php?name=kaufberatung" target="_blank" rel="noopener"><span>Kaufberatung</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/index.php?id=107" target="_blank" rel="noopener"><span>Ernährungs&shy;beratung</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
<a href="https://schmacko-napf.petworkers.app/index.php?view=kalender" target="_blank" rel="noopener"><span>Stundenplan</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17 17 7M9 7h8v8"/></svg></a>
</div>
</div>
@@ -189,6 +188,6 @@
<div class="footer-meta"><span>© 2026 Schmacko Napf &amp; Hundetraining by Katha</span><span>Fotos: Steffi Biller, KK-Fotografie · Unsplash</span></div>
</footer>
</main>
<script src="assets/site.js?v=4a2c8d49"></script>
<script src="assets/site.js?v=1b827e6e"></script>
</body>
</html>
+2 -2
View File
@@ -17,7 +17,7 @@
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="preload" href="assets/fonts/questrial-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="assets/site.css?v=00c6919d">
<link rel="stylesheet" href="assets/site.css?v=ee527775">
</head>
<body>
<a class="skip" href="#inhalt">Zum Inhalt springen</a>
@@ -85,6 +85,6 @@
<div class="footer-meta"><span>© 2026 Schmacko Napf &amp; Hundetraining by Katha</span><span>Fotos: Steffi Biller, KK-Fotografie · Unsplash</span></div>
</footer>
</main>
<script src="assets/site.js?v=4a2c8d49"></script>
<script src="assets/site.js?v=1b827e6e"></script>
</body>
</html>
+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
+2 -2
View File
@@ -17,7 +17,7 @@
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="preload" href="assets/fonts/questrial-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="assets/site.css?v=00c6919d">
<link rel="stylesheet" href="assets/site.css?v=ee527775">
</head>
<body>
<a class="skip" href="#inhalt">Zum Inhalt springen</a>
@@ -92,6 +92,6 @@
<div class="footer-meta"><span>© 2026 Schmacko Napf &amp; Hundetraining by Katha</span><span>Fotos: Steffi Biller, KK-Fotografie · Unsplash</span></div>
</footer>
</main>
<script src="assets/site.js?v=4a2c8d49"></script>
<script src="assets/site.js?v=1b827e6e"></script>
</body>
</html>
+2 -2
View File
@@ -17,7 +17,7 @@
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="preload" href="assets/fonts/questrial-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="assets/site.css?v=00c6919d">
<link rel="stylesheet" href="assets/site.css?v=ee527775">
</head>
<body>
<a class="skip" href="#inhalt">Zum Inhalt springen</a>
@@ -120,6 +120,6 @@
<div class="footer-meta"><span>© 2026 Schmacko Napf &amp; Hundetraining by Katha</span><span>Fotos: Steffi Biller, KK-Fotografie · Unsplash</span></div>
</footer>
</main>
<script src="assets/site.js?v=4a2c8d49"></script>
<script src="assets/site.js?v=1b827e6e"></script>
</body>
</html>