/* One static logo survives React mounting: 300ms in, >=2000ms still, 300ms out. */
.bt-sequence-active .bt-fv-brand,.bt-sequence-active .bt-butler-introduction,.bt-sequence-active .bt-fv-first-chat{opacity:0;transform:translateY(-10px);animation:bt-sequence-arrive 1s ease-out both}
.bt-sequence-active .bt-fv-brand{animation-delay:var(--bt-opening-delay,2.6s)}
.bt-sequence-active .bt-butler-introduction{animation-delay:calc(var(--bt-opening-delay,2.6s) + 1s)}
.bt-sequence-active .bt-fv-first-chat{animation-delay:calc(var(--bt-opening-delay,2.6s) + 2s)}
.bt-startup-center{position:fixed;inset:0 0 45px;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:30;animation:bt-center-arrive .3s ease-in-out both,bt-startup-expire .001s linear 8s forwards}
.bt-startup-center img{width:120px;height:auto;max-width:75%;object-fit:contain}
.bt-startup-center.bt-startup-fade{animation:bt-center-leave .3s ease-in-out both}
/* Independent deadline also covers deferred/missing startup JavaScript. */
@keyframes bt-startup-expire{from,to{visibility:hidden}}
@keyframes bt-center-arrive{from{opacity:0;filter:brightness(.6)}to{opacity:1;filter:brightness(1.4) drop-shadow(0 0 14px rgba(255,255,255,.45))}}
@keyframes bt-center-leave{from{opacity:1;filter:brightness(1.4) drop-shadow(0 0 14px rgba(255,255,255,.45))}to{opacity:0;filter:brightness(1)}}
@keyframes bt-sequence-arrive{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.bt-sequence-active .bt-fv-brand,.bt-sequence-active .bt-butler-introduction,.bt-sequence-active .bt-fv-first-chat{opacity:1;transform:none;animation:none}.bt-startup-center{display:none}}
