/* Keep the authored choreography; don't animate surfaces that cannot be seen. */
.boot.ready,.boot.ready *,.boot.ready::before,.boot.ready::after,
.boot.ready *::before,.boot.ready *::after,
#verifyOverlay:not(.show),#verifyOverlay:not(.show) *,
#verifyOverlay:not(.show) *::before,#verifyOverlay:not(.show) *::after,
.robot-notifier:not(.active),.robot-notifier:not(.active) *,
.robot-notifier:not(.active) *::before,.robot-notifier:not(.active) *::after,
.robot-result-message:not(.show),.robot-result-message:not(.show) *,
.robot-result-message:not(.show)::before,.robot-result-message:not(.show)::after,
.robot-result-message:not(.show) *::before,.robot-result-message:not(.show) *::after {
  animation-play-state:paused!important;
}
.boot[hidden]{display:none!important}
html[data-portal-visible="false"] .screen *,
html[data-portal-visible="false"] .screen *::before,
html[data-portal-visible="false"] .screen *::after,
html[data-page-hidden="true"] *,html[data-page-hidden="true"] *::before,
html[data-page-hidden="true"] *::after {animation-play-state:paused!important}
/* Smaller blur bounds save repeated full-screen raster passes on phones. */
@media(pointer:coarse){
  /* Keep form text stable; retain touch feedback, robot travel and ocean motion. */
  .card:not(.connecting):not(.result-ready):not(.touch-active),.input,.submit{animation:none!important}
  .ocean-glow{filter:blur(8px)!important}
  .boot{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
  .boot .robot,.robot-final{filter:drop-shadow(0 8px 8px rgba(0,0,0,.5)) drop-shadow(0 0 10px rgba(38,197,255,.65))!important}
  .boot-brand-logo{filter:drop-shadow(0 0 8px rgba(40,195,255,.65))!important}
  .runner-travel{filter:drop-shadow(0 4px 5px rgba(0,35,80,.35))!important}
  .robot-notifier img{filter:drop-shadow(0 3px 5px rgba(20,80,140,.38))!important}
  .boot-glow{filter:blur(16px)!important}
  .light-beam{filter:blur(6px)!important}
}
