/* Total Voice Solution — Pulse Spark, the motion (shared by the lockups and the icon). From the brand kit's animated/ files. */
@keyframes tvsDraw { from { stroke-dashoffset: 290 } to { stroke-dashoffset: 0 } }
@keyframes tvsIn { from { opacity: 0; transform: translateX(-11px) } to { opacity: 1; transform: translateX(0) } }
@keyframes tvsUp { from { opacity: 0; transform: translateY(5px) } to { opacity: 1; transform: translateY(0) } }
@keyframes tvsPop { 0% { opacity: 0; transform: scale(.2) rotate(-40deg) } 65% { opacity: 1; transform: scale(1.22) rotate(6deg) } 100% { opacity: 1; transform: scale(1) rotate(0) } }
@keyframes tvsWipe { from { transform: scaleX(0) } to { transform: scaleX(1) } }
@keyframes tvsSweep { 0% { stroke-dashoffset: 290; opacity: 0 } 12% { opacity: .9 } 72% { opacity: .9 } 100% { stroke-dashoffset: -290; opacity: 0 } }
@keyframes tvsTwinkle { 0%, 70%, 100% { transform: scale(1) rotate(0) } 80% { transform: scale(1.16) rotate(8deg) } 90% { transform: scale(.97) rotate(-3deg) } }
@keyframes tvsFlare { 0%, 66%, 100% { opacity: 0; transform: scale(.55) } 80% { opacity: .4; transform: scale(1.3) } }
@keyframes tvsBlink { 0%, 60%, 100% { opacity: 0; transform: scale(.3) rotate(0) } 74% { opacity: 1; transform: scale(1) rotate(22deg) } 88% { opacity: 0; transform: scale(.45) rotate(38deg) } }
@keyframes tvsShine { 0% { opacity: 0; transform: translateX(0) } 3% { opacity: .85 } 17% { opacity: .85 } 22% { opacity: 0; transform: translateX(840px) } 100% { opacity: 0; transform: translateX(840px) } }
@media (prefers-reduced-motion: reduce) {
  svg * { animation: none !important; opacity: 1 !important; stroke-dashoffset: 0 !important }
  svg path[stroke="#FFD98A"], svg [data-motion-only] { display: none !important }
}
