/* All transforms live on nested local-art groups: world-position SVG transforms
   remain untouched. Decorative life never indicates an agent/task state. */
.vm-ambient { pointer-events:none; --vm-ambient-delay:0s; --vm-swim-range:8px; --vm-swim-cross:2.8px; }
.vm-ambient > .vm-ambient-motion,
.vm-ambient .vm-ambient-wing,
.vm-ambient .vm-ambient-ripple,
.vm-ambient .vm-ambient-current {
  animation-play-state:paused;
  animation-delay:var(--vm-ambient-delay);
  animation-iteration-count:infinite;
  animation-timing-function:ease-in-out;
  transform-box:fill-box;
  transform-origin:center;
}
.vm-ambient[data-ambient="swan"] > .vm-ambient-motion { animation-name:vm-swan-swim; animation-duration:26s; }
.vm-ambient[data-ambient="water"] > .vm-ambient-motion { animation-name:vm-water-drift; animation-duration:5s; }
.vm-ambient[data-ambient="river"] > .vm-ambient-motion,
.vm-ambient[data-ambient="waterfall"] > .vm-ambient-motion { animation:none; }
.vm-ambient[data-ambient="firefly"] > .vm-ambient-motion { animation-name:vm-firefly-drift; animation-duration:7s; }
.vm-ambient[data-ambient="fairy"] > .vm-ambient-motion { animation-name:vm-fairy-float; animation-duration:6.5s; }
.vm-ambient[data-ambient="butterfly"] > .vm-ambient-motion { animation-name:vm-butterfly-float; animation-duration:8s; }
.vm-ambient[data-ambient="float"] > .vm-ambient-motion { animation-name:vm-fairy-float; animation-duration:8.5s; }
.vm-ambient[data-ambient="breathe"] > .vm-ambient-motion { animation-name:vm-dragon-breathe; animation-duration:7s; transform-origin:center bottom; }
.vm-ambient .vm-ambient-wing { animation-name:vm-wing-flutter; animation-duration:1.15s; transform-origin:center; }
.vm-ambient[data-ambient="butterfly"] .vm-ambient-wing { animation-duration:1.65s; }
.vm-ambient .vm-ambient-ripple { animation-name:vm-water-ripple; animation-duration:2.8s; animation-timing-function:linear; }
.vm-ambient .vm-ambient-current { animation-name:vm-water-current; animation-duration:var(--vm-flow-duration,6s); animation-timing-function:linear; }
.vm-ambient[data-ambient="waterfall"] .vm-ambient-current { --vm-flow-cycle:-30px; animation-duration:.8s; }
.vm-wildlife-layer { pointer-events:none; }
.uw-animal { --uw-motion-state:paused; }
.uw-active .uw-animal { --uw-motion-state:running; }
/* Wildlife joints receive explicit SVG poses from the shared bounded frame.
   CSS transforms would override those attributes and must not animate them. */
.vm-ambience-active .vm-ambient.vm-ambient-visible > .vm-ambient-motion,
.vm-ambience-active .vm-ambient.vm-ambient-visible .vm-ambient-wing,
.vm-ambience-active .vm-ambient.vm-ambient-visible .vm-ambient-ripple,
.vm-ambience-active .vm-ambient.vm-ambient-visible .vm-ambient-current { animation-play-state:running; }
@keyframes vm-swan-swim {
  0%,100% { transform:translate(0,0) rotate(0deg); }
  25% { transform:translate(var(--vm-swim-range),var(--vm-swim-cross)) rotate(2deg); }
  50% { transform:translate(0,calc(var(--vm-swim-cross) * 2)) rotate(0deg); }
  75% { transform:translate(calc(var(--vm-swim-range) * -1),var(--vm-swim-cross)) rotate(-2deg); }
}
@keyframes vm-water-drift { 0%,100% { transform:translate(0,0); opacity:.65; } 50% { transform:translate(7px,-2px); opacity:1; } }
@keyframes vm-water-current { from { stroke-dashoffset:0; } to { stroke-dashoffset:var(--vm-flow-cycle,-30px); } }
@keyframes vm-water-ripple { from { transform:scale(.86); opacity:.95; } to { transform:scale(1.18); opacity:.12; } }
@keyframes vm-firefly-drift { 0%,100% { transform:translate(0,0); opacity:.55; } 35% { transform:translate(3px,-4px); opacity:1; } 70% { transform:translate(-2px,-2px); opacity:.65; } }
@keyframes vm-fairy-float { 0%,100% { transform:translateY(0) rotate(-1deg); } 50% { transform:translateY(-5px) rotate(1deg); } }
@keyframes vm-butterfly-float { 0%,100% { transform:translate(0,0) rotate(-3deg); } 50% { transform:translate(5px,-4px) rotate(3deg); } }
@keyframes vm-wing-flutter { 0%,100% { transform:scaleX(1); } 50% { transform:scaleX(.7); } }
@keyframes vm-dragon-breathe { 0%,100% { transform:scale(1); } 50% { transform:scale(1.008,1.018); } }
@media (prefers-reduced-motion:reduce) {
  .vm-ambient > .vm-ambient-motion,
  .vm-ambient .vm-ambient-wing,
  .vm-ambient .vm-ambient-ripple,
  .vm-ambient .vm-ambient-current { animation:none!important; }
}
