@keyframes error-appear{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}
@keyframes appear{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.mission-card{animation:appear .45s cubic-bezier(.22,1,.36,1) both}.field-error:not([hidden]),.form-error:not([hidden]){animation:error-appear .22s ease-out both}.outcome:not([hidden]){animation:appear .32s cubic-bezier(.22,1,.36,1) both}.signal i{transition:background .3s,box-shadow .3s}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@keyframes icon-spin{to{transform:rotate(360deg)}}
.button__arrow{transition:transform .2s ease,color .2s ease}
.button:hover:not(:disabled) .button__arrow,.button:focus-visible .button__arrow{transform:translateX(3px)}
.button__loader{animation:icon-spin 1s linear infinite}
@media(prefers-reduced-motion:reduce){.button:hover:not(:disabled) .button__arrow,.button:focus-visible .button__arrow{transform:none}}

body:not([data-state="INTRO"]) .content{animation:appear .45s cubic-bezier(.22,1,.36,1) both}

@keyframes campaign-fade{from{opacity:0}to{opacity:1}}
.campaign-final:not([hidden]){animation:campaign-fade .75s ease both}
