/* ============================================================
   GRAMIVA — Scene motion
   Keyframes driving the animated SVG dioramas.
   ============================================================ */

/* sun */
.sun-glow{animation:sunbreathe 9s ease-in-out infinite;transform-origin:center}
.sun-core{animation:suncore 9s ease-in-out infinite;transform-origin:center}
@keyframes sunbreathe{0%,100%{opacity:.78;transform:scale(1)}50%{opacity:1;transform:scale(1.07)}}
@keyframes suncore{0%,100%{opacity:.85}50%{opacity:1}}

/* crops swaying — three phases for depth */
.sway,.sway-2,.sway-3{transform-origin:bottom center}
.sway{animation:sway 5.4s ease-in-out infinite}
.sway-2{animation:sway 6.8s ease-in-out infinite}
.sway-3{animation:sway 8.2s ease-in-out infinite}
@keyframes sway{0%,100%{transform:rotate(-2.2deg)}50%{transform:rotate(2.6deg)}}

/* dust motes */
.mote{animation:mote 11s linear infinite;opacity:0}
@keyframes mote{
  0%{opacity:0;transform:translate(0,0)}
  12%{opacity:.5}
  70%{opacity:.35}
  100%{opacity:0;transform:translate(46px,-130px)}
}

/* mist band */
.mist{animation:mist 15s ease-in-out infinite}
@keyframes mist{0%,100%{opacity:.5;transform:translateX(-16px)}50%{opacity:.85;transform:translateX(16px)}}

/* birds */
.bird{animation:flap 3.2s ease-in-out infinite, drift 26s linear infinite}
@keyframes flap{0%,100%{transform:scaleY(1)}50%{transform:scaleY(.55)}}
@keyframes drift{0%{translate:0 0}100%{translate:180px -46px}}

/* seeds falling */
.seed-fall{animation:seedfall 3.6s ease-in infinite;opacity:0}
@keyframes seedfall{
  0%{opacity:0;transform:translateY(-260px)}
  16%{opacity:.9}
  78%{opacity:.9}
  100%{opacity:0;transform:translateY(96px)}
}

/* sprouts growing */
.sprout{transform-origin:bottom center;animation:grow 6.5s var(--ease-out,cubic-bezier(.16,1,.3,1)) infinite}
@keyframes grow{
  0%{transform:scale(.1);opacity:0}
  22%{transform:scale(1);opacity:1}
  82%{transform:scale(1);opacity:1}
  100%{transform:scale(1);opacity:0}
}

/* rain */
.drop{animation:raindrop 1.05s linear infinite}
@keyframes raindrop{0%{transform:translateY(-90px);opacity:0}12%{opacity:.34}100%{transform:translateY(760px);opacity:0}}
.ripple{animation:ripple 2.6s ease-out infinite}
@keyframes ripple{0%{rx:3;ry:1;opacity:.55}100%{rx:34;ry:11;opacity:0}}
.cloud{animation:cloud 34s ease-in-out infinite}
.cloud-2{animation:cloud 46s ease-in-out infinite reverse}
@keyframes cloud{0%,100%{transform:translateX(-40px)}50%{transform:translateX(60px)}}

/* workers */
.worker{animation:stoop 4.4s ease-in-out infinite;transform-origin:bottom center}
@keyframes stoop{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(7px) rotate(-4deg)}}

/* sorting */
.grain-fall{animation:grainfall 1.9s linear infinite;opacity:0}
@keyframes grainfall{0%{opacity:0;transform:translateY(0)}8%{opacity:.95}88%{opacity:.95}100%{opacity:0;transform:translateY(230px)}}
.scanbar{animation:scanbar 3.4s ease-in-out infinite}
@keyframes scanbar{0%,100%{transform:translateY(-8px);opacity:.55}50%{transform:translateY(8px);opacity:1}}
.reject-fly{animation:reject 4.2s ease-in infinite;opacity:0}
@keyframes reject{0%{opacity:0;transform:translate(0,0)}10%{opacity:.95}100%{opacity:0;transform:translate(210px,104px)}}

/* mill */
.spin{transform-origin:center;animation:spin 14s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.dust-fall{animation:dustfall 3.2s linear infinite;opacity:0}
@keyframes dustfall{0%{opacity:0;transform:translateY(-40px)}14%{opacity:.62}86%{opacity:.5}100%{opacity:0;transform:translateY(180px)}}
.steam{animation:steam 7s ease-in-out infinite;transform-origin:bottom center}
@keyframes steam{0%,100%{opacity:0;transform:translateY(10px) scaleX(.85)}45%{opacity:.36;transform:translateY(-16px) scaleX(1.15)}}

/* lab */
.bub{animation:bub 2.9s ease-in infinite;opacity:0}
@keyframes bub{0%{opacity:0;transform:translateY(0)}18%{opacity:.75}100%{opacity:0;transform:translateY(-56px)}}
.liquid{animation:liquid 5.5s ease-in-out infinite;transform-origin:center bottom}
@keyframes liquid{0%,100%{transform:scaleY(1)}50%{transform:scaleY(1.06)}}
.pulse{animation:pulse 2.4s ease-in-out infinite;transform-origin:center}
@keyframes pulse{0%,100%{opacity:.55;transform:scale(1)}50%{opacity:1;transform:scale(1.22)}}
.ping{animation:ping 2.6s ease-out infinite;transform-origin:center}
@keyframes ping{0%{transform:scale(1);opacity:.8}100%{transform:scale(3.6);opacity:0}}
.scope-tube{animation:scope 6s ease-in-out infinite}
@keyframes scope{0%,100%{transform:translateY(0)}50%{transform:translateY(9px)}}
.cert{animation:certin 8s ease-in-out infinite}
@keyframes certin{0%,100%{transform:translateY(4px) rotate(-.6deg)}50%{transform:translateY(-6px) rotate(.6deg)}}
.stamp{animation:stamp 5s ease-out infinite;transform-origin:46px 78px}
@keyframes stamp{0%{transform:scale(2.4);opacity:0}12%{transform:scale(1);opacity:1}86%{opacity:1}100%{opacity:1}}
.scanline{animation:scanline 6.5s linear infinite}
@keyframes scanline{0%{transform:translateY(0)}100%{transform:translateY(700px)}}

/* packing */
.belt{animation:belt 2.2s linear infinite}
@keyframes belt{to{transform:translateX(-52px)}}
.fill-drop{animation:filldrop 1.35s linear infinite;opacity:0}
@keyframes filldrop{0%{opacity:0;transform:translateY(0)}12%{opacity:.9}90%{opacity:.9}100%{opacity:0;transform:translateY(300px)}}
.pouch-move{animation:pouchmove 8s linear infinite}
@keyframes pouchmove{0%{transform:translate(-80px,470px)}100%{transform:translate(1280px,470px)}}
.sealbar{animation:sealbar 2.4s ease-in-out infinite;transform-origin:center}
@keyframes sealbar{0%,72%,100%{transform:translateY(0)}82%{transform:translateY(14px)}}
.weigh{animation:weigh 4s ease-in-out infinite}
@keyframes weigh{0%,100%{opacity:.75}50%{opacity:1}}

/* world */
.globe-spin{transform-origin:center;animation:globespin 44s linear infinite}
@keyframes globespin{to{transform:rotateY(360deg)}}
.arc{stroke-dasharray:340;stroke-dashoffset:340;animation:arcdraw 4.6s ease-in-out infinite}
@keyframes arcdraw{0%{stroke-dashoffset:340;opacity:0}18%{opacity:.75}64%{stroke-dashoffset:0;opacity:.75}100%{stroke-dashoffset:0;opacity:0}}

@media(prefers-reduced-motion:reduce){
  .sun-glow,.sun-core,.sway,.sway-2,.sway-3,.mote,.mist,.bird,.seed-fall,.sprout,.drop,.ripple,
  .cloud,.cloud-2,.worker,.grain-fall,.scanbar,.reject-fly,.spin,.dust-fall,.steam,.bub,.liquid,
  .pulse,.ping,.scope-tube,.cert,.stamp,.scanline,.belt,.fill-drop,.pouch-move,.sealbar,.weigh,
  .globe-spin,.arc{animation:none!important}
  .arc{stroke-dashoffset:0;opacity:.7}
  .mote,.seed-fall,.drop,.grain-fall,.dust-fall,.fill-drop,.reject-fly{opacity:.4}
}
