/* fade-in-up */
@keyframes fadeInUp {
  from { opacity: 0; transform: translate3d(0, 16px, 0); }
  to   { opacity: 1; transform: translate3d(0, 0, 0); }
}
.reveal { opacity: 0; }
.reveal.is-visible { animation: fadeInUp 700ms cubic-bezier(.2,.7,.2,1) both; }

/* fade-in-right */
@keyframes fadeInRight {
  from { opacity: 0; transform: translate3d(-24px, 0, 0); }
  to   { opacity: 1; transform: translate3d(0, 0, 0); }
}
.reveal-right { opacity: 0; }
.reveal-right.is-visible { animation: fadeInRight 800ms cubic-bezier(.2,.7,.2,1) both; }

/* stagger-children */
.stagger > * {
  opacity: 0; transform: translate3d(0, 12px, 0);
  transition: opacity .6s, transform .6s;
  transition-delay: calc(var(--stagger-i, 0) * 80ms);
}
.stagger.is-visible > * { opacity: 1; transform: none; }

/* stat-counter */
.stat-number { opacity: 0; transition: opacity .6s ease; }
.stat-number.is-visible { opacity: 1; }

/* divider-draw */
@keyframes drawLine {
  from { transform: scaleX(0); } to { transform: scaleX(1); }
}
.divider { height: 2px; background: currentColor; transform: scaleX(0);
  transform-origin: left; opacity: .6; }
.divider.is-visible { animation: drawLine .9s cubic-bezier(.2,.7,.2,1) both; }