/* AlyOrb — the canvas, and the static fallback used when WebGL is missing or
   reduced motion is requested. The fallback never animates: its state shows
   only as brightness, which is exactly what reduced motion asks for. Colours
   are the orb's own (deep blue body, ice-cyan core, faint violet rim) and the
   glow is the shared --aly-glow token. */
.aly-orb-canvas { display: block; width: 100%; height: 100%; }

.aly-orb-static {
  --orb-bright: 1;
  position: relative; width: 83%; aspect-ratio: 1; border-radius: 50%;
  background:
    radial-gradient(circle at 50% 50%, rgb(214 244 255 / 0.9) 0 1.5%, rgb(92 200 242 / 0.6) 6%,
      rgb(52 128 214 / 0.32) 18%, transparent 38%),
    radial-gradient(circle at 34% 28%, #17398a 0%, #0c1d48 40%, #080f26 68%, #05070d 100%);
  box-shadow:
    inset 0 0 0 1px rgb(143 124 247 / 0.28),
    inset 0 0 16px rgb(143 124 247 / 0.14),
    0 0 42px var(--aly-glow, rgba(92, 200, 242, 0.25));
  filter: brightness(calc(var(--orb-bright) + var(--orb-wake, 0)));
  transition: filter .2s ease;
}
/* Two fine meridians, so the still orb still reads as made of filaments. */
.aly-orb-static::before,
.aly-orb-static::after {
  content: ""; position: absolute; inset: 6%; border-radius: 50%;
  border: 1px solid rgb(92 200 242 / 0.28);
  transform: rotate(58deg) scaleY(0.34);
}
.aly-orb-static::after { inset: 10%; transform: rotate(-32deg) scaleY(0.62); border-color: rgb(143 124 247 / 0.22); }

.aly-orb-static[data-orb-state="typing"] { --orb-bright: 1.06; }
.aly-orb-static[data-orb-state="thinking"] { --orb-bright: 1.32; }
.aly-orb-static[data-orb-state="answering"] { --orb-bright: 1.16; }
/* Wake, without motion: a brief brightness pulse and nothing else. */
.aly-orb-static.is-waking { --orb-wake: 0.4; }
