@keyframes shake-harder {
    0% { transform: translate(0, 0) rotate(0deg); }
    10% { transform: translate(-10px, -10px) rotate(-2deg); }
    20% { transform: translate(10px, 10px) rotate(2deg); }
    30% { transform: translate(-10px, 5px) rotate(-2deg); }
    40% { transform: translate(10px, -5px) rotate(2deg); }
    50% { transform: translate(0, 0) rotate(0deg) scale(1.02); } /* 살짝 커졌다가 */
    60% { transform: translate(-5px, 5px) rotate(-1deg); }
    70% { transform: translate(5px, -5px) rotate(1deg); }
    80% { transform: translate(-2px, 2px) rotate(0deg); }
    90% { transform: translate(2px, -2px) rotate(0deg); }
    100% { transform: translate(0, 0) rotate(0deg) scale(1); }
}
.shake-effect-hard {
    animation: shake-harder 0.5s cubic-bezier(.36,.07,.19,.97) both;
    transform-origin: center center;
}

/* 텍스트 타격감용 그림자 */
.text-shadow-heavy {
    text-shadow: 0 4px 8px rgba(0,0,0,0.5), 0 8px 16px rgba(0,0,0,0.3);
}

/* 배경 천천히 줌인 효과 */
/* @keyframes slow-zoom {
    from { transform: scale(1); }
    to { transform: scale(1.1); }
} */
/* .animate-slow-zoom {
    animation: slow-zoom 10s ease-in-out infinite alternate;
} */

/* ... 기존 스타일 (fade-out, fadeInUp) 유지 ... */
/* .fade-out { opacity: 0; pointer-events: none; }
.animate-fade-in-up { animation: fadeInUp 1s ease-out forwards; } */
@keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }