/*App Loader Overlay CSS Start*/
/* Generated from CssTxtFiles/AppLoader.txt by Pages/Theme.cshtml.cs.
   Edit the template, never wwwroot/css/app-loader.css - a theme change
   overwrites the generated file.

   Substituted tokens (written without their leading hash so this comment is
   not itself replaced): Theme = selected hex, ThemeRGB = its channels,
   ThemeDark / ThemeInk = 12% / 55% darker. */

:root {
    --theme-primary: #D32F2F;
    --theme-primary-rgb: 211, 47, 47;
    --theme-primary-dark: #BA2929;
    --theme-primary-ink: #5F1515;
}

.app-loader {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 9999;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    background: linear-gradient(135deg, rgba(255, 255, 255, 0.10) 0%, rgba(255, 255, 255, 0.22) 60%, rgba(255, 255, 255, 0.06) 100%), linear-gradient(135deg, rgba(var(--theme-primary-rgb, 211, 47, 47), 0.34) 0%, rgba(var(--theme-primary-rgb, 211, 47, 47), 0.24) 30%, rgba(var(--theme-primary-rgb, 211, 47, 47), 0.20) 60%, rgba(var(--theme-primary-rgb, 211, 47, 47), 0.26) 100%);
    -webkit-backdrop-filter: blur(2px) saturate(1.3);
    backdrop-filter: blur(2px) saturate(1.3);
    opacity: 1;
    transition: opacity 0.25s ease;
    animation: appLoaderFadeIn 0.3s ease-out;
}

    .app-loader.is-hiding {
        opacity: 0;
    }

    /* Glass shine sweep */
    .app-loader .app-loader-shine {
        position: absolute;
        top: -50%;
        left: -50%;
        width: 60%;
        height: 200%;
        background: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.2) 50%, transparent 100%);
        transform: translateX(-100%) rotate(25deg);
        animation: appLoaderShine 4s ease-in-out infinite;
        pointer-events: none;
    }

    /* Glowing orbs */
    .app-loader .app-loader-orb {
        position: absolute;
        border-radius: 50%;
        pointer-events: none;
    }

        .app-loader .app-loader-orb-1 {
            top: 15%;
            left: 10%;
            width: 300px;
            height: 300px;
            background: radial-gradient(circle, rgba(var(--theme-primary-rgb, 211, 47, 47), 0.18) 0%, transparent 70%);
        }

        .app-loader .app-loader-orb-2 {
            right: 8%;
            bottom: 10%;
            width: 350px;
            height: 350px;
            background: radial-gradient(circle, rgba(var(--theme-primary-rgb, 211, 47, 47), 0.15) 0%, transparent 70%);
        }

        .app-loader .app-loader-orb-3 {
            top: 50%;
            left: 55%;
            width: 200px;
            height: 200px;
            background: radial-gradient(circle, rgba(255, 255, 255, 0.25) 0%, transparent 70%);
        }

    /* Top and bottom glass edges */
    .app-loader .app-loader-edge {
        position: absolute;
        left: 0;
        width: 100%;
        height: 1px;
        background: linear-gradient(90deg, transparent, rgba(var(--theme-primary-rgb, 211, 47, 47), 0.35), transparent);
        pointer-events: none;
    }

        .app-loader .app-loader-edge-top {
            top: 0;
        }

        .app-loader .app-loader-edge-bottom {
            bottom: 0;
        }

    /* Spinner */
    .app-loader .app-loader-spinner {
        position: relative;
        width: 280px;
        height: 280px;
    }

    .app-loader .app-loader-arc {
        position: absolute;
        top: 50%;
        left: 50%;
        border-radius: 50%;
        transform: translate(-50%, -50%);
        pointer-events: none;
    }

        .app-loader .app-loader-arc-outer {
            width: 280px;
            height: 280px;
            border: 4px solid rgba(var(--theme-primary-rgb, 211, 47, 47), 0.12);
            border-top-color: var(--theme-primary, #D32F2F);
            border-right-color: rgba(var(--theme-primary-rgb, 211, 47, 47), 0.4);
            animation: appLoaderArcSpin 1.4s cubic-bezier(0.6, 0.1, 0.3, 0.9) infinite;
        }

        .app-loader .app-loader-arc-mid {
            width: 220px;
            height: 220px;
            border: 3px solid rgba(var(--theme-primary-rgb, 211, 47, 47), 0.10);
            border-bottom-color: var(--theme-primary, #D32F2F);
            border-left-color: rgba(var(--theme-primary-rgb, 211, 47, 47), 0.3);
            animation: appLoaderArcSpinReverse 1.8s cubic-bezier(0.6, 0.1, 0.3, 0.9) infinite;
        }

        .app-loader .app-loader-arc-inner {
            width: 170px;
            height: 170px;
            border: 2px solid rgba(var(--theme-primary-rgb, 211, 47, 47), 0.12);
        }

    /* Brand mark. Painted as a mask so it takes the theme colour; browsers
       without mask support keep the orange artwork from the rule below. */
    .app-loader .app-loader-logo {
        position: absolute;
        top: 50%;
        left: 50%;
        width: 120px;
        height: 88px;
        transform: translate(-50%, -50%);
        background: url("../img/tt-icon.svg") no-repeat center / contain;
        animation: appLoaderLogoFloat 2.4s ease-in-out infinite;
        pointer-events: none;
    }

@supports ((-webkit-mask-image: url("")) or (mask-image: url(""))) {
    .app-loader .app-loader-logo {
        background: var(--theme-primary, #D32F2F);
        -webkit-mask: url("../img/tt-icon.svg") no-repeat center / contain;
        mask: url("../img/tt-icon.svg") no-repeat center / contain;
    }
}

    /* Caption */
    .app-loader .app-loader-text {
        position: absolute;
        top: calc(50% + 175px);
        left: 50%;
        display: flex;
        align-items: center;
        gap: 2px;
        transform: translateX(-50%);
    }

    .app-loader .app-loader-label {
        font-family: "Poppins", sans-serif;
        font-size: 16px;
        font-weight: 500;
        letter-spacing: 0.5px;
        color: var(--theme-primary-ink, #5F1515);
    }

    .app-loader .app-loader-dot {
        display: inline-block;
        margin-left: 1px;
        font-family: "Poppins", sans-serif;
        font-size: 22px;
        font-weight: 700;
        color: var(--theme-primary-dark, #BA2929);
        animation: appLoaderDotBounce 1.2s ease-in-out infinite;
    }

        .app-loader .app-loader-dot-2 {
            animation-delay: 0.15s;
        }

        .app-loader .app-loader-dot-3 {
            animation-delay: 0.3s;
        }

    /* Indeterminate progress bar */
    .app-loader .app-loader-progress {
        position: absolute;
        bottom: 0;
        left: 0;
        width: 100%;
        height: 3px;
        overflow: hidden;
        background: rgba(var(--theme-primary-rgb, 211, 47, 47), 0.12);
    }

        .app-loader .app-loader-bar {
            position: absolute;
            top: 0;
            left: -40%;
            width: 40%;
            height: 100%;
            border-radius: 3px;
            background: linear-gradient(90deg, transparent, var(--theme-primary, #D32F2F), transparent);
            animation: appLoaderProgressSlide 1.6s ease-in-out infinite;
        }

/* Login variant. The login screen is a full-bleed brand-coloured page, so a
   theme-coloured loader disappears into it. Redefining the four variables for
   this subtree repaints every part of the overlay - rings, mark, caption and
   progress bar - white in one place, over a neutral scrim that keeps the white
   readable whichever theme the login background is using. */
body.login-page .app-loader {
    --theme-primary: #fff;
    --theme-primary-rgb: 255, 255, 255;
    --theme-primary-dark: #fff;
    --theme-primary-ink: #fff;
    background: linear-gradient(135deg, rgba(0, 0, 0, 0.26) 0%, rgba(0, 0, 0, 0.36) 60%, rgba(0, 0, 0, 0.28) 100%);
}

    body.login-page .app-loader .app-loader-label {
        text-shadow: 0 1px 6px rgba(0, 0, 0, 0.35);
    }

@keyframes appLoaderFadeIn {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}

@keyframes appLoaderArcSpin {
    0% {
        transform: translate(-50%, -50%) rotate(0deg);
    }

    100% {
        transform: translate(-50%, -50%) rotate(360deg);
    }
}

@keyframes appLoaderArcSpinReverse {
    0% {
        transform: translate(-50%, -50%) rotate(360deg);
    }

    100% {
        transform: translate(-50%, -50%) rotate(0deg);
    }
}

@keyframes appLoaderLogoFloat {
    0% {
        transform: translate(-50%, -50%) translateY(0px);
    }

    50% {
        transform: translate(-50%, -50%) translateY(-8px);
    }

    100% {
        transform: translate(-50%, -50%) translateY(0px);
    }
}

@keyframes appLoaderProgressSlide {
    0% {
        left: -40%;
    }

    100% {
        left: 100%;
    }
}

@keyframes appLoaderDotBounce {
    0%, 80%, 100% {
        transform: translateY(0);
    }

    40% {
        transform: translateY(-10px);
    }
}

@keyframes appLoaderShine {
    0% {
        transform: translateX(-100%) rotate(25deg);
    }

    100% {
        transform: translateX(200%) rotate(25deg);
    }
}
/*App Loader Overlay CSS End*/