diff --git a/backend/main.py b/backend/main.py index 60f5cda..0eb91e8 100644 --- a/backend/main.py +++ b/backend/main.py @@ -327,7 +327,7 @@ MEDIA_DIR = os.getenv("MEDIA_DIR", "/data/media") os.makedirs(MEDIA_DIR, exist_ok=True) app.mount("/media", StaticFiles(directory=MEDIA_DIR), name="media") -APP_VER = "791" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "796" # muss mit APP_VER in app.js übereinstimmen @app.get("/.well-known/assetlinks.json") async def assetlinks(): diff --git a/backend/static/css/design-system.css b/backend/static/css/design-system.css index 8683ab0..12bbb8f 100644 --- a/backend/static/css/design-system.css +++ b/backend/static/css/design-system.css @@ -8,6 +8,7 @@ 1. TOKENS — Farben, Abstände, Typografie, Schatten ------------------------------------------------------------ */ :root { + color-scheme: dark light; /* Primärfarben — Honig-Amber aus Ban Yaros Fell */ --c-primary: #C4843A; --c-primary-dark: #9E6520; diff --git a/backend/static/index.html b/backend/static/index.html index 3a46c5d..a6c708a 100644 --- a/backend/static/index.html +++ b/backend/static/index.html @@ -67,6 +67,9 @@ } + + + diff --git a/backend/static/js/app.js b/backend/static/js/app.js index b4a14ab..b1783e7 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 = '791'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '796'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VERSION = '1.5.0'; // ← semantische Version, wird bei make release gesetzt const IS_STAGING = location.hostname === 'staging.banyaro.app'; // Cache-Bust-Parameter nach Update-Reload sofort entfernen @@ -976,7 +976,6 @@ const App = (() => { }); } - // ---------------------------------------------------------- // ---------------------------------------------------------- // VERSION-CHECK let _updateBannerShown = false; @@ -1045,18 +1044,19 @@ const App = (() => { banner.querySelector('#upd-btn-close').addEventListener('click', () => banner.remove()); - banner.querySelector('#upd-btn-reload').addEventListener('click', async () => { + banner.querySelector('#upd-btn-reload').addEventListener('click', () => { const btn = banner.querySelector('#upd-btn-reload'); btn.textContent = 'Lädt…'; btn.disabled = true; + // Cleanup fire-and-forget — kein await, nie blockieren try { - // Alle SW deregistrieren + alle Caches löschen → sauberer Neustart - const regs = await navigator.serviceWorker?.getRegistrations() ?? []; - await Promise.all(regs.map(r => r.unregister())); - const keys = await caches.keys(); - await Promise.all(keys.map(k => caches.delete(k))); - } catch { /* ignorieren */ } - location.replace('/?_t=' + Date.now()); + navigator.serviceWorker?.getRegistrations() + .then(regs => regs.forEach(r => r.unregister())).catch(() => {}); + caches.keys() + .then(keys => keys.forEach(k => caches.delete(k))).catch(() => {}); + } catch { } + // Sofort neu laden — nicht auf Cleanup warten + location.href = '/?_nocache=' + Date.now(); }); } diff --git a/backend/static/js/pages/settings.js b/backend/static/js/pages/settings.js index 0999352..8108667 100644 --- a/backend/static/js/pages/settings.js +++ b/backend/static/js/pages/settings.js @@ -329,6 +329,15 @@ window.Page_settings = (() => { + ${/SamsungBrowser/i.test(navigator.userAgent) ? ` +