/* ── Background ── */
@keyframes gridPulse  { 0%,100%{ opacity:.5; } 50%{ opacity:1; } }
@keyframes floatOrb   { 0%,100%{ transform:translate(0,0); } 50%{ transform:translate(40px,40px); } }

/* ── Logo pulse ── */
@keyframes logoSquarePulse1 {
  0%,100% { opacity:1;    box-shadow:0 0 8px rgba(0,212,255,.7); transform:scale(1); }
  50%     { opacity:.55;  box-shadow:0 0 18px rgba(0,212,255,1); transform:scale(.88); }
}
@keyframes logoSquarePulse2 {
  0%,100% { opacity:.5;   box-shadow:0 0 8px rgba(124,77,255,.7); transform:scale(1); }
  50%     { opacity:.95;  box-shadow:0 0 18px rgba(124,77,255,1); transform:scale(.88); }
}

/* ── Hero ── */
@keyframes rotateRing { to{ transform:translate(-50%,-50%) rotate(360deg); } }
@keyframes blink      { 0%,100%{ opacity:1; } 50%{ opacity:.25; } }

/* ── Marquee ── */
@keyframes marquee    { from{ transform:translateX(0); } to{ transform:translateX(-50%); } }

/* ── Scroll reveal ── */
.fade-in {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity .65s ease, transform .65s ease;
}
.fade-in.visible {
  opacity: 1;
  transform: translateY(0);
}
