html.-is-loading-whole-page {
    background: #fff;
}

body {
    transition: opacity 325ms;
}

html.-is-loading-whole-page body {
    pointer-events: none;
    opacity: 0.75;
}

@media (prefers-color-scheme: dark) {
    html.-is-loading-whole-page {
        background: #333;
    }
}

.loading-indicator {
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -60px;
    margin-left: -60px;
    z-index: 100000;
    border: 16px solid;
    border-top-color: #ff61d3;
    border-right-color: #b318ff;
    border-bottom-color: #00f0ff;
    border-left-color: #3cf7a2;
    opacity: 0.0;
    border-radius: 50%;
    width: 120px;
    height: 120px;
    animation: loading-spin-animation 1.2s ease-in-out infinite;
    transition: opacity 325ms;
    pointer-events: none;
}

body > .loading-indicator {
    position: fixed;
}

html.-is-loading .loading-indicator {
    opacity: 1.0;
}

/**
 * @see https://dev.to/afif/border-with-gradient-and-radius-387f
 */

@supports (mask-composite: exclude) or (-webkit-mask-composite: xor) {
    .loading-indicator {
        border-color: transparent;
        background: radial-gradient(circle farthest-corner at 0 0, #ff61d3 25%, #b318ff 45%, #00f0ff 65%, #3cf7a2 85%) border-box;
        mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0);
        -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0);
        mask-composite: exclude;
        -webkit-mask-composite: xor;
    }
}

@keyframes loading-spin-animation {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}
