/*
 * front page
 *
 * Copied verbatim from the global <style> block of source/decoded/index.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 rcmSpin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@keyframes rcmSpinRev { from { transform: rotate(0deg); } to { transform: rotate(-360deg); } }
@keyframes rcmFadeUp { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
@keyframes rcmChipIn { from { opacity: 0; transform: translate(-50%,-50%) scale(0.92); } to { opacity: 1; transform: translate(-50%,-50%) scale(1); } }
@keyframes rcmBreathe { 0%,100% { opacity: 0.55; } 50% { opacity: 1; } }
@keyframes rcmDash { to { stroke-dashoffset: -64; } }
@keyframes rcmFlow { to { offset-distance: 100%; } }
@keyframes rcmMarquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes rcmOpsSweep { 0%{left:5%;top:8%} 25%{left:59%;top:8%} 50%{left:59%;top:54%} 75%{left:5%;top:54%} 100%{left:5%;top:8%} }
@keyframes rcmNote { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
@keyframes rcmPulse { 0%,100% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.5); opacity: 0; } }
@media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01s !important; animation-iteration-count: 1 !important; } }
