diff --git a/backend/main.py b/backend/main.py index bc3f106..ccf969b 100644 --- a/backend/main.py +++ b/backend/main.py @@ -410,7 +410,7 @@ async def serve_media(path: str, request: _Request): raise _HE(404, "Nicht gefunden.") return _media_response(filepath) -APP_VER = "990" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "991" # muss mit APP_VER in app.js übereinstimmen @app.get("/.well-known/assetlinks.json") async def assetlinks(): diff --git a/backend/static/js/app.js b/backend/static/js/app.js index 4cd3b61..7fdd413 100644 --- a/backend/static/js/app.js +++ b/backend/static/js/app.js @@ -3,7 +3,7 @@ Router, State-Management, Navigation, Initialisierung. ============================================================ */ -const APP_VER = '990'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '991'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VERSION = '1.6.0'; // ← semantische Version, wird bei make release gesetzt const IS_STAGING = location.hostname === 'staging.banyaro.app'; // Cache-Bust-Parameter nach Update-Reload sofort entfernen diff --git a/backend/static/js/pages/lost.js b/backend/static/js/pages/lost.js index e4be5d8..6f8fe0c 100644 --- a/backend/static/js/pages/lost.js +++ b/backend/static/js/pages/lost.js @@ -60,10 +60,13 @@ window.Page_lost = (() => { _stylesInjected = true; const s = document.createElement('style'); s.textContent = ` - @keyframes by-lost-ping { - 0% { transform: scale(0.9); opacity: 0.7; } - 70% { transform: scale(2.2); opacity: 0; } - 100% { transform: scale(2.2); opacity: 0; } + @keyframes by-lost-pulse-r { + 0%,100% { box-shadow: 0 0 0 0 rgba(231,76,60,.55), 0 2px 6px rgba(0,0,0,.3); } + 50% { box-shadow: 0 0 0 11px rgba(231,76,60,0), 0 2px 6px rgba(0,0,0,.3); } + } + @keyframes by-lost-pulse-p { + 0%,100% { box-shadow: 0 0 0 0 rgba(217,119,6,.55), 0 2px 6px rgba(0,0,0,.3); } + 50% { box-shadow: 0 0 0 11px rgba(217,119,6,0), 0 2px 6px rgba(0,0,0,.3); } } `; document.head.appendChild(s); @@ -165,6 +168,7 @@ window.Page_lost = (() => { // KARTE INITIALISIEREN // ---------------------------------------------------------- function _initMap() { + _injectStyles(); const mapEl = document.getElementById('lost-map'); if (!mapEl || !window.L || _map) return; @@ -293,29 +297,21 @@ window.Page_lost = (() => { // ---------------------------------------------------------- function _renderMarkers() { if (!_map || !window.L) return; - _injectStyles(); _markers.forEach(m => _map.removeLayer(m)); _markers = []; _reports.forEach(r => { - const dotColor = r._isPending ? '#d97706' : '#e74c3c'; - const ringColor = r._isPending ? 'rgba(217,119,6,0.35)' : 'rgba(231,76,60,0.35)'; + const dotColor = r._isPending ? '#d97706' : '#e74c3c'; + const anim = r._isPending ? 'by-lost-pulse-p' : 'by-lost-pulse-r'; const icon = L.divIcon({ className : '', - html : ` -