/* V10.3 game feel (DESK-owned): counterparty moods and one-shot reactions driven by real
   outcomes. Moods are rendered state (data-mood on .pit-counterparty, from pit-ledger); fx-*
   classes are added by pit-fx for one animation after an action and removed on animationend.
   Everything that moves is under prefers-reduced-motion: no-preference. */
.fig .head,.fig .brow,.fig .mouth-shut,.fig .arm-raise{transform-box:fill-box;transform-origin:center;transition:transform .18s ease-out}
.fig .arm-raise{transform-origin:50% 100%}
[data-mood="pleased"] .fig .brow{transform:translateY(-1.6px)}
[data-mood="pleased"] .fig .head{transform:rotate(-3deg)}
[data-mood="pleased"] .fig .mouth-shut{transform:scale(1.25,1.4)}
[data-mood="annoyed"] .fig .brow-l{transform:translateY(1.2px) rotate(18deg)}
[data-mood="annoyed"] .fig .brow-r{transform:translateY(1.2px) rotate(-18deg)}
[data-mood="annoyed"] .fig .mouth-shut{transform:scaleY(-1)}
[data-mood="annoyed"] .fig .head{transform:rotate(4deg)}
[data-mood="gone"] .fig{opacity:.4;filter:grayscale(.75)}
[data-mood="talking"] .fig .mouth-shut,[data-mood="eager"] .fig .mouth-shut{display:none}
[data-mood="talking"] .fig .mouth-open,[data-mood="eager"] .fig .mouth-open{display:block}
[data-mood="talking"] .fig .head{transform:rotate(-2deg)}
[data-mood="eager"] .fig .arm-raise{display:block}
[data-mood="thinking"] .fig .head{transform:rotate(-6deg)}
[data-mood="thinking"] .fig .brow-l{transform:translateY(-2px)}
[data-mood="thinking"] .fig .brow-r{transform:translateY(.6px)}
/* The meter is running: the counterparty leans in over the desk edge. */
.pit-focus.desk-charm .pit-bust .fig{transform:translateY(4%) scale(1.07);transform-origin:50% 100%}

@media (prefers-reduced-motion:no-preference){
 .pit-focus.desk-charm .pit-bust .fig{transition:transform .25s ease-out}
 .fx-react-accept .fig .head,.fx-react-beat .fig .head{animation:fx-nod .55s ease-in-out}
 .fx-react-counter .fig,.fx-react-match .fig{animation:fx-lean .5s ease-out}
 .fx-react-hold .fig .head,.fx-react-decline .fig .head{animation:fx-shake .45s ease-in-out}
 .fx-react-walk .fig,.fx-react-expired .fig{animation:fx-turn-away .7s ease-in forwards}
 .fx-step-in{animation:fx-step-in .34s cubic-bezier(.2,.9,.3,1.2)}
 .fx-pop{animation:fx-pop .3s cubic-bezier(.2,.9,.3,1.4)}
 .fx-quote-down{animation:fx-quote-down .6s ease-out}
 .fx-quote-up{animation:fx-quote-up .6s ease-out}
 .fx-slam{animation:fx-slam .34s cubic-bezier(.3,1.6,.5,1)}
 #pit .verdict-stamp.fx-slam{animation:fx-slam-verdict .36s cubic-bezier(.3,1.6,.5,1)}
 #pit .closed-stamp.fx-slam{animation:fx-slam-closed .36s cubic-bezier(.3,1.6,.5,1)}
 .fx-stamp{animation:fx-stamp .3s cubic-bezier(.3,1.7,.5,1) both}
 .fx-slide-up{animation:fx-slide-up .28s ease-out}
 .fx-payoff-win{animation:fx-win .9s ease-out}
 .fx-payoff-win .payoff-hero{animation:fx-hero-in .5s cubic-bezier(.2,1.4,.4,1)}
 .fx-payoff-loss{animation:fx-loss .5s ease-in-out}
 .fx-payoff-stock .gpu-chip{animation:fx-chip-in .42s cubic-bezier(.2,1.3,.4,1) both}
 .fx-payoff-stock .gpu-chip:nth-child(2){animation-delay:.06s}.fx-payoff-stock .gpu-chip:nth-child(3){animation-delay:.12s}.fx-payoff-stock .gpu-chip:nth-child(n+4){animation-delay:.18s}
 .fx-cash-in{animation:fx-cash-in .9s ease-out}
 .fx-cash-out{animation:fx-cash-out .7s ease-out}
 .fx-arrive{animation:fx-arrive 1.1s ease-out}
 .fx-moved{animation:fx-moved .9s ease-out}
}
@keyframes fx-nod{0%,100%{transform:none}35%{transform:translateY(3px) rotate(3deg)}70%{transform:translateY(-1px)}}
@keyframes fx-lean{0%,100%{transform:none}40%{transform:translateX(-9px) rotate(-3deg)}}
@keyframes fx-shake{0%,100%{transform:none}20%{transform:rotate(-8deg)}45%{transform:rotate(7deg)}70%{transform:rotate(-4deg)}}
@keyframes fx-turn-away{0%{transform:none;opacity:1}100%{transform:translateX(18%) scaleX(-1);opacity:.4}}
@keyframes fx-step-in{from{transform:translateY(22px) scale(.86);opacity:.2}to{transform:none;opacity:1}}
@keyframes fx-pop{from{transform:scale(.6) translateY(8px);opacity:0}to{transform:none;opacity:1}}
@keyframes fx-quote-down{0%{filter:brightness(1.9) saturate(1.4);transform:translateY(-3px)}100%{filter:none;transform:none}}
@keyframes fx-quote-up{0%{filter:brightness(1.5) hue-rotate(-20deg);transform:translateY(2px)}100%{filter:none;transform:none}}
@keyframes fx-slam{from{transform:scale(2.2) rotate(-14deg);opacity:0}to{transform:rotate(-6deg);opacity:1}}
@keyframes fx-slam-verdict{from{transform:translate(-50%,-50%) scale(2.3) rotate(-16deg);opacity:0}to{transform:translate(-50%,-50%) rotate(-7deg);opacity:1}}
@keyframes fx-slam-closed{from{transform:translateY(-50%) scale(2.2) rotate(-16deg);opacity:0}to{transform:translateY(-50%) rotate(-8deg);opacity:1}}
@keyframes fx-stamp{from{transform:scale(2.4) rotate(-20deg);opacity:0}to{transform:rotate(-8deg);opacity:1}}
@keyframes fx-slide-up{from{transform:translateY(40px);opacity:0}to{transform:none;opacity:1}}
@keyframes fx-win{0%{box-shadow:0 0 0 0 #ffd77acc}40%{box-shadow:0 0 0 14px #ffd77a33}100%{box-shadow:0 0 0 24px #ffd77a00}}
@keyframes fx-hero-in{from{transform:scale(.7);opacity:0}to{transform:none;opacity:1}}
@keyframes fx-loss{0%,100%{transform:none}25%{transform:translateX(-6px)}55%{transform:translateX(5px)}80%{transform:translateX(-2px)}}
@keyframes fx-chip-in{from{transform:translateY(-18px) scale(.8);opacity:0}to{transform:none;opacity:1}}
@keyframes fx-cash-in{0%{color:#b9ffb2;text-shadow:0 0 12px #8eff8a}100%{text-shadow:none}}
@keyframes fx-cash-out{0%{color:#ffc58a}100%{}}
@keyframes fx-arrive{0%{filter:brightness(1.8);transform:translateY(-6px)}100%{filter:none;transform:none}}
@keyframes fx-moved{0%{outline:3px solid #ffd77a}100%{outline:3px solid transparent}}
@media (max-width:768px) and (prefers-reduced-motion:no-preference){
 #pit .closed-stamp.fx-slam{animation-name:fx-slam}
}
