ac291995bd
Welten-Rahmen: gedämpfte Erdtöne (JETZT orange, HUND naturgrün #6B8055, WELT blaugrau #4A7A9B), SW v1127
2026-05-29 09:03:47 +02:00
8bf451c16c
Welten-Rahmen: pro-Welt-Farbe via --wborder (JETZT/HUND orange, WELT blau, Alpha 0.55), JETZT-Chip-Reihe einbezogen, SW v1126
2026-05-29 08:59:31 +02:00
5c6af0991c
Welten: WELT-Rahmen (blau 0.90) einheitlich auf allen Chips + Banner oben (info-card, reminder), SW v1125
2026-05-29 08:55:44 +02:00
d468eed98f
Welten: dim/blur einheitlich (WELT-Wert), TEST Chip-Rahmenstärke je Welt (JETZT schwach/HUND mittel/WELT stark), SW v1124
2026-05-29 08:52:03 +02:00
bf67bf558f
TEST: Chip/Banner-Abdunklung+Blur je Welt unterschiedlich (JETZT mild, HUND mittel, WELT stark reduziert), SW v1123
2026-05-29 08:48:44 +02:00
1ff66a7083
Sicherheit + Tests + A11y, SW by-v1118
...
PYDANTIC max_length (38 Routen, ~400 Field-Constraints):
Schützt vor DoS durch Riesen-Payloads (10MB Thread-Titel etc.).
Pragmatische Limits:
- Titel/Name: 200 · Beschreibung/Body: 10000 · Notiz: 5000
- Email: 254 (RFC 5321) · URL: 500 · Slug/Kategorie: 100
- Hund-Name/Rasse: 80 · Hund-Bio: 2000
Top-betroffen: forum.py, diary.py, health.py, dogs.py, expenses.py,
notes.py, auth.py, profile.py. Manuelle len()-Checks in profile,
chat, ki entfernt (jetzt durch Field abgedeckt).
PYTEST COVERAGE (+19 Tests, 37 grün + 1 xfail):
- test_security.py: require_owner (Places GET/PATCH/DELETE mit
Fremduser → 403), JWT-Blacklist (Logout invalidiert Token),
Login-Lockout (5 Fehlversuche → 429 + Retry-After Header)
- test_race.py: Invoice-Counter (20 parallele Threads, alle unique),
Founder-Number (atomare Vergabe, voll bei 100)
- test_validation.py: Forum-Titel 30k Zeichen → 422, Diary-Text
50k → 422 (verifiziert Pydantic max_length-Sweep)
A11Y (Tap-Targets ≥44×44 + Dark-Mode-Kontrast):
- #header-user-btn 36→44px, .header-back 40→44, .header-menu-btn 40→44
- dog-profile Wrapped-Slider Prev/Next 40→44
- forum-Lightbox Close 40→44
- --c-text-muted Light: #B0A090 (2.37:1 FAIL) → #7F6B58 (4.74:1 PASS)
- --c-text-muted Dark: #806A58 (3.58:1 FAIL) → #A08878 (5.46:1 PASS)
- Branding-Farben unangetastet
2026-05-27 13:40:30 +02:00
73872e2c21
Sprint D: Karten-Familie auf UI.map.create+svgMarker konsolidiert, SW by-v1107
...
Neue zentrale Helper (in Sprint B vorbereitet) jetzt von 5 Seiten genutzt:
walks.js (1 Karten-Init):
- L.map+L.tileLayer → await UI.map.create('walks-map', {...})
- _initMap zu async, Aufrufer in _switchView und _loadData angepasst
- Mini-Karte im Walk-Formular (Modal) bleibt unverändert
(braucht eigene dragging/scrollWheelZoom-Options)
- view-toggle nicht migriert (responsive CSS-Konflikt mit Desktop)
poison.js (1 Karten-Init):
- L.map+L.tileLayer → await UI.map.create('poison-map', {...})
- _initMap zu async, manueller UI.loadLeaflet entfernt
- DangerCircle + User-Marker unverändert
events.js (1 Karten-Init + Diamant-Marker):
- await UI.map.create('ev-map', {...})
- Rotierter Diamant: L.divIcon+L.marker → UI.map.svgMarker
(HTML 1:1 erhalten)
lost.js (1 Karten-Init + Puls-Marker):
- Eigene async _loadLeaflet() Funktion komplett entfernt — UI.map.create
übernimmt das jetzt zentral
- await UI.map.create('lost-map', {...})
- Puls-Animation 🐕 : L.divIcon+L.marker → UI.map.svgMarker
- _initMap zu async
routes.js (6 von 7 Karten-Inits):
- _suggestMap, _recMap, _searchMap, _navMap, trimMap, _buildDetailMap
alle auf UI.map.create umgestellt + zu async
- _buildMiniMap (Route-Card-Preview) bleibt unverändert
(braucht 6 spezifische Interaction-Disable Options)
- View-Toggle auf neue .map-list-toggle Klasse umgestellt
(Border-Inline-Styles raus)
NEUE CSS-KLASSE in components.css:
- .map-list-toggle (vereinheitlichter Karten/Listen-Umschalter)
- Verwendet von routes.js; walks/events können später folgen
Tests 19/19 grün. GPS-Tracking-Logik (Polylines, Recording, Trim)
komplett unangetastet. Marker-Cluster-Logik unverändert.
2026-05-27 08:17:06 +02:00
9a066cb24c
Sprint C: Listen-Familie konsolidiert (Notes/Expenses/Health), SW by-v1104
...
Neue zentrale CSS-Datei lists.css (~280 Zeilen) mit Listen-Komponenten:
- .list-shell, .list-filter-bar, .list-search-wrap
- .list-group-header
- .list-item-card + Modifier: --clickable, --milestone, --inactive
- .list-item-date-col + sub-elements (für Diary-Style)
- .list-item-meta-badge mit --meta-color (für Expenses/Health Icons)
- .list-item-body, .list-item-title, .list-item-text, .list-item-meta-row
- .list-item-chips + .list-item-chip mit --chip-color
- .list-item-micro-badges + .list-item-micro-badge
- .list-item-thumb (+ .list-item-thumb-count Overlay)
- .list-item-amount (+ --positive/--negative/--neutral)
- .list-item-actions + .list-item-action-btn (+ --danger)
- .list-reminders-banner + .list-reminder-item (+ --urgent/--warning/--success)
- .list-fab (FAB mit safe-area-inset)
MIGRATIONEN:
notes.js — 10+ Klassen ersetzt:
- .notes-card → .list-item-card list-item-card--clickable
- .notes-rubrik-chip → .list-item-chip mit --chip-color
- .notes-card-meta → .list-item-meta-row
- .notes-action-btn → .list-item-action-btn
- .notes-group-label → .list-group-header
- Notes-spezifische Klassen als Modifier behalten (vertikales Layout,
pre-wrap text, Top-Zeile mit Actions rechts oben)
- Alte CSS-Definitionen im Inline-<style> als TODO markiert
expenses.js — komplette Item-Card-Migration:
- .exp-entry → .list-item-card list-item-card--clickable
- .exp-entry-icon-badge mit --kat-color → .list-item-meta-badge --meta-color
- .exp-entry-betrag → .list-item-amount list-item-amount--negative
- .exp-entry-del → .list-item-action-btn list-item-action-btn--danger
- .exp-recurring-card--inaktiv → .list-item-card--inactive
- .exp-fab → .list-fab
- UI.moneyInput + UI.parseMoney in beide Forms integriert (€-Prefix,
Komma-Dezimal)
- Hero-Card + Statistik/Kacheln behalten (spezifisch)
health.js — 9 Card-Renderings migriert:
- Impfungen/Tierarzt/Gewicht/Läufigkeit/Medikamente/Allergien/
Dokumente/Tierarztpraxis/Befunde
- .health-card → .list-item-card list-item-card--clickable
- Health-Ampel parallel behalten (.health-card-ampel + Linie links)
- Reminder-Banner: .health-reminder-* → .list-reminders-banner +
.list-reminder-item--urgent/--warning
- Gewicht-Wert: .list-item-amount für kg-Anzeigen
- Form-Modals + KI-Buttons + Transponder-Chip unangetastet (anderer
Scope)
Tests 19/19 grün. Kein visueller Diff erwartet — Modifier-Klassen
bewahren spezifische Layouts.
2026-05-27 07:31:21 +02:00
459cd425f2
Design-System Sprint A: utilities.css + 948 Inline-Styles → Utility-Klassen, SW by-v1102
...
PHASE 1 — Sofort-Cleanup ohne Risiko:
- Neue Datei utilities.css mit ~25 Klassen für häufige Kombinationen:
* text-xs-muted, text-xs-secondary, text-sm-muted, text-sm-secondary
* flex-gap-2/3, flex-col-gap-2/3/4, flex-center-gap-1/2/3
* flex-between, flex-1-min, mb-1/3, mt-1/3
* icon-xs/sm/md/lg, label-block, caption
- index.html bindet utilities.css ein
- mb-3/mt-3 ergänzt (waren in design-system.css unvollständig)
PHASE 2 — .by-tab Modifier für Vereinheitlichung:
- .by-tabs.grid (mit --tab-cols Variable für Admin/Health/etc.)
- .by-tabs.sticky (Desktop vertikale Tabs für Admin)
- .by-tabs.wrap (Zuchthunde, flex-wrap statt scroll)
- .by-tabs.separated (Sitting, mit eigenem Hintergrund + Border)
PHASE 3 — Inline-Style → Klassen-Migration (Python-Script):
- 948 Inline-Styles entfernt (5101 → 4153, -18%)
- 962 Migrationen über 47 Page-Dateien
- Top-Treffer: admin.js (180), health.js (67), dog-profile.js (67),
litters.js (62), settings.js (61), zuchthunde.js (51)
- Patterns: text-muted, text-secondary, text-danger, text-xs-muted,
text-sm-muted, grid-2 (Duplikat-Bug behoben!), flex-col-gap-3,
p-3/4, mb-2/3/4, hidden, w-full, flex-1, ...
- Bewahrt bestehende class-Attribute (mergt korrekt)
Alle 19 Tests grün. Kein visueller Diff erwartet (gleiche Property-Werte).
2026-05-27 07:11:27 +02:00
2876469e91
UX: Offline-Pfote in Ban-Yaro-Braun statt Grün, SW by-v1090
...
Filled-Farbe der Pfoten-Linien von #16a34a (grün) auf #5C3517
(dunkles Ban Yaro Braun) — passt zum Brand statt fremder
Signalfarbe, klar erkennbar auf orangem FAB.
2026-05-26 16:00:25 +02:00
94f02dbe3a
UX: Mehr Offline-Seiten precachen + nur Strich grün, SW by-v1085
...
PRIORITY_PAGES erweitert auf 10 Seiten (war 8): zusätzlich
health.js, notes.js, expenses.js. admin.js raus — 233 KB, offline
irrelevant. Damit funktionieren offline ohne vorherigen Besuch:
Tagebuch · Gesundheit · Karte · Gassi · Erste Hilfe · Notizblock
Ausgaben · Routen · Giftköder · Vermisst.
Offline-Indikator Step 2 prüft jetzt alle 7 vom User genannten
Seiten (diary, map, walks, erste-hilfe, notes, expenses, routes) —
Pfote wird grün wenn alle im Static-Cache sind.
CSS-Färbung umgestellt: nur stroke (Linie) wird grün, kein fill
mehr. Pfote behält ihre offene Optik, nur die Outlines wechseln
von weiß zu Grün.
2026-05-26 15:14:07 +02:00
b9fe5b5bc3
UX: Offline-Score direkt im FAB statt separater Pfote, SW by-v1083
...
User-Feedback: separater Indikator zu viel — die Pfote IM FAB selbst
soll je nach Score grün eingefärbt werden.
- Separater #offline-indicator Button entfernt (HTML + CSS)
- Welten-FAB-Icon: <use phosphor.svg#paw-print> ersetzt durch
Inline-SVG mit 5 einzelnen paw-elem-Pfaden (1 Ballen + 4 Zehen)
- CSS: Default weiß (wie bisher), .filled wird leuchtendes Grün
(#16a34a) — überzeichnet auf orangem FAB klar erkennbar
- offline-indicator.js: zeigt jetzt nur noch die FAB-Pfade ein/aus,
kein eigenes Element mehr; Klick-Status-Modal als window.OfflineIndicator.openStatus() weiter verfügbar (kann
später bei Bedarf an Long-Press oder Menüpunkt gehängt werden)
2026-05-26 14:57:19 +02:00
53c80b9bf6
Fix: Offline-Pfote sichtbar by-default, JS versteckt nur, SW by-v1082
...
Logik umgedreht: Default ist 'sichtbar', JS setzt .is-hidden nur wenn
explizit nicht in Welten. So robust gegen Sibling-Selektor-Probleme
oder CSS-Compositing-Eigenheiten auf iOS PWA.
Außerdem: Hintergrund prominenter (rgba 0.95 statt 0.85), echter
Border statt Glas-Filter, stärkerer Schatten — bei den vorigen
Versuchen war die Pfote vermutlich auch durch Transparenz schwer zu
erkennen auf grauem Hintergrund.
2026-05-26 14:43:56 +02:00
eb0f460304
Fix: Offline-Pfote per JS-Klasse sichtbar (Fallback zum CSS-Sibling), SW by-v1081
...
Der reine CSS-Sibling-Selektor klappte nicht zuverlässig (vermutlich
SW-Cache-Mismatch oder DOM-Reihenfolge im aktuellen Zustand des
Users). Lösung: MutationObserver in offline-indicator.js beobachtet
class/style auf #worlds-overlay und togglet .visible auf
#offline-indicator. CSS akzeptiert jetzt beide Wege:
#worlds-overlay.worlds-visible ~ #offline-indicator,
#offline-indicator.visible { display: flex; }
So bleibt das Layout funktional auch wenn CSS-Compositing oder
Cache-Versatz mal nicht greift. console.warn wenn das Element nicht
im DOM ist (z.B. wenn alte index.html aus SW-Cache).
2026-05-26 14:36:27 +02:00
521b7b6bee
UX: Offline-Pfote über FAB + nur in Welten sichtbar, SW by-v1080
...
- Position: bottom-right über dem #worlds-fab (right:20px, bottom-
Berechnung folgt FAB + 12px Abstand). Gleiche horizontale Achse
wie FAB → ergibt eine 'Pfoten-Säule' (Indikator oben, FAB unten)
- Sichtbarkeit per CSS-Sibling-Selektor:
#worlds-overlay.worlds-visible ~ #offline-indicator { display:flex }
→ Indikator nur sichtbar wenn Welten aktiv sind. Auf Detail-Seiten
(Tagebuch, Karte, Admin etc.) bleibt er aus.
- z-index 61 (eine Stufe über dem FAB, unter Modals)
2026-05-26 14:30:57 +02:00
06b91dc54b
Fix: Offline-Pfote als schwebendes Element (Welten verstecken Header), SW by-v1079
...
Der Header (#app-header) ist in den Welten per 'display:none !important'
ausgeblendet (Welten übernehmen Navigation). Mein Pfötchen saß da
drin und war genau dort unsichtbar wo es sichtbar sein sollte.
- Button aus dem Header rausgeholt, am Ende vom body als schwebendes
Element platziert (position:fixed; top-right; z-index:9000)
- Eigener Stil: 40px runder Glas-Hintergrund, blur-Effekt, leichter
Schatten — passt zur FAB-Optik unten rechts
- Dark-Mode Hintergrund: dunkles Glas
- Sichtbar in allen Welten und auf allen Seiten (auch wo Header da
ist — sitzt daneben)
- 'hidden'-Default raus, Element ist sofort sichtbar (nur Färbung
wartet auf refresh())
2026-05-26 14:24:45 +02:00
8097d21605
Feature: Offline-Bereitschafts-Indikator (Pfote im Header), SW by-v1077
...
- Neue Pfote oben rechts im Header zeigt 5-stufige Offline-Bereitschaft
(1 Ballen + 4 Zehen, je 20% — grau outline → grün gefüllt)
- 5 Checks: App-Shell · Page-Module · Hund-/Tagebuchdaten · Karten-
Tiles (≥50) · Foto-Previews
- Klick öffnet Status-Modal mit Checkliste + 'Fehlende nachladen'-
Button. Lädt aktiv: Page-Module per fetch, API-Daten für aktiven
Hund, Tile-Cache per SW-Message CACHE_TILES, Diary-Foto-Previews
- Refresh: alle 60s + bei SW CACHE_UPDATE-Message
- Eigene offline-indicator.js (nicht im app.js mit reingequetscht);
ins STATIC_ASSETS-Precache aufgenommen
2026-05-26 14:16:57 +02:00
416f32b056
Fix: Chips gleichförmig bei großer iOS-Schriftgröße (height 74px statt min-height, max-height px statt em), SW by-v1035
2026-05-16 13:51:03 +02:00
d8b75fbcab
Fix: Globaler Dark-Mode-Filter für alle Leaflet-Karten
...
design-system.css: .leaflet-tile-pane bekommt den invert/hue-rotate-Filter
im Dark-Mode — gilt für walks, lost, poison, forum, routes und alle
anderen Seiten mit eingebetteten Leaflet-Karten.
design-system.css ?v=1025, SW by-v1026, APP_VER 1026
2026-05-16 11:41:12 +02:00
059002670a
Feature: Karten-UI vollständig Dark-Mode-fähig
...
Filter-Chips, Status-Pille und Popup-Ballons passen sich dem Dark-Mode an:
- .map-legend-btn: dunkel frosted-glass (rgba(24,20,16,0.88)) statt weiß
- .map-legend-all (Filter-Btn): entsprechend dunkler Ton
- .map-statusbar: dunkler Hintergrund + helle Schrift
- .leaflet-popup-content-wrapper/.tip: --c-surface (#241C14) statt weiß
Aktive Tabs behalten Layer-Farbe, Marker-Farben bleiben unverändert.
components.css ?v=1015, SW by-v1024, APP_VER 1024
2026-05-16 11:25:04 +02:00
721e630a34
Fix: Dark-Mode Karte + Badge-Farben + --c-bg-secondary
...
Karte:
- Dark-Mode: CartoDB Dark Matter Tiles statt OSM Standard
- MutationObserver + matchMedia watchee für Live-Theme-Wechsel
- _buildTileLayer() / _applyTileTheme() / _isDarkMode()
Badges litters.js:
- Hardgekodete dunkle Hintergründe → CSS-Klassen (badge-warning/-success/-muted)
- Funktioniert jetzt in Light + Dark Mode korrekt
movies.css:
- .movie-tag-stirbt/.movie-tag-ueberlebt → CSS-Variablen (danger-/success-subtle)
- Kein weißer Hintergrund mehr in Dark Mode
--c-bg-secondary: Zoom-Control 30px bleiben aus dem letzten Commit
SW by-v1022, APP_VER 1022
2026-05-16 11:11:09 +02:00
161c1e3f73
Fix: --c-bg-secondary definiert, Zoom-Control 30px, Dark-Mode Karten
...
- design-system.css: --c-bg-secondary hinzugefügt (fehlte → transparente Karten)
Light: #F2EDE4, Dark: #221A12 — sichtbarer Kontrast zu --c-bg in beiden Modi
Gilt für laeufi.js, litters.js, breeder.js Karten
- Zoom-Control: padding-top 28→30px (besser mittig zu 2 Filter-Reihen)
- components.css ?v=1014, SW by-v1021, APP_VER 1021
2026-05-16 10:50:10 +02:00
1c187675a9
Fix: Zoom-Control padding-top zurück auf 28px (war 33 = zu tief)
2026-05-16 10:42:44 +02:00
e44414015a
Fix: Karte — Zoom-Ausrichtung, 'Z14' kürzer, Marker-Count ausgeblendet
...
- leaflet-top padding-top 28→33px (Zoom-Buttons mittig zu 2 Filter-Reihen)
- Zoom-Anzeige: 'Zoom 14 · ab 14: alle Layer' → 'Z14' (Hinweis als title)
- #map-osm-status ausgeblendet (Marker-Anzahl nimmt Platz von Wetter etc.)
- components.css ?v=1012, SW by-v1019, APP_VER 1019
2026-05-16 10:39:12 +02:00
562d64979f
Fix: Karte — Filter-Button mit Label, kürzere Chip-Texte
...
- #map-legend-all: 'Filter' Text neben dem List-Icon
- 'Hundefreundl. Café/Restaurant' → 'Café & Restaurant'
- 'Hundefreundl. Hotel' → 'Hotel'
- .map-legend-all: padding angepasst für Text-Label
- components.css ?v=1011, SW by-v1018, APP_VER 1018
2026-05-16 10:32:11 +02:00
ed9dd08c14
Desktop: Einheitliche Seitenbreite 860px via pc-desktop Klasse
...
- app.js: _applyDesktopWidth() setzt nach Page-Init die Klasse pc-desktop
auf dem ersten Kind-Div aller Standard-Seiten (excl. admin/map/chat/etc.)
- layout.css: .pc-desktop { max-width:860px !important; margin:0 auto }
- layout.css: .page-container ab 768px auf 860px (statt erst 1024px)
- main.py: /force-update Text "Service Worker wird entfernt" →
"Wir besorgen neue Leckerlis 🦴 "
- layout.css ?v=1013, components.css ?v=1010, SW by-v1014, APP_VER 1014
2026-05-16 09:57:00 +02:00
9816075c7e
Desktop JETZT: world-top max-width 860px zentriert
...
Greeting-Karte + Wetter/Route/Übung-Chips stretchen nicht mehr auf volle
Desktopbreite. Chips sind je ~280px breit — deutlich kompakter als vorher.
components.css ?v=1010, SW by-v1013, APP_VER 1013
2026-05-16 09:36:28 +02:00
f36bac7ded
Desktop: W3-Overlays als zentrierte Dialogs (FAB + All-Chips)
...
@media 768px:
- .w3-sheet-overlay: justify-content/align-items:center statt flex-end
- .w3-sheet-panel: border-radius:20px, max-width:480px, padding:24px
- .w3-sheet-panel--scroll: max-width:680px (all-chips breiter)
- all-chips Grid: auto-fill minmax(100px) statt repeat(4,1fr)
components.css ?v=1009, SW by-v1012, APP_VER 1012
2026-05-16 09:28:03 +02:00
6721597779
Fix Desktop Chips: !important overrides für flex + grid-template-columns unset
...
Das grid blieb wegen Spezifität aktiv. Explizite !important auf display:flex,
flex-wrap:nowrap, grid-template-columns:unset erzwingen die Eine-Zeile-Darstellung.
components.css ?v=1008, SW by-v1009, APP_VER 1009
2026-05-16 09:15:41 +02:00
9168d982d0
Desktop Welten: Chips eine Zeile + Nav vertikal zentriert
...
- .world-chips-grid @768: flex nowrap, alle Chips in einer Zeile (80px Basis,
shrinks bis 60px), justify-content:center — egal wie viele aktiv
- #world-labels bottom: 22px→33px (vertikal zentriert zwischen Chips und Footer)
- components.css ?v=1007, SW by-v1008, APP_VER 1008
2026-05-16 09:12:05 +02:00
8c69143b09
Layout: Nav vertikal zentriert, Info-Karte höher
...
- #world-labels bottom: 20px→33px (vertikal zentriert zwischen Chips und Footer)
- .world-panel top-padding: 32px→14px (Info-Karte näher an Statusleiste)
- components.css ?v=1006, SW by-v1007, APP_VER 1007
2026-05-16 09:06:28 +02:00
c29b2c1752
Fix: Nav zentriert (mobile) + Desktop Nav unten zwischen Chips und Footer
...
- #world-labels: right:80px→right:0 (Nav war durch halbe Breite nach links versetzt)
- @media 768px: Nav bleibt unten statt zurück nach oben — Chips+Nav+Footer
gleiches Layout wie Mobile, nur top-padding 48px und chip-grid max-width 480px
- components.css ?v=1005, SW by-v1006, APP_VER 1006
2026-05-16 09:02:41 +02:00
ad942e81b2
Fix Desktop-Layout Welten: Top-Padding + Chips-Breite
...
@media 768px:
- .world-panel top-padding zurück auf safe-area+58px (Nav ist oben)
- .world-chips-grid max-width:480px zentriert (kein Full-Width Bottom-Bar)
SW by-v1005, APP_VER 1005
2026-05-16 08:56:17 +02:00
d6eb2bcf98
Layout: JETZT/HUND/WELT Nav nach unten, Info-Karte höher
...
- #world-dots: ausgeblendet auf Mobile (Labels dienen als Tab-Indikator)
- #world-labels: von top→bottom (safe-area+20px), pill-Style für active
right:80px damit FAB nicht überlappt, backdrop-blur auf active label
- .world-panel top-padding: 58→32px (Info-Karte startet weiter oben)
- Desktop @media 768px: Nav bleibt oben (dots+labels wie vorher)
- components.css ?v=1003, SW by-v1004, APP_VER 1004
2026-05-16 08:53:14 +02:00
d03e49800d
Layout: Footer-Links absolut positioniert, Chips dichter am FAB
...
- .world-panel: bottom-padding 88→76px, position:relative als Anker
- .world-footer-links: position:absolute bottom:safe-area+4px —
nimmt keinen Platz im Fluss mehr ein, klebt am unteren Bildschirmrand
- Chips sitzen jetzt näher am FAB, Hintergrundbild bekommt mehr Raum
- components.css ?v=1002, SW by-v1003, APP_VER 1003
2026-05-15 22:01:41 +02:00
a8c63e87da
Experiment: Chip-Layout unten — Hintergrundbild bekommt mehr Raum
...
- Section-Labels entfernt ('Deine Bereiche', 'Alles über X', 'Die Welt da draußen')
- Chip-Grid: Höhe 80→74px, Gap 8→7px
- world-bottom gap 8→5px
- Footer-Links: Padding reduziert, Schrift 11→10px
- CSS-Version ?v=1001 für immutable-Cache-Busting
- SW by-v1002, APP_VER 1002
2026-05-15 21:18:44 +02:00
5fd86dac4b
UX: Admin-Panel Desktop — Sidebar-Navigation, 1200px Breite, keine abgeschnittenen Tabs (SW by-v973)
2026-05-15 12:42:04 +02:00
0399282e4c
Fix: Wurfbörse auto-fill Grid — 1 Karte füllt volle Breite, keine fixen Spalten mehr (SW by-v907)
2026-05-13 19:35:05 +02:00
9deb04c02d
Fix: Gassi Desktop — Scrollbalken im Listen-Panel ausgeblendet (SW by-v884)
2026-05-12 17:52:29 +02:00
79cfd63ea6
Fix: Gassi Desktop-Layout — Liste links + Karte rechts, Toggle ausgeblendet (SW by-v881)
2026-05-12 17:32:44 +02:00
69f5c2982a
Fix: Gassi-Karte 0px-Höhe — walks-map height:100% + map-view overflow:hidden (SW by-v876)
2026-05-12 09:31:28 +02:00
79fa5684b9
Feature+Fix: Referral-Admin, Pro-Gates, Karten-Layer, onDogChange, Staging-Media (SW by-v855)
...
Features:
- Admin: Referral-Tab (Virality Factor, Top-Werber, letzte Einladungen)
- Karte: Regenradar (RainViewer, zoom→7, color=4), Temperatur-Layer (OWM) mit Zahlen-Grid + Legende
- Wetter-Chip: Umschwung-Warnung bei ≥40%-Sprung in Niederschlagswahrscheinlichkeit
- Freundschaftsanfragen: Accept/Decline direkt in Notifications (kein Pro nötig)
- Freunde-Seite für Standard-User freigeschaltet
Pro-Gates:
- KI-Trainer, Routenvorschläge, Regenradar, Temperatur-Layer jetzt Pro-Feature
- Pro-Badge (P) auf Chips für Admins/Mods in allen Welten + Welten-einrichten
- Oranger Banner auf Pro-Seiten für Admin/Mod/Manager
Bugfixes:
- onDogChange: uebungen.js (Cache leeren + _render), trainingsplaene.js (war leer)
- robots.txt vereinfacht (nur Disallow, kein Allow-Durcheinander)
- Hintergrund-Foto: Querformat-Filter korrigiert (kein Fallback auf Hochformat)
- Staging Media: FileResponse mit korrektem MIME-Type, no-cache statt immutable
- Staging Docker: MEDIA_DIR=/data/media + /prod-media:ro Fallback-Handler
- Staging-Fix: Bild-Upload auf zweitem Hund (war Read-only file system)
2026-05-11 17:23:29 +02:00
36ccd7815e
Fix: Zoom-Control auf Tablet 28px runter (leaflet-top padding-top) (SW by-v825)
2026-05-10 10:09:37 +02:00
666cdd3a73
Fix: map-legend top: 28px global (kein Media-Query), deckt alle Geräte ab (SW by-v824)
2026-05-10 10:03:58 +02:00
d078fb4b51
Fix: Karte Filter-Tabs Tablet top: 28px fix (kein env/max) (SW by-v823)
2026-05-10 09:50:52 +02:00
47bb1e202e
Fix: Karte Filter-Tabs Tablet min 20px top (iPad ohne Notch hat kein safe-area-inset) (SW by-v822)
2026-05-10 09:45:03 +02:00
c96e6e1fac
Fix: Karte Tablet — map füllt voll, Filter-Tabs unter Statusleiste (safe-top) (SW by-v821)
2026-05-10 09:38:36 +02:00
c185193ac9
Fix: Karte Filter-Tabs Tablet safe-area-inset-top auf Desktop-Layout (SW by-v820)
2026-05-10 09:29:01 +02:00
209d6703ad
Fix: Media-Uploads direkt ans Netz (kein SW-Clone), SW _nocache-Bypass, Samsung-Dark-Mode-Hint, Update-Button fire-and-forget (SW by-v796)
2026-05-09 19:07:52 +02:00
857c83bd65
Fix: Giftliste Dark Mode — CSS-Variablen statt hardcoded #fff5f5/#fff3cd, --c-danger-border neu (SW by-v775)
2026-05-08 13:07:06 +02:00