/* Entrance and hover motion. Every rule here is optional decoration:
   the page is fully legible with this file removed. */

/* scroll reveal — .in is added by assets/js/motion.js */
.reveal {
  opacity: 0; transform: translateY(16px);
  transition: opacity .75s cubic-bezier(.2,.7,.2,1),
              transform .75s cubic-bezier(.2,.7,.2,1);
}
.reveal.in { opacity: 1; transform: none; }

/* hero headline line wipe — .lit is added on load */
.line { display: block; overflow: hidden; padding: .08em 0 .18em; margin: -.08em 0 -.18em; }
.line > span { display: block; transform: translateY(105%); transition: transform 1.05s cubic-bezier(.16,1,.3,1); }
.lit .line > span { transform: none; }
.line:nth-child(2) > span { transition-delay: .08s; }
.line:nth-child(3) > span { transition-delay: .16s; }

/* hero supporting rows fade up on load */
@keyframes fadeUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: .25; } }

.hero .eyebrow   { animation: fadeUp .7s cubic-bezier(.2,.7,.2,1) both; }
.hero .heroCols  { animation: fadeUp .8s cubic-bezier(.2,.7,.2,1) .35s both; }
.hero .sparkWrap { animation: fadeUp .8s cubic-bezier(.2,.7,.2,1) .45s both; }
.eyebrow .live   { animation: pulse 2.6s ease-in-out infinite; }

/* contribution grid wave */
.grid i { transition: opacity .5s ease, transform .5s cubic-bezier(.16,1,.3,1); }
.grid.wave i { opacity: 0; transform: scale(.35); }
.grid.wave.in i { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
  .reveal { opacity: 1; transform: none; }
  .line > span { transform: none; }
  .grid.wave i { opacity: 1; transform: none; }
}
