/* Practical lighting is pinned to the photograph, so avoid a second camera move. */
.hero-worlds .slide.has-scene-light>img{animation:none;transform:none;transition:none}
.scene-light{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:hidden;mix-blend-mode:screen}
.scene-light .practical-light{animation:practical-breathe 3.1s ease-in-out var(--delay,0s) infinite;opacity:.5}
.scene-light .monitor-light{animation:monitor-breathe 4.6s ease-in-out infinite}
.scene-light *{animation-play-state:paused!important}
.hero-worlds[data-lights-playing=true] .slide.on .scene-light *{animation-play-state:running!important}
@keyframes practical-breathe{0%,100%{opacity:.2}35%{opacity:.85}65%{opacity:.35}80%{opacity:.6}}
@keyframes monitor-breathe{0%,100%{opacity:.55}45%{opacity:1}75%{opacity:.72}}
@media(prefers-reduced-motion:reduce){.hero-worlds .scene-light{display:none}}

.scene-light .rack-sweep{animation:rack-travel 3.8s linear infinite}
@keyframes rack-travel{from{transform:translateY(0)}to{transform:translateY(660px)}}
.scene-light .ceiling-light{animation:ceiling-cycle 4.3s ease-in-out var(--delay,0s) infinite}
.scene-light .cloud-lightning{opacity:0;animation:cloud-discharge 7.6s linear infinite}
@keyframes ceiling-cycle{0%,100%{opacity:.2}30%{opacity:.95}47%{opacity:.65}70%{opacity:.3}}
/* A single local cloud discharge per cycle, never a full-screen flash. */
@keyframes cloud-discharge{0%,23%,32%,100%{opacity:0}24%{opacity:.95}26%{opacity:.7}29%{opacity:.18}}

/* These patches contain only pixels sampled from the original scene. Equal RGB
   gain changes exposure without adding color, changing shape or enlarging lights. */
.scene-light--native{mix-blend-mode:normal}
.scene-light .native-light{animation:native-exposure 3.6s ease-in-out var(--delay,0s) infinite;filter:brightness(1)}
.scene-light .native-light--screen{animation-name:native-screen-exposure;animation-duration:4.8s}
.scene-light .native-light--window{animation-duration:4.1s}
.scene-light .native-light--machine{animation-duration:3.1s}
@keyframes native-exposure{0%,100%{filter:brightness(.65)}35%{filter:brightness(1.65)}62%{filter:brightness(.9)}80%{filter:brightness(1.3)}}
@keyframes native-screen-exposure{0%,100%{filter:brightness(.82)}45%{filter:brightness(1.3)}75%{filter:brightness(1)}}
