/* ==========================================================================
   ANIMAÇÕES / TRANSIÇÕES / EFEITOS VISUAIS
   As entradas de scroll (reveal-mask, word, reveal-up, portfolio, etc.)
   são conduzidas via GSAP/ScrollTrigger em js/animations.js — este arquivo
   cobre apenas keyframes puros e o fallback de scroll-driven animation.
   ========================================================================== */

@keyframes pin-pulse {
  0% {
    box-shadow: 0 0 0 0 rgba(176, 141, 106, 0.55);
  }
  70% {
    box-shadow: 0 0 0 14px rgba(176, 141, 106, 0);
  }
  100% {
    box-shadow: 0 0 0 0 rgba(176, 141, 106, 0);
  }
}

/* Fallback nativo do indicador de progresso para navegadores com suporte
   a scroll-driven animations — js/main.js assume o controle via
   ScrollTrigger quando animation-timeline não está disponível. */
@supports (animation-timeline: scroll()) {
  .scroll-progress[data-native] {
    width: 100%;
    transform: scaleX(0);
    transform-origin: left;
    animation: scroll-progress-fill linear;
    animation-timeline: scroll(root);
  }

  @keyframes scroll-progress-fill {
    to {
      transform: scaleX(1);
    }
  }
}

@media (hover: none) {
  .cursor-follow {
    display: none;
  }
}

/* ==========================================================================
   ACESSIBILIDADE — MOVIMENTO REDUZIDO
   ========================================================================== */

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

  .reveal-mask span,
  .word,
  .reveal-up {
    transform: none !important;
    opacity: 1 !important;
  }

  .hero__media-mask {
    clip-path: none !important;
  }

  .portfolio-feature__sticky {
    position: static !important;
  }
}
