/* Artwork and timing from the supplied homepage prototype. */

/* Research */
.hv-research-a {
  transform-box: fill-box;
}

.hv-research-cur {
  animation: hv-research-cur 0.6s 1s both cubic-bezier(0.2, 0.8, 0.2, 1);
}
@keyframes hv-research-cur {
  from {
    transform: translate(70px, 40px);
    opacity: 0;
  }
  to {
    transform: none;
    opacity: 1;
  }
}
.hv-research-sel {
  transform-origin: 50% 50%;
  animation: hv-research-sel 0.35s 1.55s both cubic-bezier(0.2, 0.8, 0.2, 1);
}
@keyframes hv-research-sel {
  from {
    opacity: 0;
    transform: scale(1.12);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.hv-research-hot {
  fill: #e8ae3c;
  animation: hv-research-hot 0.4s 1.95s both ease-out;
}
@keyframes hv-research-hot {
  from {
    fill: #f5eedf;
  }
  to {
    fill: #e8ae3c;
  }
}
.hv-research-bar {
  transform-origin: 50% 100%;
  animation: hv-research-grow 0.7s both cubic-bezier(0.2, 0.8, 0.2, 1);
}
@keyframes hv-research-grow {
  from {
    transform: scaleY(0);
  }
  to {
    transform: none;
  }
}

.hv-research-g0 {
  animation-delay: 0.2s;
}
.hv-research-g1 {
  animation-delay: 0.33s;
}
.hv-research-g2 {
  animation-delay: 0.46s;
}
.hv-research-g3 {
  animation-delay: 0.59s;
}
@media (prefers-reduced-motion: reduce) {
  .visual-art--research * {
    animation: none !important;
  }
}

/* Image */
.hv-image-a {
  transform-box: fill-box;
}

.hv-image-card {
  transform-origin: 50% 100%;
}
.hv-image-l {
  transform: translate(-30px, 6px) rotate(-14deg);
  animation: hv-image-l 0.9s 0.2s both cubic-bezier(0.3, 0.7, 0.2, 1);
}
.hv-image-r {
  transform: translate(30px, 6px) rotate(14deg);
  animation: hv-image-r 0.9s 0.2s both cubic-bezier(0.3, 0.7, 0.2, 1);
}
.hv-image-f {
  transform: translateY(-8px);
  animation: hv-image-f 0.6s 0.9s both cubic-bezier(0.3, 0.7, 0.2, 1);
}
.hv-image-sun {
  animation: hv-image-sun 0.9s 1s both cubic-bezier(0.2, 0.7, 0.2, 1);
}
.hv-image-ring {
  transform-box: fill-box;
  transform-origin: 50% 50%;
  animation: hv-image-ring 0.45s 1.8s both cubic-bezier(0.3, 1.6, 0.5, 1);
}
@keyframes hv-image-l {
  from {
    transform: none;
  }
}
@keyframes hv-image-r {
  from {
    transform: none;
  }
}
@keyframes hv-image-f {
  from {
    transform: none;
  }
}
@keyframes hv-image-sun {
  from {
    transform: translateY(26px);
  }
}
@keyframes hv-image-ring {
  from {
    opacity: 0;
    transform: scale(0.4);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .visual-art--image * {
    animation: none !important;
  }
}

/* Motion */
.hv-motion-px {
  animation: hv-motion-px linear infinite;
}
.hv-motion-cl {
  animation: hv-motion-cl linear infinite;
}
@keyframes hv-motion-cl {
  from {
    transform: translateX(120px);
  }
  to {
    transform: translateX(-300px);
  }
}
@keyframes hv-motion-px {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(var(--p));
  }
}
.hv-motion-camA {
  transform-origin: 180px 140px;
  animation: hv-motion-camA 8s infinite linear;
}
@keyframes hv-motion-camA {
  0% {
    transform: scale(1.1);
  }
  50%,
  100% {
    transform: scale(1);
  }
}
.hv-motion-camB {
  transform-origin: 180px 140px;
  animation: hv-motion-camB 8s infinite linear;
}
@keyframes hv-motion-camB {
  0%,
  50% {
    transform: scale(1);
  }
  100% {
    transform: scale(1.1);
  }
}
.hv-motion-sceneB {
  animation: hv-motion-sb 8s infinite steps(1, end);
}
@keyframes hv-motion-sb {
  0% {
    opacity: 0;
  }
  50% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
.hv-motion-sun {
  animation: hv-motion-sun 8s infinite;
}
@keyframes hv-motion-sun {
  0%,
  6% {
    transform: translateY(70px);
  }
  30%,
  100% {
    transform: translateY(0);
  }
}
.hv-motion-sun {
  animation-timing-function: cubic-bezier(0.2, 0.7, 0.2, 1);
}
.hv-motion-moon {
  animation: hv-motion-moon 8s infinite cubic-bezier(0.2, 0.7, 0.2, 1);
}
@keyframes hv-motion-moon {
  0%,
  56% {
    transform: translateY(60px);
  }
  80%,
  100% {
    transform: translateY(0);
  }
}
.hv-motion-tw {
  animation: hv-motion-tw 2.4s ease-in-out infinite;
}
@keyframes hv-motion-tw {
  0%,
  100% {
    opacity: 0.25;
  }
  50% {
    opacity: 1;
  }
}
.hv-motion-shoot {
  animation: hv-motion-shoot 8s infinite;
}
@keyframes hv-motion-shoot {
  0%,
  66% {
    transform: translate(0, 0);
    opacity: 0;
  }
  67% {
    opacity: 1;
  }
  73% {
    transform: translate(-230px, 110px);
    opacity: 0;
  }
  100% {
    opacity: 0;
    transform: translate(-230px, 110px);
  }
}
.hv-motion-wipe {
  animation: hv-motion-wipe 8s infinite;
}
@keyframes hv-motion-wipe {
  0% {
    transform: translateX(0);
  }
  0.4% {
    transform: translateX(0);
    animation-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
  }
  6.4% {
    transform: translateX(580px);
  }
  6.41% {
    transform: translateX(-600px);
  }
  43.6% {
    transform: translateX(-600px);
    animation-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
  }
  49.6% {
    transform: translateX(0);
  }
  50.4% {
    transform: translateX(0);
    animation-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
  }
  56.4% {
    transform: translateX(580px);
  }
  56.41% {
    transform: translateX(-600px);
  }
  93.6% {
    transform: translateX(-600px);
    animation-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
  }
  99.6%,
  100% {
    transform: translateX(0);
  }
}
.hv-motion-prog {
  animation: hv-motion-prog 8s linear infinite;
}
@keyframes hv-motion-prog {
  from {
    transform: scaleX(0);
  }
  to {
    transform: scaleX(1);
  }
}
@media (prefers-reduced-motion: reduce) {
  .visual-art--motion * {
    animation: none !important;
  }
  .hv-motion-sceneB {
    opacity: 0;
  }
  .hv-motion-wipe {
    transform: translateX(-600px);
  }
}

/* Music */
.hv-music-a {
  transform-box: fill-box;
}

.hv-music-w {
  transform-origin: 50% 50%;
  animation: hv-music-w 1.1s ease-in-out infinite alternate;
}
@keyframes hv-music-w {
  0% {
    transform: scaleY(0.35);
  }
  100% {
    transform: scaleY(1);
  }
}
.hv-music-n {
  animation: hv-music-n 2.2s ease-in-out infinite;
}
@keyframes hv-music-n {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-5px);
  }
}

@media (prefers-reduced-motion: reduce) {
  .visual-art--music * {
    animation: none !important;
  }
}

/* JavaScript starts each illustration when it enters the viewport. */
.visual-art * {
  animation-play-state: paused;
}
.visual-art.is-playing * {
  animation-play-state: running;
}
.visual-art:not(.is-ready) *,
.visual-art.is-complete * {
  animation: none !important;
}

/* A complete, quiet illustration remains available without JavaScript. */
.visual-art--motion:not(.is-ready) .hv-motion-sceneB {
  opacity: 0;
}
.visual-art--motion:not(.is-ready) .hv-motion-wipe {
  transform: translateX(-600px);
}
.visual-art--motion:not(.is-ready) .hv-motion-route {
  stroke-dashoffset: 0;
}
.visual-art--motion:not(.is-ready) .hv-motion-plane {
  transform: translate(196px, 126px) rotate(-18deg);
}
.visual-art--motion:not(.is-ready) .hv-motion-prog {
  transform: scaleX(1);
}
@media (prefers-reduced-motion: reduce) {
  .visual-art--motion .hv-motion-route {
    stroke-dashoffset: 0;
  }
  .visual-art--motion .hv-motion-plane {
    transform: translate(196px, 126px) rotate(-18deg);
  }
  .visual-art--motion .hv-motion-prog {
    transform: scaleX(1);
  }
}
