/* v20.20.6：页面从后台 / 其他页面回来时给动画元素一个短暂自然过渡，减少偏移跳变感 */
html.songline-animation-resuming [data-orbit-satellite]{
  transition:transform .62s cubic-bezier(.16,1,.3,1), opacity .46s ease !important;
  will-change:transform, opacity;
}
html.songline-animation-resuming .songline-starstream-layer,
.songline-starstream-layer.is-soft-resume{
  transition:opacity .46s ease, filter .46s ease !important;
  filter:saturate(1.02) brightness(1.02);
}
.audio-visualizer-page.is-av-soft-resume .av-canvas{
  transition:filter .52s ease, opacity .42s ease;
  filter:saturate(1.02) brightness(1.015);
}


/* v20.20.6：轨道/漂流带相位同步，避免先显示旧位置一帧后跳到实时位置 */
html.songline-page-hidden *,
html.songline-page-hidden *::before,
html.songline-page-hidden *::after{
  animation-play-state:paused !important;
}
html.songline-animation-resuming *,
html.songline-animation-resuming *::before,
html.songline-animation-resuming *::after{
  transition-timing-function:cubic-bezier(.22,1,.36,1) !important;
}


/* v20.20.6：刷新异常兜底。boot JS 如果竞态失败，不能让页面永久隐藏。 */
html:not(.is-booting).is-boot-preparing body > :not(.site-boot-overlay){
  opacity:1 !important;
  visibility:visible !important;
}


/* v20.20.6：统一旧动画逻辑后的相位恢复层。只软化，不再长时间隐藏。 */
.songline-starstream-layer.is-starstream-soft-sync{
  opacity:.72!important;
  transition:opacity .22s ease!important;
}
.songline-animation-resuming [data-waapi-orbit],
.songline-animation-resuming .audio-visualizer-page{
  will-change:transform,opacity;
}
html:not(.is-boot-preparing):not(.is-booting) body{
  visibility:visible!important;
}
html:not(.is-boot-preparing):not(.is-booting) body > :not(.site-boot-overlay){
  visibility:visible;
}
