Rene: QR-Stats gehören nicht ins öffentliche Profil, eigene Seite fehlte.
Neue Seite 'Partner-Bereich' (Welten-Chip 🤝 zwischen Moderation und Admin,
role:partner — sichtbar für is_partner + Admin; _mergeDefaults reicht den
Chip an bestehende Welt-Configs nach):
- Einladungscode groß + Link-kopieren-Button
- Kacheln: Registrierungen gesamt / diesen Monat / unbestätigt
- QR-Kontingente mit Einzel-Code-Status (aus partner-profil.js hierher verschoben)
- Profil-Status-Karte (Entwurf/Prüfung/frei) mit Sprung zum Editor
Backend: GET /partner/my-stats (Codes mit Zahlen + Profil-Status).
Settings-Partner-Karte: zwei Buttons (Partner-Bereich primär, Profil sekundär);
Dank-Mail-CTA zeigt auf #partner-dashboard. Suite: 52 passed.
Statischer Hinweis präzisiert + Toast beim ersten Ausblenden: Funktion bleibt
über 'Weitere Funktionen' (Ausgeblendete Funktionen) abrufbar, wird nicht gelöscht. SW v1173
bday/bdayYear: nur truthy wenn bdayDog.id === dog.id (aktiver Hund)
otherBdayDog: zeigt Hinweis wenn ein ANDERER Hund Geburtstag hat
SW by-v1031, APP_VER 1031
Wenn ein anderer Hund (nicht der angezeigte) Geburtstag hat:
- Cake-Icon (Phosphor) animiert bounce in der Info-Karte unten
- "[Name] hat heute/morgen Geburtstag!" + Pfeil-Button
- Klick → wechselt direkt zum Geburtstagshund + zeigt Birthday-Banner
Kein Tab-Indicator (nur HUND-Welt). SW by-v1027, APP_VER 1027
touchstart/touchmove/touchend → pointerdown/pointermove/pointerup:
- Pointer Events funktionieren auf Mouse (Desktop) + Touch (Mobile) gleich
- setPointerCapture() für sauberes Drag auch wenn Maus das Element verlässt
- e.touches[0] → e.clientX/clientY direkt aus dem Pointer Event
- Nur linke Maustaste (e.button === 0) startet Drag
SW by-v1011, APP_VER 1011
Root cause: _mergeDefaults() interpretierte fehlende Chips als 'neu'
und fügte sie wieder ein — auch bewusst ausgeblendete.
Fix:
- _saveConfig(): berechnet cfg.hidden = alle Default-Chips die keiner
Welt zugewiesen sind; wird mit der Config auf dem Server gespeichert
- _mergeDefaults(): prüft hidden-Set und allAssigned-Set; fügt nur echte
Neu-Chips ein (nicht in hidden, nicht bereits anderer Welt zugewiesen)
- Verhindert auch Doppelzuweisung wenn ein Chip zwischen Welten verschoben
SW by-v1001, APP_VER 1001
- Deduplication in _loadReports(): Pending-Einträge die bereits auf dem Server
sind (Race-Condition beim Sync) werden automatisch aus dem Pending-Store entfernt
- Verwerfen-Button für offline-gespeicherte Meldungen (pending), Notiz-Button nur
für Server-Einträge sichtbar
- Pulsierender Kreis-Marker (CSS @keyframes by-lost-ping) statt statischem Pin;
Pending-Einträge in Orange, Server-Einträge in Rot
- Card-Click für pending deaktiviert (kein Detail-Modal für unsynchronisierte Daten)
- worlds.js: Alert-Radius für vermisste Hunde von 5 auf 20 km erhöht (wie Giftköder)
- SW by-v990, APP_VER 990
- worlds.js: 'Datenschutz · AGB' in der Welt-Welt-Fußzeile
- settings.js: AGB-Checkbox über Widerrufs-Checkbox; beide müssen gecheckt sein bevor 'Anfrage senden' aktiv wird
- worlds.js: bdayDog = _dogs.find(...) — Geburtstag gilt für alle Hunde, nicht nur den aktiven
- Banner, KI-Call, "Was hat sich X gewünscht?" nutzen bdayDog.name
- stats.py: kotbeutel-Count aus user_map_pois WHERE type='kotbeutel'
- landing: Stats-Band 5. Kachel "Kotbeutel-Stationen"
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.
- _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