/* ============================================================================
 * engine-motion.css - the callable motion library
 * ---------------------------------------------------------------------------
 * Every @keyframes the booking engine uses, in one place. Nothing here selects an
 * element; these are named animations that other modules CALL by name.
 *
 * LOAD ORDER: 2 of 5. Early, because a keyframe must exist before a rule references it.
 *
 * TEMPO IS THE RULE, NOT A SUGGESTION. Every recurring pulse on this page runs at
 * 2.6s (--sh-tempo) or an exact multiple: the date and guest fields, the pin+card
 * pair, Book & Pay, the active-chip ember. The logo's markBreath runs at 2x.
 * Intensity varies by state; frequency does not. A new animation on its own clock
 * reads as a fault even when each part looks right in isolation.
 * 12 keyframes, all uniquely named - verified before extraction, so moving them
 * here changed no cascade (keyframes resolve by name, not by position).
 * ==========================================================================*/

@keyframes spin { to { transform:rotate(360deg); } }

@keyframes datePulse { 0%,100% { box-shadow:0 0 0 0 rgba(201,169,110,0); } 50% { box-shadow:0 0 0 7px rgba(201,169,110,0.13); } }

@keyframes pairBeat {
      0%,100% { box-shadow:0 12px 26px rgba(0,0,0,0.55), 0 0 0 3px rgba(201,169,110,0.14); }
      50%     { box-shadow:0 12px 26px rgba(0,0,0,0.55), 0 0 0 9px rgba(201,169,110,0.32); }
    }

@keyframes pinPop { 0% { transform:scale(1); } 45% { transform:scale(1.2); } 100% { transform:scale(1); } }

@keyframes tagTilt { 0% { transform:rotate(-4deg) scale(1); } 30% { transform:rotate(-14deg) scale(1.26) translateY(-3px); } 65% { transform:rotate(3deg) scale(1.12); } 100% { transform:rotate(-4deg) scale(1); } }

@keyframes markBreath {
      0%    { transform:scale(1.18) rotate(0deg); }
      6%    { transform:scale(1.30) rotate(0deg); }   /* first inflate — quick */
      11%   { transform:scale(1.235) rotate(0deg); }  /* small release */
      17%   { transform:scale(1.335) rotate(0deg); }  /* the puff — the bigger of the two */
      34%   { transform:scale(1.18) rotate(0deg); }   /* slow return, ~3× the rise */
      38.5% { transform:scale(1.18) rotate(-3.2deg); }
      43%   { transform:scale(1.18) rotate(3.2deg); }
      47%   { transform:scale(1.18) rotate(-2deg); }
      51%   { transform:scale(1.18) rotate(1.1deg); }
      55%   { transform:scale(1.18) rotate(0deg); }   /* settled */
      100%  { transform:scale(1.18) rotate(0deg); }   /* rest for the second beat */
    }

@keyframes dateBeatStrong {
      0%,100% { box-shadow:0 0 0 0 rgba(201,169,110,0); }
      50%     { box-shadow:0 0 0 8px rgba(201,169,110,0.208); }  /* Elec: 20% softer pre-selection */
    }

@keyframes dateBeatSoft {
      0%,100% { box-shadow:0 0 0 0 rgba(201,169,110,0); }
      50%     { box-shadow:0 0 0 5px rgba(201,169,110,0.09); }
    }

@keyframes amtBeat {
      0%,100% { box-shadow:0 0 0 0 rgba(201,169,110,0);    background-color:rgba(201,169,110,0); }
      /* ring spread 8 → 7 → 4px across Elec's two "tighter" passes; the fill
         and both opacities stay where they were. */
      50%     { box-shadow:0 0 0 4px rgba(201,169,110,0.13); background-color:rgba(201,169,110,0.13); }
    }

@keyframes clearFlash {
      0%   { opacity:1; }
      18%  { opacity:0.18; }
      36%  { opacity:1; }
      54%  { opacity:0.18; }
      72%  { opacity:1; }
      100% { opacity:0.7; }
    }

@keyframes cardBeat {
        0%,100% { box-shadow:0 0 18px rgba(201,169,110,0.18), 0 10px 30px rgba(5,29,64,0.55); }
        50%     { box-shadow:0 0 34px rgba(201,169,110,0.44), 0 10px 30px rgba(5,29,64,0.55); }
      }

@keyframes chipEmber {
      0%, 100% { box-shadow:inset 0 0 6px rgba(201,169,110,0.13); }
      50%      { box-shadow:inset 0 0 14px rgba(201,169,110,0.36); }
    }
