/* откъде: ново (README 15 го обещава; във v1 няма файл) */
:root {
  --nx-motion-t1: 150ms;
  --nx-motion-t2: 300ms;
  --nx-motion-t3: 500ms;
  --nx-motion-ease: cubic-bezier(.2, 0, 0, 1);
  --nx-motion-ease-in: cubic-bezier(.3, 0, 1, 1);
  --nx-motion-spring: cubic-bezier(.3, 1.25, .45, 1);
}

@media (prefers-reduced-motion: reduce) {
  :root { --nx-motion-t1: 0ms; --nx-motion-t2: 0ms; --nx-motion-t3: 0ms; }
}

/* 00-press */
.nx-press { transition: transform var(--nx-motion-t2) var(--nx-motion-spring); }
.nx-press:active { transform: scale(.96); transition-duration: var(--nx-motion-t1); transition-timing-function: var(--nx-motion-ease-in); }

/* 01-arrive */
.nx-arrive { animation: nx-arrive var(--nx-motion-t2) var(--nx-motion-ease) both; }
@keyframes nx-arrive { from { opacity: 0; transform: translateY(var(--nx-s5)); } }

/* 02-enter-leave */
.nx-enter { animation: nx-enter var(--nx-motion-t3) var(--nx-motion-spring); }
.nx-leave { animation: nx-leave var(--nx-motion-t2) var(--nx-motion-ease-in) forwards; }
@keyframes nx-enter { from { transform: translateY(100%); } }
@keyframes nx-leave { to { transform: translateY(100%); } }

/* 03-live */
.nx-live { animation: none; }

/* 04-waiting */
.nx-waiting { position: relative; overflow: hidden; }
.nx-waiting::after { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg, transparent, var(--nx-surface-1), transparent); transform: translateX(-100%); animation: nx-waiting calc(var(--nx-motion-t3) * 3) var(--nx-motion-ease) infinite; }
@keyframes nx-waiting { from { transform: translateX(-100%); } to { transform: translateX(100%); } }
