.glow-cyan   { color:#fff; text-shadow:0 0 5px #fff, 0 0 10px #0ff, 0 0 20px #0ff, 0 0 40px #0ff; }
.glow-pink   { color:#fff; text-shadow:0 0 5px #fff, 0 0 10px #f0f, 0 0 20px #f0f, 0 0 40px #f0f; }
.glow-green  { color:#fff; text-shadow:0 0 5px #fff, 0 0 10px #0f0, 0 0 20px #0f0, 0 0 40px #0f0; }

.outline { color:#fff; text-shadow:2px 2px 0 #000, -2px -2px 0 #000, 2px -2px 0 #000, -2px 2px 0 #000; }

.glow-outline { color:#fff; text-shadow:2px 2px 0 #000, -2px -2px 0 #000, 0 0 12px #0ff, 0 0 24px #0ff; }

.color-change { animation: colorcycle 3s linear infinite; }
@keyframes colorcycle {
  0%{color:#ff0000;} 17%{color:#ff7f00;} 33%{color:#ffff00;} 50%{color:#00ff00;} 67%{color:#0000ff;} 83%{color:#8b00ff;} 100%{color:#ff0000;}
}

.rainbow {
  font-weight:bold;
  background:linear-gradient(90deg,#f00,#ff7f00,#ff0,#0f0,#00f,#8b00ff,#f00);
  background-size:400% auto;
  -webkit-background-clip:text;
  background-clip:text;
  -webkit-text-fill-color:transparent;
  color:transparent;
  animation:rainbowslide 3s linear infinite;
}
@keyframes rainbowslide {
  from { background-position:0% center; }
  to   { background-position:400% center; }
}

.pulse { color:#f0f; animation:pulse 0.8s infinite alternate; }
@keyframes pulse {
  from { text-shadow:0 0 4px #f0f; }
  to   { text-shadow:0 0 22px #f0f, 0 0 40px #f0f; }
}

.spin { animation:spin 2s linear infinite; display:inline-block; }
@keyframes spin { to { transform:rotate(360deg); } }

.wiggle { animation:wiggle 0.5s infinite alternate; display:inline-block; }
@keyframes wiggle { from{transform:rotate(-4deg);} to{transform:rotate(4deg);} }

.color-cycle-img { animation:huecycle 4s linear infinite; }
@keyframes huecycle { to { filter:hue-rotate(360deg); } }
.gray    { filter:grayscale(100%); }
.cursed  { filter:invert(100%) hue-rotate(90deg) contrast(150%); }