.scene>svg.hollywood-rig{z-index:2;pointer-events:none;overflow:hidden}.hollywood-sweep{transform-origin:0 18px;animation:hollywoodSweep var(--sweep) ease-in-out var(--offset) infinite alternate}.hollywood-lens{filter:drop-shadow(0 0 13px white);animation:hollywoodLens 5s ease-in-out var(--offset) infinite}.hollywood-flashes{position:absolute;inset:0;z-index:3;pointer-events:none;overflow:hidden}.hollywood-flashes i{position:absolute;width:var(--size);aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;opacity:0;background:radial-gradient(circle,#fff 0 3%,#f4fbffed 6%,#bee5ff70 17%,transparent 65%);animation:hollywoodFlash 6.8s linear var(--offset) infinite}.hollywood-flashes i::before,.hollywood-flashes i::after{content:'';position:absolute;left:49.5%;top:8%;width:1%;height:84%;background:linear-gradient(transparent,#fff,transparent)}.hollywood-flashes i::after{transform:rotate(90deg)}@keyframes hollywoodSweep{from{transform:rotate(var(--tilt))}to{transform:rotate(calc(var(--tilt) * -1))}}@keyframes hollywoodLens{0%,100%{opacity:.45}40%,60%{opacity:1}}@keyframes hollywoodFlash{0%,3%,100%{opacity:0}1%{opacity:.9}2%{opacity:.3}}.paused .hollywood-rig *,.paused .hollywood-flashes *{animation-play-state:paused!important}@media(prefers-reduced-motion:reduce){.hollywood-sweep,.hollywood-lens{animation:none}.hollywood-flashes{display:none}}

/* Foreground camera flashes originate at audience camera height. */
.hollywood-flashes{z-index:6}.hollywood-flashes i{background:radial-gradient(circle,#fff 0 5%,#fffef9 7%,#d8f2ffcc 13%,#a5daff70 25%,transparent 65%);filter:drop-shadow(0 0 18px #fff);animation:audienceCameraBurst var(--burst) linear var(--offset) infinite}.hollywood-flashes i::before,.hollywood-flashes i::after{left:48.5%;top:0;width:3%;height:100%;background:linear-gradient(transparent 4%,#fff 38% 62%,transparent 96%)}
@keyframes audienceCameraBurst{0%,12%,100%{opacity:0;transform:translate(-50%,-50%) scale(.75)}2%,5%{opacity:1;transform:translate(-50%,-50%) scale(1.15)}7%{opacity:.12}9%{opacity:.95;transform:translate(-50%,-50%) scale(1)}11%{opacity:0}}

.scene>svg.campaign-wall-animation{z-index:1;pointer-events:none;overflow:hidden}.wall-banner-shake{transform-origin:790px 280px;animation:wallBannerJitter .42s steps(1,end) infinite}.wall-name-flash{animation:wallNameBlink 1.5s steps(1,end) infinite}
@keyframes wallBannerJitter{0%,100%{transform:translate(0,0) rotate(0)}16%{transform:translate(-3px,2px) rotate(-.3deg)}33%{transform:translate(3px,-2px) rotate(.35deg)}50%{transform:translate(-2px,-1px) rotate(-.2deg)}66%{transform:translate(2px,2px) rotate(.25deg)}83%{transform:translate(-1px,1px)}}
@keyframes wallNameBlink{0%,35%,70%,100%{opacity:1;filter:brightness(1.1)}10%,45%,80%{opacity:1;filter:brightness(2.8) saturate(1.65) drop-shadow(0 0 9px #ff149d)}20%,55%,90%{opacity:1;filter:brightness(.12)}}
.paused .wall-banner-shake,.paused .wall-name-flash{animation-play-state:paused!important}@media(prefers-reduced-motion:reduce){.wall-banner-shake,.wall-name-flash{animation:none}}

.scene>svg.campaign-wall-animation{z-index:3}.wall-banner-shake{transform-origin:790px 105px;animation:hangingBanner .8s steps(1,end) infinite}.wall-name-flash{animation:visibleNameFlicker 1.4s steps(1,end) infinite}
@keyframes hangingBanner{0%,100%{transform:translate(0,9px) rotate(-2deg) skewY(-.5deg)}20%{transform:translate(-5px,11px) rotate(-3deg)}40%{transform:translate(5px,7px) rotate(.6deg)}60%{transform:translate(-3px,12px) rotate(-2.5deg)}80%{transform:translate(4px,8px) rotate(-.8deg)}}
@keyframes visibleNameFlicker{0%,34%,68%,100%{filter:brightness(.08);opacity:1}8%,42%,76%{filter:brightness(3.8) saturate(2) drop-shadow(0 0 12px #ff149d);opacity:1}17%,51%,85%{filter:brightness(.1);opacity:1}25%,59%,93%{filter:brightness(2.5) saturate(1.8);opacity:1}}
[data-owner-only][hidden]{display:none!important}@media(prefers-reduced-motion:reduce){.wall-banner-shake{animation:none;transform:translateY(9px) rotate(-2deg)}.wall-name-flash{animation:none}}

.wall-name-flash{animation:wallBrightFlicker 1.8s steps(1,end) infinite}@keyframes wallBrightFlicker{0%,32%,65%,100%{filter:brightness(1.1) saturate(1.2)}8%,40%,73%{filter:brightness(3) saturate(2.2) drop-shadow(0 0 12px #ff149d)}18%,50%,83%{filter:brightness(.15)}24%,57%,90%{filter:brightness(2.3) saturate(2) drop-shadow(0 0 7px #edff00)}}@media(prefers-reduced-motion:reduce){.wall-name-flash{animation:none}}
