.page-loader { display: none; }

html.js-page-loader:not(.page-loader-ready),
html.js-page-loader:not(.page-loader-ready) body { overflow: hidden; }

html.js-page-loader .page-loader {
    position: fixed;
    inset: 0;
    z-index: 99999;
    display: grid;
    place-content: center;
    justify-items: center;
    gap: 22px;
    min-height: 100dvh;
    padding: 24px;
    color: #11243a;
    background:
        radial-gradient(circle at 50% 45%, rgba(64, 151, 239, .1), transparent 28%),
        #f8fbfe;
    opacity: 1;
    visibility: visible;
    transition: opacity .22s cubic-bezier(.2,.8,.2,1), visibility .22s;
}

.page-loader-emblem {
    position: relative;
    width: 124px;
    height: 124px;
    display: grid;
    place-items: center;
    transition: opacity .18s cubic-bezier(.2,.8,.2,1), transform .22s cubic-bezier(.2,.8,.2,1);
}

.page-loader-halo,
.page-loader-ring {
    position: absolute;
    border-radius: 50%;
    pointer-events: none;
}

.page-loader-halo {
    inset: 10px;
    background: rgba(34, 116, 229, .08);
    animation: pageLoaderHalo 1.45s ease-in-out infinite;
}

.page-loader-ring {
    inset: 0;
    border: 2px solid rgba(34, 116, 229, .11);
    border-top-color: #2478e5;
    border-right-color: #f4bd26;
    animation: pageLoaderSpin 1.2s linear infinite;
    will-change: transform;
}

.page-loader-logo-shell {
    position: relative;
    z-index: 1;
    width: 94px;
    height: 94px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(201, 219, 234, .9);
    border-radius: 50%;
    background: rgba(255,255,255,.96);
    box-shadow: 0 18px 42px rgba(27, 72, 108, .14);
    animation: pageLoaderWobble 1.05s cubic-bezier(.55,.06,.45,.94) infinite;
    will-change: transform;
}

.page-loader-logo-shell img {
    width: 82px;
    height: 82px;
    display: block;
    object-fit: contain;
}

.page-loader-copy {
    display: grid;
    justify-items: center;
    gap: 6px;
    transition: opacity .16s cubic-bezier(.2,.8,.2,1), transform .2s cubic-bezier(.2,.8,.2,1);
}

.page-loader-copy strong {
    font: 800 14px/1.2 "Plus Jakarta Sans", system-ui, sans-serif;
    letter-spacing: .14em;
}

.page-loader-copy span {
    color: #61768b;
    font: 600 12px/1.5 "Plus Jakarta Sans", system-ui, sans-serif;
}

html.page-loader-ready .page-loader {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
}

html.page-loader-ready .page-loader-emblem {
    opacity: 0;
    transform: translateY(-8px) scale(.86) rotate(5deg);
}

html.page-loader-ready .page-loader-copy {
    opacity: 0;
    transform: translateY(8px);
}

@keyframes pageLoaderSpin {
    to { transform: rotate(360deg); }
}

@keyframes pageLoaderHalo {
    0%, 100% { opacity: .45; transform: scale(.88); }
    50% { opacity: 1; transform: scale(1.05); }
}

@keyframes pageLoaderWobble {
    0%, 100% { transform: translateY(2px) rotate(-4deg) scale(.99); }
    50% { transform: translateY(-7px) rotate(4deg) scale(1.02); }
}

@media (prefers-reduced-motion: reduce) {
    .page-loader-halo,
    .page-loader-ring,
    .page-loader-logo-shell { animation: none !important; }

    html.js-page-loader .page-loader,
    .page-loader-emblem,
    .page-loader-copy { transition-duration: .12s !important; }
}
