/* ---------- Motion ---------- */
@media (prefers-reduced-motion: reduce) {
  .hero__mark::after {
    animation: none;
  }

  html {
    scroll-behavior: auto;
  }
}

@media (prefers-reduced-motion: no-preference) {
  .js .reveal>* {
    opacity: 0;
    transform: translateY(14px);
    transition: opacity 0.55s cubic-bezier(.2, .7, .3, 1),
      transform 0.55s cubic-bezier(.2, .7, .3, 1);
  }

  .js .reveal.is-visible>* {
    opacity: 1;
    transform: none;
  }

  .js .reveal>*:nth-child(2) {
    transition-delay: 60ms;
  }

  .js .reveal>*:nth-child(3) {
    transition-delay: 120ms;
  }

  .js .reveal>*:nth-child(4) {
    transition-delay: 180ms;
  }

  .js .reveal>*:nth-child(5) {
    transition-delay: 240ms;
  }

  .js .reveal>*:nth-child(6) {
    transition-delay: 300ms;
  }

  /* Cards, knowledge groups and contact rows stagger within
     their own container rather than with the section. */
  .js .reveal .project,
  .js .reveal .knowledge__group,
  .js .reveal .contact li {
    opacity: 0;
    transform: translateY(12px);
    transition: opacity 0.5s cubic-bezier(.2, .7, .3, 1),
      transform 0.5s cubic-bezier(.2, .7, .3, 1),
      border-color 0.2s ease;
  }

  .js .reveal.is-visible .project,
  .js .reveal.is-visible .knowledge__group,
  .js .reveal.is-visible .contact li {
    opacity: 1;
    transform: none;
  }

  .js .reveal .project:nth-child(2),
  .js .reveal .knowledge__group:nth-child(2),
  .js .reveal .contact li:nth-child(2) {
    transition-delay: 90ms;
  }

  .js .reveal .project:nth-child(3),
  .js .reveal .knowledge__group:nth-child(3),
  .js .reveal .contact li:nth-child(3) {
    transition-delay: 180ms;
  }

  .js .reveal .knowledge__group:nth-child(4) {
    transition-delay: 270ms;
  }

  /* The hover lift must win over the reveal's transform. */
  .js .reveal.is-visible .project:hover {
    transform: translateY(-2px);
  }

  .term__dot {
    animation: pulse 2.4s cubic-bezier(.2, .7, .3, 1) infinite;
  }

  /* The bar draws itself just after its label arrives. */
  .js .reveal .eyebrow::after {
    transform: scaleX(0);
    opacity: 0.3;
    transition: transform 0.6s cubic-bezier(.2, .7, .3, 1),
      opacity 0.6s cubic-bezier(.2, .7, .3, 1);
    transition-delay: 160ms;
  }

  .js .reveal.is-visible .eyebrow::after {
    transform: scaleX(1);
    opacity: 1;
  }
}

@media (prefers-reduced-motion: reduce) {
  .contact__arrow {
    transition: none;
  }
}

@keyframes ignite {
  from {
    transform: scaleX(0);
    opacity: 0.3;
  }

  to {
    transform: scaleX(1);
    opacity: 1;
  }
}

@keyframes pulse {

  0%,
  100% {
    opacity: 1;
  }

  50% {
    opacity: 0.45;
  }
}
