/* ========================================
   Nuvem WP Performance — Frontend CSS
   ========================================
   Scroll reveal animations and entrance effects.
   ======================================== */

/* ========================================
   Reusable Scroll Reveal Utility
   ========================================
   Usage: Add class to any Divi section/row/module CSS Class field.

   .nuvem-reveal           — fade-up children with stagger
   .nuvem-reveal-self      — fade-up the element itself (no children)

   Speed modifiers (combine with above):
   .nuvem-reveal-fast      — 0.3s duration, 30ms stagger
   .nuvem-reveal-slow      — 0.8s duration, 80ms stagger

   Direction modifiers:
   .nuvem-reveal-left      — slide from left
   .nuvem-reveal-right     — slide from right
   ======================================== */

/* Children mode: hide direct children (non-Divi containers) */
.nuvem-reveal:not(.et_pb_section):not(.et_pb_row) > * {
	opacity: 0;
	transform: translateY(20px);
}

/* Divi containers: JS adds nuvem-reveal-item to actual modules */
.nuvem-reveal-item {
	opacity: 0;
	transform: translateY(20px);
}

/* Self mode: hide the element itself */
.nuvem-reveal-self {
	opacity: 0;
	transform: translateY(20px);
}

/* Transition only activates when ready to animate (JS adds nuvem-reveal-ready) */
.nuvem-reveal-ready {
	transition:
		opacity 0.5s ease-out,
		transform 0.5s ease-out;
}

/* Revealed state */
.nuvem-reveal:not(.et_pb_section):not(.et_pb_row) > *.nuvem-revealed,
.nuvem-reveal-item.nuvem-revealed,
.nuvem-reveal-self.nuvem-revealed {
	opacity: 1;
	transform: translateY(0);
}

/* Speed: Fast (only when ready to animate) */
.nuvem-reveal-fast .nuvem-reveal-ready {
	transition-duration: 0.3s;
}

.nuvem-reveal-fast.nuvem-reveal-self.nuvem-reveal-ready {
	transition-duration: 0.3s;
}

/* Speed: Slow (only when ready to animate) */
.nuvem-reveal-slow .nuvem-reveal-ready {
	transition-duration: 0.8s;
}

.nuvem-reveal-slow.nuvem-reveal-self.nuvem-reveal-ready {
	transition-duration: 0.8s;
}

/* Direction: Left */
.nuvem-reveal-left > *,
.nuvem-reveal-left .nuvem-reveal-item {
	transform: translateX(-30px);
}

.nuvem-reveal-left > *.nuvem-revealed,
.nuvem-reveal-left .nuvem-reveal-item.nuvem-revealed {
	transform: translateX(0);
}

.nuvem-reveal-left.nuvem-reveal-self {
	transform: translateX(-30px);
}

.nuvem-reveal-left.nuvem-reveal-self.nuvem-revealed {
	transform: translateX(0);
}

/* Direction: Right */
.nuvem-reveal-right > *,
.nuvem-reveal-right .nuvem-reveal-item {
	transform: translateX(30px);
}

.nuvem-reveal-right > *.nuvem-revealed,
.nuvem-reveal-right .nuvem-reveal-item.nuvem-revealed {
	transform: translateX(0);
}

.nuvem-reveal-right.nuvem-reveal-self {
	transform: translateX(30px);
}

.nuvem-reveal-right.nuvem-reveal-self.nuvem-revealed {
	transform: translateX(0);
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
	.nuvem-reveal > *,
	.nuvem-reveal-item,
	.nuvem-reveal-self {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

/* ----------------------------------------
   Fallbacks
   ---------------------------------------- */

/* No-JS fallback — show everything if JavaScript fails to load */
html:not(.nuvem-js) .nuvem-reveal > *,
html:not(.nuvem-js) .nuvem-reveal-item,
html:not(.nuvem-js) .nuvem-reveal-self {
	opacity: 1;
	transform: none;
	transition: none;
}

/* Divi Visual Builder — disable all reveal animations so content stays visible */
.et-fb .nuvem-reveal > *,
.et-fb .nuvem-reveal-item,
.et-fb .nuvem-reveal-self {
	opacity: 1 !important;
	transform: none !important;
	transition: none !important;
}
