/* Arena mood: the stadium reacts to the real market and to a pending trade.
   Driven by arena-mood.js through --mood (0..1 overall) and --cbm-t (0..1 pending tension) on .cbs.
   Visual only. Everything is scoped to .cbs.cbm-on, which exists only while combat is visible. */
.cbm-wash,.cbm-vig,.cbm-dim{display:none;position:absolute;inset:0;pointer-events:none}
.cbs.cbm-on .cbm-wash,.cbs.cbm-on .cbm-vig,.cbs.cbm-on .cbm-dim{display:block}
.cbs.cbm-on{--mood:0;--cbm-t:0;--cbm-amp:1;--cbm-beat:1.1s}
/* light wash from the rig: grows with mood */
.cbm-wash{background:radial-gradient(90% 55% at 50% 10%,color-mix(in srgb,var(--tint) 60%,#fff 18%),transparent 72%);
  opacity:calc(var(--mood) * .5);transition:opacity 160ms linear}
/* heartbeat vignette: only while a trade is pending */
.cbm-vig{background:radial-gradient(120% 90% at 50% 55%,transparent 52%,color-mix(in srgb,var(--tint) 35%,#000) 100%);
  opacity:calc(var(--cbm-t) * .75);transition:opacity 200ms linear}
.cbs.cbm-on:not(.cbm-still) .cbm-vig{animation:cbm-beat var(--cbm-beat) ease-in-out infinite}
@keyframes cbm-beat{0%,100%{opacity:calc(var(--cbm-t) * .35)}12%{opacity:calc(var(--cbm-t) * .9)}24%{opacity:calc(var(--cbm-t) * .45)}36%{opacity:calc(var(--cbm-t) * .8)}55%{opacity:calc(var(--cbm-t) * .35)}}
/* groan dims the lights; deflate is just the variables easing back */
.cbm-dim{background:#02030a;opacity:0;transition:opacity 900ms ease-out}
.cbs.cbm-groan .cbm-dim{opacity:.42;transition:opacity 140ms ease-out}
.cbs.cbm-cheer .cbm-wash{opacity:.95;background:radial-gradient(95% 60% at 50% 8%,#ffe9a0,color-mix(in srgb,var(--tint) 45%,transparent) 45%,transparent 75%);transition:opacity 90ms linear}
.cbs.cbm-on .cbs-crowd{transition:translate 700ms ease-out,filter 700ms ease-out}
.cbs.cbm-groan .cbs-crowd{translate:0 6px;filter:brightness(.78) saturate(.8);transition:translate 160ms ease-out,filter 160ms ease-out}
/* flashes: few when calm, many when hot (frequency itself comes from playbackRate) */
.cbs.cbm-on .cbs-flashes{opacity:calc(.4 + .6 * min(1, var(--mood) * 2.2))}
.cbs.cbm-on .cbs-beams{opacity:calc(.8 + .2 * min(1, var(--mood) * 2))}
@media (prefers-reduced-motion:reduce){
  .cbs.cbm-on .cbm-vig{animation:none!important}
}
