/* ═══════════════════════════════════
   ANIMATIONS
   Woli Farm · Web3 Demo
═══════════════════════════════════ */
@keyframes twinkle{0%,100%{opacity:var(--op,.6)}50%{opacity:.08}}
@keyframes drift{from{transform:translateX(-200px)}to{transform:translateX(calc(100vw + 200px))}}
@keyframes sway{0%,100%{transform:rotate(var(--lean,2deg))}50%{transform:rotate(calc(var(--lean,2deg)*-1.5))}}
@keyframes fall{0%{opacity:1;transform:translateY(0) scale(1)}80%{opacity:.8;transform:translateY(var(--dist,80px)) scale(.9)}100%{opacity:0;transform:translateY(calc(var(--dist,80px) + 10px)) scale(.3)}}
@keyframes fertPop{0%{opacity:1;transform:translate(0,0) scale(1)}100%{opacity:0;transform:translate(var(--tx,0),var(--ty,-30px)) scale(0)}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.2}}
@keyframes plantPulse{0%,100%{box-shadow:0 0 0 0 rgba(76,175,120,.3)}50%{box-shadow:0 0 0 8px rgba(76,175,120,0)}}
@keyframes urgentPulse{0%,100%{box-shadow:0 0 0 0 rgba(255,200,50,.4)}50%{box-shadow:0 0 0 10px rgba(255,200,50,0)}}
@keyframes popIn{from{transform:scale(0)}to{transform:scale(1)}}
@keyframes burst{0%{transform:translate(0,0) scale(1);opacity:1}100%{transform:translate(var(--tx),var(--ty)) scale(0);opacity:0}}
@keyframes alertSlide{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
@keyframes notifSlide{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}
.particle{position:fixed;pointer-events:none;z-index:201;width:8px;height:8px;border-radius:50%;animation:burst 1s ease-out forwards}
