@keyframes pulseKey {
    0% { transform: scale(1); filter: brightness(1); box-shadow: inset 0 -4px 0 rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.08); }
    100% { transform: scale(1.12) translateY(-3px); filter: brightness(1.1); box-shadow: inset 0 -4px 0 rgba(0,0,0,0.15), 0 8px 16px rgba(233,69,96,0.3); }
}

@keyframes shakeError {
    0%, 100% { transform: translateX(0); }
    25% { transform: translateX(-4px); }
    75% { transform: translateX(4px); }
}

@keyframes cursorBlink {
    0%, 100% { border-color: var(--color-accent); }
    50% { border-color: transparent; }
}

@keyframes shakeChar {
    0%, 100% { transform: translateX(0) scale(1.15); }
    25% { transform: translateX(-3px) scale(1.15); }
    75% { transform: translateX(3px) scale(1.15); }
}

@keyframes fingerPulse {
    0% { transform: translateY(-6px) scale(1.1); }
    100% { transform: translateY(-10px) scale(1.15); }
}

@keyframes popIn {
    0% { transform: scale(0); opacity: 0; }
    80% { transform: scale(1.1); opacity: 1; }
    100% { transform: scale(1); opacity: 1; }
}
.pop-in { animation: popIn 0.4s cubic-bezier(0.175,0.885,0.32,1.275) forwards; }

@keyframes starBounce {
    0% { transform: scale(0) rotate(-30deg); opacity: 0; }
    60% { transform: scale(1.3) rotate(10deg); opacity: 1; }
    100% { transform: scale(1) rotate(0deg); opacity: 1; }
}
