/*
 * solutions + consulting — blocks are md5-identical
 *
 * Copied verbatim from the global <style> block of source/decoded/solutions.html, source/decoded/consulting.html,
 * minus the five shared rules that live in base.css.
 *
 * NEVER MERGE THIS FILE WITH ANOTHER page-*.css. The pages define @keyframes
 * with IDENTICAL NAMES and DIFFERENT BODIES — see DECISIONS.md D3 and the
 * collision table in 02-DESIGN-CONTRACT.md §3. A merged stylesheet plays one
 * page's animation on another, renders wrongly, and errors nowhere.
 *
 * Work unit W1.3.
 */

@keyframes rcmFadeUp { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
@keyframes rcmSwap { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes rcmBar { from { width: 0; } to { width: 100%; } }
@keyframes rcmFadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes rcmSpin { to { transform: rotate(360deg); } }
@keyframes rcmPulse { 0%,100% { transform: scale(1); opacity: 0.45; } 50% { transform: scale(1.18); opacity: 0.85; } }
@keyframes rcmBreathe { 0%,100% { transform: scale(1); } 50% { transform: scale(1.14); } }
@keyframes rcmDrawA { 0% { stroke-dashoffset: 48; } 100% { stroke-dashoffset: 0; } }
@keyframes rcmDrawB { 0% { stroke-dashoffset: 24; } 100% { stroke-dashoffset: 0; } }
@keyframes rcmGrow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01s !important; } }
