/* ==========================================================================
   animations.css — Shared keyframes.
   Part of منصة عقاب dashboard styles. Split from the former app.css.
   Cascade order is significant; see docs/flows/INDEX.md.
   ========================================================================== */
/* ══════════════════════════════════════════════════════
   ANIMATIONS
══════════════════════════════════════════════════════ */
@keyframes fadeUp   { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:none} }
@keyframes fadeIn   { from{opacity:0} to{opacity:1} }
@keyframes dotPulse { 0%,100%{opacity:.2;transform:scale(.78)} 50%{opacity:1;transform:scale(1)} }
@keyframes scalePop { from{opacity:0;transform:scale(.92)} to{opacity:1;transform:none} }
@keyframes shake    { 0%,100%{transform:translateX(0)} 20%{transform:translateX(-5px)} 40%{transform:translateX(5px)} 60%{transform:translateX(-4px)} 80%{transform:translateX(4px)} }

.fade-up  { animation: fadeUp  .18s var(--ease) both; }
.fade-in  { animation: fadeIn  .15s ease both; }
.pop-in   { animation: scalePop .16s var(--ease) both; }
.do-shake { animation: shake .3s ease; }
.adot:nth-child(1) { animation: dotPulse 1.4s ease 0s infinite; }
.adot:nth-child(2) { animation: dotPulse 1.4s ease .2s infinite; }
.adot:nth-child(3) { animation: dotPulse 1.4s ease .4s infinite; }
.tdot:nth-child(1) { animation: dotPulse 1.4s ease 0s infinite; }
.tdot:nth-child(2) { animation: dotPulse 1.4s ease .2s infinite; }
.tdot:nth-child(3) { animation: dotPulse 1.4s ease .4s infinite; }

/* Mobile breakpoint now handled in the full responsive section at the end */

