@keyframes toast-in {
  from { opacity: 0; transform: translateY(12px) scale(.96); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes slide-up { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } }
@keyframes slide-down { from { opacity: 0; transform: translateY(-24px); } to { opacity: 1; transform: translateY(0); } }
@keyframes slide-left { from { opacity: 0; transform: translateX(24px); } to { opacity: 1; transform: translateX(0); } }
@keyframes slide-right { from { opacity: 0; transform: translateX(-24px); } to { opacity: 1; transform: translateX(0); } }
@keyframes zoom-in { from { opacity: 0; transform: scale(.9); } to { opacity: 1; transform: scale(1); } }
@keyframes bounce-in {
  0% { opacity: 0; transform: scale(.3); }
  50% { opacity: 1; transform: scale(1.05); }
  70% { transform: scale(.95); }
  100% { transform: scale(1); }
}
@keyframes reveal {
  from { opacity: 0; -webkit-clip-path: inset(0 100% 0 0); clip-path: inset(0 100% 0 0); }
  to { opacity: 1; -webkit-clip-path: inset(0 0 0 0); clip-path: inset(0 0 0 0); }
}
@keyframes float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }

/* Scroll reveal base */
[data-anim] { opacity: 0; transition: opacity var(--t-base, 0.3s) ease; }
[data-anim="none"],
.reduce-motion [data-anim] { opacity: 1 !important; transform: none !important; animation: none !important; }
[data-anim].is-visible {
  opacity: 1 !important;
  animation-duration: var(--anim-duration, 600ms);
  animation-delay: var(--anim-delay, 0ms);
  animation-fill-mode: both;
  animation-timing-function: var(--anim-ease, cubic-bezier(.2,.7,.2,1));
}
[data-anim="none"].is-visible { animation-name: none !important; }
[data-anim="fade"].is-visible,
[data-anim="fade-in"].is-visible { animation-name: fade-in; }
[data-anim="slide-up"].is-visible { animation-name: slide-up; }
[data-anim="slide-down"].is-visible { animation-name: slide-down; }
[data-anim="slide-left"].is-visible { animation-name: slide-left; }
[data-anim="slide-right"].is-visible { animation-name: slide-right; }
[data-anim="zoom"].is-visible,
[data-anim="zoom-in"].is-visible { animation-name: zoom-in; }
[data-anim="bounce"].is-visible,
[data-anim="bounce-in"].is-visible { animation-name: bounce-in; }
[data-anim="reveal"].is-visible { animation-name: reveal; }

/* Hover effects */
[data-hover] {
  transition: transform 0.25s cubic-bezier(.2,.7,.2,1), box-shadow 0.25s cubic-bezier(.2,.7,.2,1);
}
[data-hover="lift"]:hover { transform: translateY(-4px); }
[data-hover="scale"]:hover { transform: scale(1.03); }
[data-hover="glow"]:hover { box-shadow: 0 0 0 4px rgba(157,181,192,.3), var(--sh-md, 0 4px 6px -1px rgba(0,0,0,0.1)); }
[data-hover="rotate"]:hover { transform: rotate(2deg); }
[data-hover="shadow"]:hover { box-shadow: var(--sh-lg, 0 10px 15px -3px rgba(0,0,0,0.1)); }

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}
.reduce-motion *, .reduce-motion *::before, .reduce-motion *::after {
  animation-duration: .01ms !important; transition-duration: .01ms !important;
}