Handy: Navigation war komplett unerreichbar — behoben, plus Tippflächen überall

Nutzer-Report 21.08.2026 mit Screenshot: "auf dem handy kann ich oben
nicht aussehen in welche seite ich will welche kategorie welche sprache
garnichts". Drei echte, per Playwright reproduzierte Fehler:

1. MENÜ-KNOPF AUSSERHALB DES BILDSCHIRMS (Hauptproblem)
   .brand stand auf flex-shrink:0, war bei 390px aber 352px breit. Mit
   Abstand + Knopf brauchte die Leiste 423px bei 367px Platz -- der
   Menü-Knopf landete bei x=396px, also komplett außerhalb. Damit war auf
   dem Handy die GESAMTE Navigation unerreichbar (keine Seiten, keine
   Kategorien, kein Sprachwechsel).
   Fix: Knopf per margin-left:auto immer an die rechte Kante; Marke darf
   unter 620px schrumpfen (inkl. min-width:0, sonst greift flex-shrink
   nicht); unter 400px entfällt die reine Deko-Unterzeile.

2. MENÜ IM QUERFORMAT NICHT ZU ÖFFNEN
   Das zugeklappte Panel wird um -110% SEINER EIGENEN Höhe verschoben. Quer
   (568x320) ist es nur 258px hoch, die Unterkante lag dadurch bei y=36px --
   also unsichtbar genau über dem Menü-Knopf (y=11..55) und hat jede
   Berührung abgefangen. Fix: pointer-events:none im geschlossenen Zustand.

3. MENÜPUNKTE AUF KURZEN BILDSCHIRMEN ZUSAMMENGEQUETSCHT
   .nav-links ist ein Flex-Container fester Höhe; passte der Inhalt nicht,
   schrumpfte Flexbox die Einträge (iPhone SE: 59px -> 29px, Knöpfe 21px).
   Fix: flex-shrink:0 auf die Kinder, der Bereich scrollt stattdessen
   (overflow-y:auto war bereits gesetzt).

Zusätzlich: Fußzeilen- und Impressum/AGB-Links auf Handys als echte
Tippziele (44px statt 17-20px) -- 18 dicht stehende Links, mit dem Finger
vorher kaum zu treffen. Menü-Trennlinien begradigt (folgten dem
Desktop-Pillenradius und sahen aus wie Schüsseln).

Ergebnis: alle 31 Seiten ohne Überlauf, Menü auf 320-768px, hoch UND quer
nutzbar, kleinster Menüpunkt 46px. Verbleibende kleine Ziele sind reine
Fließtext-Links im Satz (dürfen laut Standard klein bleiben).
Desktop per Regressionstest unverändert geprüft.

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

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-08-21 18:13:03 +02:00
co-authored by Claude Opus 5
parent 5a5912636d
commit d0613f86c1
36 changed files with 393 additions and 244 deletions
+10 -10
View File
@@ -16,10 +16,10 @@
<meta name="twitter:card" content="summary_large_image" />
<meta name="robots" content="noindex" /> <!-- generische URL, echte Team-Seiten verlinken hierher -->
<link rel="stylesheet" href="assets/css/main.css?v=20260821o" />
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821o" />
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821o" />
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821o" />
<link rel="stylesheet" href="assets/css/main.css?v=20260821p" />
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821p" />
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821p" />
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821p" />
<style>
.profil-photo { aspect-ratio: 4/5; max-width: 420px; margin: 0 auto; }
.profil-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
@@ -130,12 +130,12 @@
</main>
<div id="site-footer"></div>
<script src="assets/js/data-modis.js?v=20260821o"></script>
<script src="assets/js/data-scouts.js?v=20260821o"></script>
<script src="assets/js/data-creator.js?v=20260821o"></script>
<script src="assets/js/data-manager.js?v=20260821o"></script>
<script src="assets/js/i18n-profil.js?v=20260821o"></script>
<script src="assets/js/main.js?v=20260821o"></script>
<script src="assets/js/data-modis.js?v=20260821p"></script>
<script src="assets/js/data-scouts.js?v=20260821p"></script>
<script src="assets/js/data-creator.js?v=20260821p"></script>
<script src="assets/js/data-manager.js?v=20260821p"></script>
<script src="assets/js/i18n-profil.js?v=20260821p"></script>
<script src="assets/js/main.js?v=20260821p"></script>
<script>
document.addEventListener("DOMContentLoaded", async () => {
const slug = new URLSearchParams(location.search).get("p") || "";