/* Reserve the final scene's space and reveal only after its first rendered frame. */
#scene-loading {inset:0;top:0;left:0;transform:none;display:grid;place-items:center;overflow:hidden;pointer-events:none;opacity:1;transition:opacity .65s ease;}
#scene-loading .scene-skeleton-art {width:87%;height:87%;max-height:540px;opacity:.8;transform:perspective(900px) rotateX(23deg) rotateZ(-5deg);animation:scene-skeleton-breathe 2.4s ease-in-out infinite;}
#scene-loading:after {content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 30%,#ffffff65 48%,transparent 65%);transform:translateX(-110%);animation:scene-skeleton-sweep 2.8s ease-in-out infinite;}
#scene canvas,#scene .hotspots,#scene .scene-leaders {opacity:0;transition:opacity .65s ease;}
#scene[data-ready="loading"] .hotspots {visibility:hidden;}
#scene[data-ready="true"] canvas,#scene[data-ready="true"] .hotspots,#scene[data-ready="true"] .scene-leaders {opacity:1;}
#scene[data-ready="true"] #scene-loading,#scene[data-ready="fallback"] #scene-loading {opacity:0;}
#scene[data-ready="fallback"] .hotspots {opacity:1;}
.scene-controls button:disabled {opacity:.45;cursor:default;}
@keyframes scene-skeleton-breathe {0%,100%{opacity:.6}50%{opacity:.9}}
@keyframes scene-skeleton-sweep {to{transform:translateX(110%)}}
@media(prefers-reduced-motion:reduce){
  #scene-loading,#scene canvas,#scene .hotspots,#scene .scene-leaders {transition:none;}
  #scene-loading .scene-skeleton-art,#scene-loading:after {animation:none;}
  #scene-loading:after {display:none;}
}
