/* Text remains visible at rest. These effects never reserve duplicate lines. */
.text-motion-word { display: inline-block; }
.text-motion-label { display: inline-block; overflow: clip; vertical-align: middle; line-height: 1.4; }
.text-motion-reel { position: relative; display: block; transition: transform 220ms cubic-bezier(.2,.7,.2,1); }
.text-motion-original { display: block; }
.text-motion-echo { position: absolute; inset: 0; transform: translateY(112%); pointer-events: none; }
.text-motion-control:focus-visible .text-motion-reel { transform: translateY(-112%); }
@media (hover: hover) and (pointer: fine) {
  .text-motion-control:hover .text-motion-reel { transform: translateY(-112%); }
}
@media (prefers-reduced-motion: reduce) {
  .text-motion-word, .text-motion-label, .text-motion-reel { transform: none !important; opacity: 1 !important; transition: none !important; }
  .text-motion-echo { display: none; }
}
