/* =====================================================================
 * abrn-vibe :: motion.css
 *
 * Ambient motion layer for hero shells.  Multi-second, low-amplitude,
 * opacity-driven.  Cinematic 5-move (in amarre_fiscal_intake.php) keeps
 * its own motion — this layer never overlaps with that.
 *
 * Every keyframe is wrapped in @media (prefers-reduced-motion: no-preference)
 * so users with the system setting on get no movement.
 * ===================================================================== */

/* eyebrow dot — gentle breathe, 3s */
@media (prefers-reduced-motion: no-preference) {
  @keyframes af-eyebrow-pulse {
    0%, 100% { box-shadow: 0 0 0 3px rgba(73, 79, 223, 0.18); transform: scale(1); }
    50%      { box-shadow: 0 0 0 5px rgba(73, 79, 223, 0.10); transform: scale(1.1); }
  }
  .af-eyebrow-pulse-dot {
    animation: af-eyebrow-pulse 3s var(--af-ease-in-out) infinite;
  }
}

/* hero mesh drift — slow organic motion, 60s */
@media (prefers-reduced-motion: no-preference) {
  @keyframes af-mesh-drift {
    0%   { transform: translate(0, 0) scale(1); }
    33%  { transform: translate(2%, -3%) scale(1.04); }
    66%  { transform: translate(-1%, 2%) scale(0.97); }
    100% { transform: translate(0, 0) scale(1); }
  }
  .af-ambient-mesh::before { animation: af-mesh-drift 60s var(--af-ease-in-out) infinite; }
}

/* particle whisper — 12 dots, each with random delay, 14-18s */
@media (prefers-reduced-motion: no-preference) {
  @keyframes af-particle-float {
    0%, 100% { transform: translateY(0) scale(1);    opacity: 0.25; }
    50%      { transform: translateY(-18px) scale(1.08); opacity: 0.5; }
  }
}

/* hero h1 fade-up — once on load */
@media (prefers-reduced-motion: no-preference) {
  @keyframes af-fade-up {
    from { opacity: 0; transform: translateY(12px); }
    to   { opacity: 1; transform: translateY(0); }
  }
  .af-fade-up { animation: af-fade-up 600ms var(--af-ease-out) both; }
}

/* touch-device gate — particles disabled on touch */
@media (hover: none) and (pointer: coarse) {
  .af-ambient-particles { display: none; }
}

/* full reduced-motion gate — clamp anything we missed */
@media (prefers-reduced-motion: reduce) {
  .af-eyebrow-pulse-dot,
  .af-ambient-mesh::before,
  .af-ambient-particles span,
  .af-fade-up { animation: none !important; transition: none !important; }
}
