/* Operator layout. The active strip consists of two square frames. */
.has-mascot{position:relative}.has-mascot .wheel-stage{margin-bottom:66px}
.mascot-rig{--mascot-width:155px;--mascot-height:188px;--crank-size:43px;position:absolute;left:-44px;bottom:-45px;width:var(--mascot-width);height:var(--mascot-height);z-index:4;isolation:isolate;pointer-events:none;transform-origin:50% 96%;animation:mascot-breath-offset 4.6s ease-in-out infinite}
.mascot-picture{position:absolute;bottom:0;left:calc((var(--mascot-width) - var(--mascot-height)) / 2);width:var(--mascot-height);height:var(--mascot-height);object-fit:contain;object-position:center bottom;filter:drop-shadow(0 5px 2px #34432a16);transform-origin:50% 96%;transform:translate(var(--body-x,0px),var(--body-y,0px)) rotate(var(--body-tilt,0deg)) scale(var(--body-scale-x,1),var(--body-scale-y,1));display:none;z-index:3;will-change:transform}
.mascot-default{display:block}.mascot-cheer,.mascot-waiting{pointer-events:none}
.mascot-ground{position:absolute;bottom:-1px;left:15%;width:71%;height:12px;border-radius:50%;background:#b3c09942;filter:blur(3px);transform:translateX(var(--shadow-x,0px)) scaleX(var(--shadow-scale,1));will-change:transform}
.mascot-turn-frames{position:absolute;bottom:0;left:calc((var(--mascot-width) - var(--mascot-height)) / 2);width:var(--mascot-height);height:var(--mascot-height);display:none;z-index:3;transform-origin:50% 96%;transform:translate(var(--body-x,0px),var(--body-y,0px)) rotate(var(--body-tilt,0deg)) scale(var(--body-scale-x,1),var(--body-scale-y,1));will-change:transform;filter:drop-shadow(0 5px 2px #34432a16)}
.mascot-turn-frame{position:absolute;inset:0;background-image:url('./assets/mascot-turning.png');background-size:200% 100%;background-repeat:no-repeat;will-change:opacity}
.mascot-turn-up{background-position:0% 0%;opacity:calc(1 - var(--stroke-mix,0))}.mascot-turn-down{background-position:100% 0%;opacity:var(--stroke-mix,0)}
.mascot-gather{position:absolute;inset:17px -6px 0;border-radius:50%;opacity:0;z-index:1;background:radial-gradient(ellipse at 50% 75%,#e4f5a4b3 0,#dceaae60 35%,transparent 70%)}
.mascot-gather:after{content:'';position:absolute;left:18%;right:10%;bottom:2%;height:19%;border:2px solid #b2ca75;border-radius:50%;transform:rotate(-8deg)}
.mascot-effort{position:absolute;width:38px;height:28px;right:-20px;top:72px;opacity:0;z-index:4;transition:opacity .2s}
.mascot-effort i{position:absolute;height:2px;width:10px;border-radius:2px;background:#8da66b;transform-origin:left center}
.mascot-effort i:first-child{left:8px;top:2px;transform:rotate(-35deg)}.mascot-effort i:nth-child(2){left:13px;top:11px}.mascot-effort i:nth-child(3){left:8px;top:20px;transform:rotate(35deg)}
/* The fixed machine stays behind the operator; the artwork owns the wooden grip. */
.crank-machine{position:absolute;top:calc(var(--mascot-height) * .55 - var(--crank-size) / 2);left:calc((var(--mascot-width) - var(--mascot-height)) / 2 + var(--mascot-height) * .81 - var(--crank-size) / 2);width:var(--crank-size);height:var(--crank-size);z-index:2}
.crank-disc{position:absolute;inset:0;border:0;border-radius:50%;background:#42694f;box-shadow:0 2px 1px #799569,0 3px 7px #365c3b25}
.crank-disc:before{content:'';position:absolute;inset:0;border:5px solid #f9fbef;border-radius:50%}
.crank-arm{position:absolute;left:50%;top:calc(50% - 3.5px);width:var(--crank-length,20px);height:7px;border-radius:5px;transform-origin:0 50%;transform:rotate(var(--crank-angle,180deg));background:#b1bf7a;box-shadow:0 1px 1px #355233}
.crank-arm:before{content:'';position:absolute;top:.5px;left:-3px;width:6px;height:6px;border-radius:50%;background:#e5edbb}
.crank-link{position:absolute;left:calc(50% - 3.5px);bottom:50%;width:7px;height:63px;background:#d1d8bb;border:1px solid #a4b18c;transform:rotate(39deg);transform-origin:bottom center;border-radius:6px;z-index:-1}
.mascot-speech{position:absolute;left:126px;right:3px;bottom:-38px;min-height:46px;border:1px solid #d4ddc4;border-radius:12px 12px 12px 2px;background:#fbfcf4;padding:8px 12px;display:flex;flex-direction:column;gap:4px;z-index:4;box-shadow:0 2px 4px #3b4a2510;pointer-events:none;transition:background .2s,border-color .2s}
.mascot-name{font-size:8px;letter-spacing:1px;color:#92a16a}.mascot-message{font-size:11px;color:#526c3f;font-weight:550;line-height:1.4}
.show-controls{height:28px;margin:-4px auto 13px;display:flex;align-items:center;justify-content:space-between;gap:10px;max-width:520px;position:relative}.show-status{font-size:10px;color:#87936f;line-height:1.5}
.show-skip{font-size:10px;color:#5a7344;border:1px solid #c5d0b3;background:#f9fbef;border-radius:20px;padding:5px 10px;min-height:29px;white-space:nowrap}.show-skip:hover{background:#e4edc7}.show-skip[hidden]{display:none}.show-skip:disabled{opacity:.8}.show-skip span{font-size:10px}
/* Only one opaque drawing is painted. Body movement carries the transition. */
.mascot-turning-ready.pose-driving .mascot-turn-frames{display:block}
.mascot-turning-ready.pose-driving .mascot-default{display:none}
.mascot-waiting-ready.pose-waiting .mascot-waiting{display:block}
.mascot-waiting-ready.pose-waiting .mascot-default{display:none}
.mascot-cheer-ready.pose-cheer .mascot-cheer{display:block}
.mascot-cheer-ready.pose-cheer .mascot-default{display:none}
@keyframes mascot-breath-offset{0%,100%{translate:0 0}50%{translate:0 -.55px}}
/* A single push, then the operator releases the handle. */
.show-preparing .mascot-gather{animation:mascot-gather-charge .32s ease-out both}.show-preparing .mascot-speech{background:#f5edcb;border-color:#ded3a5}
.show-driving .mascot-speech{background:#edf6d4;border-color:#bed396}.show-driving .mascot-effort{opacity:.7;animation:effort-pulse .7s ease-in-out infinite}.show-hundred.show-driving .mascot-effort{opacity:.85;animation-duration:.55s}
.show-running .pointer,.show-skipping .pointer{transform-origin:50% 10%;transform:rotate(var(--pointer-angle,0deg))}
/* Released hands: the operator watches while the wheel alone loses speed. */
.show-coasting .mascot-effort,.show-coasting .mascot-gather{opacity:0;animation:none}
.show-coasting .crank-arm{transition:none}
.show-coasting .mascot-speech{background:#f6f8e9;border-color:#d1ddbc}
/* Independent hundred-draw scene. */
.show-scene{position:absolute;inset:0;pointer-events:none;z-index:3;border-radius:50%}
.show-orbit{position:absolute;inset:4px;border:2px solid transparent;border-radius:50%;opacity:0;box-shadow:0 0 0 6px #d4e69c30,0 0 30px #b8d16c50}
.show-speed-lines{position:absolute;inset:-8px;background:repeating-conic-gradient(from 0deg,transparent 0deg 27deg,#d2de91b0 28deg 30deg,transparent 31deg 45deg);mask-image:radial-gradient(circle,transparent 58%,#000 65%,transparent 72%);-webkit-mask-image:radial-gradient(circle,transparent 58%,#000 65%,transparent 72%);border-radius:50%;opacity:0}
.show-flash{position:absolute;inset:10px;opacity:0;border-radius:50%;background:radial-gradient(circle,#fffdf4f0 0,#eef3c5bd 45%,transparent 70%)}
.show-tickets{position:absolute;inset:0;opacity:0}.show-ticket{position:absolute;left:50%;top:50%;display:flex;align-items:center;gap:7px;background:#fffdf0;border:1px solid #c2cd9d;border-radius:5px;width:59px;height:31px;padding:5px 8px;box-shadow:0 2px 6px #36592f16;opacity:0;transform:translate(-50%,-50%)}.show-ticket b{font-size:15px;color:#8b9c4f}.show-ticket i{font:10px Georgia,serif;color:#7c8e5b}
.show-seals{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:13px;opacity:0;transform:translateY(12px) scale(.8)}.show-seals span{display:grid;place-items:center;width:43px;height:47px;clip-path:polygon(50% 0,94% 23%,94% 77%,50% 100%,6% 77%,6% 23%);background:#eaf0bd;color:#466436;font:25px Georgia,serif;filter:drop-shadow(0 2px 2px #163b2425)}.show-seals span:first-child{background:#f2dca1}.show-seals span:nth-child(2){background:#e5eadc}.show-seals span:nth-child(3){background:#eec0a1}.show-seals span[hidden]{display:none}
.show-confetti{position:absolute;inset:0;opacity:0}.show-confetti i{position:absolute;width:7px;height:12px;left:50%;top:50%;border-radius:2px;background:#a8bb66;transform:rotate(calc(var(--particle) * 30deg)) translateY(-135px)}.show-confetti i:nth-child(3n){background:#e4a276}.show-confetti i:nth-child(3n+1){background:#e4e99d}
.show-hundred.show-running .show-orbit{opacity:1;border-color:#dce9a2 #9fb673 #dce9a2 #a3b789;animation:effect-orbit var(--orbit-duration,2s) linear infinite}.show-hundred.show-running .show-tickets{opacity:1}.show-hundred.show-running .show-ticket{animation:ticket-flight var(--ticket-duration,1.6s) linear infinite;animation-delay:calc(var(--ticket) * -.23s)}
.show-hundred.show-running .show-controls:after{content:'';position:absolute;bottom:-5px;left:0;height:2px;width:var(--show-progress,0%);background:#91a654;transition:width .12s linear;border-radius:4px}
.show-hundred.show-revealing .show-tickets{opacity:0;transition:opacity .25s}.show-hundred.show-revealing .show-seals{opacity:1;transform:translateY(0) scale(1);transition:opacity .2s,transform .5s cubic-bezier(.2,1.6,.5,1)}.show-hundred.show-revealing .show-seals span{animation:seal-bob .7s ease-in-out infinite}.show-one .show-seals{display:none}
/* Skipping is a short acceleration and flash; finishing crossfades to celebration. */
.show-skipping .show-speed-lines{opacity:1;animation:effect-orbit .25s linear infinite}.show-skipping .mascot-speech{background:#e4efb8}.show-skipping.show-revealing .show-flash{animation:show-flash .38s ease-out both}

.show-finished .mascot-effort,.show-finished .mascot-gather{opacity:0}.show-finished .mascot-speech{background:#edf3d8;animation:speech-pop .4s cubic-bezier(.2,1.2,.5,1) both}.show-finished .pointer{transform:rotate(0deg)}
.show-celebrating .show-confetti{animation:confetti-show .65s ease-out both}.show-celebrating .show-confetti i{animation:confetti-fly .65s ease-out both}.show-finished .show-orbit,.show-finished .show-speed-lines,.show-finished .show-tickets{opacity:0}.show-finished .show-seals{animation:seals-away .6s ease-in both}
/* Motion primitives. */
@keyframes mascot-gather-charge{0%{opacity:0;transform:scale(.7)}45%{opacity:.9;transform:scale(1.06)}85%{opacity:1;transform:scale(1)}100%{opacity:.25;transform:scale(1.1)}}
@keyframes effort-pulse{0%,100%{transform:translate(0,0) scale(.93);opacity:.4}50%{transform:translate(1px,-1px) scale(1.05);opacity:.75}}
@keyframes speech-pop{0%{transform:translateY(3px) scale(.985)}100%{transform:translateY(0) scale(1)}}
@keyframes effect-orbit{to{transform:rotate(360deg)}}
@keyframes ticket-flight{0%{opacity:0;transform:translate(-50%,-50%) rotate(-12deg) scale(.5)}16%{opacity:1}85%{opacity:.8}100%{opacity:0;transform:translate(calc(-50% + (var(--ticket) - 3) * 32px),-170px) rotate(calc((var(--ticket) - 3) * 12deg)) scale(.9)}}
@keyframes ticket-flight-small{0%{opacity:0;transform:translate(-50%,-50%) rotate(-12deg) scale(.5)}16%{opacity:1}85%{opacity:.8}100%{opacity:0;transform:translate(calc(-50% + (var(--ticket) - 3) * 25px),-138px) rotate(calc((var(--ticket) - 3) * 12deg)) scale(.85)}}
@keyframes seal-bob{50%{transform:translateY(-5px)}}@keyframes show-flash{0%{opacity:0;transform:scale(.5)}25%{opacity:.85}100%{opacity:0;transform:scale(1.18)}}
@keyframes confetti-show{0%,80%{opacity:1}100%{opacity:0}}@keyframes confetti-fly{0%{transform:rotate(calc(var(--particle) * 30deg)) translateY(-65px) scale(.4)}100%{transform:rotate(calc(var(--particle) * 30deg + 15deg)) translateY(-200px) rotate(110deg) scale(1)}}
@keyframes seals-away{0%,50%{opacity:1}100%{opacity:0;transform:translateY(-20px) scale(1.1)}}
/* Responsive layout and accessibility. */
@media(max-width:900px){.mascot-rig{--mascot-width:130px;--mascot-height:158px;--crank-size:36px;left:-25px;bottom:-47px}.crank-disc:before{border-width:4px}.crank-link{height:55px}.mascot-effort{right:-16px;top:59px}.mascot-speech{left:112px;right:-1px;bottom:-40px;padding:7px 9px}.mascot-message{font-size:10px}.mascot-name{font-size:7px}.show-status{font-size:9px}}
@media(max-width:680px){.has-mascot .wheel-stage{margin-bottom:72px}.mascot-rig{--mascot-width:137px;--mascot-height:166px;--crank-size:37px;left:-9px;bottom:-57px}.crank-link{height:50px;transform:rotate(35deg)}.mascot-effort{top:62px}.mascot-speech{left:140px;right:0;bottom:-45px;min-height:46px}.mascot-message{font-size:10px;line-height:1.5}.show-controls{margin-bottom:12px;height:29px}.show-status{font-size:9px}.show-skip{font-size:10px;min-height:30px;padding:5px 10px}.show-ticket{width:49px;height:28px;padding:4px 6px;gap:5px}.show-ticket b{font-size:12px}.show-seals{gap:10px}.show-seals span{width:39px;height:43px}.show-confetti i{width:5px;height:9px}.show-hundred.show-running .show-ticket{animation-name:ticket-flight-small}}
@media(max-width:375px){.mascot-speech{left:130px;padding:7px 8px}.mascot-message{font-size:9px}.mascot-rig{left:-16px}.show-status{font-size:8px}}
@media(prefers-reduced-motion:reduce){.mascot-rig,.mascot-picture,.mascot-ground,.mascot-effort,.mascot-speech,.mascot-turn-frames,.mascot-turn-frame,.crank-machine,.crank-arm,.show-ticket,.show-confetti i,.show-seals span,.pointer{animation:none!important;transition:none!important}.mascot-picture,.mascot-turn-frames,.mascot-turn-frame{transform:none!important;translate:none!important}.show-scene,.mascot-gather{display:none}.show-controls:after{transition:none!important}.mascot-turn-up{opacity:1}.mascot-turn-down{opacity:0}}

