$side: 15em;
$half-side: $side/2;
$wing-width: $side * .8;
$wing-height: $side * .4;
$wing-offset: (
  $side - $wing-width)/2;
$wing-angle: 40;
$wing-angle-1: #{-90 + $wing-angle}deg;
$wing-angle-2: #{-90 - $wing-angle}deg;
$wing-time: .7s;
$wing-time-step: $wing-time/6;
$depth: 2em;
$shadow-width: 2em;
BODY {
  perspective: 1000px;
  perspective-origin: center center;
  overflow: hidden;
  font-size: 14px;
  background: #000;
  background-image: linear-gradient(to right,
      hsla(0, 0%, 100%, .025) 50%,
      transparent 30%
  );
background-size: 2rem 100%;
}
.container {
  width: $side;
  height: $side;
  transform-style: preserve-3d;
  animation: rotate 15s infinite linear;
}
.cube {
  position: absolute;
  width: $side;
  height: $side;
  // outline: 2px solid gold;
  transform-style: preserve-3d;
  &--2 {
    transform: rotateX(135deg) rotateY(135deg);
  }
  &--3 {
    // display: none;
    transform: rotateX(135deg) rotateZ(135deg);
  }
}
.side {
  position: absolute;
  width: $side;
  height: $side;
  transform-style: preserve-3d;
}
.spot {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  width: 45%;
  height: 45%;
  // border: 1px dashed white;
  box-shadow: 0 0 35px 25px black inset;
  border-radius: 50%;
  transform-style: preserve-3d;
  &::before,
  &::after {
    content: "";
    display: block;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -$wing-height/2;
    margin-left: -$wing-width/2;
    width: $wing-width;
    height: $wing-height;
    box-sizing: border-box;
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 19 16'%3E%3Cpath d='M13 11.3L15.2 9c.6.2 1.6.8 2.4 1.4-1 .6-2.3 1.5-3.5 2-1.3.6-2.7 2-3.5 3 .2-1 1-2.8 2.2-4zm-8.6.3c-1.5-2.2-3-5-3.7-7L6.5 12l-2-.4zM12.6 8c2-.6 3.2-4.4 4.8-3l.5.7-3 2.8c-1 .8-1.8 1.7-2.5 2.4-1 1-1.7 2.2-2 3.3 0-1.2.7-2.6 1.2-4l1-2.3zm-7 1c0-.6 0-1.3-.2-2.5 1 .6 3 1.7 3.4 2.4v1c0 1.8.3 3.6.6 4.7l-4-5c0-.2 0-.4.2-.7zm-.3-3c-.6-2-2-4.5-2.7-6C4 .6 6 1.8 7.6 3v2.4c-.2.7-.2 1.5-.2 2L5.4 6zm-.6 6c.8 0 1.7.3 2.2.5l2.5 3.2c-.4 0-.7 0-1-.2-1-.2-2.5-1.6-3.8-3.5zm13-2l-2-1.3L18 6.3c.4 1 .2 2.4-.2 3.7zM11 16c.8-1 2.2-2.5 3.5-3 1-.5 2-1 3-1.7-.5 1-1 2-1.4 2.5-1 1.4-3 2-5 2zm-.8-10.4c.6 1 1 1.7 1.2 2.4h.5l-.8 2.2c-.6 1.2-1 2.6-1.3 4-.4-1.3-.6-2.8-.6-4.3 0-1.7.4-3.3.8-4.4zM4.7 6C5 7.7 5 8.7 5 9L.2 3C0 1.8 0 .8.4.4.8 0 1.2 0 1.8 0c.7 1.2 2.3 4 3 6zm3 1.6c0-1.7 0-3.5.3-4.2.7.5 1.3 1 1.8 1.7-.4 1-.7 2-1 3.5l-1-1z'/%3E%3C/svg%3E");
    mask-size: contain;
    mask-repeat: no-repeat;
    mask-position: center bottom;
    animation: wing $wing-time infinite;
    // animation: bg-size 10s infinite;
  }
  &::before {
    transform: rotateX($wing-angle-1) translateY(-50%);
    color: gold;
  }
  &::after {
    transform: rotateX($wing-angle-2) translateY(-50%);
    color: teal;
  }
  &--top {
    &::before,
    &::after {
      background: linear-gradient(to bottom,
          indigo 10%,
          teal,
          gold,
          red);
      animation-delay: -$wing-time-step;
    }
  }
  &--bottom {
    &::before,
    &::after {
      background: linear-gradient(to top,
          indigo 10%,
          teal,
          gold,
          red);
      animation-delay: -$wing-time-step*2;
    }
  }
  &--left {
    &::before,
    &::after {
      background: linear-gradient(to bottom,
          indigo 10%,
          crimson,
          gold,
          lawngreen,
          teal);
      animation-delay: -$wing-time-step*3;
    }
  }
  &--right {
    &::before,
    &::after {
      background: linear-gradient(to top,
          indigo,
          crimson,
          gold,
          lawngreen,
          teal 90%);
      animation-delay: -$wing-time-step*4;
    }
  }
  &--back {
    &::before,
    &::after {
      background: linear-gradient(to top,
          teal,
          darkgreen,
          lawngreen,
          gold,
          orangered,
          red 90%);
      animation-delay: -$wing-time-step*5;
    }
  }
  &--front {
    &::before,
    &::after {
      background: linear-gradient(to bottom,
          teal 10%,
          darkgreen,
          lawngreen,
          gold,
          orangered,
          red);
      animation-delay: -$wing-time-step*6;
    }
  }
}
.side--back {
  transform: translateZ(-$half-side) rotateY(180deg);
}
.side--left {
  transform: translateX(-$half-side) rotateY(-90deg);
}
.side--right {
  transform: translateX($half-side) rotateY(90deg);
}
.side--top {
  transform: translateY(-$half-side) rotateX(90deg);
}
.side--bottom {
  transform: translateY($half-side) rotateX(-90deg);
}
.side--front {
  transform: translateZ($half-side);
}
@keyframes rotate {
  100% {
    transform: rotateX(360deg) rotateY(720deg) rotateZ(360deg);
  }
}
@keyframes wing {
  50% {
    transform: rotateX(-90deg) translateY(-50%);
  }
}
@keyframes bg-size {
  0% {
    background-size: 100% 100%;
    background-position: 0 50%;
  }
  50% {
    background-size: 100% 200%;
    background-position: 0 0%;
  }
  100% {
    background-size: 100% 100%;
    background-position: 0 50%;
  }
}
// Helpers
HTML,
BODY {
  height: 100%;
}
BODY {
  display: flex;
  justify-content: center;
  align-items: center;
}
.wings-src {
  position: absolute;
  bottom: 10px;
  right: 10px;
  opacity: .075;
  font: 12px/1.4 Tahoma, sans-serif;
  text-align: right;
  transition: .4s all;
  color: #FFF;
  &:hover {
    opacity: .5;
  }
  A {
    color: inherit
  }
}