/* RUBIN V14 — Continuous ambient, not an alternate/ping-pong animation.
 * The light fields revolve at constant speed on seamless 360° loops, on independent
 * timelines. No timers, no JS frames, no video, no background-position repaints.
 * Respects the user's reduced-motion / reduced-data choices. */
.ambient-background{
  position:fixed!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  overflow:hidden!important;
  z-index:5!important;
  pointer-events:none!important;
  opacity:1!important;
  mix-blend-mode:screen;
  isolation:isolate;
  contain:strict;
}
/* Slowly rotating wide-area wash prevents the regions between the orbs from feeling static. */
.ambient-background::before{
  content:"";
  position:absolute;
  inset:-46vmax;
  opacity:.82!important;
  background:
    radial-gradient(ellipse 26% 35% at 28% 51%,rgba(222,28,81,.10),rgba(139,24,75,.045) 50%,transparent 80%),
    radial-gradient(ellipse 28% 37% at 70% 47%,rgba(115,49,195,.105),rgba(126,20,86,.035) 55%,transparent 83%);
  transform-origin:50% 50%;
  animation:rubin14Veil 92s linear infinite!important;
  will-change:transform;
}
.ambient-orb{
  top:50%!important;
  left:50%!important;
  right:auto!important;
  bottom:auto!important;
  min-width:0!important;
  min-height:0!important;
  display:block!important;
  position:absolute!important;
  border-radius:50%!important;
  filter:none!important;
  opacity:1!important;
  mix-blend-mode:normal!important;
  transform-origin:50% 50%;
  animation-direction:normal!important;
  animation-timing-function:linear!important;
  animation-iteration-count:infinite!important;
  will-change:transform;
  pointer-events:none;
}
/* Warm ruby bloom — slow circular motion, no stops at either end. */
.ambient-orb--one{
  width:min(88vw,1140px)!important;
  height:min(93vh,860px)!important;
  background:radial-gradient(ellipse 47% 45% at center,
    rgba(247,38,94,.30) 0%, rgba(211,26,92,.21) 20%,
    rgba(148,20,79,.105) 47%, rgba(120,14,62,.04) 65%,transparent 82%)!important;
  animation-name:rubin14OrbitOne!important;
  animation-duration:38s!important;
  animation-delay:-13.6s!important;
}
/* Blue-violet bloom, different orbit and speed so the gradient never repeats in sync. */
.ambient-orb--two{
  width:min(84vw,1080px)!important;
  height:min(100vh,910px)!important;
  background:radial-gradient(ellipse 46% 45% at center,
    rgba(119,60,220,.255) 0%, rgba(122,44,181,.17) 25%,
    rgba(103,30,149,.087) 49%,transparent 79%)!important;
  animation-name:rubin14OrbitTwo!important;
  animation-duration:57s!important;
  animation-delay:-31.2s!important;
}
/* Deep crimson bloom, slower yet; offsets avoid mirrored movement. */
.ambient-orb--three{
  width:min(87vw,1060px)!important;
  height:min(84vh,760px)!important;
  background:radial-gradient(ellipse 49% 49% at center,
    rgba(224,55,93,.20) 0%, rgba(143,33,108,.15) 29%,
    rgba(99,22,99,.06) 56%,transparent 82%)!important;
  animation-name:rubin14OrbitThree!important;
  animation-duration:73s!important;
  animation-delay:-64.8s!important;
}
.ambient-mesh{display:none!important}
/* The translate(-50%,-50%) centers each gradient; full clockwise orbits
 * produce pixel-identical start and end frames, avoiding visible jumps. */
@keyframes rubin14OrbitOne{
  from{transform:translate(-50%,-50%) rotate(0deg) translateX(-29vw) rotate(0deg)}
  to{transform:translate(-50%,-50%) rotate(360deg) translateX(-29vw) rotate(-360deg)}
}
@keyframes rubin14OrbitTwo{
  from{transform:translate(-50%,-50%) rotate(0deg) translateX(31vw) rotate(0deg)}
  to{transform:translate(-50%,-50%) rotate(-360deg) translateX(31vw) rotate(360deg)}
}
@keyframes rubin14OrbitThree{
  from{transform:translate(-50%,-50%) rotate(0deg) translateY(23vh) rotate(0deg)}
  to{transform:translate(-50%,-50%) rotate(360deg) translateY(23vh) rotate(-360deg)}
}
@keyframes rubin14Veil{
  from{transform:rotate(0deg)}
  to{transform:rotate(360deg)}
}
/* Let the living lights read through the hero's dark surface, keeping high
 * contrast on top. The fixed layer composes over existing opaque sections. */
.hero{background:#09090ec7!important}
/* Existing cards, text and header remain unaffected by hover/scroll. */
@media(max-width:720px){
  .ambient-background{inset:0!important}
  .ambient-orb--one{width:125vw!important;height:85vh!important}
  .ambient-orb--two{width:132vw!important;height:91vh!important}
  .ambient-orb--three{width:115vw!important;height:78vh!important}
  /* preserve legibility on the smallest screens */
  .ambient-orb--one{opacity:.84!important}
  .ambient-orb--two{opacity:.84!important}
  .ambient-orb--three{opacity:.84!important}
  .ambient-background::before{opacity:.58!important}
}
@media(prefers-reduced-motion:reduce){
  .ambient-background::before,.ambient-orb{animation:none!important;will-change:auto!important}
  .ambient-orb--one{transform:translate(-70%,-60%)!important}
  .ambient-orb--two{transform:translate(-18%,-34%)!important}
  .ambient-orb--three{transform:translate(-55%,-15%)!important}
}
@media(prefers-reduced-data:reduce){
  .ambient-background::before,.ambient-orb{animation:none!important;will-change:auto!important}
}
@media print{.ambient-background{display:none!important}}
