/* Keep the background still at every viewport size, including nested dialogs. */
html:has(.admissionWorkspace) { scrollbar-gutter: stable; }
html:has(.admissionWorkspace):has(dialog[open]),
body:has(.admissionWorkspace):has(dialog[open]),
html:has(.admissionWorkspace .aw-dialog-layer:not([hidden])),
body:has(.admissionWorkspace .aw-dialog-layer:not([hidden])) { overflow: hidden; }
body:has(.admissionWorkspace) dialog { overscroll-behavior: contain; }

/* Phone dialogs fill the available viewport. Popovers and the learning tour
   remain anchored to their controls; only actual modal surfaces are covered. */
@media (max-width: 600px) {

    /* The body scope also includes confirm/support dialogs mounted outside
       the workspace. Compact informational dialogs keep their own sizing and
       header colors. :where keeps the existing specificity for all other dialogs.
       Do not set display here: closed dialogs must stay closed. */
    body:has(.admissionWorkspace) dialog[class]:not(:where([data-aw-dialog-size="compact"])),
    dialog.aw-home-dialog {
        box-sizing: border-box;
        position: fixed;
        inset: 0;
        width: 100%;
        min-width: 0;
        max-width: none;
        height: 100vh;
        height: 100dvh;
        min-height: 0;
        max-height: none;
        margin: 0;
        border: 0;
        border-radius: 0;
        overflow-x: hidden;
        overflow-y: auto;
        overscroll-behavior: contain;
        -webkit-overflow-scrolling: touch;
        scroll-padding-block: 80px 24px;
        transform: none;
    }

    body:has(.admissionWorkspace) .aw-dialog-layer {
        box-sizing: border-box;
        inset: 0;
        height: 100vh;
        height: 100dvh;
        padding: 0;
        place-items: stretch;
        overflow: hidden;
    }

    body:has(.admissionWorkspace) .aw-dialog-layer > .aw-dialog {
        box-sizing: border-box;
        width: 100%;
        min-width: 0;
        max-width: none;
        height: 100%;
        min-height: 0;
        max-height: none;
        margin: 0;
        border: 0;
        border-radius: 0;
        overflow-x: hidden;
        overflow-y: auto;
        overscroll-behavior: contain;
        scroll-padding-block: 80px 24px;
        -webkit-overflow-scrolling: touch;
    }

    body:has(.admissionWorkspace) dialog[class]:not(:where([data-aw-dialog-size="compact"])) > header,
    body:has(.admissionWorkspace) .aw-dialog > .aw-dialog__head,
    dialog.aw-home-dialog > .aw-home-dialog__head {
        position: sticky;
        top: 0;
        z-index: 5;
        flex-shrink: 0;
        padding-top: max(14px, env(safe-area-inset-top));
        padding-left: max(16px, env(safe-area-inset-left));
        padding-right: max(16px, env(safe-area-inset-right));
        background: #fff;
    }

    body:has(.admissionWorkspace) dialog[class]:not(:where([data-aw-dialog-size="compact"])) > header > button,
    body:has(.admissionWorkspace) .aw-dialog > .aw-dialog__head > button,
    dialog.aw-home-dialog > .aw-home-dialog__head > button {
        flex: 0 0 44px;
        width: 44px;
        height: 44px;
        min-width: 44px;
        min-height: 44px;
    }

    body:has(.admissionWorkspace) .aw-dialog > .aw-dialog__head {
        grid-template-columns: 36px minmax(0, 1fr) 44px;
        gap: 10px;
    }

    body:has(.admissionWorkspace) .aw-dialog > .aw-dialog__head > span {
        width: 36px;
        height: 36px;
    }

    /* These existing dialogs have a dedicated scrolling body. */
    body:has(.admissionWorkspace) dialog:is(.aw-step-article, .aw-institution-modal, .aw-directory-sphere-modal) {
        overflow: hidden;
    }

    body:has(.admissionWorkspace) :is(.aw-step-article__body, .aw-institution-modal__body, .aw-directory-sphere-modal__body) {
        flex: 1 1 auto;
        min-height: 0;
        min-width: 0;
        overflow: auto;
        overscroll-behavior: contain;
    }

    body:has(.admissionWorkspace) dialog[class]:not(:where([data-aw-dialog-size="compact"])) > :last-child,
    body:has(.admissionWorkspace) .aw-dialog > :last-child,
    dialog.aw-home-dialog > .aw-home-dialog__body {
        padding-bottom: max(20px, env(safe-area-inset-bottom));
    }

    /* Short confirmations have no header: keep their close control visible
       when text or the step-feedback form needs scrolling. */
    body:has(.admissionWorkspace) dialog:is(.aw-step-complete-dialog, .aw-email-confirm) {
        padding: max(12px, env(safe-area-inset-top)) max(20px, env(safe-area-inset-right)) max(20px, env(safe-area-inset-bottom)) max(20px, env(safe-area-inset-left));
    }

    body:has(.admissionWorkspace) :is(.aw-step-complete-dialog__close-form, .aw-email-confirm__close) {
        position: sticky;
        top: 0;
        right: auto;
        z-index: 5;
        display: block;
        width: 44px;
        height: 44px;
        margin: 0 0 12px auto;
        border-radius: 4px;
        background: #fff;
    }

    body:has(.admissionWorkspace) .aw-step-complete-dialog__close {
        width: 44px;
        height: 44px;
    }

    body:has(.admissionWorkspace) .aw-email-confirm__close {
        display: grid;
        place-items: center;
    }

    /* The competition tools still use Bootstrap modal markup. */
    body:has(.admissionWorkspace) :is(#admissionCompetitorTrackingModal, #admissionFindModal, #admissionTrackingPaywallModal, #admissionForecastPaywallModal) {
        box-sizing: border-box;
        position: fixed;
        inset: 0;
        width: 100%;
        height: 100vh;
        height: 100dvh;
        padding: 0 !important; /* Bootstrap adds inline scrollbar compensation. */
        overflow: hidden;
    }

    body:has(.admissionWorkspace) :is(#admissionCompetitorTrackingModal, #admissionFindModal, #admissionTrackingPaywallModal, #admissionForecastPaywallModal) > .modal-dialog {
        box-sizing: border-box;
        width: 100%;
        min-width: 0;
        max-width: none;
        height: 100%;
        max-height: none;
        margin: 0 !important; /* Shared competition styles use important margins. */
        padding: 0;
        transform: none;
    }

    body:has(.admissionWorkspace) :is(#admissionCompetitorTrackingModal, #admissionFindModal, #admissionTrackingPaywallModal, #admissionForecastPaywallModal) .modal-content {
        box-sizing: border-box;
        height: 100%;
        max-height: none;
        padding: max(12px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(20px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));
        border: 0;
        border-radius: 0;
        overflow: auto;
        overscroll-behavior: contain;
    }

    body:has(.admissionWorkspace) :is(.admissionCompetitorTrackingModal__close, .admissionFindModal__close, .admissionTrackingPaywallModal__close, .admissionForecastPaywallModal__close) {
        position: sticky;
        top: 0;
        right: auto;
        z-index: 5;
        flex-shrink: 0;
        width: 44px;
        height: 44px;
        margin: 0 0 8px auto;
        background: #fff;
    }

    body:has(.admissionWorkspace) :is(.admissionCompetitorTrackingModal__body, .admissionFindModal__body, .admissionTrackingPaywallModal__body, .admissionForecastPaywallModal__body) {
        min-height: 0;
        padding: 0;
    }

    body:has(.admissionWorkspace) #admissionFindModal form {
        max-height: none;
        overflow: visible;
    }

    body:has(.admissionWorkspace) :is(.admissionAppsModal, .admissionFitModal) {
        height: 100vh;
        height: 100dvh;
        padding: 0;
    }

    body:has(.admissionWorkspace) :is(.admissionAppsModal__dialog, .admissionFitModal__dialog) {
        box-sizing: border-box;
        width: 100%;
        height: 100%;
        max-height: none;
        margin: 0;
        border-radius: 0;
    }

    body:has(.admissionWorkspace) :is(.admissionAppsModal__head, .admissionFitModal__head) {
        padding-top: max(20px, env(safe-area-inset-top));
        padding-left: max(16px, env(safe-area-inset-left));
        padding-right: calc(68px + env(safe-area-inset-right));
    }

    body:has(.admissionWorkspace) :is(.admissionAppsModal__close, .admissionFitModal__close) {
        top: max(12px, env(safe-area-inset-top));
        right: max(12px, env(safe-area-inset-right));
    }

    body:has(.admissionWorkspace) :is(.admissionAppsModal__body, .admissionFitModal__body) {
        min-height: 0;
        padding-bottom: max(20px, env(safe-area-inset-bottom));
        overscroll-behavior: contain;
    }
}
