/* Dialogs share one responsive shell. PrimeFaces owns visibility, position,
   focus and z-index; only an already visible dialog becomes a flex column. */
html body:is(.tracking-body, .public-home) .ui-dialog {
    max-width: calc(100vw - 24px) !important;
    max-height: calc(100vh - 24px) !important;
    max-height: calc(100dvh - 24px) !important;
    min-width: 0 !important;
    box-sizing: border-box;
    border-radius: 16px !important;
    overflow: hidden;
}
html body:is(.tracking-body, .public-home) .ui-dialog[style*="width: auto"] {
    width: min(760px, calc(100vw - 24px));
}
html body:is(.tracking-body, .public-home) .ui-dialog[aria-hidden="false"]:not(.ui-dialog-minimized) {
    display: flex !important;
    flex-direction: column;
}
html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-titlebar {
    position: relative !important;
    display: flex !important;
    align-items: center;
    flex: 0 0 auto;
    min-height: 62px !important;
    padding: 16px 66px 16px 20px !important;
    box-sizing: border-box;
}
html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-titlebar .ui-dialog-title {
    float: none;
    min-width: 0;
    margin: 0 !important;
    font-size: 16px !important;
    line-height: 1.45;
    white-space: normal;
    overflow-wrap: anywhere;
}
html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-titlebar .ui-dialog-titlebar-close {
    position: absolute !important;
    top: 10px !important;
    right: 10px !important;
    width: 42px !important;
    height: 42px !important;
    margin: 0 !important;
    padding: 0 !important;
    display: block !important;
    border: 1px solid rgba(255, 255, 255, .48) !important;
    border-radius: 10px !important;
    background: rgba(255, 255, 255, .16) !important;
    cursor: pointer;
}
html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-titlebar .ui-dialog-titlebar-close > span {
    display: none !important;
}
html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-titlebar .ui-dialog-titlebar-close::before,
html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-titlebar .ui-dialog-titlebar-close::after {
    content: "" !important;
    position: absolute !important;
    top: 19px !important;
    left: 12px !important;
    width: 16px !important;
    height: 2px !important;
    border-radius: 2px;
    background: #fff !important;
    transform: rotate(45deg);
}
html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-titlebar .ui-dialog-titlebar-close::after {
    transform: rotate(-45deg);
}
html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-titlebar .ui-dialog-titlebar-close:focus-visible {
    outline: 2px solid #fff !important;
    outline-offset: 2px;
}
/* A flex child shrinks around the actual header and footer heights, including
   translated or wrapped titles, instead of subtracting an assumed height. */
html body:is(.tracking-body, .public-home) .ui-dialog:not(.parcel-dialog) > .ui-dialog-content,
html body:is(.tracking-body, .public-home) .ui-dialog:has(> .ui-dialog-footer):not(.parcel-dialog) > .ui-dialog-content {
    flex: 1 1 auto;
    min-height: 0;
    height: auto !important;
    max-height: none !important;
    min-width: 0;
    padding: 20px !important;
    overflow: auto !important;
    overscroll-behavior: contain;
    scrollbar-gutter: stable;
    box-sizing: border-box;
}
html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-footer {
    flex: 0 0 auto;
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 10px;
    padding: 14px 20px !important;
    box-sizing: border-box;
}
html body:is(.tracking-body, .public-home) .ui-dialog .dialog-form-grid.one-column {
    grid-template-columns: minmax(0, 1fr) !important;
}
html body:is(.tracking-body, .public-home) .ui-dialog .route-tariff-editor .dialog-form-grid.one-column {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
}
html body:is(.tracking-body, .public-home) .ui-dialog .field,
html body:is(.tracking-body, .public-home) .ui-dialog .dialog-form-grid > *,
html body:is(.tracking-body, .public-home) .ui-dialog .form-grid > * {
    min-width: 0;
}
html body:is(.tracking-body, .public-home) .ui-dialog .field-help,
html body:is(.tracking-body, .public-home) .ui-dialog .ui-message,
html body:is(.tracking-body, .public-home) .ui-dialog .ui-messages-detail {
    overflow-wrap: anywhere;
}
html body:is(.tracking-body, .public-home) .ui-dialog textarea.ui-inputfield {
    resize: vertical;
}
/* Wrapper controls keep a single border. Their label must not inherit the
   generic dialog input border, height and focus ring. */
html body:is(.tracking-body, .public-home) .ui-dialog .ui-selectonemenu .ui-selectonemenu-label,
html body:is(.tracking-body, .public-home) .ui-dialog .ui-selectcheckboxmenu .ui-selectcheckboxmenu-label {
    min-height: 42px !important;
    margin: 0 !important;
    padding: 10px 12px !important;
    border: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    line-height: 22px;
}
html body:is(.tracking-body, .public-home) .ui-dialog .ui-calendar,
html body:is(.tracking-body, .public-home) .ui-dialog span.ui-datepicker {
    display: flex;
    width: 100% !important;
    min-width: 0;
    max-width: 100%;
}
html body:is(.tracking-body, .public-home) .ui-dialog .ui-calendar > input.ui-inputfield,
html body:is(.tracking-body, .public-home) .ui-dialog span.ui-datepicker > input.ui-inputfield {
    flex: 1 1 0;
    min-width: 0 !important;
    width: 0 !important;
}
html body:is(.tracking-body, .public-home) .ui-dialog .ui-calendar > .ui-datepicker-trigger,
html body:is(.tracking-body, .public-home) .ui-dialog span.ui-datepicker > .ui-datepicker-trigger {
    position: relative !important;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 44px;
    width: 44px !important;
}
html body:is(.tracking-body, .public-home) .ui-dialog .ui-datepicker-trigger .ui-button-icon-left {
    position: static !important;
    inset: auto !important;
    margin: 0 !important;
    transform: none !important;
}
html body:is(.tracking-body, .public-home) .ui-dialog .ui-autocomplete,
html body:is(.tracking-body, .public-home) .ui-dialog .ui-inputnumber,
html body:is(.tracking-body, .public-home) .ui-dialog .ui-password {
    min-width: 0 !important;
    max-width: 100%;
}
html body:is(.tracking-body, .public-home) .ui-dialog .dialog-actions {
    flex-wrap: wrap;
    gap: 10px !important;
}
/* The role editor keeps its sticky footer, without the old -24px margins
   extending beyond the shared dialog content padding on small screens. */
html body:is(.tracking-body, .public-home) .ui-dialog.role-management-dialog .dialog-actions {
    width: auto;
    max-width: 100%;
    margin: 22px 0 0 !important;
    padding: 16px 0 !important;
    box-sizing: border-box;
}
html body:is(.tracking-body, .public-home) .ui-dialog .dialog-actions > .ui-button,
html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-footer > .ui-button {
    min-height: 44px;
    margin: 0 !important;
    max-width: 100%;
}
html body:is(.tracking-body, .public-home) .ui-dialog .ui-fileupload-buttonbar {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}
html body:is(.tracking-body, .public-home) .ui-dialog .ui-fileupload-buttonbar .ui-button {
    margin: 0 !important;
    max-width: 100%;
}
html body:is(.tracking-body, .public-home) .ui-dialog .ui-fileupload-content,
html body:is(.tracking-body, .public-home) .ui-dialog .ui-fileupload-files {
    min-width: 0;
    max-width: 100%;
    overflow-wrap: anywhere;
}
/* Public registration forms already provide their own interior padding.
   Keep that spacing and replace the older, more specific close-button sizing. */
html body.public-home div.ui-dialog.registration-dialog > .ui-dialog-content {
    padding: 0 !important;
}
html body.public-home div.ui-dialog.registration-dialog > .ui-dialog-titlebar {
    min-height: 62px !important;
    padding: 16px 66px 16px 20px !important;
}
html body.public-home div.ui-dialog.registration-dialog > .ui-dialog-titlebar .ui-dialog-titlebar-close {
    top: 10px !important;
    right: 10px !important;
    width: 42px !important;
    height: 42px !important;
}
html body.public-home div.ui-dialog.registration-dialog > .ui-dialog-titlebar .ui-dialog-titlebar-close::before,
html body.public-home div.ui-dialog.registration-dialog > .ui-dialog-titlebar .ui-dialog-titlebar-close::after {
    top: 19px !important;
    left: 12px !important;
}
/* The narrow layout is also used in landscape, when a desktop-sized dialog
   would place its bottom below the available screen or virtual keyboard. */
@media (max-width: 700px), (max-height: 620px) {
    html body:is(.tracking-body, .public-home) .ui-dialog {
        position: fixed !important;
        top: max(10px, env(safe-area-inset-top)) !important;
        left: max(10px, env(safe-area-inset-left)) !important;
        width: calc(100vw - 20px - env(safe-area-inset-left) - env(safe-area-inset-right)) !important;
        max-width: calc(100vw - 20px - env(safe-area-inset-left) - env(safe-area-inset-right)) !important;
        max-height: calc(100vh - 20px - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important;
        max-height: calc(100dvh - 20px - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important;
        margin: 0 !important;
    }
    html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-titlebar {
        padding-left: 16px !important;
    }
    html body:is(.tracking-body, .public-home) .ui-dialog:not(.parcel-dialog) > .ui-dialog-content,
    html body:is(.tracking-body, .public-home) .ui-dialog:has(> .ui-dialog-footer):not(.parcel-dialog) > .ui-dialog-content {
        padding: 16px 14px !important;
    }
    html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-footer {
        padding: 12px 14px !important;
    }
    html body.public-home div.ui-dialog.registration-dialog > .ui-dialog-content {
        padding: 0 !important;
    }
    html body.public-home div.ui-dialog.registration-dialog form.registration-form {
        padding: 16px 14px;
    }
}
@media (max-width: 700px) {
    html body:is(.tracking-body, .public-home) .ui-dialog .dialog-form-grid,
    html body:is(.tracking-body, .public-home) .ui-dialog .form-grid,
    html body:is(.tracking-body, .public-home) .ui-dialog .registration-grid,
    html body:is(.tracking-body, .public-home) .ui-dialog .route-tariff-editor .dialog-form-grid.one-column {
        grid-template-columns: minmax(0, 1fr) !important;
        gap: 16px !important;
    }
    html body:is(.tracking-body, .public-home) .ui-dialog .dialog-actions,
    html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-footer {
        flex-direction: column;
        align-items: stretch !important;
    }
    html body:is(.tracking-body, .public-home) .ui-dialog .dialog-actions > .ui-button,
    html body:is(.tracking-body, .public-home) .ui-dialog > .ui-dialog-footer > .ui-button {
        width: 100% !important;
        min-width: 0 !important;
    }
}
@media (max-width: 900px) {
    html body:is(.tracking-body, .public-home) .ui-dialog .route-tariff-editor .dialog-form-grid.one-column {
        grid-template-columns: minmax(0, 1fr) !important;
    }
}
