/* ==========================================================================
   NOVA — motion
   Restrained, purposeful entrance + micro-interactions. Fully disabled by the
   global prefers-reduced-motion rule in global.css.
   ========================================================================== */

/* View entrance (once per page render) */
@keyframes novaViewIn {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: none; }
}
.view.view-enter { animation: novaViewIn 320ms var(--ease) both; }

/* Opacity-only variant (used on mobile to keep text crisp) */
@keyframes novaFadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

/* Staggered list entrance */
@keyframes novaItemIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: none; }
}
.anim-in {
  animation: novaItemIn 420ms var(--ease) backwards;
  animation-delay: calc(var(--i, 0) * 32ms);
}

/* Favorite star pop */
@keyframes novaPop {
  0% { transform: scale(1); }
  45% { transform: scale(1.35) rotate(-8deg); }
  100% { transform: scale(1) rotate(0); }
}
.tool-tile__fav.is-pop svg { animation: novaPop 300ms var(--ease); }

/* Theme icon micro-bounce handled by the transition in components.css */
