Files
dogfather-universe/aktion-detail.html
T
DogFatherGitandClaude Sonnet 5 1f0ec994a9 Drei Handy-Nachbesserungen: Trio-Bild hinter dem Text, auffälliger Menü-Knopf, abgeschnittener Öffnen-Knopf
Nutzer-Report mit drei Bildern vom Handy:

1. HERO-BILD SASS NICHT MEHR HINTER DEM TEXT (index.html)
   .hero-artwork hat "inset:0" -- füllt also die GESAMTE Höhe von
   .hero-cinematic, und diese Sektion umschließt nicht nur die Überschrift,
   sondern auch die 3 Welt-Kacheln darunter. Auf dem Handy wird die Sektion
   durch den 4-zeilig umbrechenden Titel + Kacheln riesig (~1570px bei
   390px Breite) -- das Trio-Bild (16:9, contain-skaliert an die Breite)
   wurde dadurch nur ~220px hoch und mittig in dieser riesigen Fläche
   zentriert, landete also als schmaler Streifen zwischen den Buttons und
   den Welt-Kacheln statt hinter der Überschrift.
   Fix: eigenes festes Seitenverhältnis (4:3) für die Bildbox auf dem
   Handy, von OBEN verankert statt zentriert, background-size auf "cover"
   -- Verlauf eigens für die neue, kürzere Box abgestimmt (die
   Desktop-Version wäre zu abrupt gewesen). Über 6 Breiten (320-768px)
   mit Playwright gegengeprüft.

2. MENÜ-KNOPF ZU UNAUFFÄLLIG (main.js + main.css, alle Seiten)
   "da soll auch menü stehen und die 3 striche" + "die kiste soll auch
   leicht eine andere farbe haben so dass sie auffällt, eine leicht blau
   tönung". Sichtbares "Menü" neben den drei Strichen ergänzt (neuer i18n-
   Schlüssel nav_toggle_label, alle 5 Sprachen) + dezente Babyblau-Tönung
   (8% Deckkraft, passend zur Markenfarbe --accent). Dabei einen
   unabhängigen, zweiten Bug gefunden und mitbehoben: durch die neue
   Knopfbreite/-höhe wurde ein Rechenfehler im geschlossenen Mobilmenü
   sichtbar -- "translateY(-110%)" reicht nur, wenn das Panel mindestens
   10x so hoch ist wie der Kopfbereich; war das nicht der Fall, ragte die
   Unterkante (der Sprachschalter) ein paar Pixel sichtbar ins Bild.
   Robusterer Ersatz: -100% + fester 200px-Puffer, unabhängig von Panel-
   und Kopfbereichshöhe. Über 3 Breiten gegengeprüft (Panel unsichtbar UND
   öffnet weiterhin normal).

3. "ÖFFNEN"-KNOPF AUF DER ZUGANGSSEITE ABGESCHNITTEN (gate.html)
   .gate-card trägt "flex: 1 1 220px" für die Desktop-Reihe (220px als
   BREITE gedacht). Sobald @media max-width:480px auf flex-direction:column
   umschaltet, gilt dieselbe Zahl als HÖHE -- die Karte wurde auf genau
   220px Höhe gequetscht. overflow:hidden setzt zusätzlich das normale
   Mindestmaß (min-height:auto) auf 0 herunter, wodurch nichts das
   Zusammenquetschen verhinderte -- der "Öffnen"-Knopf wurde unten
   abgeschnitten. Fix: flex:none in genau diesem Media-Block, Breite bleibt
   weiterhin über width:100%/max-width geregelt. An 4 Breiten x 3 Kacheln
   (Dogi/VanVan/Diene) gegengeprüft: Karten jetzt 258px statt 220px hoch,
   Knopf komplett sichtbar.

Vollständiger Regressionslauf: alle 34 Seiten bei 390px (kein Überlauf,
Menü-Knopf überall erreichbar und beschriftet), Desktop bei 1920px
unverändert (Hamburger weiterhin nur unter der bestehenden 1650px-
Schwelle sichtbar).

Cache-Busting-Version auf 20260821t erhöht.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-21 23:37:14 +02:00

113 lines
4.9 KiB
HTML

<!DOCTYPE html>
<html lang="de" data-theme="dogfather">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Aktion — DOGFATHER UNIVERSE</title>
<meta name="description" content="Detailansicht einer Aktion oder eines Projekts von Team Dogi." />
<link rel="icon" type="image/png" href="assets/img/favicon.png" />
<link rel="manifest" href="/manifest.json" />
<meta name="theme-color" content="#0b0d10" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="DOGFATHER UNIVERSE" />
<meta property="og:title" content="Aktion — DOGFATHER UNIVERSE" />
<meta property="og:description" content="Detailansicht einer Aktion oder eines Projekts von Team Dogi." />
<meta property="og:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
<meta property="og:url" content="https://dogfather-universe.com/aktion-detail.html" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Aktion — DOGFATHER UNIVERSE" />
<meta name="twitter:description" content="Detailansicht einer Aktion oder eines Projekts von Team Dogi." />
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
<link rel="stylesheet" href="assets/css/main.css?v=20260821t" />
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821t" />
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821t" />
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821t" />
</head>
<body>
<div id="site-header"></div>
<main>
<section class="hero">
<div class="container">
<span class="eyebrow" data-i18n="ad_eyebrow">Aktionen &amp; Projekte</span>
<h1 id="aktion-title" data-i18n="ad_loading">Aktion wird geladen …</h1>
<p class="lead worlds" id="aktion-summary"></p>
</div>
</section>
<section class="section-tight">
<div class="container grid grid-2" style="align-items:center;">
<div class="img-placeholder" id="aktion-photo" style="aspect-ratio:4/3;" data-i18n="ad_foto_placeholder">Foto folgt</div>
<div id="aktion-body"></div>
</div>
</section>
<section>
<div class="container text-center">
<a class="btn btn-outline" id="aktion-back" data-i18n="ad_back" href="medien-dogfather.html#events">← Zurück zu allen Events</a>
</div>
</section>
</main>
<div id="site-footer"></div>
<script src="assets/js/data-aktionen.js?v=20260821t"></script>
<script src="assets/js/i18n-aktion-detail.js?v=20260821t"></script>
<script src="assets/js/main.js?v=20260821t"></script>
<script>
document.addEventListener("DOMContentLoaded", () => {
const params = new URLSearchParams(location.search);
const id = params.get("id");
const aktion = (window.AKTIONEN || []).find((a) => a.id === id);
const titleEl = document.getElementById("aktion-title");
const summaryEl = document.getElementById("aktion-summary");
const bodyEl = document.getElementById("aktion-body");
const photoEl = document.getElementById("aktion-photo");
const backEl = document.getElementById("aktion-back");
const t = (schluessel) => (window.dogiUebersetzen ? window.dogiUebersetzen(schluessel) : schluessel);
if (!aktion) {
// Diese Aktion existiert nicht — Texte kommen (auch bei Sprachwechsel)
// aus dem seiteneigenen i18n-Wörterbuch statt aus data-i18n, weil sie
// per JS gesetzt werden.
titleEl.removeAttribute("data-i18n");
const renderNichtGefunden = () => {
titleEl.textContent = t("ad_notfound_title");
summaryEl.textContent = t("ad_notfound_summary");
bodyEl.innerHTML = `<p>${t("ad_notfound_body")}</p>`;
};
renderNichtGefunden();
document.addEventListener("dogi-sprache-geaendert", renderNichtGefunden);
return;
}
// Zurück-Button zeigt auf die Events-Sektion der passenden Welt
// (jede Aktion gehört zu DogFather/HasiDog/Casper, siehe data-aktionen.js).
const welt = ["dogfather", "hasidog", "casper"].includes(aktion.welt) ? aktion.welt : "dogfather";
if (backEl) backEl.href = `medien-${welt}.html#events`;
// Titel/Zusammenfassung kommen aus data-aktionen.js (nicht Teil dieser
// i18n-Aufgabe) — data-i18n-Attribut entfernen, damit ein Sprachwechsel
// den geladenen Titel nicht wieder mit dem Lade-Platzhalter überschreibt.
titleEl.removeAttribute("data-i18n");
titleEl.textContent = aktion.title;
summaryEl.textContent = aktion.summary;
bodyEl.innerHTML = `
<span class="badge rank-1">${aktion.tag} · ${aktion.status}</span>
${aktion.description.map((p) => `<p>${p}</p>`).join("")}
`;
if (aktion.photo) {
photoEl.outerHTML = `<img src="${aktion.photo}" alt="${aktion.title}" style="border-radius:var(--radius);" />`;
} else {
photoEl.removeAttribute("data-i18n");
const renderFotoKuerze = () => { photoEl.innerHTML = t("ad_foto_kurze"); };
renderFotoKuerze();
document.addEventListener("dogi-sprache-geaendert", renderFotoKuerze);
}
});
</script>
</body>
</html>