/*
 * GEK-UI-2 "Shell": reine Geometrie, keine Farbwerte mehr (R-4.0.1 - Farben
 * ausschliesslich aus resources/css/filament/kasse/tokens.css). Die frueheren
 * .pwa-install-button/.pwa-ios-hint-Regeln sind ausgezogen in
 * resources/views/components/kasse/shell/install-launcher.blade.php, die den
 * Knopf-Baustein aus GEK-UI-1 (x-kasse.button) und Utility-Klassen aus den
 * Tokens nutzt. Nur die Positionierung (fixed unten rechts, Safe-Area-Abstand)
 * bleibt hier, weil sie unabhaengig vom Innenleben des Launchers gilt.
 */
.pwa-install-launcher {
    position: fixed;
    z-index: 30;
    right: max(1rem, env(safe-area-inset-right));
    bottom: max(1rem, env(safe-area-inset-bottom));
    display: grid;
    gap: 0.5rem;
    max-width: min(22rem, calc(100vw - 2rem));
}

/* Regressions-Katalog E-19 (Teil 1 von 2, Teil 2 in shell.css): Solange der
   Launcher sichtbar ist (Attribut "hidden" fehlt - siehe pwa.js), reserviert
   der gemeinsame Seiteninhalt .fi-main Platz fuer ihn an ihrem eigenen Ende,
   sonst kann Inhalt am TATSAECHLICHEN SEITENENDE (z. B. 2FA-Wiederherstellungs-
   codes) in genau die Ecke scrollen, in der der Knopf fix steht.
   Ein reiner Randabstand deckt NUR den Tail-Fall ab: padding-bottom am
   Seitenende verschiebt nichts an der Position von Inhalt, der VOR diesem
   Padding im Fluss steht - auf kurzen Seiten liegt so ein frueherer
   Abschnitt (z. B. ein Passwortfeld) schon bei scrollY=0 ungeschuetzt in
   derselben Ecke. Deshalb NUR ab 640px (Tresen-Stufe und aufwaerts) aktiv:
   unterhalb 640px loest shell.css das Problem strukturell (eigene,
   verkuerzte Bildschirmflaeche fuer .fi-main statt blossem Randabstand,
   siehe dortiger Kommentar fuer die volle Herleitung) - ein zusaetzlicher
   Randabstand hier waere dort nur unnoetiger doppelter Leerraum am Ende
   jeder Seite.
   Die Bedingung ist bewusst an :has() geknuepft statt permanent zu
   reservieren: der Launcher ist die meiste Zeit unsichtbar, ein
   dauerhafter Leerraum auf jeder Seite waere ein neuer, unnoetiger
   Nebeneffekt. Der Wert deckt den Maximalfall (Knopf + aufgeklappter
   iOS-Hinweis) ab, damit das Aufklappen des Hinweises keinen Sprung im
   Seiteninhalt ausloest: min-h-hit-Knopf 44px + 0.5rem Gap + Hinweis
   (py-3 = 1.5rem + bis zu drei text-sm-Zeilen = 3.75rem) + 1rem
   Bottom-Versatz + 0.5rem Puffer = 10rem. */
@media (min-width: 640px) {
    body:has(
        .pwa-install-launcher [data-pwa-install]:not([hidden]),
        .pwa-install-launcher [data-pwa-ios-hint]:not([hidden])
    ) .fi-main {
        padding-bottom: 10rem;
    }
}

/* Nur die installierte App läuft bis in die Systemleiste. Der Filament-Kopf
   erhält dort die Safe Area, damit Menü und Profil nicht unter dem Statusbereich liegen. */
@media (max-width: 639px) and (display-mode: standalone) {
    .fi-topbar nav {
        height: calc(3.5rem + env(safe-area-inset-top));
        min-height: calc(3.5rem + env(safe-area-inset-top));
        padding-top: env(safe-area-inset-top);
    }

    /* Die mobile Filament-Sidebar ist ein fest positioniertes Overlay und
       umgeht deshalb den Safe-Area-Abstand des Topbars. Ohne diesen Innenabstand
       liegt ihr Logo direkt unter iOS-Uhr und Statussymbolen. */
    .fi-sidebar {
        box-sizing: border-box;
        height: 100dvh;
        min-height: 100dvh;
        padding-top: env(safe-area-inset-top);
    }

    .fi-sidebar-header {
        height: 3.5rem;
        min-height: 3.5rem;
    }

    .fi-sidebar-nav {
        padding-top: 1rem;
    }
}
