/* 两位助手共享动作语言：待机轻呼吸、点击点头、思考绕环、朗读光晕。 */
.avatar{position:relative;display:inline-block;width:44px;height:44px;flex:none;vertical-align:middle;isolation:isolate}.avatar-image{position:absolute;inset:0;border-radius:50%;overflow:hidden;background:#edf3ff;border:3px solid #fff;box-shadow:0 5px 15px #5277ba20}.avatar img{width:100%;height:100%;object-fit:cover;display:block}.avatar-star{position:absolute;z-index:2;color:#8eaee8;font-size:16px;pointer-events:none}.star-one{right:-7%;top:9%;animation:star-glow 3.7s ease-in-out infinite}.star-two{left:-8%;bottom:15%;font-size:13px;animation:star-glow 4.4s ease-in-out -1.5s infinite}.avatar-orbit{position:absolute;inset:-7px;border:1px solid #bcd0f633;border-radius:50%;z-index:-1;pointer-events:none}.hero-avatar{width:142px;height:142px}.hero-avatar .avatar-image{border-width:5px;box-shadow:0 12px 35px #5277ba25}.hero-avatar .avatar-orbit{inset:-11px}.hero-avatar .star-one{font-size:23px;right:-9px}.hero-avatar .star-two{font-size:18px;left:-12px}.tiny-avatar{width:38px;height:38px}.tiny-avatar .avatar-image{border-width:2px}.tiny-avatar .avatar-star,.tiny-avatar .avatar-orbit,.mini-avatar .avatar-star,.mini-avatar .avatar-orbit{display:none}.mini-avatar{width:31px;height:31px}.mini-avatar .avatar-image{border-width:1px}.choice-avatar{width:118px;height:118px}.choice-avatar .avatar-image{border-width:4px}.choice-avatar .avatar-star{font-size:15px}.idle .avatar-image{animation:avatar-breathe 5s ease-in-out infinite}.tiny-avatar.idle .avatar-image{animation:none}.thinking .avatar-orbit{display:block;border:2px dashed #93b3e9;animation:orbit-turn 7s linear infinite}.thinking .avatar-image{animation:avatar-think 2.8s ease-in-out infinite}.tiny-avatar.thinking .avatar-orbit,.mini-avatar.thinking .avatar-orbit{display:block;inset:-3px;border-width:1px}.speaking .avatar-image{animation:avatar-speak 1.2s ease-in-out infinite}.speaking .avatar-orbit{display:block;animation:speak-halo 1.2s ease-out infinite;border:2px solid #9fbdf4}.greeting .avatar-image{animation:avatar-greet 2.8s ease-in-out}.greeting .avatar-star{animation:star-glow .45s ease-in-out 2}@keyframes avatar-breathe{0%,100%{transform:translateY(0) rotate(-.6deg)}50%{transform:translateY(-3px) rotate(.6deg)}}@keyframes star-glow{0%,100%{opacity:.4;transform:scale(.85) rotate(0)}50%{opacity:1;transform:scale(1.1) rotate(12deg)}}@keyframes avatar-think{0%,100%{transform:rotate(-2deg)}50%{transform:rotate(2deg) translateY(-2px)}}@keyframes orbit-turn{to{transform:rotate(360deg)}}@keyframes avatar-speak{0%,100%{transform:translateY(0);box-shadow:0 0 0 3px #9fbdf420}50%{transform:translateY(-2px);box-shadow:0 0 0 7px #9fbdf440}}@keyframes speak-halo{from{transform:scale(.98);opacity:.7}to{transform:scale(1.1);opacity:0}}@keyframes avatar-greet{0%,100%{transform:rotate(0)}25%{transform:rotate(-6deg) translateY(-4px)}65%{transform:rotate(5deg) translateY(-2px)}}
@media(max-width:700px){.hero-avatar{width:112px;height:112px}.hero-avatar .avatar-image{border-width:4px}.hero-avatar .avatar-orbit{inset:-8px}.choice-avatar{width:94px;height:94px}.tiny-avatar{width:34px;height:34px}.mini-avatar{width:28px;height:28px}}
@media(prefers-reduced-motion:reduce){.avatar *{animation:none!important;transition:none!important}}
/* 表情换帧：图片叠放，避免切换 src 引起闪白；原始头像始终作为底图。 */
.avatar .avatar-frame{position:absolute;inset:0;opacity:0;pointer-events:none;transition:none;object-fit:cover}
.avatar[data-avatar="xiazi"]{--blink-duration:7.6s}
.avatar[data-avatar="xiaoyun"]{--blink-duration:6.8s}
.idle:not(.thinking):not(.speaking):not(.greeting) .frame-blink.frame-ready{animation:avatar-blink var(--blink-duration,7.2s) steps(1,end) infinite}
.thinking .frame-thinking.frame-ready{opacity:1}
.speaking .frame-thinking.frame-ready,.greeting .frame-thinking.frame-ready{opacity:0}
.speaking .avatar-frame{animation:none;opacity:0}
.speaking[data-mouth="1"] .frame-small.frame-ready{opacity:1}
.speaking[data-mouth="2"] .frame-speaking.frame-ready{opacity:1}
.speaking[data-mouth="3"] .frame-round.frame-ready{opacity:1}
.speaking[data-mouth="4"] .frame-wide.frame-ready{opacity:1}
.speaking .frame-blink.frame-ready{animation:avatar-speaking-blink 6.3s steps(1,end) infinite;z-index:2}
.greeting .frame-speaking.frame-ready{animation:avatar-hello-mouth 1.4s steps(1,end) 2}
.greeting .frame-small.frame-ready{animation:avatar-hello-small 1.4s steps(1,end) 2}
.greeting .frame-round.frame-ready{animation:avatar-hello-round 1.4s steps(1,end) 2}
.greeting .frame-wide.frame-ready{animation:avatar-hello-wide 1.4s steps(1,end) 2}
.greeting .frame-blink.frame-ready{animation:avatar-hello-blink 2.8s steps(1,end);z-index:2}
.choice-avatar.idle .frame-blink{animation-delay:1.7s}
.tiny-avatar.idle .frame-blink{animation:none!important}
@keyframes avatar-blink{0%,42%,45%,100%{opacity:0}43%,44%{opacity:1}}
@keyframes avatar-speaking-blink{0%,67%,70%,100%{opacity:0}68%,69%{opacity:1}}
@keyframes avatar-hello-mouth{0%,33%,52%,100%{opacity:0}20%,41%{opacity:1}}
@keyframes avatar-hello-small{0%,20%,71%,100%{opacity:0}8%,63%,93%{opacity:1}}
@keyframes avatar-hello-round{0%,41%,93%,100%{opacity:0}33%,82%{opacity:1}}
@keyframes avatar-hello-wide{0%,63%,100%{opacity:0}52%{opacity:1}}
@keyframes avatar-hello-blink{0%,28%,35%,100%{opacity:0}29%,34%{opacity:1}}
@media(prefers-reduced-motion:reduce){.avatar .avatar-frame{animation:none!important;opacity:0!important}.avatar.thinking .frame-thinking.frame-ready{opacity:1!important}}

