/* Home hero: living background orbs.
   Slow drift + breathing scale (CSS keyframes) with a gentle pointer parallax on the
   individual `translate` property, so the two never fight. Respects reduced motion. */
@keyframes o1-orb-a{
  0%  {transform:translate3d(0,0,0) scale(1)}
  50% {transform:translate3d(-46px,34px,0) scale(1.07)}
  100%{transform:translate3d(28px,-30px,0) scale(.96)}
}
@keyframes o1-orb-b{
  0%  {transform:translate3d(0,0,0) scale(1)}
  50% {transform:translate3d(52px,-38px,0) scale(1.1)}
  100%{transform:translate3d(-24px,26px,0) scale(.95)}
}
.o1-home .hero::before{
  animation:o1-orb-a 17s ease-in-out infinite alternate;
  translate:calc(var(--o1-px,0) * -26px) calc(var(--o1-py,0) * -20px);
  transition:translate .9s cubic-bezier(.16,1,.3,1);
  will-change:transform,translate;
}
.o1-home .hero-inner::before{
  animation:o1-orb-b 23s ease-in-out infinite alternate;
  translate:calc(var(--o1-px,0) * 34px) calc(var(--o1-py,0) * 26px);
  transition:translate .9s cubic-bezier(.16,1,.3,1);
  will-change:transform,translate;
}
@media (prefers-reduced-motion:reduce){
  .o1-home .hero::before,.o1-home .hero-inner::before{animation:none;translate:none;transition:none}
}

/* sub-pages share the same living orbs */
.o1-page .page-hero::before{
  animation:o1-orb-a 17s ease-in-out infinite alternate;
  translate:calc(var(--o1-px,0) * -26px) calc(var(--o1-py,0) * -20px);
  transition:translate .9s cubic-bezier(.16,1,.3,1);
  will-change:transform,translate;
}
.o1-page .page-hero::after{
  animation:o1-orb-b 23s ease-in-out infinite alternate;
  translate:calc(var(--o1-px,0) * 34px) calc(var(--o1-py,0) * 26px);
  transition:translate .9s cubic-bezier(.16,1,.3,1);
  will-change:transform,translate;
}
@media (prefers-reduced-motion:reduce){
  .o1-page .page-hero::before,.o1-page .page-hero::after{animation:none;translate:none;transition:none}
}
