- Hero-Headline: "Weil jeder Moment mit ihm zählt." (warm/emotional statt Feature-Liste)
- CTA umbenannt: "Kostenlos starten" statt "Ich bin Hundebesitzer"
- Hero-Stats-Zeile: live Nutzer/Hunde/km-Zähler (nur wenn >0)
- Stats-Band: orangener Balken mit 4 Live-Kennzahlen nach der Zwei-Welten-Section
- Testimonial-Section: 3 Platzhalter-Karten zwischen Features und Züchter-Bereich
- Scroll-Animationen: IntersectionObserver auf alle Cards (fade-up)
- API: /api/stats/public — öffentlicher Endpoint, 5-Min-Cache
_renderHund() liest Hunde aus _cachedGet('/dogs') — SW-gecacht mit altem foto_url.
Fix: swCacheDelete für /api/dogs, /api/dogs/{id} + welcome-dashboard, plus w3_dogs.
show() re-renderte nur bei User-Wechsel. Wenn refresh() während unsichtbarer Welten
aufgerufen wurde, blieb das alte Bild beim Zurücknavigieren.
Fix: _refreshPending=true wenn !_visible; show() rendert bei nächstem Aufruf neu.
Root cause: /api/dogs/{id}/welcome-dashboard ist SW-gecacht.
Nach Foto-Upload lieferte SW alten Response mit alter random_photo.url.
Fix: API.swCacheDelete() + localStorage-Key nach Upload invalidieren.
Root cause: fotoFile-Referenz wurde NACH UI.modal.close() geholt — DOM-Element
#dp-form-foto existiert nach Modal-Close nicht mehr → files[0] = undefined → Upload übersprungen.
Fix: fotoFile VOR modal.close() sichern; File-Objekt bleibt gültig auch ohne DOM.
- /breeder/apply: Dokument jetzt optional (File(None)), kann per Mail nachgereicht werden
- _showUpgradeModal('breeder'): enthält jetzt Zwinger-Formular (Zwingername*, Rasse*,
Verein, Stadt, VDH-Checkbox, optionales Dokument)
→ sendet /breeder/apply + /auth/upgrade-request in einem Schritt
- Züchter-Profil-Karte in Settings: 'Züchter werden'-Button entfernt
→ für neue User ohne Antrag wird die Card vollständig ausgeblendet
→ 'Neu beantragen' bei Ablehnung öffnet jetzt _showUpgradeModal('breeder')
- Verifizierte Züchter: Card unverändert (Profil, Edit, KI-Settings)
- _renderJetzt: false,false statt f.pro/_isRoleBasedPro/f.role=breeder
- _openAllChips: P-Badge entfernt
- _isRoleBasedPro() nur noch als ungenutzte Funktion (bleibt für Kompatibilität)
- Normale Welt-Views (JETZT/HUND/WELT): keine P/Z-Badges auf Chips
- Config-Modal: P-Badge (Pro) und Z-Badge (Züchter) nur wenn isAdmin=true
- isAdmin-Variable im _openConfigModal()-Scope ergänzt