:root {
  --bansky-fx-blink-speed: 850ms;
  --bansky-fx-blink-size: 18px;
  --bansky-fx-blink-valign: middle;
  --bansky-fx-cursor-speed: 700ms;
}

[data-bansky-fx="blink"] {
  display: inline-block;
  font-size: var(--bansky-fx-blink-size);
  line-height: 1;
  vertical-align: var(--bansky-fx-blink-valign);
  animation: banskyFxBlink var(--bansky-fx-blink-speed) steps(1, end) infinite;
}

[data-bansky-fx="cursor-wrap"] { display: inline-flex; align-items: baseline; }
[data-bansky-fx="cursor"],
[data-bansky-fx="typewriter-cursor"] {
  display: inline-block;
  margin-left: .08em;
  animation: banskyFxCursor var(--bansky-fx-cursor-speed) steps(1, end) infinite;
}

[data-bansky-fx="typewriter"] { display: inline-flex; align-items: baseline; }
[data-bansky-fx="typewriter-text"] { white-space: pre-wrap; }

@keyframes banskyFxBlink {
  0%, 48% { opacity: 1; }
  49%, 100% { opacity: .12; }
}

@keyframes banskyFxCursor {
  0%, 52% { opacity: 1; }
  53%, 100% { opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  [data-bansky-fx="blink"],
  [data-bansky-fx="cursor"],
  [data-bansky-fx="typewriter-cursor"] { animation: none !important; }
}
