/* Motion: Actum design system, Appendix A «motion.css», verbatim. Every animation's end state is the element's
   default style, so reduced motion shows the final state at once. */
@keyframes actum-mark   { from { background-size: 0 1.5px, 0 100%; } }
@keyframes actum-rise   { from { opacity: 0; transform: translateY(6px); filter: blur(3px); } }
@keyframes actum-pulse  { 0% { box-shadow: 0 0 0 0 var(--accent-line); } 50%, 100% { box-shadow: 0 0 0 5px transparent; } }
@keyframes actum-blink  { 50% { opacity: 0; } }
@keyframes actum-breathe { 50% { opacity: .5; } }
@keyframes actum-fade   { from { opacity: 0; } }
@keyframes actum-lift   { from { opacity: 0; transform: translateY(8px); } }
@keyframes actum-glow   { 50% { transform: translate3d(6%, 4%, 0) scale(1.08); opacity: .75; } }
@keyframes actum-focus  { from { outline-color: transparent; outline-offset: 5px; } }
@keyframes actum-shimmer { from { background-position: 100% 0; } to { background-position: 0 0; } }

/* Theme reveal (ThemeSwitch): only while html[data-vt="theme"], so other view transitions keep their cross-fade. */
:root[data-vt="theme"]::view-transition-old(root),
:root[data-vt="theme"]::view-transition-new(root) { animation: none; mix-blend-mode: normal; }
:root[data-vt="theme"]::view-transition-new(root) { z-index: 1; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}
