:root {
  --animation-duration: 12s;
  --animation-easing: cubic-bezier(0.645, 0.045, 0.355, 1);
  --blue: #4f8edb;
  --dark-blue: #30508f;
  --deep-blue: #343c60;
  --light-blue: #9eb6d7;
  --pink: #de6465;
  --white: #fff;
}

@keyframes head {
  0% {
      transform: rotate(0);
  }

  6.6666666667% {
      transform: rotate(0);
  }

  20% {
      transform: rotate(-14deg);
  }

  40% {
      transform: rotate(-7deg);
  }

  46.6666666667% {
      transform: rotate(-14deg);
  }

  60% {
      transform: rotate(-7deg);
  }

  73.3333333333% {
      transform: rotate(0);
  }

  80% {
      transform: rotate(0);
  }
}

@keyframes mouth {
  0% {
      transform: translateX(0);
  }

  6.6666666667% {
      transform: translateX(0);
  }

  13.3333333333% {
      transform: translateX(35%);
  }

  20% {
      transform: translateX(35%);
  }

  26.6666666667% {
      transform: translateX(35%);
  }

  33.3333333333% {
      transform: translateX(0) translateY(-5%);
  }
}

@keyframes nose {
  0% {
      transform: translate(0);
  }

  6.6666666667% {
      transform: translate(0);
  }

  13.3333333333% {
      transform: translateX(100%);
  }

  26.6666666667% {
      transform: translateX(100%);
  }

  33.3333333333% {
      transform: translateX(0) translateY(-15%);
  }
}

@keyframes body {
  0% {
      transform: translate(0);
  }

  6.6666666667% {
      transform: translateY(3%);
  }

  13.3333333333% {
      transform: translate(0);
  }

  20% {
      transform: translate(0);
  }

  26.6666666667% {
      transform: translateY(2%);
  }

  33.3333333333% {
      transform: translateY(0);
  }
}

@keyframes mane {
  0% {
      transform: translate(0);
  }

  6.6666666667% {
      transform: translateY(5%);
  }

  13.3333333333% {
      transform: translate(0);
  }

  20% {
      transform: translate(0);
  }

  26.6666666667% {
      transform: translateY(3%);
  }

  33.3333333333% {
      transform: translateY(0);
  }
}

@keyframes face {
  0% {
      transform: translate(0);
  }

  6.6666666667% {
      transform: translate(0);
  }

  13.3333333333% {
      transform: translateX(15%);
  }

  20% {
      transform: translateX(15%) translateY(0);
  }

  26.6666666667% {
      transform: translateX(15%) translateY(0);
  }

  33.3333333333% {
      transform: translateX(0) translateY(-15%);
  }

  40% {
      transform: translateX(0) translateY(-15%);
  }

  46.6666666667% {
      transform: translateX(0) translateY(0);
  }
}

@keyframes left-eye {
  2.6666666667% {
      transform: scaleY(1);
  }

  3.3333333333% {
      transform: scaleY(0.3);
  }

  4% {
      transform: scaleY(1);
  }

  6.6666666667% {
      transform: translateX(0);
  }

  9.3333333333% {
      transform: scaleY(1) translateX(75%);
  }

  10% {
      transform: scaleY(0.3) translateX(75%);
  }

  10.6666666667% {
      transform: scaleY(1) translateX(75%);
  }

  13.3333333333% {
      transform: translateX(150%);
  }

  22% {
      transform: scaleY(1) translateX(150%);
  }

  22.6666666667% {
      transform: scaleY(0.3) translateX(150%);
  }

  23.3333333333% {
      transform: scaleY(1) translateX(150%);
  }

  25.3333333333% {
      transform: scaleY(1) translateX(150%);
  }

  26% {
      transform: scaleY(0.3) translateX(150%);
  }

  26.6666666667% {
      transform: scaleY(1) translateX(150%);
  }

  33.3333333333% {
      transform: translateX(0) translateY(-170%);
  }

  36% {
      transform: scaleY(1) translateY(-170%);
  }

  36.6666666667% {
      transform: scaleY(0.3) translateY(-170%);
  }

  37.3333333333% {
      transform: scaleY(1) translateY(-170%);
  }

  38% {
      transform: scaleY(1) translateY(-170%);
  }

  38.6666666667% {
      transform: scaleY(0.3) translateY(-170%);
  }

  39.3333333333% {
      transform: scaleY(1) translateY(-170%);
  }

  53.3333333333% {
      transform: translateY(0);
  }

  65.3333333333% {
      transform: scaleY(1) translateY(0);
  }

  66% {
      transform: scaleY(0.3) translateY(0);
  }

  66.6666666667% {
      transform: scaleY(1) translateY(0);
  }

  70% {
      transform: scaleY(1) translateY(0);
  }

  70.6666666667% {
      transform: scaleY(0.3) translateY(0);
  }

  71.3333333333% {
      transform: scaleY(1) translateY(0);
  }
}

@keyframes tongue {
  46.6666666667% {
      transform: translateY(0);
  }

  53.3333333333% {
      transform: translateY(100%) rotate(10deg);
  }

  73.3333333333% {
      transform: translateY(100%) rotate(10deg);
  }

  80% {
      transform: translateY(0);
  }
}

@keyframes mouth-cover-left {
  40% {
      transform: rotate(0);
  }

  60% {
      transform: rotate(90deg);
  }

  73.3333333333% {
      transform: rotate(90deg);
  }

  86.6666666667% {
      transform: rotate(0);
  }
}

@keyframes mouth-cover-right {
  40% {
      transform: rotate(0);
  }

  60% {
      transform: rotate(-90deg);
  }

  73.3333333333% {
      transform: rotate(-90deg);
  }

  86.6666666667% {
      transform: rotate(0);
  }
}

@keyframes tail {
  6.6666666667% {
      transform: rotate(0);
  }

  10% {
      transform: rotate(30deg);
  }

  13.3333333333% {
      transform: rotate(0);
  }

  20% {
      transform: rotate(0);
  }

  26.6666666667% {
      transform: rotate(30deg);
  }

  46.6666666667% {
      transform: rotate(30deg);
  }

  48.3333333333% {
      transform: rotate(0);
  }

  50% {
      transform: rotate(28deg);
  }

  50.8333333333% {
      transform: rotate(0);
  }

  51.6666666667% {
      transform: rotate(28deg);
  }

  52.5% {
      transform: rotate(0);
  }

  53.3333333333% {
      transform: rotate(28deg);
  }

  54.1666666667% {
      transform: rotate(0);
  }

  55% {
      transform: rotate(28deg);
  }

  55.8333333333% {
      transform: rotate(0);
  }

  56.6666666667% {
      transform: rotate(28deg);
  }

  57.5% {
      transform: rotate(0);
  }

  58.3333333333% {
      transform: rotate(28deg);
  }

  59.1666666667% {
      transform: rotate(0);
  }

  60% {
      transform: rotate(28deg);
  }

  60.8333333333% {
      transform: rotate(0);
  }

  61.6666666667% {
      transform: rotate(28deg);
  }

  62.5% {
      transform: rotate(0);
  }

  63.3333333333% {
      transform: rotate(28deg);
  }

  64.1666666667% {
      transform: rotate(0);
  }

  65% {
      transform: rotate(28deg);
  }

  65.8333333333% {
      transform: rotate(0);
  }

  66.6666666667% {
      transform: rotate(28deg);
  }

  67.5% {
      transform: rotate(0);
  }

  68.3333333333% {
      transform: rotate(28deg);
  }

  69.1666666667% {
      transform: rotate(0);
  }

  70% {
      transform: rotate(28deg);
  }

  70.8333333333% {
      transform: rotate(0);
  }

  71.6666666667% {
      transform: rotate(28deg);
  }

  72.5% {
      transform: rotate(0);
  }
}

@keyframes left-ear {
  0% {
      transform: rotate(6deg);
  }

  6.6666666667% {
      transform: rotate(6deg);
  }

  13.3333333333% {
      transform: rotate(15deg);
  }

  26.6666666667% {
      transform: rotate(15deg);
  }

  33.3333333333% {
      transform: rotate(30deg);
  }

  40% {
      transform: rotate(30deg);
  }

  46.6666666667% {
      transform: rotate(0deg);
  }

  53.3333333333% {
      transform: rotate(0deg);
  }

  60% {
      transform: rotate(15deg);
  }

  80% {
      transform: rotate(15deg);
  }

  93.3333333333% {
      transform: rotate(6deg);
  }

  100% {
      transform: rotateZ(6deg);
  }
}

@keyframes right-ear {
  0% {
      transform: rotateZ(-16deg) rotateY(180deg);
  }

  6.6666666667% {
      transform: rotateZ(-16deg) rotateY(180deg);
  }

  13.3333333333% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  26.6666666667% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  33.3333333333% {
      transform: rotateZ(-30deg) rotateY(180deg);
  }

  36.6666666667% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  37.3333333333% {
      transform: rotateZ(-30deg) rotateY(180deg);
  }

  38% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  40% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  40.6666666667% {
      transform: rotateZ(-30deg) rotateY(180deg);
  }

  41.3333333333% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  46.6666666667% {
      transform: rotateZ(-9deg) rotateY(180deg);
  }

  53.3333333333% {
      transform: rotateZ(-9deg) rotateY(180deg);
  }

  60% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  60.6666666667% {
      transform: rotateZ(-30deg) rotateY(180deg);
  }

  61.3333333333% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  62.6666666667% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  63.3333333333% {
      transform: rotateZ(-30deg) rotateY(180deg);
  }

  64% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  80% {
      transform: rotateZ(-19deg) rotateY(180deg);
  }

  93.3333333333% {
      transform: rotateZ(-16deg) rotateY(180deg);
  }

  100% {
      transform: rotateZ(-16deg) rotateY(180deg);
  }
}

*, *:before, *:after {
  animation-timing-function: var(--animation-easing) !important;
}

.husky {
  animation: squiggly-anim 0.3s infinite;
  height: 60vmin;
  width: 84vmin;
}

@media screen and (max-width: 400px) {
  .husky {
      animation: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .husky,
  .husky:before,
  .husky:after,
  .husky *,
  .husky *:before,
  .husky *:after {
      animation: none !important;
  }
}

.husky:before {
  width: 90%;
  height: 0.5vmin;
  background: var(--dark-blue);
  border-radius: 0.5vmin;
  top: 100%;
  left: 5%;
  z-index: 2;
}

.husky:after {
  width: 100%;
  height: 10%;
  top: calc(100% + 0.5vmin);
  z-index: 3;
  background: var(--blue);
}

div:before, div:after {
  content: '';
  display: block;
  position: absolute;
}

.head {
  animation: head var(--animation-duration) infinite;
  position: absolute;
  height: 45%;
  width: 58%;
  left: 34%;
  top: 5%;
  transform-origin: bottom center;
}

.head:before {
  background: var(--dark-blue);
  border-top-left-radius: 50% 40%;
  border-top-right-radius: 50% 40%;
  border-bottom-right-radius: 10% 60%;
  height: 100%;
  width: 100%;
}

.face {
  animation: face var(--animation-duration) infinite;
  position: absolute;
  width: 98%;
  height: 62%;
  top: 15%;
  left: 2%;
}

.face:before {
  z-index: 1;
  width: 94%;
  height: 70%;
  left: 3%;
  background-color: var(--white);
  bottom: 5%;
  border-top-left-radius: 40% 50%;
  border-top-right-radius: 40% 50%;
  border-bottom-left-radius: 30% 50%;
  border-bottom-right-radius: 30% 40%;
}

.eye {
  position: absolute;
  width: 30%;
  height: 40%;
  background-color: var(--white);
  right: 45%;
  border-top-left-radius: 55% 50%;
  border-top-right-radius: 45% 50%;
  z-index: 2;
}

.eye:before {
  animation: left-eye var(--animation-duration) infinite;
  height: 15%;
  width: 15%;
  border-radius: 100%;
  background: var(--deep-blue);
  top: 45%;
  left: 45%;
  transform-origin: center center;
}

.eye + .eye {
  z-index: 1;
  right: initial;
  left: 48%;
  border-top-right-radius: 55% 50%;
  border-top-left-radius: 45% 50%;
}

.nose {
  animation: nose var(--animation-duration) infinite;
  z-index: 2;
  position: absolute;
  width: 20%;
  height: 20%;
  top: 29%;
  left: 42%;
}

.nose:after {
  background: var(--dark-blue);
  height: 100%;
  width: 100%;
  border-top-left-radius: 20% 20%;
  border-top-right-radius: 30% 20%;
  border-bottom-right-radius: 55% 80%;
  border-bottom-left-radius: 50% 80%;
}

.nose:before {
  height: 100%;
  width: 200%;
  background: var(--white);
  top: 50%;
  left: -50%;
  z-index: -1;
  border-radius: 50%;
}

.ear {
  animation: left-ear var(--animation-duration) both infinite;
  position: absolute;
  top: 3%;
  left: -10%;
  width: 48%;
  height: 30%;
  border-bottom-left-radius: 100% 90%;
  border-top-left-radius: 10%;
  transform-origin: 80% center;
  overflow: hidden;
  background: var(--dark-blue);
}

.ear:before {
  width: 70%;
  height: 55%;
  border: 2px solid var(--dark-blue);
  background: var(--pink);
  top: 20%;
  left: 15%;
  transform-origin: top left;
  transform: skewX(30deg) rotate(-5deg);
}

.ear:after {
  width: 70%;
  height: 100%;
  border-top-left-radius: 100%;
  background: var(--dark-blue);
  left: 32%;
  transform-origin: top left;
  transform: rotate(-5deg);
}

.ear + .ear {
  animation: right-ear var(--animation-duration) both infinite;
  background-color: var(--deep-blue);
  left: 15%;
  top: 5%;
  z-index: -1;
  transform-origin: right center;
}

.ear + .ear:before {
  border-color: var(--deep-blue);
}

.ear + .ear:after {
  background: var(--deep-blue);
}

.mouth {
  z-index: 1;
  animation: mouth var(--animation-duration) infinite;
  position: absolute;
  width: 48%;
  height: 55%;
  bottom: -5%;
  left: 28%;
  overflow: hidden;
}

.mouth:before, .mouth:after {
  animation: mouth-cover-left var(--animation-duration) infinite;
  width: 28%;
  height: 100%;
  background: var(--white);
  top: -50%;
  left: 0;
  z-index: 3;
  transform-origin: right top;
}

.mouth:after {
  animation: mouth-cover-right var(--animation-duration) infinite;
  left: initial;
  right: 0;
  transform-origin: left top;
}

.lips {
  z-index: 2;
  height: 35%;
  width: 100%;
}

.lips:before, .lips:after {
  background: var(--white);
  width: calc(50% + 1.5px);
  border-color: var(--light-blue);
  border-width: 3px;
  border-style: solid;
  height: 100%;
  border-bottom-left-radius: 65% 100%;
  border-bottom-right-radius: 35% 50%;
  border-top-right-radius: 50%;
  border-right-color: transparent;
  border-top-color: transparent;
}

.lips:after {
  transform: rotateY(180deg);
  left: initial;
  right: 0;
}

.tongue {
  animation: tongue var(--animation-duration) infinite;
  position: absolute;
  height: 100%;
  width: 44%;
  background: var(--pink);
  left: 25%;
  bottom: 100%;
  z-index: 1;
  border-bottom-left-radius: 50% 20%;
  border-bottom-right-radius: 50% 20%;
}

.body {
  animation: body var(--animation-duration) infinite;
  width: 45%;
  height: 100%;
  position: absolute;
  left: 25%;
}

.torso {
  position: absolute;
  height: 55%;
  width: 100%;
  bottom: 0;
}

.torso:before {
  background: var(--dark-blue);
  height: 100%;
  width: 50%;
  transform: translateX(-20%) skewX(-30deg);
  transform-origin: left bottom;
  border-radius: 0 30% 0 60%;
}

.torso:after {
  background: var(--dark-blue);
  height: 100%;
  width: 60%;
  top: 0;
  right: 0;
  border-radius: 10% 40% 60% 0;
}

.mane {
  animation: mane var(--animation-duration) infinite;
  z-index: 2;
  position: absolute;
  width: 31.5%;
  height: 30%;
  top: 44%;
  left: 37%;
}

.mane:before {
  background: var(--white);
  height: 40%;
  width: 100%;
  border-top-left-radius: 10% 50%;
  border-top-right-radius: 20% 100%;
  border-bottom-left-radius: 10% 50%;
}

.mane:after {
  background: var(--white);
  top: 25%;
  height: 76%;
  width: 30%;
  right: 23%;
  border-top-right-radius: 100% 80%;
  transform: rotate(47deg);
  transform-origin: bottom right;
}

.coat {
  position: absolute;
  width: 50%;
  height: 50%;
  background: var(--white);
  transform-origin: bottom right;
  left: 10%;
  top: 21%;
  transform: rotate(25deg) skewX(-30deg);
}

.legs {
  background-color: var(--dark-blue);
  position: absolute;
  height: 30%;
  width: 42%;
  left: 23%;
  bottom: 0;
  border-top-left-radius: 20% 37%;
  border-bottom-left-radius: 10% 37%;
  border-top-right-radius: 50%;
  z-index: 1;
}

.front-legs {
  position: absolute;
  width: 55%;
  height: 117%;
  bottom: 0;
  right: -12%;
}

.front-legs:before {
  width: 4%;
  height: 6%;
  background: transparent;
  bottom: 0;
  left: 47%;
  box-shadow: -1.3vmin 0 0 var(--light-blue), -2.8vmin 0 0 var(--light-blue), 1.3vmin 0 0 var(--blue), 2.8vmin 0 0 var(--blue);
  z-index: 2;
}

.front-legs > .leg {
  width: 51%;
  height: 100%;
  position: absolute;
  bottom: 0;
  right: 50%;
  overflow: hidden;
}

.front-legs > .leg:before {
  background: #c8daf2;
  height: 100%;
  width: 100%;
  transform: skewY(-30deg) skewX(10deg);
  transform-origin: top right;
}

.front-legs > .leg + .leg {
  right: 0;
  transform: rotateY(180deg);
}

.front-legs > .leg + .leg:before {
  background: var(--light-blue);
}

.hind-leg {
  position: absolute;
  background: var(--light-blue);
  width: 35%;
  height: 25%;
  border-top-left-radius: 35% 100%;
  border-top-right-radius: 40% 100%;
  bottom: 0%;
  right: 45%;
}

.hind-leg:before {
  width: 6%;
  height: 20%;
  background: transparent;
  bottom: 0;
  left: 70%;
  box-shadow: -0.8vmin 0 0 var(--blue), 0.8vmin 0 0 var(--blue);
}

.tail {
  position: absolute;
  width: 15%;
  height: 6%;
  bottom: 0;
  right: 72%;
  background: var(--deep-blue);
  z-index: 0;
}

.tail > .tail {
  animation: tail var(--animation-duration) infinite;
  height: 100%;
  width: 4vmin;
  right: 26%;
  transform-origin: center right;
  border-top-left-radius: 50% 50%;
  border-bottom-left-radius: 50% 50%;
  transform: rotate(0deg);
}

.husky > .tail {
  border-top-left-radius: 10% 50%;
  border-bottom-left-radius: 10% 50%;
}

.husky > .tail > .tail {
  right: 88%;
}

@keyframes squiggly-anim {
  0% {
      filter: url("#squiggly-0");
  }

  25% {
      filter: url("#squiggly-1");
  }

  50% {
      filter: url("#squiggly-2");
  }

  75% {
      filter: url("#squiggly-3");
  }

  100% {
      filter: url("#squiggly-4");
  }
}

html, body {
  background-repeat: no-repeat;
  background-size: contain;
  background-position: center center;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  background-color: var(--blue);
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
}

*, *:before, *:after {
  box-sizing: border-box;
  position: relative;
}
