/* Text Animator Pro v2.1 */
/* No rules targeting .tap-char or .tap-word — styles are set via JS only
   to avoid any possibility of theme CSS conflicts before animation fires. */

@keyframes tap-blink {
    0%,100% { opacity:1; }
    50%      { opacity:0; }
}

/* Split reveal — opacity+filter work on display:inline */
@keyframes tap-splitFadeIn {
    0%   { opacity:0; filter:blur(6px); }
    70%  { opacity:1; filter:blur(0.5px); }
    100% { opacity:1; filter:none; }
}

/* ── FADE ── */
@keyframes tap-fadeIn {
    from { opacity:0; }
    to   { opacity:1; }
}
/* fadeInUp: rises up and fades in — works for both whole-element and split chars */
@keyframes tap-fadeInUp {
    0%   { opacity:0; transform:translateY(24px); }
    60%  { opacity:1; transform:translateY(-2px); }
    100% { opacity:1; transform:translateY(0); }
}
@keyframes tap-fadeInDown {
    0%   { opacity:0; transform:translateY(-28px); }
    60%  { opacity:1; transform:translateY(2px); }
    100% { opacity:1; transform:translateY(0); }
}
@keyframes tap-fadeInLeft {
    0%   { opacity:0; transform:translateX(-36px); }
    60%  { opacity:1; transform:translateX(2px); }
    100% { opacity:1; transform:translateX(0); }
}
@keyframes tap-fadeInRight {
    0%   { opacity:0; transform:translateX(36px); }
    60%  { opacity:1; transform:translateX(-2px); }
    100% { opacity:1; transform:translateX(0); }
}

/* ── SLIDE ── */
@keyframes tap-slideInUp {
    0%   { opacity:0; transform:translateY(50px); }
    65%  { opacity:1; transform:translateY(-3px); }
    100% { opacity:1; transform:translateY(0); }
}
@keyframes tap-slideInDown {
    0%   { opacity:0; transform:translateY(-50px); }
    65%  { opacity:1; transform:translateY(3px); }
    100% { opacity:1; transform:translateY(0); }
}
@keyframes tap-slideInLeft {
    0%   { opacity:0; transform:translateX(-50px); }
    65%  { opacity:1; transform:translateX(3px); }
    100% { opacity:1; transform:translateX(0); }
}
@keyframes tap-slideInRight {
    0%   { opacity:0; transform:translateX(50px); }
    65%  { opacity:1; transform:translateX(-3px); }
    100% { opacity:1; transform:translateX(0); }
}

/* ── ZOOM ── */
@keyframes tap-zoomIn {
    0%   { opacity:0; transform:scale(0.6); }
    65%  { opacity:1; transform:scale(1.02); }
    100% { opacity:1; transform:scale(1); }
}
@keyframes tap-zoomInBounce {
    0%   { opacity:0; transform:scale(0.5); }
    55%  { opacity:1; transform:scale(1.07); }
    75%  { opacity:1; transform:scale(0.97); }
    90%  { opacity:1; transform:scale(1.02); }
    100% { opacity:1; transform:scale(1); }
}
@keyframes tap-zoomOut {
    0%   { opacity:0; transform:scale(1.5); }
    65%  { opacity:1; transform:scale(0.98); }
    100% { opacity:1; transform:scale(1); }
}
@keyframes tap-scaleX {
    0%   { opacity:1; transform:scaleX(0); transform-origin:left center; }
    70%  { opacity:1; transform:scaleX(1.03); transform-origin:left center; }
    100% { opacity:1; transform:scaleX(1); transform-origin:left center; }
}

/* ── ROTATE / FLIP ── */
@keyframes tap-rotateIn {
    0%   { opacity:0; transform:rotate(-160deg) scale(0.6); }
    70%  { opacity:1; transform:rotate(4deg) scale(1); }
    100% { opacity:1; transform:rotate(0deg) scale(1); }
}
@keyframes tap-rotateDownLeft {
    0%   { opacity:0; transform-origin:left bottom; transform:rotate(-90deg); }
    65%  { opacity:1; transform-origin:left bottom; transform:rotate(8deg); }
    100% { opacity:1; transform-origin:left bottom; transform:rotate(0deg); }
}
@keyframes tap-flipInX {
    0%   { opacity:0; transform:perspective(500px) rotateX(75deg); }
    65%  { opacity:1; transform:perspective(500px) rotateX(-5deg); }
    100% { opacity:1; transform:perspective(500px) rotateX(0deg); }
}
@keyframes tap-flipInY {
    0%   { opacity:0; transform:perspective(500px) rotateY(75deg); }
    65%  { opacity:1; transform:perspective(500px) rotateY(-5deg); }
    100% { opacity:1; transform:perspective(500px) rotateY(0deg); }
}

/* ── BOUNCE ── */
@keyframes tap-bounceIn {
    0%   { opacity:0; transform:scale(0.4); }
    55%  { opacity:1; transform:scale(1.08); }
    75%  { opacity:1; transform:scale(0.96); }
    90%  { opacity:1; transform:scale(1.03); }
    100% { opacity:1; transform:scale(1); }
}
@keyframes tap-bounceInUp {
    0%   { opacity:0; transform:translateY(45px); }
    55%  { opacity:1; transform:translateY(-10px); }
    75%  { opacity:1; transform:translateY(5px); }
    90%  { opacity:1; transform:translateY(-2px); }
    100% { opacity:1; transform:translateY(0); }
}
@keyframes tap-bounceInDown {
    0%   { opacity:0; transform:translateY(-45px); }
    55%  { opacity:1; transform:translateY(10px); }
    75%  { opacity:1; transform:translateY(-5px); }
    90%  { opacity:1; transform:translateY(2px); }
    100% { opacity:1; transform:translateY(0); }
}

/* ── SPECIAL FX ── */
@keyframes tap-blur {
    0%   { opacity:0; filter:blur(14px); transform:scale(1.04); }
    60%  { opacity:1; filter:blur(1px);  transform:scale(1.01); }
    100% { opacity:1; filter:blur(0);    transform:scale(1); }
}
@keyframes tap-glitch {
    0%   { opacity:0; transform:translate(0,0) skew(0); clip-path:inset(0 0 100% 0); }
    5%   { opacity:1; transform:translate(-6px,0) skewX(12deg); clip-path:inset(30% 0 40% 0); filter:hue-rotate(90deg); }
    10%  { opacity:1; transform:translate(6px,0) skewX(-8deg);  clip-path:inset(0 0 0 0); filter:hue-rotate(0deg); }
    15%  { opacity:1; transform:translate(-4px,2px);  clip-path:inset(60% 0 10% 0); filter:brightness(2); }
    18%  { opacity:1; transform:translate(4px,-2px);  clip-path:inset(0 0 0 0); filter:brightness(1); }
    22%  { opacity:1; transform:translate(-3px,0) skewX(4deg); }
    26%  { opacity:1; transform:translate(3px,0); }
    30%  { opacity:1; transform:translate(-1px,0); clip-path:inset(20% 0 70% 0); filter:hue-rotate(45deg); }
    34%  { opacity:1; transform:translate(0,0); clip-path:inset(0 0 0 0); filter:hue-rotate(0deg); }
    45%  { opacity:1; transform:translate(-1px,0); }
    50%  { opacity:1; transform:translate(1px,0); }
    100% { opacity:1; transform:translate(0,0); clip-path:inset(0 0 0 0); }
}
@keyframes tap-wave {
    0%   { transform:translateY(0); }
    35%  { transform:translateY(-10px); }
    65%  { transform:translateY(4px); }
    100% { transform:translateY(0); }
}
@keyframes tap-shake {
    0%   { opacity:0; transform:translate(-3px,-2px) rotate(-1deg); }
    5%   { opacity:1; transform:translate(3px,2px) rotate(1deg); }
    10%  { opacity:1; transform:translate(-4px,1px) rotate(-2deg); }
    15%  { opacity:1; transform:translate(4px,-1px) rotate(2deg); }
    20%  { opacity:1; transform:translate(-3px,3px) rotate(-1deg); }
    25%  { opacity:1; transform:translate(3px,-3px) rotate(1deg); }
    30%  { opacity:1; transform:translate(-2px,2px) rotate(-1deg); }
    35%  { opacity:1; transform:translate(2px,-2px); }
    40%  { opacity:1; transform:translate(-3px,1px); }
    50%  { opacity:1; transform:translate(2px,-2px); }
    60%  { opacity:1; transform:translate(-1px,1px); }
    70%  { opacity:1; transform:translate(1px,-1px); }
    85%  { opacity:1; transform:translate(-1px,0); }
    100% { opacity:1; transform:translate(0,0) rotate(0); }
}
@keyframes tap-swing {
    0%   { opacity:0; transform:rotate(-18deg); transform-origin:top center; }
    45%  { opacity:1; transform:rotate(7deg);   transform-origin:top center; }
    68%  { opacity:1; transform:rotate(-4deg);  transform-origin:top center; }
    84%  { opacity:1; transform:rotate(2deg);   transform-origin:top center; }
    100% { opacity:1; transform:rotate(0deg);   transform-origin:top center; }
}
@keyframes tap-rubberBand {
    0%   { opacity:0; transform:scale(0.6); }
    40%  { opacity:1; transform:scaleX(1.18) scaleY(0.84); }
    62%  { opacity:1; transform:scaleX(0.92) scaleY(1.06); }
    80%  { opacity:1; transform:scaleX(1.03) scaleY(0.98); }
    100% { opacity:1; transform:scale(1); }
}
    40%  { opacity:0.8; text-shadow: 0 0 8px currentColor, 0 0 16px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 6px currentColor, 0 0 20px currentColor, 0 0 40px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 4px currentColor, 0 0 12px currentColor, 0 0 24px currentColor; }
}
    40%  { opacity:0.8; filter:brightness(1.6) drop-shadow(0 0 6px currentColor); }
    70%  { opacity:1;   filter:brightness(2) drop-shadow(0 0 14px currentColor) drop-shadow(0 0 28px currentColor); }
    100% { opacity:1;   filter:brightness(1.3) drop-shadow(0 0 5px currentColor) drop-shadow(0 0 16px currentColor); }
}
@keyframes tap-neon {
    0%   { opacity:0;   text-shadow: none; }
    40%  { opacity:0.9; text-shadow: 0 0 8px currentColor, 0 0 20px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 8px currentColor, 0 0 20px currentColor, 0 0 40px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 4px currentColor, 0 0 14px currentColor; }
}
@keyframes tap-rise {
    0%   { opacity:0; transform:translateY(22px) skewY(2deg); filter:blur(5px); }
    65%  { opacity:1; transform:translateY(-1px) skewY(0deg); filter:blur(0); }
    100% { opacity:1; transform:translateY(0) skewY(0); }
}
@keyframes tap-stamp {
    0%   { opacity:0; transform:scale(3) rotate(-2deg); filter:blur(4px); }
    50%  { opacity:1; transform:scale(0.97) rotate(0.5deg); filter:blur(0); }
    72%  { opacity:1; transform:scale(1.02); }
    100% { opacity:1; transform:scale(1) rotate(0); }
}
@keyframes tap-splitReveal {
    0%   { opacity:0; letter-spacing:0.35em; }
    65%  { opacity:1; letter-spacing:0.02em; }
    100% { opacity:1; letter-spacing:normal; }
}
@keyframes tap-pixelate {
    0%   { opacity:0; filter:blur(10px); transform:scale(1.05); }
    60%  { opacity:1; filter:blur(1px);  transform:scale(1.01); }
    100% { opacity:1; filter:blur(0);    transform:scale(1); }
}

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

/* ── FADE ── */
@keyframes tap-fadeIn {
    from { opacity:0; }
    to   { opacity:1; }
}
@keyframes tap-fadeInUp {
    0%   { opacity:0; transform:translateY(28px); }
    60%  { opacity:1; transform:translateY(-2px); }
    100% { opacity:1; transform:translateY(0); }
}
@keyframes tap-fadeInDown {
    0%   { opacity:0; transform:translateY(-28px); }
    60%  { opacity:1; transform:translateY(2px); }
    100% { opacity:1; transform:translateY(0); }
}
@keyframes tap-fadeInLeft {
    0%   { opacity:0; transform:translateX(-36px); }
    60%  { opacity:1; transform:translateX(2px); }
    100% { opacity:1; transform:translateX(0); }
}
@keyframes tap-fadeInRight {
    0%   { opacity:0; transform:translateX(36px); }
    60%  { opacity:1; transform:translateX(-2px); }
    100% { opacity:1; transform:translateX(0); }
}

/* ── SLIDE ── */
@keyframes tap-slideInUp {
    0%   { opacity:0; transform:translateY(50px); }
    65%  { opacity:1; transform:translateY(-3px); }
    100% { opacity:1; transform:translateY(0); }
}
@keyframes tap-slideInDown {
    0%   { opacity:0; transform:translateY(-50px); }
    65%  { opacity:1; transform:translateY(3px); }
    100% { opacity:1; transform:translateY(0); }
}
@keyframes tap-slideInLeft {
    0%   { opacity:0; transform:translateX(-50px); }
    65%  { opacity:1; transform:translateX(3px); }
    100% { opacity:1; transform:translateX(0); }
}
@keyframes tap-slideInRight {
    0%   { opacity:0; transform:translateX(50px); }
    65%  { opacity:1; transform:translateX(-3px); }
    100% { opacity:1; transform:translateX(0); }
}

/* ── ZOOM ── */
@keyframes tap-zoomIn {
    0%   { opacity:0; transform:scale(0.6); }
    65%  { opacity:1; transform:scale(1.02); }
    100% { opacity:1; transform:scale(1); }
}
@keyframes tap-zoomInBounce {
    0%   { opacity:0; transform:scale(0.5); }
    55%  { opacity:1; transform:scale(1.07); }
    75%  { opacity:1; transform:scale(0.97); }
    90%  { opacity:1; transform:scale(1.02); }
    100% { opacity:1; transform:scale(1); }
}
@keyframes tap-zoomOut {
    0%   { opacity:0; transform:scale(1.5); }
    65%  { opacity:1; transform:scale(0.98); }
    100% { opacity:1; transform:scale(1); }
}

/* ── SCALE X — wipes in from left ── */
@keyframes tap-scaleX {
    0%   { opacity:1; transform:scaleX(0); transform-origin:left center; }
    70%  { opacity:1; transform:scaleX(1.03); transform-origin:left center; }
    100% { opacity:1; transform:scaleX(1); transform-origin:left center; }
}

/* ── ROTATE / FLIP ── */
@keyframes tap-rotateIn {
    0%   { opacity:0; transform:rotate(-160deg) scale(0.6); }
    70%  { opacity:1; transform:rotate(4deg) scale(1); }
    100% { opacity:1; transform:rotate(0deg) scale(1); }
}
/* Rotate down left — drops in from top-left pivot */
@keyframes tap-rotateDownLeft {
    0%   { opacity:0; transform-origin:left bottom; transform:rotate(-90deg); }
    65%  { opacity:1; transform-origin:left bottom; transform:rotate(8deg); }
    100% { opacity:1; transform-origin:left bottom; transform:rotate(0deg); }
}
@keyframes tap-flipInX {
    0%   { opacity:0; transform:perspective(500px) rotateX(75deg); }
    65%  { opacity:1; transform:perspective(500px) rotateX(-5deg); }
    100% { opacity:1; transform:perspective(500px) rotateX(0deg); }
}
@keyframes tap-flipInY {
    0%   { opacity:0; transform:perspective(500px) rotateY(75deg); }
    65%  { opacity:1; transform:perspective(500px) rotateY(-5deg); }
    100% { opacity:1; transform:perspective(500px) rotateY(0deg); }
}

/* ── BOUNCE ── */
@keyframes tap-bounceIn {
    0%   { opacity:0; transform:scale(0.4); }
    55%  { opacity:1; transform:scale(1.08); }
    75%  { opacity:1; transform:scale(0.96); }
    90%  { opacity:1; transform:scale(1.03); }
    100% { opacity:1; transform:scale(1); }
}
@keyframes tap-bounceInUp {
    0%   { opacity:0; transform:translateY(45px); }
    55%  { opacity:1; transform:translateY(-10px); }
    75%  { opacity:1; transform:translateY(5px); }
    90%  { opacity:1; transform:translateY(-2px); }
    100% { opacity:1; transform:translateY(0); }
}
@keyframes tap-bounceInDown {
    0%   { opacity:0; transform:translateY(-45px); }
    55%  { opacity:1; transform:translateY(10px); }
    75%  { opacity:1; transform:translateY(-5px); }
    90%  { opacity:1; transform:translateY(2px); }
    100% { opacity:1; transform:translateY(0); }
}

/* ── SPECIAL FX ── */
@keyframes tap-blur {
    0%   { opacity:0; filter:blur(14px); transform:scale(1.04); }
    60%  { opacity:1; filter:blur(1px);  transform:scale(1.01); }
    100% { opacity:1; filter:blur(0);    transform:scale(1); }
}

/* TV-lines glitch — raw, aggressive, digital */
@keyframes tap-glitch {
    0%   { opacity:0; transform:translate(0,0) skew(0); clip-path:inset(0 0 100% 0); }
    /* Flash on */
    5%   { opacity:1; transform:translate(-6px,0) skewX(12deg); clip-path:inset(30% 0 40% 0); filter:hue-rotate(90deg); }
    10%  { opacity:1; transform:translate(6px,0) skewX(-8deg);  clip-path:inset(0 0 0 0); filter:hue-rotate(0deg); }
    15%  { opacity:1; transform:translate(-4px,2px);  clip-path:inset(60% 0 10% 0); filter:brightness(2); }
    18%  { opacity:1; transform:translate(4px,-2px);  clip-path:inset(0 0 0 0); filter:brightness(1); }
    /* Settle jitter */
    22%  { opacity:1; transform:translate(-3px,0) skewX(4deg); }
    26%  { opacity:1; transform:translate(3px,0); }
    30%  { opacity:1; transform:translate(-1px,0); clip-path:inset(20% 0 70% 0); filter:hue-rotate(45deg); }
    34%  { opacity:1; transform:translate(0,0);   clip-path:inset(0 0 0 0); filter:hue-rotate(0deg); }
    /* Final micro-jitter */
    45%  { opacity:1; transform:translate(-1px,0); }
    50%  { opacity:1; transform:translate(1px,0); }
    100% { opacity:1; transform:translate(0,0); clip-path:inset(0 0 0 0); }
}

@keyframes tap-typewriter {
    from { width:0; }
    to   { width:100%; }
}

@keyframes tap-wave {
    0%   { transform:translateY(0); }
    35%  { transform:translateY(-10px); }
    65%  { transform:translateY(4px); }
    100% { transform:translateY(0); }
}

/* Aggressive character shake — rapid multi-axis tremor */
@keyframes tap-shake {
    0%   { opacity:0; transform:translate(-3px,-2px) rotate(-1deg); }
    5%   { opacity:1; transform:translate(3px, 2px) rotate(1deg); }
    10%  { opacity:1; transform:translate(-4px, 1px) rotate(-2deg); }
    15%  { opacity:1; transform:translate(4px,-1px) rotate(2deg); }
    20%  { opacity:1; transform:translate(-3px, 3px) rotate(-1deg); }
    25%  { opacity:1; transform:translate(3px,-3px) rotate(1deg); }
    30%  { opacity:1; transform:translate(-2px, 2px) rotate(-1deg); }
    35%  { opacity:1; transform:translate(2px,-2px) rotate(0deg); }
    40%  { opacity:1; transform:translate(-3px, 1px); }
    45%  { opacity:1; transform:translate(3px,-1px); }
    50%  { opacity:1; transform:translate(-2px, 2px); }
    55%  { opacity:1; transform:translate(2px,-2px); }
    60%  { opacity:1; transform:translate(-1px, 1px); }
    70%  { opacity:1; transform:translate(1px,-1px); }
    80%  { opacity:1; transform:translate(-1px,0); }
    90%  { opacity:1; transform:translate(0,0); }
    100% { opacity:1; transform:translate(0,0) rotate(0); }
}

@keyframes tap-swing {
    0%   { opacity:0; transform:rotate(-18deg); transform-origin:top center; }
    45%  { opacity:1; transform:rotate(7deg);   transform-origin:top center; }
    68%  { opacity:1; transform:rotate(-4deg);  transform-origin:top center; }
    84%  { opacity:1; transform:rotate(2deg);   transform-origin:top center; }
    100% { opacity:1; transform:rotate(0deg);   transform-origin:top center; }
}
@keyframes tap-rubberBand {
    0%   { opacity:0; transform:scale(0.6); }
    40%  { opacity:1; transform:scaleX(1.18) scaleY(0.84); }
    62%  { opacity:1; transform:scaleX(0.92) scaleY(1.06); }
    80%  { opacity:1; transform:scaleX(1.03) scaleY(0.98); }
    100% { opacity:1; transform:scale(1); }
}
    40%  { opacity:0.8; text-shadow: 0 0 8px currentColor, 0 0 16px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 6px currentColor, 0 0 20px currentColor, 0 0 40px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 4px currentColor, 0 0 12px currentColor, 0 0 24px currentColor; }
}
    40%  { opacity:0.8; filter:brightness(1.6) drop-shadow(0 0 6px currentColor); }
    70%  { opacity:1;   filter:brightness(2) drop-shadow(0 0 14px currentColor) drop-shadow(0 0 28px currentColor); }
    100% { opacity:1;   filter:brightness(1.3) drop-shadow(0 0 5px currentColor) drop-shadow(0 0 16px currentColor); }
}
@keyframes tap-rise {
    0%   { opacity:0; transform:translateY(22px) skewY(2deg); filter:blur(5px); }
    65%  { opacity:1; transform:translateY(-1px) skewY(0deg); filter:blur(0); }
    100% { opacity:1; transform:translateY(0) skewY(0); }
}
@keyframes tap-stamp {
    0%   { opacity:0; transform:scale(3) rotate(-2deg); filter:blur(4px); }
    50%  { opacity:1; transform:scale(0.97) rotate(0.5deg); filter:blur(0); }
    72%  { opacity:1; transform:scale(1.02); }
    100% { opacity:1; transform:scale(1) rotate(0); }
}
@keyframes tap-splitReveal {
    0%   { opacity:0; letter-spacing:0.35em; }
    65%  { opacity:1; letter-spacing:0.02em; }
    100% { opacity:1; letter-spacing:normal; }
}
@keyframes tap-pixelate {
    0%   { opacity:0; filter:blur(10px); transform:scale(1.05); }
    60%  { opacity:1; filter:blur(1px);  transform:scale(1.01); }
    100% { opacity:1; filter:blur(0);    transform:scale(1); }
}

    40%  { opacity:0.9; text-shadow: 0 0 4px currentColor, 0 0 12px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 4px currentColor, 0 0 12px currentColor, 0 0 24px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 2px currentColor, 0 0 6px currentColor; }
}
    40%  { opacity:0.8; text-shadow: 0 0 4px currentColor, 0 0 10px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 4px currentColor, 0 0 10px currentColor, 0 0 20px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 2px currentColor, 0 0 10px currentColor; }
}
    40%  { opacity:0.9; text-shadow: 0 0 6px currentColor, 0 0 20px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 6px currentColor, 0 0 20px currentColor, 0 0 40px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 3px currentColor, 0 0 12px currentColor; }
}
    40%  { opacity:0.8; text-shadow: 0 0 6px currentColor, 0 0 16px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 6px currentColor, 0 0 16px currentColor, 0 0 32px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 3px currentColor, 0 0 16px currentColor; }
}
    40%  { opacity:0.9; text-shadow: 0 0 8px currentColor, 0 0 30px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 8px currentColor, 0 0 30px currentColor, 0 0 60px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 5px currentColor, 0 0 20px currentColor; }
}
    40%  { opacity:0.8; text-shadow: 0 0 8px currentColor, 0 0 24px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 8px currentColor, 0 0 24px currentColor, 0 0 48px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 4px currentColor, 0 0 24px currentColor; }
}
    40%  { opacity:0.9; text-shadow: 0 0 14px currentColor, 0 0 50px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 14px currentColor, 0 0 50px currentColor, 0 0 90px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 8px currentColor, 0 0 32px currentColor; }
}
    40%  { opacity:0.8; text-shadow: 0 0 12px currentColor, 0 0 36px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 12px currentColor, 0 0 36px currentColor, 0 0 72px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 6px currentColor, 0 0 36px currentColor; }
}
    40%  { opacity:0.9; text-shadow: 0 0 20px currentColor, 0 0 80px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 20px currentColor, 0 0 80px currentColor, 0 0 160px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 12px currentColor, 0 0 50px currentColor; }
}
    40%  { opacity:0.8; text-shadow: 0 0 16px currentColor, 0 0 50px currentColor; }
    70%  { opacity:1;   text-shadow: 0 0 16px currentColor, 0 0 50px currentColor, 0 0 100px currentColor; }
    100% { opacity:1;   text-shadow: 0 0 8px currentColor, 0 0 50px currentColor; }
}
