/* ========== Reveal animations ========== */
.reveal {
  clip-path: inset(0 100% 0 0);
  transition: clip-path 1.2s cubic-bezier(0.65, 0, 0.35, 1);
}
.reveal.in { clip-path: inset(0 0% 0 0); }

.fade-up {
  opacity: 0; transform: translateY(40px);
  transition: opacity .9s cubic-bezier(0.16,1,0.3,1), transform .9s cubic-bezier(0.16,1,0.3,1);
}
.fade-up.in { opacity: 1; transform: none; }

.fade-up.delay-1 { transition-delay: .15s; }
.fade-up.delay-2 { transition-delay: .3s; }
.fade-up.delay-3 { transition-delay: .45s; }
.fade-up.delay-4 { transition-delay: .6s; }

/* image tilt parallax */
.tilt {
  transform-style: preserve-3d;
  transition: transform .4s cubic-bezier(0.16,1,0.3,1);
  will-change: transform;
}

/* tab content fade */
.tab-content { display: none; opacity: 0; transition: opacity .4s ease; }
.tab-content.active { display: block; animation: tabFade .5s ease forwards; }
@keyframes tabFade { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
