.page-transition {
  position: relative;
  opacity: 1;
  /* No resting transform: any transform (even translateY(0)) makes <main>
     the containing block of position:fixed descendants (modals, overlays),
     pinning them to the top of the page instead of the viewport. */
  transform: none;
  transition: opacity 0.10s cubic-bezier(0.4, 0, 0.2, 1), transform 0.10s cubic-bezier(0.4, 0, 0.2, 1);
  animation: page-transition-in 0.10s cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-animation: page-transition-in 0.10s cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition: opacity 0.10s cubic-bezier(0.4, 0, 0.2, 1), transform 0.10s cubic-bezier(0.4, 0, 0.2, 1);
  -moz-transition: opacity 0.10s cubic-bezier(0.4, 0, 0.2, 1), transform 0.10s cubic-bezier(0.4, 0, 0.2, 1);
  -ms-transition: opacity 0.10s cubic-bezier(0.4, 0, 0.2, 1), transform 0.10s cubic-bezier(0.4, 0, 0.2, 1);
  -o-transition: opacity 0.10s cubic-bezier(0.4, 0, 0.2, 1), transform 0.10s cubic-bezier(0.4, 0, 0.2, 1);
}

@keyframes page-transition-in {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

.page-transition.fade-out {
  opacity: 0;
  transform: translateY(-10px);
}

/* Loader shown in the middle of the content while the next page loads.
   Positioned fixed (not nested in .page-transition) so it stays fully
   visible while the content underneath fades out. */
.page-loader {
  position: fixed;
  z-index: 50;
  transform: translate(-50%, -50%);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.15s ease;
}

.page-loader.is-visible {
  opacity: 1;
}

.page-loader__spinner {
  width: 34px;
  height: 34px;
  border: 3px solid rgba(0, 0, 0, .12);
  border-top-color: var(--link, #13376c);
  border-radius: 50%;
  animation: page-loader-spin 0.7s linear infinite;
}

@keyframes page-loader-spin {
  to {
    transform: rotate(360deg);
  }
}
