/* ==========================================================================
   KUTAY OS — page motion (js/apps/page-motion.js)
   Reveal, pulse and swap states. Opacity/transform only; content is
   visible unless JS has marked the root .rv-ready, and base.css's
   reduced-motion rules cancel every animation/transition here.
   ========================================================================== */

.rv-ready .rv { opacity: 0; transform: translate3d(0, 18px, 0); }
.rv-ready .rv.rv-in {
  opacity: 1; transform: none;
  transition: opacity .6s var(--ease-out), transform .7s cubic-bezier(.18, .9, .24, 1);
  transition-delay: var(--rv-delay, 0ms);
}

.is-swapping { opacity: 0 !important; transform: translate3d(0, 6px, 0); }
.swap-fade { transition: opacity .14s ease, transform .2s var(--ease-out); }

@keyframes pm-pulse { 0% { transform: scale(1); } 40% { transform: scale(1.06); } 100% { transform: scale(1); } }
.is-pulse { animation: pm-pulse .36s cubic-bezier(.2, 1.4, .4, 1); }

@keyframes pm-rise { from { opacity: 0; transform: translate3d(0, 10px, 0); } }
@keyframes pm-shake { 20%, 60% { transform: translateX(-4px); } 40%, 80% { transform: translateX(4px); } }

@media (prefers-reduced-motion: reduce) {
  .rv-ready .rv { opacity: 1; transform: none; }
}
.reduce-motion .rv-ready .rv { opacity: 1; transform: none; }
