/* glowtint-all-20260720: every glow effect (neon/backlight/halo/hover-glow/hover-neon/loop-glow) reads var(--vfx-glow,<accent>) so the Effects "Effect glow tint" recolours ALL glows; with no tint set each is pixel-identical to before (accent fallback). Deliberately excludes multi-colour cycling (neonshift/colorpulse). */
.vfx-fx-neon { filter: drop-shadow(0 0 4px var(--vfx-glow,var(--vc-accent,#ec6b1c))) drop-shadow(0 0 12px var(--vfx-glow,var(--vc-accent,#ec6b1c))); }
.vfx-fx-backlight { filter: drop-shadow(0 0 28px var(--vfx-glow,var(--vc-accent,#ec6b1c))); }
.vfx-fx-soft { filter: drop-shadow(rgba(0, 0, 0, 0.5) 0px 6px 14px); }
.vfx-fx-halo { filter: drop-shadow(0 0 2px #fff) drop-shadow(0 0 16px var(--vfx-glow,var(--vc-accent,#ec6b1c))); }
.vfx-fx-blur { filter: blur(2px); }
.vfx-fx-bright { filter: brightness(1.25) contrast(1.08); }
.vfx-fx-vivid { filter: saturate(1.7); }
.vfx-fx-gray { filter: grayscale(1); }
.vfx-fx-sepia { filter: sepia(0.7); }
.vfx-fx-invert { filter: invert(1); }
.vfx-fx-dream { filter: blur(0.6px) brightness(1.15) saturate(1.3); }
.vfx-fx-hue { animation: 6s linear 0s infinite normal none running vfxHue; }
.vfx-hover-glow { transition: filter 0.25s; }
.vfx-hover-glow:hover { filter: drop-shadow(0 0 12px var(--vfx-glow,var(--vc-accent,#ec6b1c))); }
.vfx-hover-grow { transition: scale 0.2s; }
.vfx-hover-grow:hover { scale: 1.07; }
.vfx-hover-shrink { transition: scale 0.2s; }
.vfx-hover-shrink:hover { scale: 0.94; }
.vfx-hover-lift { transition: translate 0.2s, filter 0.2s; }
.vfx-hover-lift:hover { translate: 0px -7px; filter: drop-shadow(rgba(0, 0, 0, 0.42) 0px 12px 18px); }
.vfx-hover-tilt { transition: rotate 0.2s; }
.vfx-hover-tilt:hover { rotate: -3deg; }
.vfx-hover-bright { transition: filter 0.2s; }
.vfx-hover-bright:hover { filter: brightness(1.3); }
.vfx-hover-pop { transition: scale 0.2s, filter 0.2s; }
.vfx-hover-pop:hover { scale: 1.05; filter: saturate(1.5); }
.vfx-hover-neon { transition: filter 0.25s; }
.vfx-hover-neon:hover { filter: drop-shadow(0 0 4px var(--vfx-glow,var(--vc-accent,#ec6b1c))) drop-shadow(0 0 15px var(--vfx-glow,var(--vc-accent,#ec6b1c))); }
.vfx-anim-fade { animation: 0.7s ease 0s 1 normal both running vfxFade; }
.vfx-anim-blurin { animation: 0.75s ease 0s 1 normal both running vfxBlurIn; }
.vfx-anim-pop { animation: 0.55s ease 0s 1 normal both running vfxPop; }
.vfx-anim-slideup { animation: 0.7s ease 0s 1 normal both running vfxSlideUp; }
.vfx-anim-slidedown { animation: 0.7s ease 0s 1 normal both running vfxSlideDown; }
.vfx-anim-slideleft { animation: 0.7s ease 0s 1 normal both running vfxSlideL; }
.vfx-anim-slideright { animation: 0.7s ease 0s 1 normal both running vfxSlideR; }
.vfx-anim-zoom { animation: 0.6s ease 0s 1 normal both running vfxZoom; }
.vfx-anim-drop { animation: 0.8s ease 0s 1 normal both running vfxDrop; }
.vfx-anim-flipin { animation: 0.8s ease 0s 1 normal both running vfxFlip; }
.vfx-loop-float { animation: 3.4s ease-in-out 0s infinite normal none running vfxFloat; }
.vfx-loop-pulse { animation: 2s ease-in-out 0s infinite normal none running vfxPulse; }
.vfx-loop-glow { animation: 2.2s ease-in-out 0s infinite normal none running vfxGlowPulse; }
.vfx-loop-flicker { animation: 3.6s linear 0s infinite normal none running vfxFlicker; }
.vfx-loop-wobble { animation: 4s ease-in-out 0s infinite normal none running vfxWobble; }
.vfx-loop-sway { animation: 5s ease-in-out 0s infinite normal none running vfxSway; }
.vfx-loop-spin { animation: 9s linear 0s infinite normal none running vfxSpin; }
.vfx-loop-breathe { animation: 4s ease-in-out 0s infinite normal none running vfxBreathe; }
.vfx-loop-jelly { animation: 3s ease-in-out 0s infinite normal none running vfxJelly; }
@keyframes vfxHue { 
  100% { filter: hue-rotate(360deg); }
}
@keyframes vfxFade { 
  0% { opacity: 0; }
  100% { opacity: 1; }
}
@keyframes vfxBlurIn { 
  0% { opacity: 0; filter: blur(14px); }
  100% { opacity: 1; filter: blur(0px); }
}
@keyframes vfxPop { 
  0% { opacity: 0; scale: 0.6; }
  70% { scale: 1.08; }
  100% { opacity: 1; scale: 1; }
}
@keyframes vfxSlideUp { 
  0% { opacity: 0; translate: 0px 38px; }
  100% { opacity: 1; translate: 0px; }
}
@keyframes vfxSlideDown { 
  0% { opacity: 0; translate: 0px -38px; }
  100% { opacity: 1; translate: 0px; }
}
@keyframes vfxSlideL { 
  0% { opacity: 0; translate: -44px; }
  100% { opacity: 1; translate: 0px; }
}
@keyframes vfxSlideR { 
  0% { opacity: 0; translate: 44px; }
  100% { opacity: 1; translate: 0px; }
}
@keyframes vfxZoom { 
  0% { opacity: 0; scale: 0.8; }
  100% { opacity: 1; scale: 1; }
}
@keyframes vfxDrop { 
  0% { opacity: 0; translate: 0px -54px; }
  60% { translate: 0px 9px; }
  100% { opacity: 1; translate: 0px; }
}
@keyframes vfxFlip { 
  0% { opacity: 0; rotate: x 90deg; }
  100% { opacity: 1; }
}
@keyframes vfxFloat { 
  50% { translate: 0px -12px; }
}
@keyframes vfxPulse { 
  50% { scale: 1.05; }
}
@keyframes vfxGlowPulse { 
  0%, 100% { filter: drop-shadow(0 0 3px var(--vfx-glow,var(--vc-accent,#ec6b1c))); }
  50% { filter: drop-shadow(0 0 17px var(--vfx-glow,var(--vc-accent,#ec6b1c))); }
}
@keyframes vfxFlicker { 
  0%, 19%, 21%, 23%, 80%, 100% { opacity: 1; }
  20%, 22%, 55% { opacity: 0.35; }
}
@keyframes vfxWobble { 
  0%, 100% { rotate: 0deg; }
  25% { rotate: 2.5deg; }
  75% { rotate: -2.5deg; }
}
@keyframes vfxSway { 
  0%, 100% { translate: -8px; }
  50% { translate: 8px; }
}
@keyframes vfxSpin { 
  100% { rotate: 360deg; }
}
@keyframes vfxBreathe { 
  0%, 100% { opacity: 0.7; }
  50% { opacity: 1; }
}
@keyframes vfxJelly { 
  0%, 100% { scale: 1; }
  30% { scale: 1.08 0.92; }
  60% { scale: 0.95 1.05; }
}

/* BH-FX-EXT v1 — text-colour + Berlin effects (loop axis). Added for BuzzHive Vibe Studio. */
@keyframes vfxRainbow{to{background-position:200% center;}}
@keyframes vfxGradFlow{to{background-position:200% center;}}
@keyframes vfxNeonShift{0%,100%{color:#00e5ff;text-shadow:0 0 6px #00e5ff,0 0 13px #00e5ff;}50%{color:#ff2bd6;text-shadow:0 0 6px #ff2bd6,0 0 13px #ff2bd6;}}
@keyframes vfxColorPulse{0%,100%{filter:saturate(1) brightness(1);}50%{filter:saturate(1.85) brightness(1.22);}}
@keyframes vfxGlitch{0%{text-shadow:2px 0 #ff2bd6,-2px 0 #00e5ff;translate:0 0;}20%{text-shadow:-2px 0 #ff2bd6,2px 0 #00e5ff;translate:-1px 1px;}40%{text-shadow:2px 0 #ff2bd6,-2px 0 #00e5ff;translate:1px -1px;}60%{text-shadow:-1px 0 #ff2bd6,1px 0 #00e5ff;translate:1px 1px;}80%{text-shadow:1px 0 #ff2bd6,-1px 0 #00e5ff;translate:-1px 0;}100%{text-shadow:2px 0 #ff2bd6,-2px 0 #00e5ff;translate:0 0;}}
@keyframes vfxStrobe{0%,100%{text-shadow:0 0 3px currentColor;}47%{text-shadow:0 0 4px currentColor;}50%{text-shadow:0 0 16px currentColor,0 0 28px currentColor,0 0 40px currentColor;}53%{text-shadow:0 0 4px currentColor;}}
@keyframes vfxSweep{0%{left:-70%;}55%,100%{left:130%;}}
@keyframes vfxScan{to{background-position:0 240px;}}
.vfx-loop-rainbow{background-image:linear-gradient(90deg,#ff3b3b,#ff9f1c,#ffe600,#38d16f,#00c2ff,#8b5cff,#ff3b3b);background-size:200% auto;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent!important;color:transparent!important;animation:vfxRainbow 4s linear infinite;}
.vfx-loop-gradflow{background-image:linear-gradient(90deg,#7c4dff,#00e5ff,#7c4dff);background-size:200% auto;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent!important;color:transparent!important;animation:vfxGradFlow 3.5s linear infinite;}
.vfx-loop-neonshift{animation:vfxNeonShift 3s ease-in-out infinite;}
.vfx-loop-colorpulse{animation:vfxColorPulse 2s ease-in-out infinite;}
.vfx-loop-glitch{animation:vfxGlitch 1.6s steps(2,end) infinite;}
.vfx-loop-strobe{animation:vfxStrobe 1.8s ease-in-out infinite;}
.vfx-loop-sweep{position:relative;overflow:hidden;}
.vfx-loop-sweep::after{content:"";position:absolute;top:0;left:-70%;width:60%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-18deg);animation:vfxSweep 3.4s ease-in-out infinite;pointer-events:none;}
.vfx-loop-scanlines{position:relative;}
.vfx-loop-scanlines::after{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.11) 0,rgba(255,255,255,.11) 1px,transparent 1px,transparent 3px);animation:vfxScan 6s linear infinite;}

/* reducemotion-20260720 (#14): honor prefers-reduced-motion — neutralize every AUTO-running
   Vibe FX animation (entry anims + continuous loops + the flashing flicker/strobe/glitch/
   neonshift/colorpulse) so reduce-motion users don't get looping or flashing motion (WCAG
   2.2.2 pause/stop/hide + 2.3.1 flashing). Base styling (colour, gradient text, glow, filters)
   is untouched — only the motion is stopped; each element rests in its natural visible state.
   Brief user-initiated :hover transitions are intentionally left. */
@media (prefers-reduced-motion: reduce) {
  .vfx-fx-hue,
  .vfx-anim-fade, .vfx-anim-blurin, .vfx-anim-pop, .vfx-anim-slideup, .vfx-anim-slidedown,
  .vfx-anim-slideleft, .vfx-anim-slideright, .vfx-anim-zoom, .vfx-anim-drop, .vfx-anim-flipin,
  .vfx-loop-float, .vfx-loop-pulse, .vfx-loop-glow, .vfx-loop-flicker, .vfx-loop-wobble,
  .vfx-loop-sway, .vfx-loop-spin, .vfx-loop-breathe, .vfx-loop-jelly, .vfx-loop-rainbow,
  .vfx-loop-gradflow, .vfx-loop-neonshift, .vfx-loop-colorpulse, .vfx-loop-glitch,
  .vfx-loop-strobe, .vfx-loop-sweep, .vfx-loop-scanlines {
    animation: none !important;
  }
  .vfx-loop-sweep::after, .vfx-loop-scanlines::after { animation: none !important; }
}
