.fade-up { animation: fadeUp .7s ease both; }
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(24px); }
  to { opacity: 1; transform: translateY(0); }
}

.ripple { position: relative; overflow: hidden; }
.ripple:after {
  content: "";
  position: absolute; inset: 0;
  background: rgba(255,255,255,.18);
  transform: scale(0); border-radius: 999px; animation: ripple .5s ease-out;
  pointer-events: none;
}
@keyframes ripple {
  from { transform: scale(0); opacity: .4; }
  to { transform: scale(2.5); opacity: 0; }
}

.lazy-loading { opacity: 0; transition: opacity .45s ease; }
.lazy-loading.is-loaded { opacity: 1; }
