/* SVG 关节在各自局部坐标中旋转，肩肘、髋膝分开，附件随手移动。 */
.companion-rig.companion-anime{display:block;width:100%;height:auto;aspect-ratio:4/5;overflow:visible;pointer-events:none;filter:drop-shadow(0 3px 4px #23323b18)}
.companion-rig .anime-body{transform-box:view-box;transform-origin:120px 272px;animation:rig-breathe calc(4.8s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig .anime-head{transform-box:view-box;transform-origin:0px 48px;animation:rig-head calc(8s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig .anime-arm,.companion-rig .anime-forearm,.companion-rig .anime-leg,.companion-rig .anime-shin{transform-box:view-box;transform-origin:0px 0px}
.companion-rig .anime-arm--left{animation:rig-arm-rest calc(7s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig .anime-arm--right{animation:rig-arm-rest calc(7s * var(--anim-speed,1)) ease-in-out infinite reverse}
.companion-rig .anime-forearm{animation:rig-elbow-rest calc(7s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig .anime-leg--left{animation:rig-weight calc(8s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig .anime-shin--left{animation:rig-ankle calc(8s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig .anime-blink{transform-box:view-box;transform-origin:0px 9px;animation:rig-blink calc(5.8s * var(--anim-speed,1)) linear infinite}
.companion-rig[data-skin="anime-fox"] .anime-blink{animation-delay:1.3s}
.companion-rig[data-skin="anime-tide"] .anime-blink{animation-delay:2.4s}
.companion-rig[data-skin="anime-star"] .anime-blink{animation-delay:.7s}
.companion-rig .anime-tail{transform-box:view-box;transform-origin:120px 215px;animation:rig-tail calc(6s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig .anime-cape,.companion-rig .anime-hair-lock{transform-box:fill-box;transform-origin:50% 0%;animation:rig-cloth calc(6.5s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="wave"] .anime-arm--right{animation:rig-wave-shoulder calc(1.2s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="wave"] .anime-forearm--right{animation:rig-wave-elbow calc(.6s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="celebrate"] .anime-body{animation:rig-hop calc(.9s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="celebrate"] .anime-arm--left{animation:rig-cheer-left calc(.9s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="celebrate"] .anime-arm--right{animation:rig-cheer-right calc(.9s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="celebrate"] .anime-forearm{animation:rig-cheer-elbow calc(.9s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="celebrate"] .anime-leg--left{animation:rig-step calc(.9s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="celebrate"] .anime-leg--right{animation:rig-step calc(.9s * var(--anim-speed,1)) ease-in-out infinite reverse}
.companion-rig[data-action="celebrate"] .anime-shin{animation:rig-knee calc(.9s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="comfort"] .anime-arm--left{animation:rig-comfort-arm calc(2.8s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="comfort"] .anime-forearm--left{animation:rig-comfort-elbow calc(2.8s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="comfort"] .anime-head{animation:rig-nod calc(2.8s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="ponder"] .anime-arm--right{animation:none;transform:rotate(70deg)}
.companion-rig[data-action="ponder"] .anime-forearm--right{animation:none;transform:rotate(-115deg)}
.companion-rig[data-action="ponder"] .anime-head{animation:rig-ponder calc(3s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="nod"] .anime-head{animation:rig-nod calc(1.8s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="nod"] .anime-arm--left{animation:none;transform:rotate(-25deg)}
.companion-rig[data-action="nod"] .anime-forearm--left{animation:none;transform:rotate(-55deg)}
.companion-rig[data-action="sleep"] .anime-head{animation:rig-sleep calc(5s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="drag"] .anime-body{animation:none;transform:translateY(-3px)}
.companion-rig[data-action="drag"] .anime-arm--left{animation:none;transform:rotate(55deg)}
.companion-rig[data-action="drag"] .anime-arm--right{animation:none;transform:rotate(-55deg)}
.companion-rig[data-action="drag"] .anime-leg--left{animation:rig-dangle calc(.8s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-action="drag"] .anime-leg--right{animation:rig-dangle calc(.8s * var(--anim-speed,1)) ease-in-out infinite reverse}
.companion-rig[data-action="drag"] .anime-shin{animation:rig-knee calc(.8s * var(--anim-speed,1)) ease-in-out infinite}
.companion-rig[data-expression="thinking"] .anime-thought-mark,.companion-rig[data-expression="surprised"] .anime-surprise-mark,.companion-rig[data-expression="sleepy"] .anime-sleep-mark{opacity:1}
.companion-rig.is-speaking .anime-mouth{transform-box:view-box;transform-origin:0px 32px;animation:rig-speak calc(.38s * var(--anim-speed,1)) ease-in-out infinite}
.companion-art[data-expression="happy"] .pet-eyes-open,.companion-art[data-expression="shy"] .pet-eyes-open{opacity:0}
.companion-art[data-expression="happy"] .pet-eyes-happy,.companion-art[data-expression="shy"] .pet-eyes-happy{opacity:1}
.companion-skin-grid--anime{grid-template-columns:repeat(2,minmax(0,1fr))}
.companion-skin-grid--anime .companion-rig.companion-anime{width:90px;max-width:100%}
.companion-skin-grid--anime>button>small{font-size:9px;line-height:1.6;opacity:.8;text-align:center}
.companion-reaction-demo{margin:14px 0 20px;border-bottom:1px solid var(--line);padding-bottom:16px}
.companion-reaction-demo>span{display:block;color:var(--text-soft);font-size:11px;margin-bottom:9px}
.companion-reaction-demo>div{display:flex;flex-wrap:wrap;gap:6px}
.companion-reaction-demo button{font-size:11px;border:1px solid var(--line);background:var(--surface);color:var(--text-soft);border-radius:7px;padding:5px 9px}
.companion-reaction-demo button:hover{color:var(--accent);border-color:var(--accent)}
.ai-avatar.ai-companion-avatar{width:49px;height:49px;min-width:49px;flex:none;display:block;background:transparent;border:0;border-radius:10px;padding:0;line-height:0;cursor:pointer;overflow:hidden}
#ai-header-avatar{border:0}
#ai-header-avatar:disabled{opacity:1;cursor:default}
.ai-chat-head>div:has(#ai-title){min-width:0;flex:1}
.ai-chat-head #ai-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ai-companion-avatar .companion-rig{filter:none;aspect-ratio:1/1;height:100%;overflow:hidden}
.companion-skin-grid .companion-rig *,.no-motion .companion-rig *,.companion-rig.no-motion *{animation:none!important;transition:none!important}
.site-companion[hidden] .companion-rig *,.companion-rig.motion-paused *{animation-play-state:paused!important}
@keyframes rig-breathe{0%,100%{transform:translateY(0)}50%{transform:translateY(-2px)}}
@keyframes rig-head{0%,70%,100%{transform:rotate(0)}80%{transform:rotate(-2deg)}90%{transform:rotate(1deg)}}
@keyframes rig-arm-rest{0%,100%{transform:rotate(-2deg)}50%{transform:rotate(3deg)}}
@keyframes rig-elbow-rest{0%,100%{transform:rotate(0)}50%{transform:rotate(-4deg)}}
@keyframes rig-weight{0%,60%,100%{transform:rotate(0)}75%{transform:rotate(3deg)}}
@keyframes rig-ankle{0%,60%,100%{transform:rotate(0)}75%{transform:rotate(-4deg)}}
@keyframes rig-blink{0%,42%,46%,100%{transform:scaleY(1)}44%{transform:scaleY(.06)}}
@keyframes rig-tail{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(4deg)}}
@keyframes rig-cloth{0%,100%{transform:rotate(-1deg)}50%{transform:rotate(1.5deg)}}
@keyframes rig-wave-shoulder{0%,100%{transform:rotate(-108deg)}50%{transform:rotate(-120deg)}}
@keyframes rig-wave-elbow{0%,100%{transform:rotate(-20deg)}50%{transform:rotate(16deg)}}
@keyframes rig-hop{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
@keyframes rig-cheer-left{0%,100%{transform:rotate(115deg)}50%{transform:rotate(130deg)}}
@keyframes rig-cheer-right{0%,100%{transform:rotate(-115deg)}50%{transform:rotate(-130deg)}}
@keyframes rig-cheer-elbow{0%,100%{transform:rotate(-10deg)}50%{transform:rotate(15deg)}}
@keyframes rig-step{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(7deg)}}
@keyframes rig-knee{0%,100%{transform:rotate(0)}50%{transform:rotate(13deg)}}
@keyframes rig-comfort-arm{0%,100%{transform:rotate(-18deg)}50%{transform:rotate(-28deg)}}
@keyframes rig-comfort-elbow{0%,100%{transform:rotate(-50deg)}50%{transform:rotate(-65deg)}}
@keyframes rig-nod{0%,100%{transform:rotate(0) translateY(0)}45%{transform:rotate(3deg) translateY(2px)}}
@keyframes rig-ponder{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(-10deg)}}
@keyframes rig-sleep{0%,100%{transform:rotate(5deg)}50%{transform:rotate(8deg) translateY(1px)}}
@keyframes rig-dangle{0%,100%{transform:rotate(-10deg)}50%{transform:rotate(10deg)}}
@keyframes rig-speak{0%,100%{transform:scaleY(1)}50%{transform:scaleY(1.35)}}
@media(max-width:520px){.ai-avatar.ai-companion-avatar{width:35px;height:35px;min-width:35px}.companion-skin-grid--anime>button>small{font-size:10px}}
@media(prefers-reduced-motion:reduce){.companion-rig *{animation:none!important;transition:none!important}}
