/* ASHFALL Motion System foundation — plan 14 §A.
   NEW file (kept out of app.css to avoid contention with the parallel session).
   Provides easing tokens + opt-in helper classes/keyframes. Does NOT restyle
   existing elements; the big per-surface retrofit happens later, coordinated.
   Use via window.Anim (anim.js) or by adding classes. Honors reduced-motion. */
:root {
  --ease-out-quad: cubic-bezier(.25, .46, .45, .94);
  --ease-out-back: cubic-bezier(.34, 1.56, .64, 1);
  --ease-in-quad: cubic-bezier(.55, .085, .68, .53);
  --am-ui: 180ms;
  --am-emph: 320ms;
}
@keyframes am-pop { 0% { transform: scale(.85); opacity: 0 } 60% { transform: scale(1.04); opacity: 1 } 100% { transform: scale(1) } }
@keyframes am-rise { 0% { transform: translateY(14px); opacity: 0 } 100% { transform: translateY(0); opacity: 1 } }
@keyframes am-shake { 10%,90% { transform: translateX(-2px) } 20%,80% { transform: translateX(3px) } 30%,50%,70% { transform: translateX(-5px) } 40%,60% { transform: translateX(5px) } }
.am-pop { animation: am-pop var(--am-emph) var(--ease-out-back) }
.am-rise { animation: am-rise var(--am-emph) var(--ease-out-back) }
.am-shake { animation: am-shake .42s both }
.am-toast-in { animation: am-rise .34s var(--ease-out-back) }
@media (prefers-reduced-motion: reduce) { .am-pop, .am-rise, .am-shake, .am-toast-in { animation: none !important } }
/* gentle press feedback on standard buttons (state-based :active re-triggers reliably;
   scoped to buttons without a layout transform to avoid clobbering existing styles) */
.btn-primary, .btn-2, .btn-ghost, .atab, .set-quick-btn { transition: transform .09s var(--ease-out-quad) }
.btn-primary:active, .btn-2:active, .btn-ghost:active, .atab:active, .set-quick-btn:active { transform: scale(.95) }
@media (prefers-reduced-motion: reduce) { .btn-primary:active, .btn-2:active, .btn-ghost:active, .atab:active, .set-quick-btn:active { transform: none } }
