/* Shared loading contract for Vue and static screens. */
.app-loading-state {
    position: fixed;
    inset: 0;
    z-index: 2055;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 1.25rem;
    width: auto;
    min-height: 0;
    margin: 0;
    padding: 1rem;
    color: #212529;
    background: transparent;
    border: 0;
    box-shadow: none;
}
.app-loading-state::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 0;
    background: rgba(33, 37, 41, .46);
    backdrop-filter: blur(2px);
}
.app-loading-state::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    z-index: 0;
    width: min(26rem, calc(100vw - 2rem));
    min-height: 6.5rem;
    background: #fff;
    border: 1px solid rgba(33, 37, 41, .22);
    border-radius: .85rem;
    box-shadow: 0 1.25rem 2rem rgba(26, 35, 48, .20);
    transform: translate(-50%, -50%);
}
.app-loading-state > * {
    position: relative;
    z-index: 1;
}
.app-loading-state__dot {
    flex: 0 0 auto;
    width: 1.45rem;
    height: 1.45rem;
    border-radius: 50%;
    background: #5b8ff9;
    animation: app-loading-pulse 1.2s ease-in-out infinite;
}
.app-loading-state__title { font-size: 1.15rem; font-weight: 700; line-height: 1.2; }
.app-loading-state__text { margin-top: .3rem; color: #929292; font-size: .95rem; line-height: 1.3; }
.app-loading-state--inline {
    position: static;
    inset: auto;
    z-index: auto;
    display: flex;
    justify-content: flex-start;
    width: min(100%, 26rem);
    min-height: 0;
    margin: .75rem 0;
    padding: .8rem 1rem;
    background: #fff;
    border: 1px solid rgba(33, 37, 41, .16);
    border-radius: .65rem;
    box-shadow: none;
}
.app-loading-state--inline::before,
.app-loading-state--inline::after { display: none; }
.app-loading-state--inline .app-loading-state__title { font-size: 1rem; }
.app-loading-state--inline .app-loading-state__text { font-size: .9rem; }
.app-loading-state--row {
    position: static;
    inset: auto;
    z-index: auto;
    display: inline-flex;
    justify-content: flex-start;
    width: auto;
    min-height: 0;
    margin: .25rem auto;
    padding: .65rem .9rem;
    text-align: left;
    background: #fff;
    border: 1px solid rgba(33, 37, 41, .16);
    border-radius: .65rem;
    box-shadow: none;
}
.app-loading-state--row::before,
.app-loading-state--row::after { display: none; }
.app-loading-state--row .app-loading-state__dot { width: .8rem; height: .8rem; }
.app-loading-state--row .app-loading-state__title { font-size: .95rem; }
.app-loading-state--row .app-loading-state__text { font-size: .85rem; }
@keyframes app-loading-pulse { 50% { transform: scale(.72); opacity: .55; } }
@media (prefers-reduced-motion: reduce) { .app-loading-state__dot { animation: none; } }
