@keyframes txjCardEnter {
  from {
    opacity: 0;
    transform: translateY(16px) scale(0.97);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

.txj-animate-card-enter {
  animation: txjCardEnter 0.35s var(--txj-ease-soft) both;
}

@keyframes txjFadeSlideUp {
  from {
    opacity: 0;
    transform: translateY(12px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes txjHeartbeat {
  0%, 100% {
    transform: scale(1);
  }
  15% {
    transform: scale(1.15);
  }
  30% {
    transform: scale(1);
  }
  45% {
    transform: scale(1.08);
  }
  60% {
    transform: scale(1);
  }
}

.txj-animate-heartbeat {
  animation: txjHeartbeat 2s ease-in-out infinite;
  display: inline-block;
}

@keyframes txjGlowPulse {
  0%, 100% {
    opacity: 0.4;
  }
  50% {
    opacity: 0.7;
  }
}

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

.txj-animate-fade-in {
  animation: txjFadeIn 0.3s var(--txj-ease-soft) both;
}

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

.txj-animate-scale-in {
  animation: txjScaleIn 0.3s var(--txj-ease-soft) both;
}

.txj-animate-stagger > *:nth-child(1) { animation-delay: 0ms; }
.txj-animate-stagger > *:nth-child(2) { animation-delay: 50ms; }
.txj-animate-stagger > *:nth-child(3) { animation-delay: 100ms; }
.txj-animate-stagger > *:nth-child(4) { animation-delay: 150ms; }
.txj-animate-stagger > *:nth-child(5) { animation-delay: 200ms; }
.txj-animate-stagger > *:nth-child(6) { animation-delay: 250ms; }
.txj-animate-stagger > *:nth-child(7) { animation-delay: 300ms; }
.txj-animate-stagger > *:nth-child(8) { animation-delay: 350ms; }
.txj-animate-stagger > *:nth-child(9) { animation-delay: 400ms; }
.txj-animate-stagger > *:nth-child(10) { animation-delay: 450ms; }

@media (prefers-reduced-motion: reduce) {
  .txj-animate-card-enter,
  .txj-animate-heartbeat,
  .txj-animate-fade-in,
  .txj-animate-scale-in,
  .txj-animate-stagger > *,
  .txj-tab-panel {
    animation: none !important;
    transition-duration: 0.01ms !important;
  }
}
