/* ---------- reveal ---------- */
.section-reveal{opacity:0;transform:translateY(24px);transition:opacity .9s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1)}
.section-reveal.in{opacity:1;transform:none}

/* ---------- keyframes ---------- */
@keyframes fadeup{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes letterIn{from{opacity:0;transform:translateY(48px) rotateX(42deg);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}
@keyframes beacon{0%,100%{opacity:.35;box-shadow:0 0 0 0 rgba(159,224,164,0)}50%{opacity:1;box-shadow:0 0 18px 2px rgba(159,224,164,.45)}}
@keyframes stageEnter{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes scan{0%{top:-8%;opacity:0}8%{opacity:1}92%{opacity:1}100%{top:108%;opacity:0}}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes breathe{0%,100%{transform:scale(1);opacity:.35}50%{transform:scale(1.18);opacity:.7}}
@keyframes pulseRing{0%{transform:scale(.55);opacity:.5}100%{transform:scale(1.7);opacity:0}}
@keyframes scrollHint{0%{transform:scaleY(0);transform-origin:top}45%{transform:scaleY(1);transform-origin:top}55%{transform:scaleY(1);transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}
@keyframes dashFlow{to{stroke-dashoffset:-240}}
.dash-flow{stroke-dasharray:8 12;animation:dashFlow 8s linear infinite}

@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .letter-in{opacity:1}
  .section-reveal{opacity:1;transform:none}
  html{scroll-behavior:auto}
}