/* Lumi, alive.
 *
 * User 2026-08-07: "make Lumi's presence in the website to be alive and not a
 * frozen image, mild pulse with Lumi's palette, slow, but noticeable." And:
 * "all across ventures too, everywhere Lumi's there."
 *
 * One rule, every surface. Lumi is the same intelligence wearing the same name
 * on the deck, the venture pages and inside the venture apps - so she should
 * breathe the same way in all of them rather than being animated once per
 * component by hand.
 *
 * The animation is on the GLOW, not on the image: scaling the orb would nudge
 * the layout around it, and Lumi sits inside flex rows next to text that must
 * not move. The drop-shadow cycles through her own palette - violet, cyan,
 * pink - so the light changes hue as well as strength, which is what reads as
 * alive rather than as a blinking element.
 *
 * 6 seconds: slow enough to be presence rather than a notification, long enough
 * that a reader notices it on a page they are already looking at.
 *
 * prefers-reduced-motion turns it off. A pulsing element is exactly what that
 * setting exists for, and she still reads fine holding one steady colour. */

@keyframes lumi-alive {
  0%   { filter: drop-shadow(0 0 10px rgba(155,110,243,0.55)); }
  33%  { filter: drop-shadow(0 0 20px rgba(133,213,230,0.78)); }
  66%  { filter: drop-shadow(0 0 15px rgba(244,174,245,0.68)); }
  100% { filter: drop-shadow(0 0 10px rgba(155,110,243,0.55)); }
}

.lumi-alive,
.dc-orb,
.hbp-orb,
.src-lumi-orb,
.lumi-orb,
img[src*="lumi-character"] {
  animation: lumi-alive 6s ease-in-out infinite;
}

@media (prefers-reduced-motion: reduce) {
  .lumi-alive,
  .dc-orb,
  .hbp-orb,
  .src-lumi-orb,
  .lumi-orb,
  img[src*="lumi-character"] {
    animation: none;
    filter: drop-shadow(0 0 14px rgba(155,110,243,0.6));
  }
}
