#headline {
  display: inline-block;
  --headline-fx-line-height: 1.2;
  line-height: var(--headline-fx-line-height);
  /* Reserve pulse-expanded line-box height so surrounding layout does not jump. */
  min-height: calc((1em + var(--headline-fx-pulse-step, 0.22em)) * var(--headline-fx-line-height));
  padding-bottom: calc(var(--headline-fx-pulse-step, 0.22em) * 0.2);
  vertical-align: top;
}

#headline.headlineFxTyping {
  display: inline-block;
  padding-right: 4px;
  border-right: 2px solid currentColor;
  animation: headlineFxCaretBlink 0.8s steps(1, end) infinite;
}

#headline.headlineFxUsingLetters {
  display: inline-flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: flex-end;
  white-space: pre-wrap;
}

#headline .headlineFxLetter {
  display: inline-block;
  transition: font-size 180ms ease, transform 180ms ease;
}

#headline .headlineFxLetter.isPulse {
  font-size: calc(1em + var(--headline-fx-pulse-step, 0.22em));
}

#headline.headlineFxShine {
  background-image: linear-gradient(
    110deg,
    rgba(255, 255, 255, 0.32) 0%,
    rgba(255, 255, 255, 0.95) 42%,
    rgba(255, 255, 255, 0.36) 78%,
    rgba(255, 255, 255, 0.2) 100%
  );
  background-size: 240% 100%;
  background-position: 120% 0;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
  animation: headlineFxShineSweep var(--headline-fx-shine-duration, 1800ms) ease-in-out 1;
}

@keyframes headlineFxCaretBlink {
  0%,
  49% {
    border-right-color: currentColor;
  }
  50%,
  100% {
    border-right-color: transparent;
  }
}

@keyframes headlineFxShineSweep {
  from {
    background-position: 120% 0;
  }
  to {
    background-position: -120% 0;
  }
}
