/* Keep the loaded node/source cached; scrolling cannot trigger another download.
   Only one alpha layer paints, preventing doubled outlines. */
.shiva-landing .transparent-video[data-clip]>.animation-layer{display:none}
.shiva-landing .transparent-video[data-clip].playing>.animation-layer{display:block}
.shiva-landing .transparent-video[data-clip].playing>img:first-child{visibility:hidden}
/* Reduce competing blur/shadow passes on low-resource profiles while retaining
   native movement, the CGI contact shadows, floor and gradients. */
.shiva-landing html[data-media-tier="lite"] .mascot-video{filter:saturate(.62) hue-rotate(19deg) brightness(.86) contrast(1.025) drop-shadow(2px 10px 8px #01050399)}
.shiva-landing html[data-media-tier="lite"] .phone-video,.shiva-landing html[data-media-tier="lite"] .laptop-video{filter:drop-shadow(0 12px 14px #0004)}
.shiva-landing html[data-media-tier="lite"] .hero-mist,.shiva-landing html[data-media-tier="lite"] .hero-mist-two,.shiva-landing html[data-media-tier="lite"] .hero-front-haze,.shiva-landing html[data-media-tier="lite"] .hero-aura,.shiva-landing html[data-media-tier="lite"] .device-scene-mist{filter:none}
.shiva-landing html[data-media-tier="lite"] .hero-mist,.shiva-landing html[data-media-tier="lite"] .hero-mist-two{opacity:.55}

/* Native alpha-video layer uses the same approved geometry as the poster. */
.shiva-landing .transparent-video[data-clip]>video.animation-layer{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}

/* Colour grading is baked into mascot frames; shadows use the small static
   poster so a 60 fps frame never enters the expensive CSS blur/filter chain. */
.shiva-landing .transparent-video[data-clip].playing{filter:none!important}
.shiva-landing .transparent-video[data-clip].playing>img:first-child{visibility:hidden}
.shiva-landing .transparent-video[data-clip]>.animation-shadow{display:none;pointer-events:none}
.shiva-landing .transparent-video[data-clip].playing>.animation-shadow{display:block}
/* Under sustained dropped frames, retain the gradients and shadows while
   freezing only decorative motion around the three requested scenes. */
.shiva-landing .hero.media-calm :is(.hero-mist,.hero-aura,.hero-front-haze,.hero-floor span,.hero-light-ribbon){animation-play-state:paused!important}
.shiva-landing :is(.phone-stage,.laptop-stage).media-calm :is(.device-scene-mist,.stage-comet){animation-play-state:paused!important}

/* Visible interactions and reveals must never inherit a media budget pause. */

/* Cache the same CGI installation as one transparent texture under sustained
   paint pressure instead of repeatedly composing blurred SVG/gradient layers. */
.shiva-landing .phone-stage.media-calm .device-scene{background:url('../assets/phone-scene-still.webp') center/100% 100% no-repeat;mask-image:none;-webkit-mask-image:none}
.shiva-landing .laptop-stage.media-calm .device-scene{background:url('../assets/laptop-scene-still.webp') center/100% 100% no-repeat;mask-image:none;-webkit-mask-image:none}
.shiva-landing :is(.phone-stage,.laptop-stage).media-calm .device-scene>*{display:none}

/* A decoded frame remains selected during scrolling, foreground changes and
   autoplay interruptions. Posters are replaced only after a new layer is ready. */
.shiva-landing .transparent-video[data-clip][data-media-frame="ready"]>.animation-layer{display:block}
.shiva-landing .transparent-video[data-clip][data-media-frame="ready"]>img:first-child{visibility:hidden}
.shiva-landing .transparent-video[data-clip][data-media-frame="ready"]>.animation-shadow{display:block}
.shiva-landing .transparent-video[data-clip]>canvas.animation-layer{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}
.shiva-landing .transparent-video[data-clip]>.animation-source{position:absolute;width:1px;height:1px;left:50%;top:50%;opacity:0;pointer-events:none}
