/* Mobile viewport — prevent document scroll / white gap below short pages.
   Lock html/body/#app; page roots keep their own min-height: 100svh. */

@media (max-width: 47.999rem), screen and (min-width: 768px) and (max-width: 1366px) {
    html:has(.signup-page-shell:not(:has(.gaming-details.gaming-id-upload)):not(:has(.gaming-details.gaming-review)):not(:has(.lhome-page)):not(:has(.gaming-consent)):not(:has(.gaming-ndrp-status)):not(:has(.lifestyle-signup))),
    html:has(.signup-page-shell:not(:has(.gaming-details.gaming-id-upload)):not(:has(.gaming-details.gaming-review)):not(:has(.lhome-page)):not(:has(.gaming-consent)):not(:has(.gaming-ndrp-status)):not(:has(.lifestyle-signup))) body,
    html:has(.signup-page-shell:not(:has(.gaming-details.gaming-id-upload)):not(:has(.gaming-details.gaming-review)):not(:has(.lhome-page)):not(:has(.gaming-consent)):not(:has(.gaming-ndrp-status)):not(:has(.lifestyle-signup))) #app {
        height: 100svh;
        max-height: 100svh;
        overflow: hidden;
        overscroll-behavior: none;
    }

    .signup-page-shell:not(:has(.gaming-details.gaming-id-upload)):not(:has(.gaming-details.gaming-review)):not(:has(.lhome-page)):not(:has(.gaming-consent)):not(:has(.gaming-ndrp-status)):not(:has(.lifestyle-signup)) {
        height: 100%;
        min-height: 100svh;
        max-height: 100svh;
        overflow: hidden;
        overscroll-behavior: none;
    }

    /* By Jayber — dashboard is fixed svh; min-height 100svh on shell would bleed a scroll gap below. */
    .signup-page-shell:has(.lifestyle-dashboard) {
        height: 100svh;
        min-height: 0;
        max-height: 100svh;
    }

    /* By Jayber — signup steps 1/2/3: svh lock, no pinch zoom bleed. */
    html:has(.lifestyle-signup),
    html:has(.lifestyle-signup) body,
    html:has(.lifestyle-signup) #app {
        height: 100svh;
        max-height: 100svh;
        min-height: 0;
        overflow: hidden;
        overscroll-behavior: none;
        -webkit-text-size-adjust: 100%;
        text-size-adjust: 100%;
    }

        html:has(.lifestyle-signup) body {
            position: fixed;
            inset: 0;
            width: 100%;
            background: #faf9f7;
        }

        html:has(.lifestyle-signup) #app {
            min-height: 0 !important;
        }

    .signup-page-shell:has(.lifestyle-signup) {
        height: 100svh;
        min-height: 0;
        max-height: 100svh;
        overflow: hidden;
        background: #faf9f7;
    }

    .lifestyle-signup__panel {
        touch-action: pan-y;
    }

    .signup-page-shell :is( .lifestyle-signup__panel, .gaming-details__shell, .gaming-consent__shell, .gaming-pagcor__shell, .gaming-success__shell ) {
        overscroll-behavior: contain;
        -webkit-overflow-scrolling: touch;
        touch-action: pan-y;
    }

    /* By Jayber — gaming verification (shell scroll) + success: svh lock, no pinch zoom bleed. */
    html:has(.gaming-details:not(.gaming-review):not(.gaming-id-upload)),
    html:has(.gaming-details:not(.gaming-review):not(.gaming-id-upload)) body,
    html:has(.gaming-details:not(.gaming-review):not(.gaming-id-upload)) #app,
    html:has(.gaming-details.gaming-review),
    html:has(.gaming-details.gaming-review) body,
    html:has(.gaming-details.gaming-review) #app,
    html:has(.gaming-details.gaming-id-upload),
    html:has(.gaming-details.gaming-id-upload) body,
    html:has(.gaming-details.gaming-id-upload) #app,
    html:has(.gaming-success),
    html:has(.gaming-success) body,
    html:has(.gaming-success) #app {
        height: 100svh;
        max-height: 100svh;
        min-height: 0;
        overflow: hidden;
        overscroll-behavior: none;
        -webkit-text-size-adjust: 100%;
        text-size-adjust: 100%;
    }

        html:has(.gaming-details) body,
        html:has(.gaming-success) body {
            position: fixed;
            inset: 0;
            width: 100%;
            background: #faf9f7;
        }

        html:has(.gaming-success) body {
            background: #f9f9f9;
        }

        html:has(.gaming-details) #app,
        html:has(.gaming-success) #app {
            min-height: 0 !important;
        }

    .signup-page-shell:has(.gaming-details),
    .signup-page-shell:has(.gaming-success) {
        height: 100svh;
        min-height: 0;
        max-height: 100svh;
        overflow: hidden;
    }

    .gaming-details :is( button, .btn-primary, a, [role="button"] ),
    .gaming-success :is( button, .btn-primary, a, [role="button"], .gaming-success__action-link ) {
        font-size: max(16px, 0.75rem);
        touch-action: manipulation;
    }

    /* By Jayber — lifestyle dashboard: no pan/scroll on mobile (iOS/Android white gap fix). */
    html:has(.lifestyle-dashboard),
    html:has(.lifestyle-dashboard) body,
    html:has(.lifestyle-dashboard) #app {
        height: 100svh;
        max-height: 100svh;
        overflow: hidden;
        overscroll-behavior: none;
    }

    .lifestyle-dashboard__shell {
        overflow: hidden;
        overscroll-behavior: none;
        touch-action: none;
        -webkit-overflow-scrolling: auto;
    }

    html:has(.membership-terms-dialog),
    html:has(.membership-terms-dialog) body,
    html:has(.membership-terms-dialog) #app {
        height: 100svh;
        max-height: 100svh;
        min-height: 0;
        overflow: hidden;
        overscroll-behavior: none;
    }

        html:has(.membership-terms-dialog) body {
            position: fixed;
            inset: 0;
            width: 100%;
        }

        html:has(.membership-terms-dialog) #app {
            min-height: 0 !important;
        }

    /* By Jayber — lock document on gaming consent / PAGCOR (iOS white gap below grey). */
    html:has(.gaming-consent),
    html:has(.gaming-consent) body,
    html:has(.gaming-consent) #app,
    html:has(.gaming-pagcor-dialog),
    html:has(.gaming-pagcor-dialog) body,
    html:has(.gaming-consent--pagcor-pending),
    html:has(.gaming-consent--pagcor-pending) body {
        height: 100svh;
        max-height: 100svh;
        min-height: 0;
        overflow: hidden;
        overscroll-behavior: none;
    }

        html:has(.gaming-consent) body,
        html:has(.gaming-consent--pagcor-pending) body,
        html:has(.gaming-pagcor-dialog) body {
            position: fixed;
            inset: 0;
            width: 100%;
        }

        html:has(.gaming-consent) #app {
            min-height: 0 !important;
            height: 100svh !important;
            max-height: 100svh !important;
            background: #faf9f7;
        }

        html:has(.gaming-consent--pagcor-pending) #app,
        html:has(.gaming-pagcor-dialog) #app {
            background: #595959 !important;
        }

    .signup-page-shell:has(.gaming-consent) {
        height: 100svh;
        min-height: 0;
        max-height: 100svh;
        overflow: hidden;
    }

    .signup-page-shell:has(.gaming-consent--pagcor-pending) {
        background: #595959 !important;
    }

    .gaming-consent__shell {
        overscroll-behavior: none;
        -webkit-overflow-scrolling: touch;
        touch-action: pan-y;
    }

    html:has(.gaming-pagcor-dialog),
    html:has(.gaming-pagcor-dialog) body,
    html:has(.gaming-consent--pagcor-pending),
    html:has(.gaming-consent--pagcor-pending) body {
        background: #595959 !important;
    }

    /* By Jayber — home: svh lock (no dvh jitter when iOS/Android chrome shows/hides). */
    html:has(.lhome-page),
    html:has(.lhome-page) body,
    html:has(.lhome-page) #app {
        height: 100svh !important;
        max-height: 100svh !important;
        min-height: 0 !important;
        overflow: hidden !important;
        overscroll-behavior: none !important;
        -webkit-text-size-adjust: 100%;
        text-size-adjust: 100%;
    }

        html:has(.lhome-page),
        html:has(.lhome-page) body {
            position: fixed;
            inset: 0;
            width: 100%;
            touch-action: none;
            background: #161616;
        }

            html:has(.lhome-page) #app {
                min-height: 0 !important;
                height: 100svh !important;
                max-height: 100svh !important;
                overflow: hidden !important;
            }

    .signup-page-shell:has(.lhome-page) {
        height: 100svh;
        min-height: 0;
        max-height: 100svh;
        overflow: hidden;
        background: #161616;
    }

    /* By Jayber — loader overlay + NDRP error pages: document lock. */
    html:has(.epic-splash),
    html:has(.epic-splash) body,
    html:has(.signup-flow-overlay),
    html:has(.signup-flow-overlay) body,
    html:has(.signup-flow-overlay) #app,
    html:has(.gaming-ndrp-status),
    html:has(.gaming-ndrp-status) body,
    html:has(.gaming-ndrp-status) #app {
        height: 100svh;
        max-height: 100svh;
        min-height: 0;
        overflow: hidden;
        overscroll-behavior: none;
        touch-action: none;
    }

        html:has(.epic-splash) body,
        html:has(.signup-flow-overlay) body,
        html:has(.gaming-ndrp-status) body {
            position: fixed;
            inset: 0;
            width: 100%;
        }

        html:has(.epic-splash) #app,
        html:has(.signup-flow-overlay) #app,
        html:has(.gaming-ndrp-status) #app {
            min-height: 0 !important;
        }

    .signup-page-shell:has(.gaming-ndrp-status) {
        height: 100svh;
        min-height: 0;
        max-height: 100svh;
        overflow: hidden;
    }

    html:has(.too-many-attempts-page--modal-open),
    html:has(.too-many-attempts-page--modal-open) body {
        overflow: hidden !important;
        overscroll-behavior: none !important;
        touch-action: none;
    }
}
