/**
 * CSS núcleo del frontend: solo lo esencial compartido por todos los módulos.
 * Cada módulo trae su propio CSS específico (colores, forma, contenido).
 */

.bcfw-widgets-root {
	--bcfw-speed: 2.5s;
}

body.bcfw-modal-open {
	overflow: hidden;
}

.bcfw-floating-btn {
	will-change: transform, box-shadow;
}

/* ---------- Librería de animaciones (todas CSS puro, ligeras) ----------
   !important en "animation"/"transform": estas clases genéricas
   (especificidad de una sola clase) suelen perder frente a resets de botón
   de temas/page builders (ej. ".elementor-button", "button.theme-btn",
   con mayor especificidad o cargados después), que es la causa típica de
   que la animación configurada en el panel "no se aplique" en el frontend.
   Como el valor real siempre sale del tipo de animación elegido por el
   admin, forzar aquí no inventa ningún efecto: solo garantiza que el
   configurado gane. */

@keyframes bcfw-pulse {
	0%, 100% { transform: scale(1); }
	50% { transform: scale(1.06); }
}
.bcfw-anim-pulse {
	animation: bcfw-pulse var(--bcfw-donation-speed, 2.5s) ease-in-out infinite !important;
}

/* Glow: halo de color alrededor del botón. Usa --bcfw-donation-glow (color
   configurado por el admin, con reserva en blanco) en vez de un blanco fijo,
   para que se note también sobre fondos claros o botones de color claro. */
@keyframes bcfw-glow {
	0%, 100% { box-shadow: 0 0 0 0 transparent; }
	50% {
		box-shadow:
			0 0 0 4px var(--bcfw-donation-glow, rgba(255, 255, 255, .6)),
			0 0 30px 10px var(--bcfw-donation-glow, rgba(255, 255, 255, .6));
	}
}
.bcfw-anim-glow {
	animation: bcfw-glow var(--bcfw-donation-speed, 2.5s) ease-in-out infinite !important;
}

/* Neon glow: versión más intensa/saturada del glow, con varias capas de
   resplandor (efecto tubo de neón). */
@keyframes bcfw-neon {
	0%, 100% {
		box-shadow:
			0 0 6px var(--bcfw-donation-glow, #fff),
			0 0 14px var(--bcfw-donation-glow, #fff),
			0 0 24px var(--bcfw-donation-glow, #fff);
	}
	50% {
		box-shadow:
			0 0 10px var(--bcfw-donation-glow, #fff),
			0 0 26px var(--bcfw-donation-glow, #fff),
			0 0 50px 8px var(--bcfw-donation-glow, #fff),
			0 0 80px 14px var(--bcfw-donation-glow, #fff);
	}
}
.bcfw-anim-neon {
	animation: bcfw-neon var(--bcfw-donation-speed, 2.5s) ease-in-out infinite !important;
}

@keyframes bcfw-shine {
	0% { filter: brightness(1) saturate(1); }
	50% { filter: brightness(1.45) saturate(1.3); }
	100% { filter: brightness(1) saturate(1); }
}
.bcfw-anim-shine {
	animation: bcfw-shine var(--bcfw-donation-speed, 2.5s) ease-in-out infinite !important;
}

@keyframes bcfw-float {
	0%, 100% { transform: translateY(0); }
	50% { transform: translateY(-9px); }
}
.bcfw-anim-float {
	animation: bcfw-float var(--bcfw-donation-speed, 2.5s) ease-in-out infinite !important;
}

@keyframes bcfw-breathe {
	0%, 100% { transform: scale(1); opacity: 1; }
	50% { transform: scale(1.06); opacity: .85; }
}
.bcfw-anim-breathe {
	animation: bcfw-breathe var(--bcfw-donation-speed, 2.5s) ease-in-out infinite !important;
}

.bcfw-anim-hover-lift {
	transition: transform .25s ease !important;
}
.bcfw-anim-hover-lift:hover {
	transform: translateY(-4px) !important;
}

.bcfw-anim-hover-scale {
	transition: transform .25s ease !important;
}
.bcfw-anim-hover-scale:hover {
	transform: scale(1.06) !important;
}

@media (prefers-reduced-motion: reduce) {
	/* Con !important arriba, esta excepción de accesibilidad necesita
	   !important también para poder seguir ganando. */
	.bcfw-anim-pulse,
	.bcfw-anim-glow,
	.bcfw-anim-neon,
	.bcfw-anim-shine,
	.bcfw-anim-float,
	.bcfw-anim-breathe {
		animation: none !important;
	}
	.bcfw-anim-hover-lift:hover,
	.bcfw-anim-hover-scale:hover {
		transform: none !important;
	}
}
