.character-button{animation:none;--cheek-x:35%;--cheek-y:61%;--tap-x:35%;--tap-y:62%;user-select:none;-webkit-user-select:none}
.speech{min-height:80px}
.buddy-float,.buddy-idle,.buddy-action,.buddy-portrait{position:absolute;inset:0;display:block;width:100%;height:100%;pointer-events:none;transform-origin:50% 86%}
.buddy-float{animation:buddy-breathing 5.8s ease-in-out infinite;will-change:transform}
.character-button #character-image,.character-button #cheek-canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.has-cheek-frame #character-image{visibility:hidden}
.is-reacting .buddy-float{animation-play-state:paused}
.character-button[data-idle="tilt"] .buddy-idle{animation:buddy-idle-tilt 2.8s ease-in-out both}
.character-button[data-idle="nod"] .buddy-idle{animation:buddy-idle-nod 2.3s ease-in-out both}
.character-button[data-idle="shift"] .buddy-idle{animation:buddy-idle-shift 3.1s ease-in-out both}
.character-button[data-idle="stretch"] .buddy-idle{animation:buddy-idle-stretch 2.6s ease-in-out both}
.buddy-action.action-breath{animation:buddy-poke .65s ease-in-out}
.buddy-action.action-bounce{animation:buddy-bounce .65s ease-in-out 2}
.buddy-action.action-sway{animation:buddy-sway .6s ease-in-out 3}
.cheek-blush{position:absolute;left:var(--cheek-x);top:var(--cheek-y);height:7%;width:15%;border-radius:50%;background:radial-gradient(ellipse,#e9a08770,transparent 70%);transform:translate(-50%,-50%);opacity:0}
.is-poking .cheek-blush{animation:cheek-warmth 1s ease-out both}
.cheek-ring{position:absolute;left:var(--tap-x);top:var(--tap-y);width:19px;height:19px;border:1.5px solid #e6b09a;border-radius:50%;pointer-events:none;opacity:0;z-index:3}
.is-poking .cheek-ring{animation:cheek-ring .65s ease-out both}
#character-fx{left:var(--tap-x);top:var(--tap-y);right:auto;font-size:23px;color:#da9a85;line-height:1;opacity:0;z-index:4;text-shadow:0 1px 0 #fff7ed80}
#character-fx.show{animation:cheek-heart 1.05s ease-out both}
.character-button.motion-paused .buddy-float,.character-button.motion-paused .buddy-idle,.character-button.motion-paused .buddy-action{animation:none!important;will-change:auto}
.motion-paused #character-fx.show{animation:none;opacity:.8;transform:translate(-50%,-50%)}
.motion-paused.is-poking .cheek-ring{animation:none}
@keyframes buddy-breathing{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-3px) scale(1.003,1.008)}}
@keyframes buddy-idle-tilt{0%,100%{transform:rotate(0)}28%,56%{transform:rotate(-2.5deg) translateY(-.5px)}78%{transform:rotate(.5deg)}}
@keyframes buddy-idle-nod{0%,100%{transform:translateY(0) scaleY(1)}30%{transform:translateY(2px) scaleY(.985)}56%{transform:translateY(-1px) scaleY(1.006)}78%{transform:translateY(.5px)}}
@keyframes buddy-idle-shift{0%,100%{transform:translateX(0) rotate(0)}30%{transform:translateX(2px) rotate(1.2deg)}66%{transform:translateX(-1px) rotate(-.8deg)}}
@keyframes buddy-idle-stretch{0%,100%{transform:scale(1) translateY(0)}35%,57%{transform:scale(.99,1.018) translateY(-1px)}77%{transform:scale(1.004,.998)}}
@keyframes cheek-warmth{0%,100%{opacity:0}20%,45%{opacity:.8}70%{opacity:.25}}
@keyframes cheek-ring{0%{opacity:.65;transform:translate(-50%,-50%) scale(.5)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.9)}}
@keyframes cheek-heart{0%{opacity:0;transform:translate(-50%,-30%) scale(.5) rotate(-12deg)}18%{opacity:1;transform:translate(-50%,-90%) scale(1.05) rotate(7deg)}60%{opacity:.85;transform:translate(-40%,-160%) scale(.95) rotate(-5deg)}100%{opacity:0;transform:translate(-35%,-230%) scale(.7) rotate(5deg)}}
.character-button[data-expression="mushroom"] .buddy-float{animation-name:mushroom-breathing;animation-duration:6.2s}
.character-button[data-expression="mushroom"][data-idle="tilt"] .buddy-idle{animation-name:mushroom-tip}
.character-button[data-expression="mushroom"][data-idle="nod"] .buddy-idle{animation-name:mushroom-nod}
.character-button[data-expression="mushroom"][data-idle="shift"] .buddy-idle{animation-name:mushroom-rock}
.character-button[data-expression="mushroom"][data-idle="stretch"] .buddy-idle{animation-name:mushroom-stretch}
.character-button[data-expression="mushroom"] .buddy-action.action-breath{animation:mushroom-greet .95s ease-in-out}
@keyframes mushroom-breathing{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-2.5px) scale(1.006,1.012)}}
@keyframes mushroom-tip{0%,100%{transform:rotate(0)}30%,50%{transform:rotate(-1.4deg)}72%{transform:rotate(.9deg)}}
@keyframes mushroom-nod{0%,100%{transform:scale(1) translateY(0)}32%{transform:scale(1.012,.977) translateY(2px)}59%{transform:scale(.996,1.008) translateY(-1px)}80%{transform:scale(1.003,.996)}}
@keyframes mushroom-rock{0%,100%{transform:rotate(0) translateX(0)}27%{transform:rotate(2deg) translateX(1px)}62%{transform:rotate(-1.7deg) translateX(-1px)}83%{transform:rotate(.6deg)}}
@keyframes mushroom-stretch{0%,100%{transform:scale(1)}37%,55%{transform:scale(.985,1.025) translateY(-1px)}78%{transform:scale(1.012,.99)}}
@keyframes mushroom-greet{0%,100%{transform:scale(1) translateY(0) rotate(0)}20%{transform:scale(1.035,.955) translateY(1px)}43%{transform:scale(.985,1.025) translateY(-7px) rotate(-2deg)}65%{transform:scale(1.018,.982) translateY(0) rotate(1.2deg)}82%{transform:scale(.997,1.006) translateY(-1px)}}
.shop-grid.outfit-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(max-width:760px){.speech{min-height:70px}.has-session #page-home .speech{min-height:62px}.shop-grid.outfit-grid{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){.buddy-float,.buddy-idle,.buddy-action,.cheek-ring,.cheek-blush,#character-fx{animation:none!important;transition:none!important}.motion-paused #character-fx.show{opacity:.8}}
