/* Independent details; no pretend reading/typing/speech, no controller side effects. */
.bizbud-art.companion-life-bizbud>span{position:absolute;left:22.1838px;top:0;width:99.6324px;height:96px;background-size:100% 100%;background-repeat:no-repeat;pointer-events:none}
.life-bizbud-eye-bed,.life-bizbud-eyes{clip-path:polygon(29% 24%,62% 22%,63% 36.5%,29% 38%)}
.bizbud-art .life-bizbud-eye-bed{background-image:url('/assets/bizbud-depth-blink-384.webp')}
.bizbud-art .life-bizbud-eyes{background-image:url('/assets/bizbud-depth-384.webp');animation:life-bizbud-blink 6.8s linear infinite,life-bizbud-gaze 11s ease-in-out infinite}
.bizbud-art .life-bizbud-beacon{background-image:url('/assets/bizbud-depth-384.webp');clip-path:ellipse(6.2% 5% at 50% 7%);animation:life-blue-beacon 3.8s ease-in-out infinite;mix-blend-mode:screen}
@keyframes life-bizbud-blink{0%,42%,46%,100%{opacity:1}43%,45%{opacity:0}}
@keyframes life-bizbud-gaze{0%,25%,55%,100%{transform:translateX(0)}35%,45%{transform:translateX(.35px)}70%,80%{transform:translateX(-.35px)}}
@keyframes life-blue-beacon{0%,100%{filter:brightness(1);opacity:.35}50%{filter:brightness(1.6);opacity:.85}}
.stormy-sprite.companion-life-stormy,.choice-stormy-art.companion-life-stormy{position:relative;background-image:none!important}
.companion-life-stormy>span{position:absolute;inset:0;background-repeat:no-repeat;pointer-events:none;transform-origin:50% 32%}
.companion-life-stormy .life-stormy-body{clip-path:polygon(0 31%,100% 31%,100% 100%,0 100%);animation:none}
.companion-life-stormy .life-stormy-flame{clip-path:polygon(0 0,100% 0,100% 33%,0 33%);animation:life-flame-shape 1.7s ease-in-out infinite;filter:brightness(1.05)}
@keyframes life-stormy-breathe{0%,100%{transform:scaleY(1)}50%{transform:scaleY(1.008)}}
@keyframes life-flame-shape{0%,100%{transform:scaleX(1) scaleY(1) rotate(-1deg);filter:brightness(1.03)}35%{transform:scaleX(.95) scaleY(1.035) rotate(1.2deg);filter:brightness(1.18)}70%{transform:scaleX(1.025) scaleY(.98) rotate(-.7deg);filter:brightness(1.08)}}
#stormy-floater[data-activity=listening] .life-stormy-flame{animation-duration:2.3s}#stormy-floater[data-activity=thinking] .life-stormy-flame{animation-duration:1.3s}#stormy-floater[data-activity=speaking] .life-stormy-flame{animation-duration:.85s}
body.reduced-motion :is(.companion-life-bizbud,.companion-life-stormy)>span,html[data-companion-life-paused=true] :is(.companion-life-bizbud,.companion-life-stormy)>span{animation:none!important;transform:none!important;filter:none!important}
body.reduced-motion .life-bizbud-eyes,html[data-companion-life-paused=true] .life-bizbud-eyes{opacity:1!important}
@media(prefers-reduced-motion:reduce){.companion-life-bizbud>span,.companion-life-stormy>span{animation:none!important;transform:none!important;filter:none!important}.life-bizbud-eyes{opacity:1!important}}

/* Blink registration: the original open body stays immutable. Only two eye windows
   read the second approved frame; no cheek, mouth, silhouette or flame swapping. */
.companion-life-stormy .life-stormy-eye-left,.companion-life-stormy .life-stormy-eye-right{display:none}
.companion-life-stormy[data-life-idle=true] .life-stormy-eye-left,.companion-life-stormy[data-life-idle=true] .life-stormy-eye-right{display:block}
.companion-life-stormy .life-stormy-eye-left{clip-path:ellipse(6.8% 8% at 47.9% 54%)}
.companion-life-stormy .life-stormy-eye-right{clip-path:ellipse(6.8% 8% at 71.9% 54%)}
#stormy-floater[data-activity=idle] .stormy-sprite.companion-life-stormy,
#stormy-floater[data-activity=listening] .stormy-sprite.companion-life-stormy,
.choice-stormy-art.companion-life-stormy{transform:none!important;animation:none!important;transition:none!important}
.choice-stormy-art.companion-life-stormy :is(.life-stormy-eye-left,.life-stormy-eye-right){animation:life-stormy-home-blink 9.7s steps(1,end) infinite}
@keyframes life-stormy-home-blink{0%,37%,40%,73%,76%,79%,100%{background-position:0% 0%}38%,39%,74%,75%,77%,78%{background-position:93.75% 0%}}
.choice-avatar-stage[data-activity=speaking] .life-stormy-flame{animation-duration:.85s}
/* Real hover/focus is attention, not fabricated work. Existing state attributes
   alone adjust anticipation rhythms; these rules never start a request/session. */
:is(#stormy-floater,.choice-avatar-stage):is(:hover,:focus-within) .life-stormy-flame{filter:brightness(1.22)}
:is(#bizbud-home-trigger,#holo-bud):is(:hover,:focus-within) .life-bizbud-beacon{filter:brightness(1.8)}
#stormy-floater:is([data-activity=preparing],[data-activity=attending]) .life-stormy-flame{animation-duration:2.7s}
.bizbud-art .life-bizbud-eyes{animation-duration:12.7s,17.3s}
@keyframes life-bizbud-blink{0%,21%,24%,61%,64%,67%,100%{opacity:1}22%,23%,62%,63%,65%,66%{opacity:0}}
@keyframes life-flame-shape{0%,100%{transform:scaleX(1) scaleY(1) rotate(-1deg);filter:brightness(1.03)}23%{transform:scaleX(.96) scaleY(1.035) rotate(1deg);filter:brightness(1.18)}52%{transform:scaleX(1.025) scaleY(.985) rotate(-.7deg);filter:brightness(1.08)}78%{transform:scaleX(.985) scaleY(1.02) rotate(.4deg);filter:brightness(1.12)}}
#bizbud-home-trigger[data-activity=listening] .life-bizbud-beacon,.holo-phone[data-bud-activity=listening] .life-bizbud-beacon{animation-duration:4.7s}
#bizbud-home-trigger[data-activity=thinking] .life-bizbud-beacon,.holo-phone[data-bud-activity=thinking] .life-bizbud-beacon{animation-duration:2.6s}
#bizbud-home-trigger[data-activity=speaking] .life-bizbud-beacon,.holo-phone[data-bud-activity=speaking] .life-bizbud-beacon{animation-duration:1.9s}
/* Last in cascade: pause must also stop Home's eye animation. */
body.reduced-motion .companion-life-stormy>span,html[data-companion-life-paused=true] .companion-life-stormy>span{animation:none!important;transform:none!important;filter:none!important}
body.reduced-motion .companion-life-stormy[data-life-idle=true]>span,html[data-companion-life-paused=true] .companion-life-stormy[data-life-idle=true]>span{background-position:0% 0%!important}
@media(prefers-reduced-motion:reduce){.companion-life-stormy>span{animation:none!important;transform:none!important;filter:none!important}.companion-life-stormy[data-life-idle=true]>span{background-position:0% 0%!important}}
