/* Lightweight feedback pass: transform/opacity only, so mobile compositing stays stable. */
@media(prefers-reduced-motion:no-preference){
 body #partyOverlay:not(.hidden) .partyBoard{animation:partyBoxOpen .34s cubic-bezier(.18,.82,.25,1.08) both}
 body #partyOverlay .partyItemMotion{will-change:transform,opacity}
 body #partyOverlay .partyPick:not(.taken):not(.pending) .partyItemMotion{animation:partyItemSettle .28s cubic-bezier(.2,.8,.3,1.2) both;animation-delay:calc(var(--party-index,0) * 18ms)}
 body #partyOverlay .partyPick.pending .partyItemMotion{animation:partyItemGrab .34s ease-in-out infinite alternate}
 body #partyOverlay .partyPick.taken:not(.mine) .partyItemMotion{animation:partyItemTaken .24s ease-out both}
 .legacyScorePanel .roundRow{animation:scoreRowIn .32s cubic-bezier(.2,.8,.25,1.15) both}
 .legacyScorePanel .roundRow:nth-child(2){animation-delay:.05s}.legacyScorePanel .roundRow:nth-child(3){animation-delay:.1s}.legacyScorePanel .roundRow:nth-child(4){animation-delay:.15s}.legacyScorePanel .roundRow:nth-child(n+5){animation-delay:.2s}
}
body #partyOverlay .partyItemMotion{display:grid;place-items:center;width:100%;height:100%;min-width:0;min-height:0;pointer-events:none}
body #partyOverlay .partyItemMotion>img{max-width:100%;max-height:100%}
@keyframes partyBoxOpen{from{opacity:0}to{opacity:1}}
@keyframes partyItemSettle{from{opacity:0;transform:translateY(-16px) rotate(-3deg) scale(.88)}to{opacity:1;transform:none}}
@keyframes partyItemGrab{from{transform:translateY(-3px) scale(1.02)}to{transform:translateY(-9px) rotate(1deg) scale(1.075)}}
@keyframes partyItemTaken{0%{opacity:1;transform:scale(1)}55%{opacity:.72;transform:translateY(-13px) scale(1.1)}100%{opacity:.18;transform:translateY(5px) scale(.82)}}
@keyframes scoreRowIn{from{opacity:0;transform:translateX(-18px) rotate(-1deg)}to{opacity:1;transform:none}}
