presseportale/dev/archive/frontend-audits/frontend-optimize-56.md
Kevin Adametz 6a4c4d8837 docs: dev-Doku für den Live-Betrieb neu sortiert — Archiv + Betrieb + Roadmap
Das System ist seit 20.07.2026 live; die dev-Doku spiegelt jetzt den
Betriebszustand statt der Release-Vorbereitung:

- dev/betrieb/: Deploy-Runbook (neu: §10 Betrieb nach Go-Live mit
  SFTP-Deploy-Checkliste inkl. queue:restart-Pflicht und den
  Betriebs-Erkenntnissen der Go-Live-Woche), Legacy-API-Parität, Umami.
- dev/roadmap.md: offene Nachlauf-Punkte (Go-Live-Mails, Merge nach main,
  Stripe-Test-Artefakte, Key-Rotation, Alt-System-Abschaltung) und
  Ideen-Backlog.
- dev/archive/: abgeschlossene Phasen — Migration-2026-Planung,
  Cutover-Runbook (mit Erledigt-Vermerk), Release-Plan/QA-Checkliste,
  Optimierungsphasen, Frontend-Konzepte + Responsive-Audits vom 16.07.,
  Altsystem-Reste.
- dev/README.md als Wegweiser; gitignore-Pfad der SQL-Dumps mitgezogen
  (dev/archive/migration-2026/sql/ bleibt untracked, ebenso dev/migration/
  und dev/api/).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 07:52:38 +00:00

285 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Bestandsaufnahme: Frontend Responsive / Mobile
> **Erstellt:** 16.07.2026
> **Status:** Nur Audit – **kein Code geändert**
> **Viewports:** 320×568 (kleines Smartphone) und 390×844 (iPhone-ähnlich), jeweils `mobile: true`
> **Scope:** Öffentliches Web-Frontend (presseecho, businessportal24, pressekonto-Hub)
> **Nicht im Scope:** Admin/Portal (Flux), Customer-Bereich
---
## Methode
1. Live-Check im Browser bei 320 px und 390 px Breite (CDP-Layout-Metriken: `scrollWidth`, Overlay-Bounding-Boxes, Grid-Spalten, Touch-Targets)
2. Code-Review der Blade-Komponenten unter `resources/views/web/**` und `resources/views/components/web/**`
3. Stichproben: Startseiten beider Portale, Preise, Release-Detail, Kategorie, Veröffentlichen, Hub-Landing
**Hinweis zu Screenshots:** Das Browser-Capture zeigt die emulierte Seite oft als schmalen Streifen links im Fenster (Tooling-Artefakt). Maßgeblich sind die CDP-Messungen (`clientWidth` / `scrollWidth` / Element-Rechtecke), nicht die leere Fläche rechts im Screenshot.
**Hinweis Debugbar:** Laravel Debugbar ist lokal sichtbar und verdeckt Inhalt – kein Produktionsproblem, bei visueller QA ausblenden.
---
## Kurzfazit
Die Desktop-Layouts sind weitgehend stimmig. Auf Mobile gibt es **wenige, aber schwere strukturelle Bugs**, die sich themenübergreifend wiederholen:
| Priorität | Thema | Betrifft |
|-----------|--------|----------|
| P0 | Hero-Text-Overlay läuft aus dem Bild nach oben und überdeckt Section-Header | Portal-Startseiten, Kategorie (und analog Newsroom) |
| P0 | Horizontaler Seiten-Scroll durch Quality-Summary (3-Spalten-Grid + `nowrap`-Link) | Portal-Startseiten |
| P0 | Hub-Utility-Bar + Header-CTAs sprengen die Viewport-Breite (~245px Overflow) | pressekonto.test |
| P1 | Hub-Footer fest 4 Spalten; Architektur-Diagramm mit überlappenden Karten | pressekonto.test |
| P1 | Hub-Navigation ab `lg` ausgeblendet **ohne** Mobile-Menü-Ersatz | pressekonto.test |
| P1 | Sticky-Header-Script schaltet Klassen um, für die keine CSS-Regeln existieren | Portal-Seiten |
| P2 | Hartes `px-8` / große Type auf Homepages; kleine Touch-Targets in Topbar | Portale |
Seiten wie **Preise**, **Release-Detail** und **Veröffentlichen** sind mobil schon deutlich robuster (`px-4 sm:px-6 lg:px-8`, kein Seiten-Overflow in der Stichprobe).
---
## Geprüfte Seiten (Überblick)
| Seite | URL (Beispiel) | Mobil-Status |
|-------|----------------|--------------|
| Startseite presseecho | `https://presseecho.test/de` | Kritisch: Hero-Overlap + H-Scroll (320/390 px verifiziert) |
| Startseite businessportal24 | `https://businessportal24.test/de` | Kritisch: gleiches Muster (390 px verifiziert) |
| Hub pressekonto | `https://pressekonto.test/` | Kritisch: Utility/Header/Footer/Diagramm (320/390 px verifiziert) |
| Preise | `…/de/preise` | Weitgehend ok |
| Release-Detail | `…/de/press-release/…` | Weitgehend ok; Hero-Bild sehr flach (21:9) |
| Kategorie | `…/de/category/sonstiges` | Kritisch: Hero-Overlay-Overflow |
| Veröffentlichen | `…/de/veroeffentlichen` | Weitgehend ok |
| Suche / FAQ / API / Newsrooms | Code-Review + Muster | Keine P0 in Stichprobe; API-Tabellen bewusst `overflow-x-auto` |
Das Routen-Inventar umfasst darüber hinaus Newsroom-Detail, Tombstone, Suche mit Filterzuständen, Hilfe sowie die öffentlichen Rechts-/Formularseiten. Diese Seitentypen wurden statisch erfasst, aber in dieser ersten Runde nicht in allen Zuständen und auf beiden Sprachen live durchgeklickt. Admin, Auth und Customer bleiben bewusst außerhalb dieses Audits.
---
## Befunde im Detail
### P0-01 — Focus-Hero: Overlay überdeckt „Im Fokus“
**Schwere:** Kritisch
**Wo:** `resources/views/components/web/focus-hero.blade.php` (Zeilen ~39–67)
**Portale:** presseecho + businessportal24 (gleiche Komponente)
**Messung (Lead mit langem Titel/Teaser):**
- Parent-Bildbox: `h-[500px]` → Höhe 500px
- Bei 390px: absolutes Bottom-Overlay **734px** hoch (presseecho) bzw. **586px** (businessportal24)
- Bei 390px ragt das presseecho-Overlay **~234px nach oben** aus dem Container und liegt über dem Section-Header („Im Fokus“ + Datum)
- Bei 320px wird das presseecho-Overlay **~917px** hoch und ragt **~417px nach oben** aus der 500px-Bildbox; der Fehler verschärft sich auf kleinen Smartphones deutlich
**Ursache:**
- Feste Höhe `h-[500px]` + `overflow-hidden` am Bild
- Overlay absolut `bottom-0` mit Headline `text-[38px]` (ohne Mobile-Downscale), Teaser und Meta
- Inhalt des Overlays ist höher als die Bildbox → wächst nach oben aus dem `relative`-Wrapper (Parent der `<a>` hat kein `overflow:hidden`)
**Darstellung:** Titel/Teaser überdecken die Überschrift „Im Fokus“; Lesbarkeit und Hierarchie kaputt.
**Fix-Richtung (später):** Responsive Type (`text-[24px] sm:text-[32px] lg:text-[38px]`), Overlay-Padding `px-4 sm:px-9`, ggf. `min-h` statt fester Höhe oder Overlay in den Flow legen / `overflow-hidden` am äußeren `relative`.
---
### P0-02 — Kategorie-/Newsroom-Hero: gleiches Overlay-Problem
**Schwere:** Kritisch (Kategorie verifiziert) / Hoch (Newsroom analog im Code)
**Wo:**
- `resources/views/web/kategorie.blade.php` ~123–147 (`aspect-ratio: 16/10`)
- `resources/views/web/newsroom.blade.php` ~152–180 (`aspect-ratio: 16/9`)
**Messung Kategorie (390px):**
- Hero-Box ~224×358
- Overlay-Höhe **459px**, `topDelta` ca. **−236px** (ragt nach oben heraus)
Trotz etwas kleinerer Type (`text-[26px] sm:text-[32px]`) reicht langer Titel + Teaser + Meta, um das flache Aspect-Ratio-Hero zu sprengen.
---
### P0-03 — Horizontaler Scroll auf Portal-Startseiten (Quality-Summary)
**Schwere:** Kritisch
**Wo:** `resources/views/components/web/quality-summary.blade.php`
**Messung:** `scrollWidth = 457` bei `vw = 390` (Δ ≈ **67px**) auf beiden Portal-Homes. Bei `vw = 320` bleibt die Seite 457px breit (Δ ≈ **137px**).
**Isolation:** Ausblenden der Quality-Summary-Section → `scrollWidth = 390`. Andere Home-Sections allein verursachen den Overflow nicht.
**Ursache:**
```html
style="grid-template-columns: auto 1fr auto;"
```
bleibt auf Mobile **3 Spalten**. Der Link „Veröffentlichungsrichtlinien →“ hat `whitespace-nowrap` und endet bei `right ≈ 458` (> 390).
**Fix-Richtung:** Grid auf Mobile stacken (`grid-cols-1 sm:grid-cols-[auto_1fr_auto]` o. ä.), Link umbrechen lassen oder unter den Text legen; Section-Padding auf `px-4 sm:px-6 lg:px-8`.
---
### P0-04 — Hub pressekonto: massiver Horizontal-Scroll
**Schwere:** Kritisch
**Wo:**
- `resources/views/components/web/hub/top-utility-bar.blade.php`
- `resources/views/components/web/hub/site-header.blade.php`
**Messung:**
- Bei 390px: `scrollWidth = 635` (Δ ≈ **245px**)
- Bei 320px: weiterhin `scrollWidth = 635` (Δ ≈ **315px**)
- Utility-Bar-Kinder summiert bis `right = 635` (Datum + „Publisher-Hub für …“ + FAQ/Hilfe/Kontakt, alles `whitespace-nowrap`, kein Wrap/`overflow-x`)
- Header-CTA-Gruppe („Anmelden“ + „Konto erstellen“) `right = 472`
**Zusätzlich:** Haupt-Nav ist `hidden lg:flex` – auf Mobile **komplett weg, ohne Hamburger/Drawer**. Anker (Tarife, Funktion, …) sind im Header nicht erreichbar.
---
### P1-01 — Hub-Footer: 4 Spalten auf Mobile
**Schwere:** Hoch
**Wo:** `resources/views/components/web/hub/site-footer.blade.php` Zeile ~14
`style="grid-template-columns:1.5fr 1fr 1fr 1fr;"` ohne Media Query
**Messung:** Spaltenbreiten ca. 133 / 63 / 84 / 151 px – Linklisten unbenutzbar schmal.
---
### P1-02 — Hub Architektur-Diagramm: Überlappung
**Schwere:** Hoch
**Wo:** `resources/views/web/pressekonto.blade.php` ~105–167
**Messung:** Containerbreite ~268px bei `height:320px`; Brand-Karten jeweils `min-w-[160px]` links und rechts oben → Überlappung (~52px). Hub-Kreis und Eck-Labels kollidieren.
**Zusätzlich:** Stats darunter `grid-cols-3` in derselben engen Karte.
---
### P1-03 — Hartes `px-8` auf Homepages (Content-Breite)
**Schwere:** Hoch (UX/Dichte), kein Overflow allein
**Wo u. a.:**
- `focus-hero.blade.php`, `industry-index`, `industry-spotlight`, `pricing-teaser`
- `presseecho.blade.php` / `businessportal24.blade.php` Feed-Section
- Hub-Seiten durchgängig `px-8`
Unterseiten (Preise, Detail, Suche, …) nutzen bereits korrekt `px-4 sm:px-6 lg:px-8`.
Bei 390px Viewport bleiben mit `px-8` nur ~326px Content – verschärft Hero- und Grid-Probleme.
---
### P1-04 — Sticky-Header ist funktional wirkungslos
**Schwere:** Hoch
**Wo:**
- `resources/views/web/layouts/web-master.blade.php` ~76–114
- `resources/views/components/web/site-header.blade.php` ~101
Das Script ersetzt beim Scrollen `header-normal` durch `header-sticky`. Weder in den Web-CSS-Quellen noch im aktuellen Web-Build existieren Regeln für diese Klassen. Der Header wird deshalb nicht sticky; auf langen Mobilseiten gehen Suche, Login und Veröffentlichungs-CTA beim Scrollen verloren.
---
### P2-01 — Industry-Index: 2 Spalten ab Mobile
**Schwere:** Mittel
**Wo:** `industry-index.blade.php` – `grid-cols-2` + `px-5`
Lange Branchennamen + Delta in einer Zeile wirken gequetscht.
---
### P2-02 — Quality-Summary / Stat-Strips / Sidebar-Grids
**Schwere:** Mittel
- Quality-Summary: siehe P0-03
- Kategorie/Newsrooms/Veröffentlichen: `grid-cols-2` Stat-Strips mit großen Zahlen – Labels wrapen unschön
- `focus-side-item`: 3-Spalten-Grid in gestapelter Sidebar – funktional ok, aber dicht
- Release-Detail-Hero `aspect-ratio: 21/9` → auf Mobile nur ~153px Bildhöhe
---
### P2-03 — Touch-Targets Header (Portale)
**Schwere:** Mittel
Topbar DE/EN (~42×35), „Preise“-Link (~33×17), Suche 40×40 und Anmelden ~34×34. Mehrere Ziele bleiben damit unter der 44×44-Empfehlung; die große Rubrik-Zeile erreicht 358×44.
---
### P2-04 — Live-Ticker
**Schwere:** Niedrig–Mittel (kein alleiniger H-Scroll-Auslöser in der Isolation)
Marquee mit `width: max-content` ist beabsichtigt und liegt in `overflow-hidden`.
Market-Slot (`max-w-[min(92vw,280px)]` + `shrink-0`) kann auf sehr schmalen Screens den Ticker-Bereich stark einengen, wenn Kursdaten aktiv sind – bei der Stichprobe war der Market-Slot oft leer.
---
### P2-05 — API-Seite Tabellen
**Schwere:** Niedrig (bewusst)
`overflow-x-auto` + `whitespace-nowrap` an Field-Namen → horizontales Scrollen in der Tabelle, nicht der ganzen Seite.
---
### P2-06 — Bedingter Hub-Kontextbanner ohne Mobile-Umbruch
**Wo:** `resources/views/components/web/hub/brand-context-banner.blade.php`
**Wann sichtbar:** Hub-Aufruf mit `?from=presseecho` oder `?from=businessportal24`
Fließtext, Marken und „Zurück zu …“-Link liegen in einer einzigen Flex-Zeile ohne `flex-wrap` oder Mobile-Stacking. Dieser optionale Zustand wurde statisch als Overflow-/Kompressionsrisiko identifiziert und sollte bei der späteren Browser-QA separat geprüft werden.
---
### P2-07 — Weitere Dichte- und Touch-Themen
- FAQ-Antworten auf „Veröffentlichen“ behalten mobil `pl-[60px]` und verschenken auf 320px viel Textbreite.
- Credit-Pakete auf „Preise“ starten bereits mobil zweispaltig.
- Pagination und mehrere Modal-Schließen-Buttons liegen mit ca. 32–36px unter dem 44×44-Richtwert.
- FAQ/API fehlen in der mobilen Kopf-Navigation und sind mobil nur über den Footer direkt erreichbar.
---
## Was mobil bereits gut wirkt
- Portal-`site-header`: Suche als Icon-Modal, verkürzte Topbar, Burger für Rubriken
- Preise: Tarif-Grid `grid-cols-1 sm:grid-cols-2 lg:grid-cols-4`, kein Seiten-Overflow
- Release-Detail: Padding-Pattern, Body-Breite ~358px, Share-Buttons in 2 Spalten
- Veröffentlichen: bei 390px kein H-Scroll; bei 320px stammen die gemessenen 6px Überbreite ausschließlich von der lokalen Debugbar, nicht vom Seitenlayout. FAQ-Zeilen als 3-Spalten-Grid bleiben eher ein Dichte-Thema
- Viele Unterseiten schon auf `px-4 sm:px-6 lg:px-8` umgestellt
---
## Empfohlene Bearbeitungsreihenfolge (noch nicht umsetzen)
1. **P0-01 / P0-02** – Hero-Overlays (Focus-Hero, Kategorie, Newsroom): Type + Overflow-Containment
2. **P0-03** – Quality-Summary responsive machen (behebt Portal-H-Scroll)
3. **P0-04 / P1-01 / P1-02** – Hub: Utility-Bar, Header (Mobile-Nav!), Footer-Grid, Architektur-Diagramm
4. **P1-04** – Sticky-Header-CSS bzw. gewünschtes Scroll-Verhalten herstellen
5. **P1-03** – Homepages/Shared: `px-8` → `px-4 sm:px-6 lg:px-8`
6. **P2** – Kontextbanner, Industry-Index, FAQ-Dichte, Touch-Targets, flaches Detail-Hero, Feinschliff
---
## Testmatrix für spätere Fixes
| Breakpoint | Geräte-Proxy |
|------------|----------------|
| 320×568 | iPhone SE |
| 390×844 | iPhone 14/15 |
| 430×932 | große Phones |
| 768×1024 | Tablet |
Pro Fix mindestens: beide Portal-Homes + Hub + eine Kategorie + eine PM-Detailseite; `document.documentElement.scrollWidth <= clientWidth`.
---
## Dateien mit höchster Hebelwirkung
1. `resources/views/components/web/focus-hero.blade.php`
2. `resources/views/components/web/quality-summary.blade.php`
3. `resources/views/web/kategorie.blade.php` / `newsroom.blade.php` (Hero-Blöcke)
4. `resources/views/components/web/hub/top-utility-bar.blade.php`
5. `resources/views/components/web/hub/site-header.blade.php`
6. `resources/views/components/web/hub/site-footer.blade.php`
7. `resources/views/web/pressekonto.blade.php` (Architektur-Diagramm + `px-8`)
8. `resources/views/web/layouts/web-master.blade.php` + Web-CSS (Sticky-Header)
9. `resources/views/components/web/hub/brand-context-banner.blade.php`
---
*Ende der Bestandsaufnahme. Nächster Schritt nach Freigabe: Fixes in der Reihenfolge P0 → P1 → P2.*