/* rescue-bubble.html — hero animation (prefix: bb-)
   Theme: Tangled conditional rules (red crossing lines + pulsing nodes) → clean REST endpoints list */
@keyframes bbGlow { 0%,100% { opacity: 0.08; } 50% { opacity: 0.2; } }
@keyframes bbFade { from { opacity: 0; transform: translateX(-10px); } to { opacity: 1; transform: translateX(0); } }
@keyframes bbFadeR{ from { opacity: 0; transform: translateX(10px); } to { opacity: 1; transform: translateX(0); } }
@keyframes bbPulse { 0%,100% { opacity: 0.75; transform: scale(1); } 50% { opacity: 1; transform: scale(1.15); } }
@keyframes bbArrow { 0%,100% { transform: translateX(0); } 50% { transform: translateX(4px); } }
@keyframes bbEp { from { opacity: 0; transform: translateX(10px); } to { opacity: 1; transform: translateX(0); } }
.bb-glow   { animation: bbGlow 3.5s ease-in-out infinite; }
.bb-tangle { animation: bbFade 0.55s var(--ease-spring) 0.4s both; }
.bb-n circle { transform-box: fill-box; transform-origin: center; animation: bbPulse 2.2s ease-in-out infinite; }
.bb-n circle:nth-child(2n)  { animation-delay: 0.4s; }
.bb-n circle:nth-child(3n)  { animation-delay: 0.8s; }
.bb-arrow  { transform-box: fill-box; transform-origin: center; animation: bbFade 0.5s ease-out 1.1s both, bbArrow 1.8s ease-in-out 1.7s infinite; }
.bb-clean  { animation: bbFadeR 0.55s var(--ease-spring) 1.3s both; }
.bb-ep     { transform-box: fill-box; transform-origin: center; }
.bb-e1 { animation: bbEp 0.4s ease-out 1.6s both; }
.bb-e2 { animation: bbEp 0.4s ease-out 1.75s both; }
.bb-e3 { animation: bbEp 0.4s ease-out 1.9s both; }
.bb-e4 { animation: bbEp 0.4s ease-out 2.05s both; }
.bb-e5 { animation: bbEp 0.4s ease-out 2.2s both; }
