.ve-loading-parent-relative {
    position: relative !important;
}

.ve-loading-parent-lock {
    overflow: hidden !important;
}

.ve-loading {
    // overlay
    &.ve-loading-overlay {
        position: absolute;
        z-index: 1999;
        margin: 0;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
    }

    // fixed
    &.ve-loading-fixed {
        position: fixed !important;
    }

    // hide
    &.ve-loading-hide {
        display: none;
    }

    // spin container
    &-spin-container {
        position: absolute;
        top: 50%;
        margin-top: -20px;
        margin-left: -20px;
        width: 100%;
        text-align: center;
        .ve-loading-spin {
            display: inline-block;
        }
    }

    /* plane */
    &-plane {
        animation: sk-plane 1.2s infinite ease-in-out;
    }

    @keyframes sk-plane {
        0% {
            transform: perspective(120px) rotateX(0deg) rotateY(0deg);
        }
        50% {
            transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
        }
        100% {
            transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
        }
    }

    /* bounce */
    &-bounce {
        position: relative;

        &-dot {
            width: 100%;
            height: 100%;
            border-radius: 50%;
            /* background-color: var(--sk-color); */
            opacity: 0.6;
            position: absolute;
            top: 0;
            left: 0;
            animation: sk-bounce 2s infinite
                cubic-bezier(0.455, 0.03, 0.515, 0.955);
        }

        &-dot:nth-child(2) {
            animation-delay: -1s;
        }
    }

    @keyframes sk-bounce {
        0%,
        100% {
            transform: scale(0);
        }
        45%,
        55% {
            transform: scale(1);
        }
    }

    /* wave */
    &-wave {
        display: flex;
        justify-content: space-between;

        &-rect {
            height: 100%;
            width: 15%;
            animation: sk-wave 1.2s infinite ease-in-out;
        }

        &-rect:nth-child(1) {
            animation-delay: -1.2s;
        }
        &-rect:nth-child(2) {
            animation-delay: -1.1s;
        }
        &-rect:nth-child(3) {
            animation-delay: -1s;
        }
        &-rect:nth-child(4) {
            animation-delay: -0.9s;
        }
        &-rect:nth-child(5) {
            animation-delay: -0.8s;
        }
    }

    @keyframes sk-wave {
        0%,
        40%,
        100% {
            transform: scaleY(0.4);
        }
        20% {
            transform: scaleY(1);
        }
    }

    /* pulse */
    &-pulse {
        width: var(--sk-size);
        height: var(--sk-size);
        background-color: var(--sk-color);
        border-radius: 100%;
        animation: sk-pulse 1.2s infinite
            cubic-bezier(0.455, 0.03, 0.515, 0.955);
    }

    @keyframes sk-pulse {
        0% {
            transform: scale(0);
        }
        100% {
            transform: scale(1);
            opacity: 0;
        }
    }

    /* flow */
    &-flow {
        width: calc(var(--sk-size) * 1.3);
        height: calc(var(--sk-size) * 1.3);
        display: flex;
        justify-content: space-between;

        &-dot {
            width: 25%;
            height: 25%;
            background-color: var(--sk-color);
            border-radius: 50%;
            animation: sk-flow 1.4s cubic-bezier(0.455, 0.03, 0.515, 0.955) 0s
                infinite both;
        }

        &-dot:nth-child(1) {
            animation-delay: -0.3s;
        }
        &-dot:nth-child(2) {
            animation-delay: -0.15s;
        }

        @keyframes sk-flow {
            0%,
            80%,
            100% {
                transform: scale(0.3);
            }
            40% {
                transform: scale(1);
            }
        }
    }

    /* grid */
    &-grid {
        /* Cube positions
     * 1 2 3
     * 4 5 6
     * 7 8 9
     */

        &-cube {
            width: 33.33%;
            height: 33.33%;
            background-color: var(--sk-color);
            float: left;
            animation: sk-grid 1.3s infinite ease-in-out;
        }
        &-cube:nth-child(1) {
            animation-delay: 0.2s;
        }
        &-cube:nth-child(2) {
            animation-delay: 0.3s;
        }
        &-cube:nth-child(3) {
            animation-delay: 0.4s;
        }
        &-cube:nth-child(4) {
            animation-delay: 0.1s;
        }
        &:nth-child(5) {
            animation-delay: 0.2s;
        }
        &-cube:nth-child(6) {
            animation-delay: 0.3s;
        }
        &-cube:nth-child(7) {
            animation-delay: 0s;
        }
        &-cube:nth-child(8) {
            animation-delay: 0.1s;
        }
        &-cube:nth-child(9) {
            animation-delay: 0.2s;
        }

        @keyframes sk-grid {
            0%,
            70%,
            100% {
                transform: scale3D(1, 1, 1);
            }
            35% {
                transform: scale3D(0, 0, 1);
            }
        }
    }
}
