/* Site-wide pre-load screen */
html.page-loading {
    overflow: hidden;
}

html.page-loading body {
    overflow: hidden;
}

.page-loader {
    --loader-bg: #f0e8ff;
    --loader-accent: #c9b0f5;
    --loader-bg-bottom: #f5e4f0;

    position: fixed;
    inset: 0;
    z-index: 100000;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 1;
    pointer-events: all;
    transition: opacity 0.9s cubic-bezier(0.4, 0, 0.2, 1);
}

.page-loader__backdrop {
    position: absolute;
    inset: 0;
    background-color: var(--loader-bg);
    background-image:
        radial-gradient(ellipse 92% 72% at 14% 8%, rgba(255, 255, 255, 0.78) 0%, transparent 58%),
        radial-gradient(ellipse 84% 64% at 88% 92%, color-mix(in srgb, var(--loader-accent) 42%, transparent) 0%, transparent 62%),
        radial-gradient(circle at 50% 118%, color-mix(in srgb, var(--loader-accent) 28%, transparent) 0%, transparent 48%),
        linear-gradient(
            158deg,
            color-mix(in srgb, var(--loader-bg) 88%, white) 0%,
            var(--loader-bg) 38%,
            color-mix(in srgb, var(--loader-bg-bottom) 92%, var(--loader-accent) 8%) 100%
        );
    animation: loader-bg-shift 11s ease-in-out infinite;
}

.page-loader__inner {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 2rem;
    filter: drop-shadow(0 18px 42px color-mix(in srgb, var(--loader-accent) 22%, transparent));
}

.page-loader__logo {
    width: clamp(96px, 28vw, 128px);
    height: auto;
    display: block;
}

.page-loader__orbit {
    width: clamp(52px, 14vw, 64px);
    height: clamp(52px, 14vw, 64px);
    margin-top: 1.75rem;
    position: relative;
}

.page-loader__orbit-canvas {
    display: block;
    width: 100%;
    height: 100%;
}

/* Reduced motion: soft static ring of glow dots */
.page-loader__orbit--static {
    background: radial-gradient(circle at center, rgba(255, 255, 255, 0.55) 0%, transparent 42%);
}

.page-loader__orbit--static::before,
.page-loader__orbit--static::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 50%;
    border: 2px solid transparent;
}

.page-loader__orbit--static::before {
    border-top-color: rgba(255, 255, 255, 0.9);
    border-right-color: rgba(255, 255, 255, 0.35);
    filter: drop-shadow(0 0 6px rgba(255, 255, 255, 0.85));
    animation: loader-orbit-static-spin 2.4s linear infinite;
}

.page-loader__orbit--static::after {
    inset: 22%;
    border-bottom-color: rgba(255, 255, 255, 0.75);
    border-left-color: rgba(255, 255, 255, 0.2);
    filter: drop-shadow(0 0 4px rgba(255, 255, 255, 0.6));
    animation: loader-orbit-static-spin 3.2s linear infinite reverse;
}

.page-loader.is-done {
    opacity: 0;
    pointer-events: none;
    visibility: hidden;
}

@keyframes loader-bg-shift {
    0% {
        filter: hue-rotate(0deg) saturate(1);
        transform: scale(1);
    }
    33% {
        filter: hue-rotate(8deg) saturate(1.06);
        transform: scale(1.015);
    }
    66% {
        filter: hue-rotate(-6deg) saturate(1.04);
        transform: scale(1.008);
    }
    100% {
        filter: hue-rotate(0deg) saturate(1);
        transform: scale(1);
    }
}

@keyframes loader-orbit-static-spin {
    to {
        transform: rotate(360deg);
    }
}

@media (prefers-reduced-motion: reduce) {
    .page-loader__backdrop {
        animation: none;
        transform: none;
        filter: none;
    }

    .page-loader.is-done {
        transition-duration: 0.25s;
    }
}
