/* Animations — fade-in keyframe animation */

/* Slide-up entrance. Deliberately does NOT animate opacity: over the dark
   espresso heros a fading (semi-transparent) white card composites to a
   low-contrast state that an accessibility (axe) sweep catches mid-animation.
   A transform-only reveal keeps text fully opaque and readable throughout. */
.fade-in {
  animation: fadeIn 0.6s ease-out both;
}

@keyframes fadeIn {
  from { transform: translateY(16px); }
  to   { transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
  .fade-in { animation: none; }
}
