@keyframes slideUp {
  from { transform: translateY(0); opacity: 1; }
  to { transform: translateY(-100%); opacity: 0; }
}

@keyframes slideDown {
  from { transform: translateY(0); opacity: 1; }
  to { transform: translateY(100%); opacity: 0; }
}

@keyframes fadeOut {
  from { opacity: 1; }
  to { opacity: 0; }
}

@keyframes zoomOut {
  from { transform: scale(1); opacity: 1; }
  to { transform: scale(0); opacity: 0; }
}

@keyframes spinOut {
  from { transform: rotate(0deg); opacity: 1; }
  to { transform: rotate(360deg); opacity: 0; }
}

@keyframes fadeSlideUp {
  from { opacity: 1; transform: translateY(0); }
  to { opacity: 0; transform: translateY(-100%); }
}

@keyframes fadeSlideDown {
  from { opacity: 1; transform: translateY(0); }
  to { opacity: 0; transform: translateY(100%); }
}

@keyframes fadeZoomOut {
  from { opacity: 1; transform: scale(1); }
  to { opacity: 0; transform: scale(0); }
}

@keyframes fadeRotateOut {
  from { opacity: 1; transform: rotate(0deg); }
  to { opacity: 0; transform: rotate(360deg); }
}

@keyframes fadeOutLeft {
  from { opacity: 1; transform: translateX(0); }
  to { opacity: 0; transform: translateX(-100%); }
}

@keyframes fadeOutRight {
  from { opacity: 1; transform: translateX(0); }
  to { opacity: 0; transform: translateX(100%); }
}

@keyframes fadeOutDiagonal {
  from { opacity: 1; transform: translate(0, 0); }
  to { opacity: 0; transform: translate(100%, 100%); }
}

@keyframes fadeOutSpiral {
  from { opacity: 1; transform: rotate(0deg) scale(1); }
  to { opacity: 0; transform: rotate(720deg) scale(0); }
}

@keyframes fadeOutBounce {
  0% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.5; transform: scale(1.2); }
  100% { opacity: 0; transform: scale(0); }
}

/* New simple fade in keyframe */
@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 0.8; }
}

/* New animation for floating effect (up 2px, down 2px) - Must combine with centering transform */
@keyframes floatVertical {
    0% { transform: translateX(-50%) translateY(0); }
    50% { transform: translateX(-50%) translateY(-2px); }
    100% { transform: translateX(-50%) translateY(0); }
}

/* New animation for floating effect (2px up, 2px down past original point) */
@keyframes floatSlow {
    0% { transform: translateY(2px); } /* Start 2px DOWN from origin */
    50% { transform: translateY(-2px); } /* Move 2px UP past origin */
    100% { transform: translateY(2px); } /* Return to 2px DOWN from origin */
}

/* New pulse animation for slideshow pause button */
@keyframes pulseExpand {
    /* Radiating circle travels ~10–15px outward via scale */
    0% {
        transform: translate(-50%, -50%) scale(1);
        opacity: 0.7;
    }
    50% {
        transform: translate(-50%, -50%) scale(1.25);
        opacity: 1;
    }
    100% {
        transform: translate(-50%, -50%) scale(1);
        opacity: 0.7;
    }
}

/* NEW: Vertical float 5px */
@keyframes floatVertical5px {
    /* Reduced total travel to ~3px (±1.5px from center) */
    0% { transform: translateY(1.5px); }
    50% { transform: translateY(-1.5px); }
    100% { transform: translateY(1.5px); }
}

/* NEW: Vertical float exactly 5px travel (±2.5px) for fullscreen pause button */
@keyframes floatVertical5 {
    0%   { transform: translateY(2.5px); }
    50%  { transform: translateY(-2.5px); }
    100% { transform: translateY(2.5px); }
}



.closing {
  animation-duration: 0.5s;
  animation-fill-mode: forwards;
}

.closing-slideUp { animation-name: slideUp; }
.closing-slideDown { animation-name: slideDown; }
.closing-fadeOut { animation-name: fadeOut; }
.closing-zoomOut { animation-name: zoomOut; }
.closing-spinOut { animation-name: spinOut; }

/* Idle carousel line entrance animation (kept for backward compatibility) */
@keyframes idleLineIn {
  0%   { opacity: 0; transform: translateY(8px); }
  60%  { opacity: 1; transform: translateY(0); }
  100% { opacity: 1; transform: translateY(0); }
}

.category-idle-carousel.idle-line-in {
  animation: idleLineIn 0.9s ease-out;
}

/* NEW: Idle carousel per-letter upward animation */
@keyframes idleLetterUp {
  0% {
    opacity: 0;
    transform: translateY(14px);
  }
  60% {
    opacity: 1;
    transform: translateY(-2px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

.idle-letter {
  display: inline-block;
  opacity: 0;
  transform: translateY(14px);
}

.idle-letter-up {
  animation: idleLetterUp 0.4s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

/* NEW: Hollywood-style splash-in animations for category letters */
@keyframes categorySplashUp {
  0%   { opacity: 0; transform: translateY(20px) scale(0.6) rotate(-10deg); }
  60%  { opacity: 1; transform: translateY(-4px) scale(1.08) rotate(3deg); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes categorySplashDown {
  0%   { opacity: 0; transform: translateY(-20px) scale(0.6) rotate(10deg); }
  60%  { opacity: 1; transform: translateY(4px) scale(1.08) rotate(-3deg); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes categorySplashLeft {
  0%   { opacity: 0; transform: translateX(24px) scale(0.6) rotate(12deg); }
  60%  { opacity: 1; transform: translateX(-3px) scale(1.05) rotate(-4deg); }
  100% { opacity: 1; transform: translateX(0) scale(1); }
}

@keyframes categorySplashRight {
  0%   { opacity: 0; transform: translateX(-24px) scale(0.6) rotate(-12deg); }
  60%  { opacity: 1; transform: translateX(3px) scale(1.05) rotate(4deg); }
  100% { opacity: 1; transform: translateX(0) scale(1); }
}

@keyframes categorySplashZoom {
  0%   { opacity: 0; transform: scale(0.2) rotate(0deg); }
  50%  { opacity: 1; transform: scale(1.2) rotate(6deg); }
  100% { opacity: 1; transform: scale(1); }
}

.category-letter-splash-up {
  animation: categorySplashUp 0.45s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.category-letter-splash-down {
  animation: categorySplashDown 0.45s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.category-letter-splash-left {
  animation: categorySplashLeft 0.45s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.category-letter-splash-right {
  animation: categorySplashRight 0.45s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.category-letter-splash-zoom {
  animation: categorySplashZoom 0.45s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

/* NEW: Subject role letter animation (used in slideshow top bar) */
@keyframes ssRoleLetterIn {
  0% {
    opacity: 0;
    transform: translateY(12px) scale(0.9);
  }
  60% {
    opacity: 1;
    transform: translateY(-3px) scale(1.05);
  }
  100% {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

.ss-role-letter {
  display: inline-block;
  opacity: 0;
  transform: translateY(12px);
  animation: ssRoleLetterIn 0.35s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}