/* AksaErp global overlay layer.
   Blazor-owned modal DOM remains in its original render tree.
   Runtime classes remove clipping/stacking boundaries only while an overlay is open. */

:root {
    --aksa-z-overlay-host: 2147482900;
    --aksa-z-overlay-backdrop: 2147483000;
    --aksa-z-overlay-surface: 2147483010;
    --aksa-z-overlay-popup: 2147483600;
}

#aksa-overlays {
    position: fixed;
    inset: 0;
    z-index: var(--aksa-z-overlay-host) !important;
    pointer-events: none;
}

#aksa-overlays > * {
    pointer-events: auto;
}

/* For Radzen/custom overlays, reserve the classic scrollbar gutter in the
   same frame that the coordinator locks body scrolling. Bootstrap is excluded
   because it owns its own inline padding compensation. */
@supports (scrollbar-gutter: stable) {
    html.aksa-overlay-scroll-lock {
        scrollbar-gutter: stable;
    }
}

/* Bootstrap owns its own scroll lock and padding compensation through
   .modal-open. The Aksa lock is only needed for Radzen/custom overlays. */
body.aksa-overlay-open:not(.modal-open) {
    overflow: hidden !important;
}

/* Remove every ancestor boundary that can trap a fixed modal inside a grid,
   dialog, card, transformed container or an overflow-scrolling region. */
body.aksa-overlay-open .aksa-overlay-host-path {
    z-index: var(--aksa-z-overlay-host) !important;
    overflow: visible !important;
    overflow-x: visible !important;
    overflow-y: visible !important;
    contain: none !important;
    isolation: auto !important;
    transform: none !important;
    filter: none !important;
    backdrop-filter: none !important;
    perspective: none !important;
    clip-path: none !important;
    mask-image: none !important;
}

/* Bootstrap/custom modal surfaces remain owned by Blazor but escape the
   surrounding stacking contexts through the host-path rules above. */
body.aksa-overlay-open .modal.aksa-overlay-surface,
body.aksa-overlay-open .offcanvas.aksa-overlay-surface,
body.aksa-overlay-open .aksa-offcanvas.aksa-overlay-surface {
    z-index: var(--aksa-overlay-z, var(--aksa-z-overlay-surface)) !important;
    pointer-events: auto !important;
}

body.aksa-overlay-open .modal.aksa-overlay-surface {
    position: fixed !important;
    inset: 0 !important;
    width: 100vw !important;
    height: 100vh !important;
    height: 100dvh !important;
    margin: 0 !important;
    overflow-x: hidden !important;
    overflow-y: auto !important;
}

body.aksa-overlay-open .modal.aksa-overlay-surface > .modal-dialog {
    position: relative;
    z-index: 1;
}

body.aksa-overlay-open .aksa-overlay-backdrop {
    position: fixed !important;
    inset: 0 !important;
    z-index: var(--aksa-overlay-z, var(--aksa-z-overlay-backdrop)) !important;
    pointer-events: auto !important;
}

/* Components whose backdrop is also the centered modal host. */
body.aksa-overlay-open .aksa-overlay-composite {
    z-index: var(--aksa-overlay-z, var(--aksa-z-overlay-surface)) !important;
    pointer-events: auto !important;
}

/* Radzen dialogs are already rendered as a wrapper; only normalize their layer. */
body.aksa-overlay-open .rz-dialog-wrapper.aksa-overlay-surface {
    position: fixed !important;
    inset: 0 !important;
    z-index: var(--aksa-overlay-z, var(--aksa-z-overlay-surface)) !important;
    pointer-events: none !important;
}

body.aksa-overlay-open .rz-dialog-wrapper.aksa-overlay-surface .rz-dialog-mask {
    position: fixed !important;
    inset: 0 !important;
    z-index: 0 !important;
    pointer-events: auto !important;
}

body.aksa-overlay-open .rz-dialog-wrapper.aksa-overlay-surface .rz-dialog {
    position: relative !important;
    z-index: 1 !important;
    pointer-events: auto !important;
}

/* Radzen dropdown/date/context surfaces opened from inside a modal must remain
   above the active modal regardless of where Radzen appends them. */
body.aksa-overlay-open .rz-dropdown-panel,
body.aksa-overlay-open .rz-datepicker-panel,
body.aksa-overlay-open .rz-overlaypanel,
body.aksa-overlay-open .rz-popup,
body.aksa-overlay-open .rz-calendar,
body.aksa-overlay-open .rz-context-menu,
body.aksa-overlay-open .rz-multiselect-panel,
body.aksa-overlay-open .rz-autocomplete-panel {
    z-index: var(--aksa-z-overlay-popup) !important;
}

/* A stale backdrop must never freeze the page after its owning component closed.
   It stays in Blazor's DOM, but becomes non-interactive until an open surface exists. */
body:not(.aksa-overlay-open) .modal-backdrop,
body:not(.aksa-overlay-open) .offcanvas-backdrop,
body:not(.aksa-overlay-open) .drawer-overlay,
body:not(.aksa-overlay-open) .aksa-offcanvas-backdrop,
body:not(.aksa-overlay-open) .aksa-backdrop,
body:not(.aksa-overlay-open) .warehouse-store-dialog-backdrop {
    opacity: 0 !important;
    visibility: hidden !important;
    pointer-events: none !important;
}

/* Keep logical offcanvas placement when a surface is opened from RTL pages. */
[dir="ltr"] body.aksa-overlay-open .offcanvas.offcanvas-end.aksa-overlay-surface,
[dir="ltr"] body.aksa-overlay-open .aksa-offcanvas.aksa-overlay-surface {
    right: 0 !important;
    left: auto !important;
}

[dir="rtl"] body.aksa-overlay-open .offcanvas.offcanvas-end.aksa-overlay-surface,
[dir="rtl"] body.aksa-overlay-open .aksa-offcanvas.aksa-overlay-surface {
    left: 0 !important;
    right: auto !important;
}

/* Existing custom drawer contract retained for components already using it. */
.aksa-offcanvas-backdrop,
.aksa-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, .5);
}

.aksa-offcanvas {
    position: fixed;
    top: 0;
    height: 100dvh;
    width: 100%;
    max-width: 720px;
    inset-inline-end: 0;
    inset-inline-start: auto;
    transform: translateX(100%);
}

[dir="rtl"] .aksa-offcanvas {
    transform: translateX(-100%);
}

.aksa-offcanvas.show {
    visibility: visible !important;
    transform: none !important;
}

/* Keep standard Radzen popups above sticky/frozen grids even outside dialogs. */
.rz-dropdown-panel,
.rz-datepicker-panel,
.rz-overlaypanel,
.rz-popup,
.rz-calendar,
.rz-context-menu,
.rz-multiselect-panel,
.rz-autocomplete-panel {
    z-index: var(--aksa-z-overlay-popup) !important;
}

#kt_app_root,
#kt_app_body,
#kt_app_main {
    isolation: auto;
}

/* Unified picker suggestion layer.
   Native manual popovers enter the browser top layer, so Grid overflow,
   frozen cells, sticky page headers and component stacking contexts cannot
   clip AccountPicker, AccountDetailPicker or ProductPicker suggestions. */
.aksa-picker-floating-popup {
    position: fixed !important;
    inset: auto !important;
    left: var(--aksa-picker-left, 0px) !important;
    right: auto !important;
    top: var(--aksa-picker-top, 0px) !important;
    bottom: auto !important;
    width: var(--aksa-picker-width, auto) !important;
    min-width: 0 !important;
    max-width: var(--aksa-picker-max-width, calc(100vw - 1rem)) !important;
    max-height: var(--aksa-picker-max-height, calc(100dvh - 1rem)) !important;
    margin: 0 !important;
    box-sizing: border-box !important;
    z-index: var(--aksa-z-overlay-popup) !important;
}

.aksa-picker-floating-popup[popover] {
    margin: 0 !important;
}

.aksa-picker-floating-popup.aksa-picker-floating-popup--measuring {
    visibility: hidden !important;
    pointer-events: none !important;
}

.aksa-picker-floating-popup--open-above {
    transform-origin: bottom center;
}

.aksa-picker-floating-popup--open-below {
    transform-origin: top center;
}
