/* =====================================================================
   Mascot sports (Premium Mascot Plan phases C and D, switch Mascot:Sports):
   wwwroot/js/mascot-sports.js puts the ball, goal and posts in the ring
   (.mascot-host) and sets the mascot's sports poses in data-act. Poses
   follow mascot-motion.css: a wind-up, the move, an overshoot, a settle.

   Pivots (canvas units): legs swing at the hips and arms at the shoulders
   (mascot-puppet.css). Facing right, a negative turn of the front leg
   (pp-leg-r) swings the foot forward; a positive one draws it back.
   Selectors carry .is-motion so a pose wins over the walk and run cycles.
   ===================================================================== */

/* ---- Soccer touches ---- */
.mascot-walker.is-motion[data-act="tap"] .pp-leg-r { animation: ms-tap 0.32s ease-in-out; }
.mascot-walker.is-motion[data-act="trap"] .pp-leg-r { animation: ms-trap 0.5s cubic-bezier(0.3, 1.3, 0.5, 1) forwards; }
.mascot-walker.is-motion[data-act="kick-up"] .pp-leg-r { animation: ms-kick-up 0.38s ease-out; }
.mascot-walker.is-motion[data-act="kick-up"] .pp-float { transform-origin: 250px 362px; animation: ms-bounce 0.38s ease-out; }
.mascot-walker.is-motion[data-act="knee"] .pp-leg-r { animation: ms-knee 0.38s ease-out; }
.mascot-walker.is-motion[data-act="knee"] .pp-float { transform-origin: 250px 362px; animation: ms-bounce 0.38s ease-out; }
.mascot-walker.is-motion[data-act="header"] .pp-float { transform-origin: 250px 362px; animation: ms-header 0.42s cubic-bezier(0.3, 0, 0.3, 1); }
.mascot-walker.is-motion[data-act="header"] .pp-hat { animation: mo-hat-lag 0.42s ease-out; }
.mascot-walker.is-motion[data-act="header"] .pp-arm-l { rotate: 40deg; }
.mascot-walker.is-motion[data-act="header"] .pp-arm-r { rotate: -40deg; }
.mascot-walker.is-motion[data-act="kick-up"] .m-gaze,
.mascot-walker.is-motion[data-act="knee"] .m-gaze { transform: translate(2px, 4px) !important; }
.mascot-walker.is-motion[data-act="header"] .m-gaze { transform: translate(0, -4px) !important; }

/* ---- The big kick: draw back, lean back, strike through, follow through ---- */
.mascot-walker.is-motion[data-act="kick"] .pp-leg-r { animation: ms-kick 0.56s cubic-bezier(0.4, 0, 0.2, 1); }
.mascot-walker.is-motion[data-act="kick"] .pp-float { transform-origin: 250px 362px; animation: ms-kick-body 0.56s cubic-bezier(0.4, 0, 0.2, 1); }
.mascot-walker.is-motion[data-act="kick"] .pp-arm-l { animation: ms-kick-arm-l 0.56s ease-out; }
.mascot-walker.is-motion[data-act="kick"] .pp-arm-r { animation: ms-kick-arm-r 0.56s ease-out; }
.mascot-walker.is-motion[data-act="kick"] .pp-hat { animation: mo-hat-lag 0.56s ease-out; }

/* ---- Holding it up in the front mitten ---- */
.mascot-walker.is-motion[data-act="catch"] .pp-arm-r { animation: none; rotate: -40deg; }
.mascot-walker.is-motion[data-act="catch"] .pp-arm-l { animation: none; rotate: 30deg; }
.mascot-walker.is-motion[data-act="catch"] .pp-float { transform-origin: 250px 362px; animation: mo-land 0.5s ease-out; }

/* ---- Hands on head (a miss) ---- */
.mascot-walker.is-motion[data-act="despair"] .pp-arm-l { animation: none; rotate: 88deg; }
.mascot-walker.is-motion[data-act="despair"] .pp-arm-r { animation: none; rotate: -120deg; }
.mascot-walker.is-motion[data-act="despair"] .pp-float { transform-origin: 250px 362px; animation: ms-slump 1.5s ease-in-out; }

/* ---- Knee slide, arms out (a goal) ---- */
.mascot-walker.is-motion[data-act="celebrate"] .pp-float { transform-origin: 250px 362px; animation: ms-slide 1.7s cubic-bezier(0.2, 0.7, 0.3, 1); }
.mascot-walker.is-motion[data-act="celebrate"] .pp-leg-l { rotate: 62deg; }
.mascot-walker.is-motion[data-act="celebrate"] .pp-leg-r { rotate: -62deg; }
.mascot-walker.is-motion[data-act="celebrate"] .pp-arm-l { animation: ms-pump-l 0.42s ease-in-out infinite alternate; rotate: 72deg; }
.mascot-walker.is-motion[data-act="celebrate"] .pp-arm-r { animation: ms-pump-r 0.42s ease-in-out infinite alternate; rotate: -82deg; }
.mascot-walker.is-motion[data-act="celebrate"] .pp-hat { animation: mo-hat-lag 0.82s ease-out; }

/* ---- Cheering: arms up, little hops ---- */
.mascot-walker.is-motion[data-act="cheer"] .pp-arm-l { animation: ms-pump-l 0.35s ease-in-out infinite alternate; rotate: 75deg; }
.mascot-walker.is-motion[data-act="cheer"] .pp-arm-r { animation: ms-pump-r 0.35s ease-in-out infinite alternate; rotate: -85deg; }
.mascot-walker.is-motion[data-act="cheer"] .pp-float { transform-origin: 250px 362px; animation: ms-hops 0.7s ease-in-out infinite; }

/* ---- Rugby: pick it up, carry it tucked, spin pass, dive, get up ---- */
.mascot-walker.is-motion[data-act="pickup"] .pp-float { transform-origin: 250px 362px; animation: ms-pickup 0.42s ease-in-out; }
.mascot-walker.is-motion[data-act="pickup"] .pp-arm-r { animation: none; rotate: 55deg; }
.mascot-walker.is-motion[data-act="carry"] .pp-arm-r,
.mascot-walker.is-motion[data-act="run-carry"] .pp-arm-r { animation: none; rotate: 40deg; }
.mascot-walker.is-motion[data-act="carry"] .pp-float { transform-origin: 250px 362px; rotate: 5deg; }
.mascot-walker.is-motion[data-act="pass"] .pp-arm-r { animation: ms-pass 0.6s cubic-bezier(0.3, 0, 0.2, 1); }
.mascot-walker.is-motion[data-act="pass"] .pp-arm-l { animation: ms-pass-l 0.6s ease-out; }
.mascot-walker.is-motion[data-act="pass"] .m-gaze { transform: translate(2px, -5px) !important; }
.mascot-walker.is-motion[data-act="dive"] .pp-float { transform-origin: 250px 362px; animation: ms-dive 1.3s cubic-bezier(0.3, 0, 0.3, 1) forwards; }
.mascot-walker.is-motion[data-act="dive"] .pp-arm-l { animation: none; rotate: 70deg; }
.mascot-walker.is-motion[data-act="dive"] .pp-arm-r { animation: none; rotate: -70deg; }
.mascot-walker.is-motion[data-act="rise"] .pp-float { transform-origin: 250px 362px; animation: ms-rise 0.5s cubic-bezier(0.3, 0, 0.3, 1); }
.mascot-walker.is-motion[data-act="hold"] .pp-arm-r { animation: none; rotate: 30deg; }
.mascot-walker.is-motion[data-act="hold"] .pp-arm-l { animation: none; rotate: -20deg; }

/* ---- The invite: points at the ball, beckons with the other mitten ---- */
.mascot-walker.is-motion[data-act="invite"] .pp-arm-r { animation: none; rotate: 18deg; }
.mascot-walker.is-motion[data-act="invite"] .pp-arm-l { animation: ms-beckon 0.6s ease-in-out infinite; }
.mascot-walker.is-motion[data-act="invite"] .pp-float { transform-origin: 250px 362px; animation: ms-eager 1.2s ease-in-out infinite; }
.mascot-walker.is-motion[data-act="shrug"] .pp-arm-l { animation: none; rotate: 28deg; }
.mascot-walker.is-motion[data-act="shrug"] .pp-arm-r { animation: none; rotate: -28deg; }
.mascot-walker.is-motion[data-act="shrug"] .pp-float { transform-origin: 250px 362px; animation: ms-shrug 0.9s ease-in-out; }

/* ---- Penalty shootout: in goal, diving ---- */
.mascot-walker.is-motion[data-act="ready"] .pp-float { transform-origin: 250px 362px; animation: ms-ready 0.9s ease-in-out infinite; }
.mascot-walker.is-motion[data-act="ready"] .pp-leg-l { rotate: 12deg; }
.mascot-walker.is-motion[data-act="ready"] .pp-leg-r { rotate: -12deg; }
.mascot-walker.is-motion[data-act="ready"] .pp-arm-l { animation: none; rotate: 40deg; }
.mascot-walker.is-motion[data-act="ready"] .pp-arm-r { animation: none; rotate: -40deg; }
.mascot-walker.is-motion[data-act="dive-l"] .pp-float { transform-origin: 250px 362px; animation: ms-keeper-l 0.9s cubic-bezier(0.25, 0.8, 0.3, 1); }
.mascot-walker.is-motion[data-act="dive-r"] .pp-float { transform-origin: 250px 362px; animation: ms-keeper-r 0.9s cubic-bezier(0.25, 0.8, 0.3, 1); }
.mascot-walker.is-motion[data-act="jump"] .pp-float { transform-origin: 250px 362px; animation: ms-keeper-up 0.9s cubic-bezier(0.25, 0.8, 0.3, 1); }
.mascot-walker.is-motion[data-act^="dive-"] .pp-arm-l,
.mascot-walker.is-motion[data-act="jump"] .pp-arm-l { animation: none; rotate: 80deg; }
.mascot-walker.is-motion[data-act^="dive-"] .pp-arm-r,
.mascot-walker.is-motion[data-act="jump"] .pp-arm-r { animation: none; rotate: -90deg; }

/* ---- Rugby run: running on the spot, hurdling, tackled ---- */
.mascot-walker.is-motion[data-act="run-carry"] .pp-float { transform-origin: 250px 362px; animation: mo-run 0.26s ease-in-out infinite; rotate: 5deg; }
.mascot-walker.is-motion[data-act="run-carry"] .pp-leg-l { animation: mo-run-step 0.52s ease-in-out infinite; }
.mascot-walker.is-motion[data-act="run-carry"] .pp-leg-r { animation: mo-run-step 0.52s ease-in-out -0.26s infinite; }
.mascot-walker.is-motion[data-act="run-carry"] .pp-arm-l { animation: mo-pump 0.52s ease-in-out -0.26s infinite; }
.mascot-walker.is-motion[data-act="hurdle"] .pp-float { transform-origin: 250px 362px; animation: ms-hurdle 0.62s linear; }
.mascot-walker.is-motion[data-act="hurdle"] .pp-leg-l { animation: none; rotate: 30deg; }
.mascot-walker.is-motion[data-act="hurdle"] .pp-leg-r { animation: none; rotate: -55deg; }
.mascot-walker.is-motion[data-act="hurdle"] .pp-arm-l { animation: none; rotate: 60deg; }
.mascot-walker.is-motion[data-act="hurdle"] .pp-arm-r { animation: none; rotate: 40deg; }
.mascot-walker.is-motion[data-act="tackled"] .pp-float { transform-origin: 250px 362px; animation: ms-tackled 1.2s cubic-bezier(0.3, 0, 0.3, 1) forwards; }
.mascot-walker.is-motion[data-act="tackled"] .pp-arm-l { animation: none; rotate: 70deg; }
.mascot-walker.is-motion[data-act="tackled"] .pp-arm-r { animation: none; rotate: -60deg; }

/* ---- The ball and its shadow (positioned by the script) ---- */
.ms-ball {
    position: absolute;
    left: 0;
    top: 0;
    z-index: 3;
    width: var(--ms-r, 24px);
    height: var(--ms-r, 24px);
    pointer-events: none;
    will-change: transform;
    animation: ms-ball-in 0.3s cubic-bezier(0.3, 1.6, 0.5, 1);
}
.ms-ball-spin { width: 100%; height: 100%; }
.ms-ball svg { display: block; width: 100%; height: 100%; filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.3)); }
.ms-ball-shadow {
    position: absolute;
    left: 0;
    top: 0;
    z-index: 1;
    width: var(--ms-r, 26px);
    height: calc(var(--ms-r, 26px) * 0.32);
    border-radius: 9999px;
    background: radial-gradient(closest-side, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
    pointer-events: none;
    will-change: transform, opacity;
}
.ms-ball.is-gone,
.ms-ball-shadow.is-gone { opacity: 0 !important; transition: opacity 0.35s ease; }
.ms-ball.is-inviting { pointer-events: auto; cursor: pointer; border-radius: 9999px; outline: none; }
.ms-ball.is-inviting::after {
    content: "";
    position: absolute;
    inset: -6px;
    border-radius: 9999px;
    box-shadow: 0 0 0 2px oklch(var(--a) / 0.9);
    animation: ms-ring 1.1s ease-out infinite;
    pointer-events: none;
}
.ms-ball.is-inviting:focus-visible::after { box-shadow: 0 0 0 3px #fff; }

/* ---- Goal and posts: they rise out of the floor, then fade ---- */
.ms-decor { position: absolute; z-index: 1; pointer-events: none; transform-origin: 50% 100%; animation: ms-decor-in 0.45s cubic-bezier(0.3, 1.4, 0.5, 1) both; }
.ms-decor svg { display: block; width: 100%; height: 100%; overflow: visible; filter: drop-shadow(0 3px 4px rgba(0, 0, 0, 0.35)); }
.ms-decor.is-gone { animation: ms-decor-out 0.35s ease-in forwards; }
.ms-goal-side.is-left svg { transform: scaleX(-1); }
.ms-goal .ms-net { transform-box: fill-box; transform-origin: 50% 50%; }
.ms-goal.is-scored .ms-net { animation: ms-net 0.6s ease-out; }
.ms-goal.is-post svg { animation: ms-wobble 0.4s ease-out; }

/* ---- The invite bubble ---- */
.ms-bubble { position: absolute; z-index: 6; transform: translate(-50%, -100%); animation: ms-pop 0.35s cubic-bezier(0.3, 1.6, 0.5, 1); }
.ms-bubble.is-gone { opacity: 0; transition: opacity 0.3s ease; }
.ms-bubble-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.4rem 0.8rem;
    border: 0;
    border-radius: 9999px;
    font-size: 0.8rem;
    font-weight: 800;
    white-space: nowrap;
    color: oklch(var(--ac));
    background: oklch(var(--a));
    box-shadow: 0 8px 20px -8px rgba(0, 0, 0, 0.6);
    cursor: pointer;
}
.ms-bubble-btn::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: -6px;
    width: 12px;
    height: 12px;
    background: oklch(var(--a));
    transform: translateX(-50%) rotate(45deg);
    z-index: -1;
}
.ms-bubble-btn:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

/* ---- Penalty shootout and Rugby run (inside the games' stage) ---- */
.ms-zones { position: absolute; left: 0; right: 0; top: 30%; z-index: 2; display: flex; justify-content: center; gap: 0.35rem; }
.ms-zones.is-front { top: auto; bottom: 2px; }
.ms-zone {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    min-height: 2.2rem;
    padding: 0.25rem 0.6rem;
    border: 0;
    border-radius: 9999px;
    font-size: 0.72rem;
    font-weight: 800;
    color: #fff;
    background: rgba(0, 0, 0, 0.5);
    cursor: pointer;
}
.ms-zone:not(:disabled):hover,
.ms-zone:focus-visible { background: oklch(var(--a)); color: oklch(var(--ac)); outline: none; }
.ms-zone:disabled { opacity: 0.35; cursor: default; }
.ms-zone kbd { font-size: 0.62rem; opacity: 0.7; }
.ms-caption { top: 1.9rem; }
.ms-pball svg { transform: scale(var(--ms-depth, 1)); }
.ms-pball.is-flying { transition: transform 0.5s cubic-bezier(0.2, 0.7, 0.3, 1); }
.ms-pball.is-flying svg { transition: transform 0.5s cubic-bezier(0.2, 0.7, 0.3, 1); transition-duration: inherit; }
.ms-pball.is-saved svg { animation: ms-saved 0.5s ease-out forwards; }
.ms-pball.is-in svg { opacity: 0.75; }
.ms-ground { position: absolute; left: 0; right: 0; height: 4px; overflow: hidden; border-radius: 9999px; opacity: 0.5; }
.ms-ground::before {
    content: "";
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: -36px;
    background: repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.8) 0 18px, transparent 18px 36px);
    animation: ms-ground 0.36s linear infinite;
}
.ms-bag { padding: 4px; }
.ms-bag.is-lit svg { animation: ms-lit 0.45s ease-in-out infinite alternate; }
.ms-bag.is-hit svg { transform: rotate(-35deg) translateY(4px); transition: transform 0.2s ease-out; }

.ms-live { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

@keyframes ms-tap { 0%, 100% { transform: rotate(0deg); } 35% { transform: rotate(14deg); } 60% { transform: rotate(-26deg); } }
@keyframes ms-trap { 0% { transform: rotate(0deg); } 35% { transform: rotate(-24deg); } 100% { transform: rotate(-6deg); } }
@keyframes ms-kick-up { 0%, 100% { transform: rotate(0deg); } 30% { transform: rotate(10deg); } 55% { transform: rotate(-44deg); } }
@keyframes ms-knee { 0%, 100% { transform: rotate(0deg); } 45% { transform: rotate(-58deg); } }
@keyframes ms-bounce { 0%, 100% { transform: none; } 45% { transform: translateY(-5px) scale(0.98, 1.02); } 75% { transform: scale(1.02, 0.98); } }
@keyframes ms-header {
    0%, 100% { transform: none; }
    30% { transform: translateY(5px) scale(1.05, 0.95); }
    55% { transform: translateY(-16px) rotate(-5deg) scale(0.97, 1.04); }
    78% { transform: translateY(0) rotate(2deg) scale(1.03, 0.97); }
}
@keyframes ms-kick {
    0%, 100% { transform: rotate(0deg); }
    40% { transform: rotate(40deg); }
    52% { transform: rotate(-72deg); }
    70% { transform: rotate(-58deg); }
}
@keyframes ms-kick-body {
    0%, 100% { transform: none; }
    40% { transform: rotate(-4deg) translateY(2px) scale(1.02, 0.98); }
    52% { transform: rotate(5deg) translateY(-3px); }
    75% { transform: rotate(2deg); }
}
@keyframes ms-kick-arm-l { 0%, 100% { transform: rotate(0deg); } 40% { transform: rotate(-20deg); } 55% { transform: rotate(38deg); } }
@keyframes ms-kick-arm-r { 0%, 100% { transform: rotate(0deg); } 40% { transform: rotate(-28deg); } 55% { transform: rotate(30deg); } }
@keyframes ms-slump { 0%, 100% { transform: none; } 25%, 80% { transform: translateY(4px) scale(1.02, 0.97) rotate(-2deg); } }
@keyframes ms-slide {
    0% { transform: none; }
    15% { transform: translate(-36px, 20px) rotate(-6deg); }
    70%, 82% { transform: translate(34px, 20px) rotate(-9deg); }
    100% { transform: none; }
}
@keyframes ms-pump-l { from { transform: rotate(-8deg); } to { transform: rotate(10deg); } }
@keyframes ms-pump-r { from { transform: rotate(8deg); } to { transform: rotate(-10deg); } }
@keyframes ms-hops { 0%, 100% { transform: none; } 15% { transform: scale(1.05, 0.95); } 45% { transform: translateY(-16px) scale(0.97, 1.04); } 75% { transform: scale(1.03, 0.97); } }
@keyframes ms-pickup { 0%, 100% { transform: none; } 50% { transform: translateY(10px) rotate(7deg) scale(1.03, 0.97); } }
@keyframes ms-pass { 0% { transform: rotate(0deg); } 30% { transform: rotate(40deg); } 55% { transform: rotate(-110deg); } 100% { transform: rotate(-70deg); } }
@keyframes ms-pass-l { 0%, 100% { transform: rotate(0deg); } 55% { transform: rotate(45deg); } }
@keyframes ms-dive {
    0% { transform: none; }
    22% { transform: translateY(8px) scale(1.05, 0.95); }
    50% { transform: translate(30px, -40px) rotate(60deg); }
    66% { transform: translate(14px, -60px) rotate(86deg); }
    76% { transform: translate(12px, -56px) rotate(84deg) scale(1.03, 0.97); }
    100% { transform: translate(12px, -58px) rotate(84deg); }
}
@keyframes ms-rise {
    0% { transform: translate(12px, -58px) rotate(84deg); }
    55% { transform: translateY(6px) scale(1.05, 0.95); }
    80% { transform: translateY(-4px) scale(0.98, 1.02); }
    100% { transform: none; }
}
@keyframes ms-beckon { 0%, 100% { transform: rotate(30deg); } 50% { transform: rotate(70deg); } }
@keyframes ms-eager { 0%, 100% { transform: none; } 50% { transform: translateY(-4px) rotate(2deg); } }
@keyframes ms-shrug { 0%, 100% { transform: none; } 30%, 70% { transform: translateY(-6px) scale(1.02, 0.98); } }
@keyframes ms-ready { 0%, 100% { transform: translateY(8px) scale(1.04, 0.96) rotate(-1.5deg); } 50% { transform: translateY(8px) scale(1.04, 0.96) rotate(1.5deg); } }
@keyframes ms-keeper-l {
    0%, 100% { transform: none; }
    12% { transform: translateY(8px) scale(1.05, 0.95); }
    35%, 70% { transform: translate(-70px, -50px) rotate(-62deg); }
}
@keyframes ms-keeper-r {
    0%, 100% { transform: none; }
    12% { transform: translateY(8px) scale(1.05, 0.95); }
    35%, 70% { transform: translate(70px, -50px) rotate(62deg); }
}
@keyframes ms-keeper-up {
    0%, 100% { transform: none; }
    15% { transform: translateY(8px) scale(1.06, 0.94); }
    40%, 60% { transform: translateY(-60px) scale(0.97, 1.04); }
    85% { transform: scale(1.04, 0.96); }
}
@keyframes ms-hurdle {
    0% { transform: none; animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1); }
    50% { transform: translateY(-120px) rotate(-6deg); animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33); }
    100% { transform: none; }
}
@keyframes ms-tackled {
    0% { transform: none; }
    25% { transform: translateX(-8px) rotate(-30deg); }
    45% { transform: translate(-16px, -58px) rotate(-86deg); }
    55% { transform: translate(-16px, -54px) rotate(-82deg) scale(1.03, 0.97); }
    100% { transform: translate(-16px, -58px) rotate(-84deg); }
}
@keyframes ms-ball-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes ms-ring { 0% { opacity: 0.9; transform: scale(0.9); } 100% { opacity: 0; transform: scale(1.4); } }
@keyframes ms-decor-in { from { opacity: 0; transform: scaleY(0.2); } to { opacity: 1; transform: none; } }
@keyframes ms-decor-out { to { opacity: 0; transform: scaleY(0.6); } }
@keyframes ms-net { 0%, 100% { transform: none; } 35% { transform: scale(1.08, 1.04) translateX(4px); } 65% { transform: scale(0.98); } }
@keyframes ms-wobble { 0%, 100% { transform: none; } 25% { transform: rotate(-3deg); } 60% { transform: rotate(2deg); } }
@keyframes ms-pop { from { opacity: 0; transform: translate(-50%, -80%) scale(0.6); } to { opacity: 1; transform: translate(-50%, -100%) scale(1); } }
@keyframes ms-saved { 0% { transform: scale(var(--ms-depth, 1)); } 100% { transform: translateY(26px) scale(calc(var(--ms-depth, 1) * 0.9)); opacity: 0.5; } }
@keyframes ms-ground { to { transform: translateX(-36px); } }
@keyframes ms-lit { from { filter: drop-shadow(0 0 0 rgba(255, 255, 255, 0)); } to { filter: drop-shadow(0 0 6px #fff); } }

/* Reduced motion: nothing flies or slides; the poses that games need hold still */
@media (prefers-reduced-motion: reduce) {
    .ms-ball,
    .ms-ball *,
    .ms-decor,
    .ms-bubble,
    .ms-ground::before,
    .ms-pball svg,
    .ms-bag svg { animation: none !important; transition: none !important; }
    .mascot-walker[data-act="dive-l"] .pp-float { translate: -60px -40px; rotate: -50deg; }
    .mascot-walker[data-act="dive-r"] .pp-float { translate: 60px -40px; rotate: 50deg; }
    .mascot-walker[data-act="jump"] .pp-float,
    .mascot-walker[data-act="hurdle"] .pp-float { translate: 0 -50px; }
    .mascot-walker[data-act="tackled"] .pp-float { rotate: -30deg; }
}
