diff --git a/frontend/index.html b/frontend/index.html index 1bb9408..15c9396 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -27,12 +27,15 @@ repeating-linear-gradient(0deg,transparent 0 23px,var(--grid) 23px 24px), repeating-linear-gradient(90deg,transparent 0 23px,var(--grid) 23px 24px), var(--paper); - /* 100vh ist auf Mobilgeräten die *große* Viewport-Höhe (inkl. Fläche - hinter der unteren Browserleiste) — Footer/Editor-Titelzeile rutschen - dahinter. 100dvh = dynamische Viewport-Höhe, folgt der sichtbaren - Fläche. vh bleibt als Fallback für alte Browser. */ + /* Mobile Viewport-Höhe: 100vh ist die *große* Höhe (inkl. Fläche hinter + der unteren Browserleiste) — Footer/Editor-Titelzeile rutschen dahinter. + 100dvh folgt der sichtbaren Fläche, versagt aber bei Browsern mit + Overlay-Leiste (z. B. Brave). Deshalb setzt JS zusätzlich --app-height + aus window.visualViewport.height (die wirklich sichtbare Höhe). Reihen- + folge = Fallback-Kaskade: vh → dvh → exakte JS-Höhe. */ height:100vh; height:100dvh; + height:var(--app-height, 100dvh); overflow:hidden; display:flex;flex-direction:column; padding:24px 20px 12px; @@ -1809,6 +1812,23 @@ function restoreState(){ /* ---------- Kleiner Bildschirm: nur ein Panel, schlanke Sprachwahl, Vollbild ---------- */ const mqMobile = window.matchMedia('(max-width:640px)'); function isMobile(){ return mqMobile.matches; } + +/* Exakte sichtbare Höhe (--app-height) aus window.visualViewport ableiten. + Nötig, weil manche Browser (z. B. Brave) ihre untere Leiste als Overlay + zeichnen: 100dvh meldet dann weiterhin die volle Höhe, und Footer/Editor- + Titelzeile verschwinden dahinter. visualViewport.height liefert die wirklich + sichtbare Fläche. Fällt es weg, greift die CSS-Kaskade (dvh/vh). */ +function setAppHeight(){ + const vv = window.visualViewport; + const h = vv ? vv.height : window.innerHeight; + document.documentElement.style.setProperty('--app-height', Math.round(h) + 'px'); +} +setAppHeight(); +window.addEventListener('resize', setAppHeight); +window.addEventListener('orientationchange', setAppHeight); +if(window.visualViewport){ + window.visualViewport.addEventListener('resize', setAppHeight); +} const legendBtn = document.getElementById('legendBtn'); const agenda = document.querySelector('.agenda'); legendBtn.addEventListener('click', () => {