.reveal{opacity:0;transform:translateY(18px);transition:opacity .65s ease,transform .65s ease}.reveal.in-view{opacity:1;transform:translateY(0)}.breathe-card{animation:breatheCard 6s ease-in-out infinite}.breathe-soft{animation:breatheSoft 4.8s ease-in-out infinite}.breathe-hover{transition:transform .2s ease,box-shadow .2s ease}.breathe-hover:hover{animation:breatheSoft 1.8s ease-in-out infinite;transform:translateY(-4px)}@keyframes breathe{0%,100%{transform:scale(1);opacity:.55}50%{transform:scale(1.08);opacity:.85}}@keyframes breatheCard{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}@keyframes breatheSoft{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-5px) scale(1.015)}}@keyframes schoolFloat{from{transform:translateX(0)}to{transform:translateX(-50%)}}@keyframes panelFade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes softPulse{0%,100%{box-shadow:0 12px 34px rgba(99,102,241,.25)}50%{box-shadow:0 14px 44px rgba(99,102,241,.45)}}@keyframes ripple{to{transform:scale(4);opacity:0}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}.reveal{opacity:1;transform:none}}


@keyframes holoSweep{0%,62%,100%{transform:translateX(-76%)}76%{transform:translateX(72%)}}
@keyframes dataPath{to{stroke-dashoffset:-120}}
@keyframes verticalScan{0%{top:2%}50%{top:92%}100%{top:2%}}
@keyframes breathingTile{0%,100%{transform:translateY(0);box-shadow:0 12px 28px rgba(15,23,42,.045)}50%{transform:translateY(-4px);box-shadow:0 16px 34px rgba(99,102,241,.09)}}
