/* 通用呼吸动画 */
.breath {
    animation: breath 1.5s ease-in-out infinite;
    will-change: transform, opacity;
}

@keyframes breath {
    0% {
        transform: scale(1);
    }
    50% {
        transform: scale(1.15);
    }
    100% {
        transform: scale(1);
    }
}

/* 自然漂浮：水平/垂直两种更轻微更自然的效果 */
.float-sway-x {
    animation: floatSwayX 3s ease-in-out infinite alternate;
    will-change: transform;
}
.float-sway-y {
    animation: floatSwayY 4s ease-in-out infinite alternate;
    will-change: transform;
}

@keyframes floatSwayX {
    0% { transform: translate(-5px, -10px) rotate(2deg); }
    25% { transform: translate(5px, -5px) rotate(-2deg); }
    50% { transform: translate(-5px, 0px) rotate(2deg); }
    75% { transform: translate(5px, 5px) rotate(-2deg); }
    100% { transform: translate(-5px, 10px) rotate(2deg); }
}

@keyframes floatSwayY {
    0% { transform: translate(5px, -10px) rotate(-3deg); }
    25% { transform: translate(-5px, -5px) rotate(3deg); }
    50% { transform: translate(5px, 0px) rotate(-3deg); }
    75% { transform: translate(-5px, 5px) rotate(3deg); }
    100% { transform: translate(5px, 10px) rotate(-3deg); }
}

/* 燃烧转场效果 */
@keyframes fadeTransition {
    0% {
        opacity: 1;
    }
    100% {
        opacity: 0;
    }
}