@keyframes sceneFadeIn {
    from { opacity: 0; transform: scale(1.02); }
    to   { opacity: 1; transform: scale(1); }
}

@keyframes sceneFadeOut {
    from { opacity: 1; }
    to   { opacity: 0; }
}

@keyframes cloudDrift {
    0%   { transform: translateX(-120px); }
    100% { transform: translateX(calc(100vw + 120px)); }
}

@keyframes waterParticleFloat {
    0%   { transform: translateY(0) scale(1);   opacity: 0.6; }
    50%  { transform: translateY(-30px) scale(1.15); opacity: 0.9; }
    100% { transform: translateY(-70px) scale(0.7); opacity: 0; }
}

@keyframes tapDrip {
    0%   { transform: scaleY(0) translateY(0); opacity: 0.9; }
    60%  { transform: scaleY(1.4) translateY(0); opacity: 0.9; }
    100% { transform: scaleY(0.8) translateY(18px); opacity: 0; }
}

@keyframes waterRise {
    from { height: var(--water-start, 0%); }
    to   { height: var(--water-end, 100%); }
}

@keyframes tankOverflowLeft {
    0%   { height: 0; opacity: 0; }
    10%  { opacity: 1; }
    100% { height: 160px; opacity: 0.8; }
}

@keyframes tankOverflowRight {
    0%   { height: 0; opacity: 0; }
    10%  { opacity: 1; }
    100% { height: 160px; opacity: 0.8; }
}

@keyframes overflowWiggle {
    0%   { transform: rotate(-3deg); }
    50%  { transform: rotate(3deg); }
    100% { transform: rotate(-3deg); }
}

@keyframes tileRemovePop {
    0%   { transform: scale(1);   opacity: 1; }
    40%  { transform: scale(1.18); opacity: 1; }
    100% { transform: scale(0);   opacity: 0; }
}

@keyframes tileMatchGlow {
    0%   { box-shadow: 0 0 0 0 rgba(76, 175, 80, 0.7); }
    50%  { box-shadow: 0 0 0 12px rgba(76, 175, 80, 0); }
    100% { box-shadow: 0 0 0 0 rgba(76, 175, 80, 0); }
}

@keyframes tileMismatchShake {
    0%   { transform: translateX(0); }
    20%  { transform: translateX(-8px); }
    40%  { transform: translateX(8px); }
    60%  { transform: translateX(-5px); }
    80%  { transform: translateX(5px); }
    100% { transform: translateX(0); }
}

@keyframes scorePopBounce {
    0%   { transform: scale(1); }
    40%  { transform: scale(1.4); }
    70%  { transform: scale(0.9); }
    100% { transform: scale(1); }
}

@keyframes plantGrow {
    0%   { transform: scaleY(0.1) scaleX(0.6); filter: saturate(0.1) brightness(0.6); }
    100% { transform: scaleY(1)   scaleX(1);   filter: saturate(1)   brightness(1); }
}

@keyframes flowerBloom {
    0%   { transform: scale(0.1); filter: saturate(0.1); opacity: 0.3; }
    60%  { transform: scale(1.15); }
    100% { transform: scale(1);    filter: saturate(1);   opacity: 1; }
}

@keyframes grassSpread {
    0%   { transform: scaleX(0); filter: saturate(0) brightness(0.5); }
    100% { transform: scaleX(1); filter: saturate(1) brightness(1); }
}

@keyframes birdFly {
    0%   { left: -60px; top: 15%; transform: scaleX(1); }
    48%  { transform: scaleX(1); }
    50%  { transform: scaleX(-1); }
    100% { left: calc(100% + 60px); top: 10%; transform: scaleX(-1); }
}

@keyframes birdFly2 {
    0%   { right: -60px; top: 22%; transform: scaleX(-1); }
    100% { right: calc(100% + 60px); top: 18%; transform: scaleX(1); }
}

@keyframes butterflyFloat {
    0%   { left: 10%; top: 35%; }
    25%  { top: 28%; }
    50%  { left: 50%; top: 40%; }
    75%  { top: 25%; }
    100% { left: 85%; top: 38%; }
}

@keyframes butterflyWing {
    0%, 100% { transform: scaleY(1); }
    50%       { transform: scaleY(0.4); }
}

@keyframes waterFlowPipe {
    0%   { stroke-dashoffset: 200; }
    100% { stroke-dashoffset: 0; }
}

@keyframes waterPipeGlow {
    0%, 100% { opacity: 0.5; }
    50%       { opacity: 1; }
}

@keyframes victoryMessageFadeIn {
    0%   { opacity: 0; transform: translateY(30px) scale(0.9); }
    60%  { transform: translateY(-5px) scale(1.02); }
    100% { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes victoryPulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(255, 193, 7, 0.5); }
    50%       { box-shadow: 0 0 0 20px rgba(255, 193, 7, 0); }
}

@keyframes starSpin {
    from { transform: rotate(0deg) scale(1); }
    to   { transform: rotate(360deg) scale(1.1); }
}

@keyframes floatUpDown {
    0%, 100% { transform: translateY(0); }
    50%       { transform: translateY(-12px); }
}

@keyframes titleGlow {
    0%, 100% { text-shadow: 0 4px 24px rgba(33, 150, 243, 0.4), 0 0 60px rgba(33, 150, 243, 0.1); }
    50%       { text-shadow: 0 4px 32px rgba(33, 150, 243, 0.7), 0 0 80px rgba(33, 150, 243, 0.3); }
}

@keyframes tankWaterWave {
    0%   { border-radius: 50% 50% 0 0 / 12px 12px 0 0; }
    50%  { border-radius: 40% 60% 0 0 / 8px 16px 0 0; }
    100% { border-radius: 50% 50% 0 0 / 12px 12px 0 0; }
}

@keyframes splashDrop {
    0%   { transform: translateY(0) scale(1); opacity: 1; }
    100% { transform: translateY(30px) scale(0.3); opacity: 0; }
}

@keyframes pipeWaterFlow {
    0%   { background-position: 0 0; }
    100% { background-position: 0 40px; }
}

@keyframes gameOverShake {
    0%, 100% { transform: translateX(0) rotate(0deg); }
    20%  { transform: translateX(-12px) rotate(-2deg); }
    40%  { transform: translateX(12px) rotate(2deg); }
    60%  { transform: translateX(-8px) rotate(-1deg); }
    80%  { transform: translateX(8px) rotate(1deg); }
}

@keyframes tapOpenPulse {
    0%   { transform: translate(-50%, -50%) scale(1); }
    50%  { transform: translate(-50%, -50%) scale(1.25); }
    100% { transform: translate(-50%, -50%) scale(1); }
}

@keyframes streamWaterShimmer {
    0%   { background-position: 0 0; }
    100% { background-position: 0 40px; }
}

@keyframes plantFadeOut {
    0%   { opacity: 1; transform: scale(1); }
    100% { opacity: 0; transform: scale(0.6); }
}

@keyframes plantGrowIn {
    0%   { opacity: 0; transform: scale(0.2) translateY(20px); }
    70%  { transform: scale(1.1) translateY(-5px); }
    100% { opacity: 1; transform: scale(1) translateY(0); }
}

