/* Keep the approved title anchor; the short light and text reveal share one motion curve. */
.hero-bb .intro-final-jp{position:relative;overflow:hidden}
.hero-bb .bb-copy.is-in .intro-final-jp{animation:none}
.hero-bb .intro-jp-text{display:block}
.hero-bb .intro-jp-streak{position:absolute;left:0;top:50%;width:14%;height:1px;background:currentColor;opacity:0;pointer-events:none}
.hero-bb .bb-copy.is-in .intro-jp-text{animation:endingLightReveal .32s cubic-bezier(.2,.8,.2,1) both}
.hero-bb .bb-copy.is-in .intro-jp-streak{animation:endingLightSweep .32s cubic-bezier(.2,.8,.2,1) both}
.hero-bb .bb-copy.is-in .intro-final-en{animation-delay:.65s}
.hero-bb .bb-copy.is-in .intro-final-sub{animation-delay:1.2s}
@keyframes endingLightReveal{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}
@keyframes endingLightSweep{0%{left:0;opacity:0}6%{opacity:1}90%{opacity:1}100%{left:100%;opacity:0}}
.hero-bb.intro-skipped .bb-copy.is-in .intro-jp-text{animation:none;clip-path:none}
.hero-bb.intro-skipped .intro-jp-streak{display:none}
@media(prefers-reduced-motion:reduce){
  .hero-bb .bb-copy.is-in .intro-jp-text{animation:none;clip-path:none}
  .hero-bb .intro-jp-streak{display:none}
}

/* One short exposure pulse, followed by a small focus correction without spatial movement. */
.hero-bb.cinema-return::after{opacity:0;transition:none}
.hero-bb.cinema-return .bb-copy{color:#000;transition:none;animation:cinemaWakeFocus .18s cubic-bezier(.22,1,.36,1) .06s both}
.hero-bb .cinema-flash{position:absolute;inset:0;z-index:6;background:#fff;pointer-events:none;animation:cinemaExposure .24s linear both}
@keyframes cinemaExposure{0%{opacity:1}25%{opacity:.9}100%{opacity:0}}
@keyframes cinemaWakeFocus{from{filter:blur(3px)}to{filter:blur(0)}}
.hero-bb.intro-skipped .cinema-flash{display:none}
@media(prefers-reduced-motion:reduce){
  .hero-bb .cinema-flash{display:none;animation:none}
  .hero-bb.cinema-return .bb-copy{color:#000;animation:none;filter:none}
}
