Abnahme vor der Vorstellung: eine tote Kachel gefunden und geschlossen

Morgen wird die Seite als Produkt vorgestellt. Deshalb eine Pruefung,
die es bisher nicht gab: server/pruef-live-abnahme.mjs geht gegen die
ECHTE Domain statt gegen einen Server auf diesem Rechner.

Der Unterschied ist nicht theoretisch. Zwischen "laeuft bei mir" und
"laeuft im Netz" liegen Caddy, Cloudflare, der Cache-Stempel, das
Zertifikat und der Dienst-Neustart -- genau dort ist am 18.08. und am
22.08.2026 schon zweimal etwas haengengeblieben, das lokal tadellos war.

Sie geht 26 Seiten in DREI Gestalten durch:
  RECHNER      1440 px
  HANDY        390 px, mit Fingerbedienung
  INSTALLIERT  als App vom Startbildschirm -- ohne Adresszeile und ohne
               Zurueck-Knopf des Browsers. Dort faellt auf, was man mit
               Browserleiste nie merkt.

Gemessen je Seite: Konsolenfehler, fehlgeschlagene Anfragen, seitlicher
Ueberlauf, tote Verweise, fehlende Bilder, ueberhaupt Inhalt, Titel.
Dazu die App selbst: Manifest, Name, Start ohne Browserleiste, alle vier
Startbildschirm-Symbole einzeln abgefragt, Hintergrunddienst angemeldet
und aktiv.

DER EINE ECHTE FUND: Auf links.html war die Kachel "Merchandise / Shop"
ein <a href="#"> -- sie sah aus wie ein Verweis, liess sich anklicken
und tat nichts. Auf der Kachel steht "Folgt in Kuerze"; genau dann darf
sie nicht klickbar sein. Ein Knopf, der nichts tut, ist schlimmer als
gar keiner: Man drueckt ihn zweimal und haelt die Seite fuer kaputt.
Jetzt ein <div> mit denselben Klassen -- gleiches Aussehen, kein
Versprechen mehr, das die Seite nicht halten kann.

ZWEI FEHLALARME, beide in MEINER Pruefung, beide aufgeschrieben:
  * Sie meldete "fehlende Bilder" auf zwei Seiten. Es waren versteckte
    Platzhalter (<img hidden> ohne src), die JavaScript erst fuellt --
    der Normalzustand. Jetzt zaehlen nur sichtbare Bilder mit Quelle.
  * Sie meldete "manifest.json nicht ladbar", waehrend curl gleichzeitig
    200 lieferte. Die Probe stand noch auf about:blank und holte von
    dort -- fremde Herkunft, der Browser lehnt ab. Sie hat also nicht
    die Seite geprueft, sondern sich selbst. Erst navigieren, dann
    messen.

Die beiden anderen href="#" auf der Seite (index.html, streamplan.html)
bleiben: Sie sind versteckt und werden von JavaScript gefuellt, sobald
es etwas zu verlinken gibt. Geprueft wird nur, was man auch sieht.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-03 09:48:38 +02:00
co-authored by Claude Opus 5
parent 95f54fd211
commit 80639d0bab
30 changed files with 379 additions and 137 deletions
+8
View File
@@ -4723,3 +4723,11 @@ h1, h2, h3 { text-shadow: 0 1px 2px rgba(0, 0, 0, .45); }
.btn::after, .btn-primary::after, .btn-outline::after { display: none; } .btn::after, .btn-primary::after, .btn-outline::after { display: none; }
h1, h2, h3 { text-shadow: none; } h1, h2, h3 { text-shadow: none; }
} }
/* Eine Kachel, die noch nichts dahinter hat (03.09.2026).
Sie sieht aus wie die anderen, verspricht aber nichts: kein Zeiger,
kein Anheben beim Ueberfahren. Der Unterschied ist klein und genau
deshalb richtig -- man merkt ihn erst, wenn man darauf zeigt, und
dann weiss man Bescheid, ohne dass es jemand hinschreiben muss. */
.karte--bald { cursor: default; }
.karte--bald:hover { transform: none; border-color: var(--border); box-shadow: var(--shadow); }
+15 -2
View File
@@ -107,11 +107,24 @@
<h3>Discord</h3> <h3>Discord</h3>
<p class="small muted" data-i18n="lk_discord_hint">Nur auf Anfrage</p> <p class="small muted" data-i18n="lk_discord_hint">Nur auf Anfrage</p>
</a> </a>
<a class="card card-brand card-shop text-center" href="#" target="_blank" rel="noopener"> <!-- KEIN <a> (03.09.2026, Abnahme vor der Vorstellung).
Hier stand eine Kachel mit href="#": Sie sah aus wie ein
Verweis, liess sich anklicken -- und tat nichts. Auf der
Kachel steht "Folgt in Kürze"; genau dann darf sie nicht
klickbar sein. Ein Knopf, der nichts tut, ist schlimmer als
gar keiner: Man drückt ihn zweimal und hält die Seite für
kaputt.
Als <div> bleibt das Aussehen unveraendert (dieselben
Klassen), aber es gibt kein Versprechen mehr, das die Seite
nicht halten kann. Sobald der Shop steht, wird hier wieder
ein <a href="..."> daraus. -->
<div class="card card-brand card-shop text-center karte--bald">
<span class="icon-badge">🛒</span> <span class="icon-badge">🛒</span>
<h3 data-i18n="lk_shop_h3">Merchandise / Shop</h3> <h3 data-i18n="lk_shop_h3">Merchandise / Shop</h3>
<p class="small muted" data-i18n="lk_shop_hint">Folgt in Kürze</p> <p class="small muted" data-i18n="lk_shop_hint">Folgt in Kürze</p>
</a> </div>
<a class="card card-brand card-bewerben text-center" href="bewerben.html"> <a class="card card-brand card-bewerben text-center" href="bewerben.html">
<span class="icon-badge">📝</span> <span class="icon-badge">📝</span>
<h3 data-i18n="lk_bewerben_h3">Bewerben</h3> <h3 data-i18n="lk_bewerben_h3">Bewerben</h3>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 984 KiB

After

Width:  |  Height:  |  Size: 669 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 819 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 904 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 964 KiB

After

Width:  |  Height:  |  Size: 747 KiB

+221
View File
@@ -0,0 +1,221 @@
/* =====================================================================
ABNAHME VOR DER VORSTELLUNG (03.09.2026)
Alle anderen Prüfungen laufen gegen einen Server auf diesem Rechner.
Diese hier geht gegen die ECHTE Domain -- so, wie sie morgen jemand
im Publikum aufruft.
Der Unterschied ist nicht theoretisch: Zwischen "läuft bei mir" und
"läuft im Netz" liegen Caddy, Cloudflare, der Cache-Stempel, das
Zertifikat und der Dienst-Neustart. Genau dort ist am 18.08. und am
22.08.2026 schon zweimal etwas hängengeblieben, das lokal tadellos
war (siehe CLAUDE.md, "Grundregel für ALLE Websites").
Geprüft wird in DREI Gestalten, weil das Publikum sie alle benutzt:
RECHNER 1440 px
HANDY 390 px, mit Fingerbedienung
INSTALLIERT als App vom Startbildschirm -- ohne Adresszeile, ohne
Zurück-Knopf des Browsers. Dort fällt auf, was man mit
Browserleiste nie merkt.
Gemessen wird je Seite:
* Fehler in der Konsole
* fehlgeschlagene Anfragen (4xx/5xx)
* ob etwas seitlich aus dem Bild ragt
* tote Verweise (href="#" oder leer)
* fehlende Bilder
* ob die Seite überhaupt Inhalt hat
===================================================================== */
const BASIS = process.env.ABNAHME_BASIS || "https://dogfather-universe.com";
const SEITEN = [
"/", "/dogfather.html", "/casper.html", "/hasidog.html", "/vanvan.html",
"/community.html", "/streamer.html", "/supporter.html", "/abonnieren.html",
"/bewerben.html", "/bewerben-creator.html", "/bewerben-scout.html",
"/bewerben-modi.html", "/bewerben-kooperation.html",
"/kontakt.html", "/werte.html", "/team-scouts.html", "/team-modis.html",
"/stimmen.html", "/links.html", "/rabattcodes.html", "/streamplan.html",
"/zeitreise.html", "/agb.html", "/webdesign", "/404.html",
];
let fehler = 0;
let geprueft = 0;
const ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; };
const befunde = [];
const EGAL = [
/favicon/i,
/net::ERR_ABORTED/i,
/Download the React DevTools/i,
];
const istEgal = (t) => EGAL.some((r) => r.test(t));
const { chromium } = await import(
"file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
const browser = await chromium.launch();
async function rundgang(name, kontextOptionen, seiten) {
const kontext = await browser.newContext(kontextOptionen);
const seite = await kontext.newPage();
const konsole = [];
const schlecht = [];
seite.on("console", (m) => { if (m.type() === "error" && !istEgal(m.text())) konsole.push(m.text()); });
seite.on("pageerror", (e) => konsole.push("Absturz: " + e.message));
seite.on("response", (a) => {
if (a.status() >= 400 && !istEgal(a.url())) {
schlecht.push(`${a.status()} ${a.url().replace(BASIS, "")}`);
}
});
console.log(`\n===== ${name} =====`);
for (const pfad of seiten) {
konsole.length = 0; schlecht.length = 0;
let antwort = null;
try {
antwort = await seite.goto(BASIS + pfad, { waitUntil: "networkidle", timeout: 40000 });
} catch (e) {
ok(false, `${pfad.padEnd(28)} nicht erreichbar (${e.message.slice(0, 40)})`);
befunde.push({ name, pfad, was: "nicht erreichbar" });
continue;
}
await seite.waitForTimeout(500);
const z = await seite.evaluate(() => {
const sichtbar = (e) => {
const k = e.getBoundingClientRect();
return k.width > 0 && k.height > 0 && getComputedStyle(e).visibility !== "hidden";
};
const tote = [...document.querySelectorAll("a[href]")].filter(sichtbar)
.filter((a) => { const h = a.getAttribute("href"); return !h || h === "#"; })
.map((a) => a.textContent.trim().slice(0, 30));
/* Nur SICHTBARE Bilder mit einer Quelle. Die Seite hat
Platzhalter (<img hidden> ohne src), die JavaScript erst
füllt, wenn es etwas zu zeigen gibt -- die sind kein Fehler,
sondern der Normalzustand. Beim ersten Lauf hat meine Prüfung
genau die gemeldet und damit zwei Seiten falsch beschuldigt. */
const bilderKaputt = [...document.querySelectorAll("img")]
.filter((b) => sichtbar(b) && (b.getAttribute("src") || "").trim())
.filter((b) => b.complete && b.naturalWidth === 0)
.map((b) => (b.getAttribute("src") || "").slice(-40));
return {
tote, bilderKaputt,
laenge: (document.body.innerText || "").trim().length,
ueber: document.documentElement.scrollWidth - document.documentElement.clientWidth,
titel: document.title,
};
});
const probleme = [];
if (antwort && antwort.status() >= 400) probleme.push(`Seite antwortet ${antwort.status()}`);
if (konsole.length) probleme.push("Konsole: " + konsole.slice(0, 2).join(" | ").slice(0, 130));
if (schlecht.length) probleme.push("Server: " + [...new Set(schlecht)].slice(0, 3).join(", "));
if (z.tote.length) probleme.push("tote Verweise: " + z.tote.slice(0, 3).join(", "));
if (z.bilderKaputt.length) probleme.push("fehlende Bilder: " + z.bilderKaputt.slice(0, 2).join(", "));
if (z.ueber > 0) probleme.push(`ragt ${z.ueber}px heraus`);
if (z.laenge < 200 && pfad !== "/404.html") probleme.push(`fast kein Inhalt (${z.laenge})`);
if (!z.titel) probleme.push("kein Seitentitel");
ok(!probleme.length, `${pfad.padEnd(28)} ${probleme.join(" · ")}`);
if (probleme.length) befunde.push({ name, pfad, was: probleme.join(" · ") });
}
await kontext.close();
}
/* ---------- 1. Rechner ---------------------------------------------- */
await rundgang("RECHNER (1440 px)", { viewport: { width: 1440, height: 950 } }, SEITEN);
/* ---------- 2. Handy ------------------------------------------------- */
await rundgang("HANDY (390 px, Finger)", {
viewport: { width: 390, height: 844 },
isMobile: true, hasTouch: true, deviceScaleFactor: 3,
userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 "
+ "(KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1",
}, SEITEN);
/* ---------- 3. Installiert ------------------------------------------- */
/* Als App vom Startbildschirm: kein Adressfeld, kein Zurück-Knopf des
Browsers. Wer sich dort verläuft, kommt nicht mehr heraus -- deshalb
ist diese Gestalt die unbarmherzigste. */
console.log("\n===== INSTALLIERT (App-Ansicht) =====");
const app = await browser.newContext({
viewport: { width: 390, height: 844 },
isMobile: true, hasTouch: true, deviceScaleFactor: 3,
});
const appSeite = await app.newPage();
/* ERST auf die Domain gehen, DANN das Manifest holen.
Beim ersten Lauf stand die Probe noch auf about:blank und holte von
dort -- das ist für den Browser eine fremde Herkunft, und er lehnt
ab. Gemeldet wurde "manifest.json nicht ladbar", während curl
gleichzeitig 200 lieferte. Die Prüfung hat also nicht die Seite
geprüft, sondern sich selbst. */
await appSeite.goto(BASIS + "/", { waitUntil: "domcontentloaded", timeout: 40000 });
const manifest = await appSeite.evaluate(async (basis) => {
const a = await fetch(basis + "/manifest.json");
if (!a.ok) return { fehler: a.status };
return a.json();
}, BASIS).catch(() => ({ fehler: "nicht ladbar" }));
ok(!manifest.fehler, `manifest.json wird ausgeliefert${manifest.fehler ? " (" + manifest.fehler + ")" : ""}`);
ok(!!manifest.name || !!manifest.short_name, `die App hat einen Namen ("${manifest.short_name || manifest.name}")`);
ok(manifest.display === "standalone" || manifest.display === "fullscreen",
`sie startet ohne Browserleiste (display: ${manifest.display})`);
ok(!!manifest.start_url, `sie weiss, wo sie startet (${manifest.start_url})`);
ok(Array.isArray(manifest.icons) && manifest.icons.length > 0,
`sie hat ein Symbol für den Startbildschirm (${manifest.icons?.length || 0})`);
/* Jedes Symbol muss wirklich da sein -- ein fehlendes fällt erst auf,
wenn es als graues Viereck auf dem Startbildschirm klebt. */
for (const symbol of (manifest.icons || []).slice(0, 4)) {
const pfad = symbol.src.startsWith("http") ? symbol.src : BASIS + "/" + symbol.src.replace(/^\//, "");
const status = await appSeite.evaluate(async (u) => {
try { const a = await fetch(u); return a.status; } catch { return 0; }
}, pfad);
ok(status === 200, ` Symbol ${symbol.sizes || ""} vorhanden (${status})`);
}
await appSeite.goto(BASIS + (manifest.start_url || "/"), { waitUntil: "networkidle", timeout: 40000 });
await appSeite.waitForTimeout(1500);
const dienst = await appSeite.evaluate(async () => {
if (!("serviceWorker" in navigator)) return { da: false, grund: "nicht unterstützt" };
const r = await navigator.serviceWorker.getRegistration();
return { da: !!r, umfang: r?.scope || null, aktiv: !!r?.active };
});
ok(dienst.da, `der Hintergrunddienst ist angemeldet${dienst.umfang ? " (" + dienst.umfang + ")" : ""}`);
ok(dienst.aktiv, "und aktiv – die App startet auch ohne Netz");
const appStand = await appSeite.evaluate(() => ({
ueber: document.documentElement.scrollWidth - document.documentElement.clientWidth,
laenge: (document.body.innerText || "").trim().length,
/* In der App gibt es keinen Zurück-Knopf des Browsers. Es MUSS also
auf der Seite selbst ein Weg zurück oder ein Menü geben. */
wege: document.querySelectorAll("a[href]").length,
}));
ok(appStand.ueber <= 0, `nichts ragt seitlich heraus (${appStand.ueber}px)`);
ok(appStand.laenge > 200, `die Startseite hat Inhalt (${appStand.laenge} Zeichen)`);
ok(appStand.wege > 3,
`es gibt Wege weiter (${appStand.wege} Verweise) – in der App gibt es keinen Browser-Zurück`);
await appSeite.screenshot({ path: "abnahme-installiert.png", fullPage: false });
await app.close();
/* ---------- Abschluss ------------------------------------------------ */
console.log("");
const ERWARTET = SEITEN.length * 2 + 12;
ok(geprueft >= ERWARTET,
`es sind ${geprueft} Prüfungen gelaufen (erwartet mindestens ${ERWARTET})`);
if (befunde.length) {
console.log("\n--- WAS MORGEN AUFFALLEN WÜRDE ---");
for (const b of befunde) console.log(` ${b.name} · ${b.pfad}\n ${b.was}`);
}
await browser.close();
console.log(`\n${fehler ? "FEHLER: " + fehler : "Alles in Ordnung"} — ${geprueft} Prüfungen`);
process.exit(fehler ? 1 : 0);
Binary file not shown.

After

Width:  |  Height:  |  Size: 1021 KiB

+7 -7
View File
@@ -7,9 +7,9 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -152,9 +152,9 @@
</form> </form>
</dialog> </dialog>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/aufgaben.js?v=202609030720" defer></script> <script src="assets/js/aufgaben.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+8 -8
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/automation.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/automation.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -132,9 +132,9 @@
</main> </main>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/automation.js?v=202609030720" defer></script> <script src="assets/js/automation.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+12 -12
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/bereich.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -115,13 +115,13 @@
</main> </main>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/checkliste.js?v=202609030720" defer></script> <script src="assets/js/checkliste.js?v=202609030948" defer></script>
<script src="assets/js/ampel.js?v=202609030720" defer></script> <script src="assets/js/ampel.js?v=202609030948" defer></script>
<script src="assets/js/schulung.js?v=202609030720" defer></script> <script src="assets/js/schulung.js?v=202609030948" defer></script>
<script src="assets/js/vorlagen.js?v=202609030720" defer></script> <script src="assets/js/vorlagen.js?v=202609030948" defer></script>
<script src="assets/js/bereich.js?v=202609030720" defer></script> <script src="assets/js/bereich.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+9 -9
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/calls.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/calls.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -74,10 +74,10 @@
</main> </main>
<script src="assets/js/ki.js?v=202609030720" defer></script> <script src="assets/js/ki.js?v=202609030948" defer></script>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/calls.js?v=202609030720" defer></script> <script src="assets/js/calls.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+10 -10
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/content.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/content.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -164,11 +164,11 @@
</main> </main>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/checkliste.js?v=202609030720" defer></script> <script src="assets/js/checkliste.js?v=202609030948" defer></script>
<script src="assets/js/vorlagen.js?v=202609030720" defer></script> <script src="assets/js/vorlagen.js?v=202609030948" defer></script>
<script src="assets/js/content.js?v=202609030720" defer></script> <script src="assets/js/content.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+8 -8
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/dateien.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/dateien.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -93,9 +93,9 @@
</main> </main>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/dateien.js?v=202609030720" defer></script> <script src="assets/js/dateien.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+2 -2
View File
@@ -25,7 +25,7 @@
type="image/webp" media="(max-width: 899px)" /> type="image/webp" media="(max-width: 899px)" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
</head> </head>
<body class="gate"> <body class="gate">
@@ -143,6 +143,6 @@
</p> </p>
</main> </main>
<script src="assets/js/gate.js?v=202609030720" defer></script> <script src="assets/js/gate.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+8 -8
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/kalender.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -178,9 +178,9 @@
</main> </main>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/kalender.js?v=202609030720" defer></script> <script src="assets/js/kalender.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+8 -8
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/personen.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/personen.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -121,9 +121,9 @@
</main> </main>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/personen.js?v=202609030720" defer></script> <script src="assets/js/personen.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+9 -9
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/profil.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -193,10 +193,10 @@
</main> </main>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/steckbrief.js?v=202609030720" defer></script> <script src="assets/js/steckbrief.js?v=202609030948" defer></script>
<script src="assets/js/profil.js?v=202609030720" defer></script> <script src="assets/js/profil.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+9 -9
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/report.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/report.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -91,10 +91,10 @@
</main> </main>
<script src="assets/js/ki.js?v=202609030720" defer></script> <script src="assets/js/ki.js?v=202609030948" defer></script>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/report.js?v=202609030720" defer></script> <script src="assets/js/report.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+8 -8
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/scouting.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/scouting.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -124,9 +124,9 @@
</div> </div>
</div> </div>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/scouting.js?v=202609030720" defer></script> <script src="assets/js/scouting.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+6 -6
View File
@@ -7,8 +7,8 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -99,9 +99,9 @@
</p> </p>
</main> </main>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/start.js?v=202609030720" defer></script> <script src="assets/js/start.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+9 -9
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/startcheck.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -70,10 +70,10 @@
</main> </main>
<script src="assets/js/ki.js?v=202609030720" defer></script> <script src="assets/js/ki.js?v=202609030948" defer></script>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/startcheck.js?v=202609030720" defer></script> <script src="assets/js/startcheck.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+8 -8
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/profil.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -111,9 +111,9 @@
</main> </main>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/steckbrief.js?v=202609030720" defer></script> <script src="assets/js/steckbrief.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+6 -6
View File
@@ -7,9 +7,9 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/uebersicht.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -57,9 +57,9 @@
</main> </main>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/uebersicht.js?v=202609030720" defer></script> <script src="assets/js/uebersicht.js?v=202609030948" defer></script>
</body> </body>
</html> </html>
+8 -8
View File
@@ -7,10 +7,10 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" /> <meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" /> <link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/wissen.css?v=202609030720" /> <link rel="stylesheet" href="assets/css/wissen.css?v=202609030948" />
</head> </head>
<body class="start"> <body class="start">
@@ -175,9 +175,9 @@
</main> </main>
<script src="assets/js/wahl.js?v=202609030720" defer></script> <script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030720" defer></script> <script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030720" defer></script> <script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/wissen.js?v=202609030720" defer></script> <script src="assets/js/wissen.js?v=202609030948" defer></script>
</body> </body>
</html> </html>