/* =============================================
   ANIMATIONS.CSS — Keyframes & Transitions
   ============================================= */

/* Typewriter cursor blink */
.tw-cursor::after { content: '|'; color: var(--accent-color); animation: twBlink 1s step-end infinite; margin-left: 1px; }
@keyframes twBlink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }

/* Marquee scroll */
@keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* Floating badge */
@keyframes floatUp { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-7px); } }
.float-anim   { animation: floatUp 4s ease-in-out infinite; }
.float-anim-d { animation: floatUp 4s ease-in-out 1.5s infinite; }

/* Pulse ring (for available badge) */
@keyframes pulseRing { 0% { transform: scale(0.8); opacity: 1; } 100% { transform: scale(2); opacity: 0; } }

/* Fade-in slide-up (used by scroll observer) */
@keyframes fadeInUp { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } }

/* Spin (loader) */
@keyframes spin { to { transform: rotate(360deg); } }
.animate-spin { animation: spin 1s linear infinite; }
