/* =========================================================
   animations.css — animações discretas
   Só são aplicadas quando o usuário não pede movimento reduzido.
   ========================================================= */

@media (prefers-reduced-motion: no-preference) {
  /* Revelação ao rolar: o conteúdo só fica oculto se o JS estiver ativo. */
  .js .reveal {
    opacity: 0;
    transform: translateY(16px);
    transition: opacity 500ms ease, transform 500ms ease;
  }
  .js .reveal.is-visible { opacity: 1; transform: none; }

  .card:hover { transform: translateY(-3px); }

  .cursor {
    display: inline-block;
    width: 0.55em;
    height: 1.1em;
    margin-left: 2px;
    vertical-align: text-bottom;
    background: var(--color-accent);
    animation: blink 1.1s steps(1) infinite;
  }

  .site-nav.is-open { animation: slide-down 180ms ease-out; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *,
  *::before,
  *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
}

@keyframes blink {
  50% { opacity: 0; }
}

@keyframes slide-down {
  from { opacity: 0; transform: translateY(-8px); }
  to { opacity: 1; transform: none; }
}
