.dmxPreloader {
    --size: 60px;
    --color: #333;
    --bgcolor: #fff;
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    z-index: 1050;
    background-color: #fff;
    background-color: var(--bgcolor);
    transition: opacity 0.5s linear;
}

.dmxPreloader-spinner {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 60px;
    width: var(--size);
    height: 60px;
    height: var(--size);
    transform: translate(-50%, -50%);
}

/* rotatingPlane */

.dmxPreloader-rotatingPlane {
    background-color: #333;
    background-color: var(--color);
    animation: rotatePlane 1.2s infinite ease-in-out;
}

@keyframes rotatePlane {
  0% { transform: perspective(200px) translate(-50%, -50%) rotateX(0deg) rotateY(0deg); }
  50% { transform: perspective(200px) translate(-50%, -50%) rotateX(-180.1deg) rotateY(0deg); }
  100% { transform: perspective(200px) translate(-50%, -50%) rotateX(-180deg) rotateY(-179.9deg); }
}

/* doubleBounce */

.dmxPreloader-doubleBounce > div {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    background-color: #333;
    background-color: var(--color);
    opacity: 0.6;
    position: absolute;
    top: 0;
    left: 0;
    animation: doubleBounce 2s infinite ease-in-out;
}

.dmxPreloader-doubleBounce > div:nth-child(2) {
    animation-delay: -1s;
}

@keyframes doubleBounce {
    0%, 100% { transform: scale(0); }
    50% { transform: scale(1); }
}

/* wave */

.dmxPreloader-wave > div {
    background-color: #333;
    background-color: var(--color);
    height: 100%;
    width: 6px;
    width: calc((var(--size) / 5) - 6%);
    display: inline-block;
    animation: waveStretchDelay 1.2s infinite ease-in-out;
}

.dmxPreloader-wave > div:nth-child(2) {
    animation-delay: -.2s;
}

.dmxPreloader-wave > div:nth-child(3) {
    animation-delay: -.4s;
}

.dmxPreloader-wave > div:nth-child(4) {
    animation-delay: -.6s;
}

.dmxPreloader-wave > div:nth-child(5) {
    animation-delay: -.8s;
}

@keyframes waveStretchDelay {
    0%, 40%, 100% { transform: scaleY(0.4); }
    20% { transform: scaleY(1); }
}

/* wanderingCubes */

.dmxPreloader-wanderingCubes > div {
    background-color: #333;
    background-color: var(--color);
    width: 15px;
    height: 15px;
    width: calc(var(--size) / 3);
    height: calc(var(--size) / 3);
    position: absolute;
    top: 0;
    left: 0;
    animation: wanderingCube 1.8s infinite ease-in-out;
}

.dmxPreloader-wanderingCubes > div:nth-child(2) {
    animation-delay: -0.9s;
}

@keyframes wanderingCube {
    0% { transform: rotate(0deg); }
    25% { transform: translateX(25px) rotate(-90deg) scale(0.5); transform: translateX(calc(var(--size) / 3 * 2)) rotate(-90deg) scale(0.5); }
    50% { transform: translateX(25px) translateY(25px) rotate(-179deg); transform: translateX(calc(var(--size) / 3 * 2)) translateY(calc(var(--size) / 3 * 2)) rotate(-179deg); }
    50.1% { transform: translateX(25px) translateY(25px) rotate(-180deg); transform: translateX(calc(var(--size) / 3 * 2)) translateY(calc(var(--size) / 3 * 2)) rotate(-180deg); }
    75% { transform: translateX(0) translateY(25px) rotate(-270deg) scale(0.5); transform: translateX(0) translateY(calc(var(--size) / 3 * 2)) rotate(-270deg) scale(0.5); }
    100% { transform: rotate(-360deg); }
}

/* pulse */

.dmxPreloader-pulse {
    background-color: #333;
    background-color: var(--color);
    border-radius: 50%;
    animation: pulseScaleOut 1.0s infinite ease-in-out;
}

@keyframes pulseScaleOut {
    0% { transform: translate(-50%, -50%) scale(0); }
    100% { transform: translate(-50%, -50%) scale(1); opacity: 0; }
}

/* chasingDots */

.dmxPreloader-chasingDots {
    animation: chasingDotsRotate 2s infinite linear;
}

.dmxPreloader-chasingDots > div {
    width: 60%;
    height: 60%;
    position: absolute;
    top: 0;
    left: 40%;
    background-color: #333;
    background-color: var(--color);
    border-radius: 50%;

    animation: chasingDotsBounce 2s infinite ease-in-out;
}

.dmxPreloader-chasingDots > div:nth-child(2) {
    top: auto;
    bottom: 0;
    animation-delay: -1s;
}

@keyframes chasingDotsRotate {
    100% { transform: translate(-50%, -50%) rotate(360deg); }
}

@keyframes chasingDotsBounce {
    0%, 100% { transform: scale(0); }
    50% { transform: scale(1); }
}

/* threeBounce */

.dmxPreloader-threeBounce > div {
    background-color: #333;
    background-color: var(--color);
    width: 25%;
    height: 25%;
    border-radius: 50%;
    display: inline-block;
    animation: threeBounce 1.4s infinite ease-in-out both;
}

.dmxPreloader-threeBounce > div:nth-child(1) {
    animation-delay: -0.32s;
}

.dmxPreloader-threeBounce > div:nth-child(2) {
    animation-delay: -0.16s;
}

@keyframes threeBounce {
    0%, 80%, 100% { transform: scale(0); }
    40% { transform: scale(1); }
}

/* circle */

.dmxPreloader-circle > div {
    width: 100%;
    height: 100%;
    position: absolute;
    left: 0;
    top: 0;
}

.dmxPreloader-circle > div:before {
    content: '';
    display: block;
    margin: 0 auto;
    width: 15%;
    height: 15%;
    background-color: #333;
    background-color: var(--color);
    border-radius: 50%;
    animation: circleBounceDelay 1.2s infinite ease-in-out both;
}

.dmxPreloader-circle > div:nth-child(2) { transform: rotate(30deg); }
.dmxPreloader-circle > div:nth-child(2):before { animation-delay: -1.1s; }
.dmxPreloader-circle > div:nth-child(3) { transform: rotate(60deg); }
.dmxPreloader-circle > div:nth-child(3):before { animation-delay: -1.0s; }
.dmxPreloader-circle > div:nth-child(4) { transform: rotate(90deg); }
.dmxPreloader-circle > div:nth-child(4):before { animation-delay: -0.9s; }
.dmxPreloader-circle > div:nth-child(5) { transform: rotate(120deg); }
.dmxPreloader-circle > div:nth-child(5):before { animation-delay: -0.8s; }
.dmxPreloader-circle > div:nth-child(6) { transform: rotate(150deg); }
.dmxPreloader-circle > div:nth-child(6):before { animation-delay: -0.7s; }
.dmxPreloader-circle > div:nth-child(7) { transform: rotate(180deg); }
.dmxPreloader-circle > div:nth-child(7):before { animation-delay: -0.6s; }
.dmxPreloader-circle > div:nth-child(8) { transform: rotate(210deg); }
.dmxPreloader-circle > div:nth-child(8):before { animation-delay: -0.5s; }
.dmxPreloader-circle > div:nth-child(9) { transform: rotate(240deg); }
.dmxPreloader-circle > div:nth-child(9):before { animation-delay: -0.4s; }
.dmxPreloader-circle > div:nth-child(10) { transform: rotate(270deg); }
.dmxPreloader-circle > div:nth-child(10):before { animation-delay: -0.3s; }
.dmxPreloader-circle > div:nth-child(11) { transform: rotate(300deg); }
.dmxPreloader-circle > div:nth-child(11):before { animation-delay: -0.2s; }
.dmxPreloader-circle > div:nth-child(12) { transform: rotate(330deg); }
.dmxPreloader-circle > div:nth-child(12):before { animation-delay: -0.1s; }

@keyframes circleBounceDelay {
    0%, 80%, 100% { transform: scale(0); }
    40% { transform: scale(1); }
}

/* cubeGrid */

.dmxPreloader-cubeGrid > div {
    width: 33.33%;
    height: 33.33%;
    width: calc(var(--size) / 3);
    height: calc(var(--size) / 3);
    background-color: #333;
    background-color: var(--color);
    float: left;
    animation: cubeGridScaleDelay 1.3s infinite ease-in-out;
}

.dmxPreloader-cubeGrid > div:nth-child(1) { animation-delay: 0.2s; }
.dmxPreloader-cubeGrid > div:nth-child(2) { animation-delay: 0.3s; }
.dmxPreloader-cubeGrid > div:nth-child(3) { animation-delay: 0.4s; }
.dmxPreloader-cubeGrid > div:nth-child(4) { animation-delay: 0.1s; }
.dmxPreloader-cubeGrid > div:nth-child(5) { animation-delay: 0.2s; }
.dmxPreloader-cubeGrid > div:nth-child(6) { animation-delay: 0.3s; }
.dmxPreloader-cubeGrid > div:nth-child(7) { animation-delay: 0s; }
.dmxPreloader-cubeGrid > div:nth-child(8) { animation-delay: 0.1s; }
.dmxPreloader-cubeGrid > div:nth-child(9) { animation-delay: 0.2s; }

@keyframes cubeGridScaleDelay {
    0%, 70%, 100% { transform: scale3d(1, 1, 1); }
    35% { transform: scale3d(0, 0, 1); }
}

/* fadingCircle */

.dmxPreloader-fadingCircle > div {
    width: 100%;
    height: 100%;
    position: absolute;
    left: 0;
    top: 0;
}

.dmxPreloader-fadingCircle > div:before {
    content: '';
    display: block;
    margin: 0 auto;
    width: 15%;
    height: 15%;
    background-color: #333;
    background-color: var(--color);
    border-radius: 50%;
    animation: circleFadeDelay 1.2s infinite ease-in-out both;
}

.dmxPreloader-fadingCircle > div:nth-child(2) { transform: rotate(30deg); }
.dmxPreloader-fadingCircle > div:nth-child(2):before { animation-delay: -1.1s; }
.dmxPreloader-fadingCircle > div:nth-child(3) { transform: rotate(60deg); }
.dmxPreloader-fadingCircle > div:nth-child(3):before { animation-delay: -1.0s; }
.dmxPreloader-fadingCircle > div:nth-child(4) { transform: rotate(90deg); }
.dmxPreloader-fadingCircle > div:nth-child(4):before { animation-delay: -0.9s; }
.dmxPreloader-fadingCircle > div:nth-child(5) { transform: rotate(120deg); }
.dmxPreloader-fadingCircle > div:nth-child(5):before { animation-delay: -0.8s; }
.dmxPreloader-fadingCircle > div:nth-child(6) { transform: rotate(150deg); }
.dmxPreloader-fadingCircle > div:nth-child(6):before { animation-delay: -0.7s; }
.dmxPreloader-fadingCircle > div:nth-child(7) { transform: rotate(180deg); }
.dmxPreloader-fadingCircle > div:nth-child(7):before { animation-delay: -0.6s; }
.dmxPreloader-fadingCircle > div:nth-child(8) { transform: rotate(210deg); }
.dmxPreloader-fadingCircle > div:nth-child(8):before { animation-delay: -0.5s; }
.dmxPreloader-fadingCircle > div:nth-child(9) { transform: rotate(240deg); }
.dmxPreloader-fadingCircle > div:nth-child(9):before { animation-delay: -0.4s; }
.dmxPreloader-fadingCircle > div:nth-child(10) { transform: rotate(270deg); }
.dmxPreloader-fadingCircle > div:nth-child(10):before { animation-delay: -0.3s; }
.dmxPreloader-fadingCircle > div:nth-child(11) { transform: rotate(300deg); }
.dmxPreloader-fadingCircle > div:nth-child(11):before { animation-delay: -0.2s; }
.dmxPreloader-fadingCircle > div:nth-child(12) { transform: rotate(330deg); }
.dmxPreloader-fadingCircle > div:nth-child(12):before { animation-delay: -0.1s; }

@keyframes circleFadeDelay {
    0%, 39%, 100% { opacity: 0; }
    40% { opacity: 1; }
}

/* foldingCube */

.dmxPreloader-foldingCube {
    transform: rotateZ(45deg);
}

.dmxPreloader-foldingCube > div {
    float: left;
    width: 50%;
    height: 50%;
    position: relative;
    transform: scale(1.1);
}

.dmxPreloader-foldingCube > div:before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: #333;
    background-color: var(--color);
    animation: foldCubeAngle 2.4s infinite linear both;
    transform-origin: 100% 100%;
}

.dmxPreloader-foldingCube > div:nth-child(2) { transform: scale(1.1) rotateZ(90deg); }
.dmxPreloader-foldingCube > div:nth-child(3) { transform: scale(1.1) rotateZ(270deg); }
.dmxPreloader-foldingCube > div:nth-child(4) { transform: scale(1.1) rotateZ(180deg); }

.dmxPreloader-foldingCube > div:nth-child(2):before { animation-delay: 0.3s; }
.dmxPreloader-foldingCube > div:nth-child(3):before { animation-delay: 0.9s; }
.dmxPreloader-foldingCube > div:nth-child(4):before { animation-delay: 0.6s; }

@keyframes foldCubeAngle {
    0%, 10% { transform: perspective(140px) rotateX(-180deg); opacity: 0; }
    25%, 75% { transform: perspective(140px) rotateX(0deg); opacity: 1; }
    90%, 100% { transform: perspective(140px) rotateY(180deg); opacity: 0; }
}
