diff --git a/backend/static/css/components.css b/backend/static/css/components.css index 073821a..703a489 100644 --- a/backend/static/css/components.css +++ b/backend/static/css/components.css @@ -2590,8 +2590,7 @@ html.modal-open { .rk-layout { display: flex; flex-direction: column; - height: 100%; - overflow: hidden; + min-height: 100dvh; background: var(--c-bg); } .rk-header { diff --git a/backend/static/css/design-system.css b/backend/static/css/design-system.css index 5b6f1e0..e3f5166 100644 --- a/backend/static/css/design-system.css +++ b/backend/static/css/design-system.css @@ -197,6 +197,7 @@ html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; height: 100%; + overscroll-behavior: none; /* kein Window-Bounce auf iOS */ } body { @@ -207,6 +208,7 @@ body { color: var(--c-text); background-color: var(--c-bg); min-height: 100%; + overscroll-behavior: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } diff --git a/backend/static/css/layout.css b/backend/static/css/layout.css index 399a9c7..21572ad 100644 --- a/backend/static/css/layout.css +++ b/backend/static/css/layout.css @@ -10,38 +10,44 @@ #app { display: flex; flex-direction: column; - min-height: 100dvh; + height: 100dvh; /* dvh = dynamic viewport inkl. safe areas */ + overflow: hidden; } -/* Content-Bereich: füllt den Raum zwischen Header und Bottom-Nav */ +/* Content-Bereich scrollt intern — kein padding-bottom nötig da Nav Flex-Kind */ #page-content { - flex: 1; - min-height: 0; /* iOS-Flex-Bug: ohne das scrollt body statt #page-content */ - overflow-y: auto; - overflow-x: hidden; - padding-bottom: calc(var(--nav-bottom-height) + var(--safe-bottom) + 16px); + flex: 1; + min-height: 0; + overflow-y: auto; + overflow-x: hidden; -webkit-overflow-scrolling: touch; + overscroll-behavior-y: none; } -/* Mobile only: iOS-Bounce verhindert dass fixed-Nav driftet */ -@media (max-width: 767px) { - #page-content { - overscroll-behavior-y: none; - } +/* Vollbild-Seiten: #page-content kein Scroll */ +body.page-fullscreen #page-content { + overflow: hidden; } -/* Desktop: Sidebar-Layout — kein Bottom-Nav, natürliche Höhe */ +/* Desktop: window-scroll, Sidebar-Layout */ @media (min-width: 768px) { #app { + height: auto; + min-height: 100dvh; + overflow: visible; flex-direction: row; } #page-content { - min-height: unset; - overflow-y: visible; /* nicht als Scroll-Container — Window scrollt */ - overflow-x: visible; + flex: unset; + min-height: unset; + overflow-y: visible; + overflow-x: visible; padding-bottom: 0; padding-left: var(--nav-sidebar-width); } + body.page-fullscreen #page-content { + overflow: visible; + } } /* ------------------------------------------------------------ @@ -159,40 +165,28 @@ position: relative; } -/* Routen: volle Höhe damit .rk-layout height:100% auflöst und - das Grid intern scrollt (nicht die gesamte Seite via #page-content) */ -#page-routes { - height: 100%; - overflow: hidden; -} +/* Routen: window-scroll (kein overflow:hidden), padding entfernt */ #page-routes > .page-body { - padding: 0 !important; - overflow: hidden; - height: 100%; + padding: 0 !important; } /* ------------------------------------------------------------ 3. BOTTOM NAVIGATION (Mobile) ------------------------------------------------------------ */ #bottom-nav { - position: fixed; - bottom: 0; - left: 0; - right: 0; - z-index: 700; /* über Leaflet-Panes (~400) */ - /* GPU-Layer erzwingen → iOS Safari fixed-position Stabilität */ - transform: translateZ(0); - -webkit-transform: translateZ(0); - will-change: transform; - min-height: calc(var(--nav-bottom-height) + var(--safe-bottom)); + /* Flex-Kind von #app{height:100dvh} — kein position:fixed nötig. + 100dvh auf iOS inkludiert Safe Areas → Nav endet am physischen Rand. */ + flex-shrink: 0; + z-index: 700; + min-height: calc(var(--nav-bottom-height) + var(--safe-bottom)); padding-top: var(--space-1); padding-bottom: calc(var(--safe-bottom) + var(--space-1)); - background: var(--c-surface); - border-top: 1px solid var(--c-border-light); - display: flex; - align-items: stretch; - box-shadow: 0 -2px 12px rgba(42, 31, 20, 0.08); - transition: border-top-color 0.4s ease; + background: var(--c-surface); + border-top: 1px solid var(--c-border-light); + display: flex; + align-items: stretch; + box-shadow: 0 -2px 12px rgba(42, 31, 20, 0.08); + transition: border-top-color 0.4s ease; } @keyframes nav-alert-pulse { diff --git a/backend/static/index.html b/backend/static/index.html index 5b5341f..16a5b81 100644 --- a/backend/static/index.html +++ b/backend/static/index.html @@ -88,9 +88,9 @@ - - - + + + @@ -434,7 +434,7 @@ - +