/* 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) {
    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;
    }
}
