diff --git a/backend/static/css/components.css b/backend/static/css/components.css index 703a489..073821a 100644 --- a/backend/static/css/components.css +++ b/backend/static/css/components.css @@ -2590,7 +2590,8 @@ html.modal-open { .rk-layout { display: flex; flex-direction: column; - min-height: 100dvh; + height: 100%; + overflow: hidden; background: var(--c-bg); } .rk-header { diff --git a/backend/static/css/design-system.css b/backend/static/css/design-system.css index e3f5166..5b6f1e0 100644 --- a/backend/static/css/design-system.css +++ b/backend/static/css/design-system.css @@ -197,7 +197,6 @@ html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; height: 100%; - overscroll-behavior: none; /* kein Window-Bounce auf iOS */ } body { @@ -208,7 +207,6 @@ 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 21572ad..399a9c7 100644 --- a/backend/static/css/layout.css +++ b/backend/static/css/layout.css @@ -10,44 +10,38 @@ #app { display: flex; flex-direction: column; - height: 100dvh; /* dvh = dynamic viewport inkl. safe areas */ - overflow: hidden; + min-height: 100dvh; } -/* Content-Bereich scrollt intern — kein padding-bottom nötig da Nav Flex-Kind */ +/* Content-Bereich: füllt den Raum zwischen Header und Bottom-Nav */ #page-content { - flex: 1; - min-height: 0; - overflow-y: auto; - overflow-x: hidden; + 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); -webkit-overflow-scrolling: touch; - overscroll-behavior-y: none; } -/* Vollbild-Seiten: #page-content kein Scroll */ -body.page-fullscreen #page-content { - overflow: hidden; +/* Mobile only: iOS-Bounce verhindert dass fixed-Nav driftet */ +@media (max-width: 767px) { + #page-content { + overscroll-behavior-y: none; + } } -/* Desktop: window-scroll, Sidebar-Layout */ +/* Desktop: Sidebar-Layout — kein Bottom-Nav, natürliche Höhe */ @media (min-width: 768px) { #app { - height: auto; - min-height: 100dvh; - overflow: visible; flex-direction: row; } #page-content { - flex: unset; - min-height: unset; - overflow-y: visible; - overflow-x: visible; + min-height: unset; + overflow-y: visible; /* nicht als Scroll-Container — Window scrollt */ + overflow-x: visible; padding-bottom: 0; padding-left: var(--nav-sidebar-width); } - body.page-fullscreen #page-content { - overflow: visible; - } } /* ------------------------------------------------------------ @@ -165,28 +159,40 @@ body.page-fullscreen #page-content { position: relative; } -/* Routen: window-scroll (kein overflow:hidden), padding entfernt */ +/* 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; +} #page-routes > .page-body { - padding: 0 !important; + padding: 0 !important; + overflow: hidden; + height: 100%; } /* ------------------------------------------------------------ 3. BOTTOM NAVIGATION (Mobile) ------------------------------------------------------------ */ #bottom-nav { - /* 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)); + 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)); 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 16a5b81..5b5341f 100644 --- a/backend/static/index.html +++ b/backend/static/index.html @@ -88,9 +88,9 @@ - - - + + + @@ -434,7 +434,7 @@ - +