/* A shared field and a moving camera keep the pack visible on a narrow screen. */
.race-sound-bar{display:flex;align-items:center;gap:10px;margin:-2px 0 10px}.race-sound-button{display:inline-flex;align-items:center;gap:7px;min-height:44px;padding:8px 11px;flex:none;background:#eee5d4;color:#6b5942;border:1px solid #cdbb98;border-radius:12px;font-size:11px;font-weight:700}.race-sound-button[aria-pressed="true"]{background:#e4ecd8;border-color:#8da576;color:#425f35}.race-sound-button>span:first-child{font-size:20px;line-height:1}.race-sound-note{font-size:10px;color:#846f55;line-height:1.5}.race-sound-button:focus-visible{outline:3px solid #426644;outline-offset:3px}.race-sound-button:disabled{opacity:1}
.practice .btn.outline{background:#fff9ec;color:#725e46;border-color:#cdbb98}
dialog.race-game{max-width:650px;padding:22px;background:#fcf7ed;border:2px solid #d6bfa0}
.race-game .modal-head{margin-bottom:12px}.race-game .modal-head h2{font-size:17px}
.race-intro{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:12px}.race-kicker{font-size:8px;letter-spacing:.17em;color:#8d795d}.race-intro h3{font-size:19px;line-height:1.4;overflow-wrap:anywhere}.race-distance{font-weight:700;font-size:15px;text-align:right;flex:none}.race-distance small{display:block;font-weight:400;font-size:10px;color:#8d795d;margin-top:3px}
.race-preview-note{font-size:10px;line-height:1.6;color:#8c7458;background:#f3e8d2;padding:8px 10px;border-radius:10px;margin-bottom:10px}
.race-hud{display:flex;justify-content:space-between;gap:10px;border:1px solid #e1d3b6;border-radius:14px;background:#f1e8d3;padding:12px 14px;min-height:68px}.race-own{min-width:0;flex:1}.race-own>span,.race-remaining>span{display:block;font-size:10px;color:#8b765b}.race-hud-name{display:block;font-size:12px;color:#514336;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:230px}.race-place{display:block;font-size:20px;line-height:1.4;font-variant-numeric:tabular-nums}.race-remaining{flex:none;text-align:right}.race-remaining strong{display:block;font-size:24px;font-variant-numeric:tabular-nums;color:#607749}.race-remaining small{font-size:11px;margin-left:3px}
.race-progress{height:5px;border-radius:4px;background:#e8ddc3;overflow:hidden;margin:8px 2px 10px}.race-progress>span{display:block;height:100%;width:0;background:#c09b55}
.race-course{height:var(--course-height);position:relative;overflow:hidden;isolation:isolate;background:#8fae72;border:2px solid #688952;border-radius:16px;box-shadow:inset 0 10px #79985d66,inset 0 -9px #68895244}
.race-turf{position:absolute;inset:20px 0 0;background-image:repeating-linear-gradient(90deg,#b4c98b33 0 70px,transparent 70px 140px),radial-gradient(#567c493d 1px,transparent 2px);background-size:auto,19px 15px;background-position:var(--track-scroll,0px) 0,var(--track-scroll,0px) 0}
.race-scenery{position:absolute;inset:0 0 auto;height:23px;background:#c9d5a4;border-bottom:4px solid #6c8c54;display:flex;justify-content:space-around;color:#6e8b52;font-size:22px;line-height:15px}
.race-rail{position:absolute;left:0;right:0;height:6px;background:#fff1cb;border-bottom:2px solid #a68d66;z-index:2;pointer-events:none}.race-rail::after{content:"";position:absolute;left:0;right:0;top:4px;height:9px;background:repeating-linear-gradient(90deg,transparent 0 47px,#e9d7b2 47px 51px);background-position:var(--track-scroll,0px) 0}.rail-back{top:14px}.rail-front{bottom:8px;z-index:12}
.race-finish-line{position:absolute;top:20px;bottom:13px;width:8px;transform:translateX(-50%);background:conic-gradient(#fff9e5 0 25%,#4b6542 0 50%,#fff9e5 0 75%,#4b6542 0) 0 0/8px 16px;z-index:1}.race-finish-line b{position:absolute;top:1px;left:-12px;font-size:8px;letter-spacing:.05em;background:#fff4cf;color:#546b43;padding:2px}
.race-racer{position:absolute;top:var(--lane-y);left:22%;width:44px;transform:translateX(-87.5%);z-index:4;will-change:left}.race-racer.is-player{z-index:8}.race-pony{position:relative;z-index:2}.race-racer .pixel-pony{display:block;width:44px;height:47px;overflow:visible;transform-origin:center bottom;filter:drop-shadow(1px 1px 0 #fff3)}
.race-shadow{position:absolute;bottom:0;left:5px;width:34px;height:8px;border-radius:50%;background:#48613b55}.is-player .race-shadow{background:#f2d36b;box-shadow:0 0 0 2px #fff5bd80}.race-bib{position:absolute;left:-7px;top:15px;z-index:5;background:#fff5dc;border:1px solid #7c7856;border-radius:4px;font-size:9px;font-weight:800;min-width:15px;text-align:center;color:#4c4c37;line-height:15px}.is-player .race-bib{background:#f7d87c;border-color:#a38038}.race-you{position:absolute;top:-9px;left:7px;white-space:nowrap;font-size:8px;font-weight:900;color:#274b5c;background:#fff4be;border-radius:4px;padding:1px 3px;z-index:6}
.race-dust{position:absolute;bottom:2px;left:-8px;width:6px;height:5px;border-radius:40%;background:#d8d79c;opacity:0}
.is-running .race-racer:not(.has-finished) .race-pony{animation:derby-gallop .35s var(--stride-delay) steps(2,end) infinite}.is-running .race-racer:not(.has-finished) .pony-front-leg{animation:pony-leg-front .3s var(--stride-delay) steps(2,end) infinite}.is-running .race-racer:not(.has-finished) .pony-back-leg{animation:pony-leg-back .3s var(--stride-delay) steps(2,end) infinite}.is-running .race-racer:not(.has-finished) .pony-tail{animation:pony-tail-wave .3s var(--stride-delay) steps(2,end) infinite}.is-running .race-racer:not(.has-finished) .race-dust{animation:derby-dust .55s var(--stride-delay) ease-out infinite}
.race-countdown{position:absolute;inset:0;z-index:20;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#29483122;pointer-events:none;color:#fff7d1;text-shadow:3px 3px #586542;font-family:monospace}.race-countdown span{font-size:13px;letter-spacing:.3em}.race-countdown strong{font-size:72px;line-height:1.1}.race-countdown.is-go{background:transparent}.race-countdown.is-go span{display:none}.race-countdown.is-go strong{font-size:47px;color:#fff1a3}.race-countdown[hidden]{display:none}
.race-final-stretch{position:absolute;top:29px;left:12px;background:#fff1bd;color:#6f572f;padding:4px 8px;border-radius:5px;font:bold 10px monospace;letter-spacing:.05em;z-index:10;box-shadow:2px 2px #667d4c33}.race-final-stretch[hidden]{display:none}
.race-game .race-status{font-size:12px;line-height:1.65;min-height:40px;margin:11px 0 6px;display:flex;align-items:center;justify-content:center;color:#685438}
.race-live-order{display:flex;gap:5px;list-style:none;margin:0;padding:0;min-height:31px}.race-live-order li{display:flex;align-items:center;gap:4px;flex:1;min-width:0;border:1px solid #e5d7b9;border-radius:8px;padding:6px;background:#f8f0dd;font-size:10px}.race-live-order li>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.race-live-order li>b{color:#af8542}.race-live-order .own-order{background:#f7e3a5;border-color:#d0ae66}.order-bib{font-size:8px;color:#8e7c60;border:1px solid #d5c7a8;padding:0 3px;border-radius:3px}.race-live-order .race-order-ready{justify-content:center;color:#937b58}
.race-finish-card{display:flex;align-items:center;gap:13px;background:#f4e2ac;border:1px solid #d7b56d;border-radius:15px;padding:13px;margin-top:12px}.race-finish-card[hidden]{display:none}.race-finish-medal{color:#b28a3b}.race-finish-medal .icon{width:33px;height:33px}.race-finish-card small{font-size:9px;letter-spacing:.15em;color:#9a783c}.race-finish-card h3{font-size:17px;overflow-wrap:anywhere}.race-finish-card p{font-size:10px;line-height:1.6;margin-top:3px}
.race-game .race-actions{gap:8px;margin-top:13px}.race-game .race-actions .btn{min-height:44px;font-size:12px;padding:11px 8px}.race-results{margin-top:14px}.race-results .player-result{background:#fff0bd;border-color:#d6b568}.race-reward-note{font-size:10px;color:#958167;line-height:1.6;text-align:center;margin-top:12px}
@keyframes derby-gallop{0%,100%{transform:translateY(0) rotate(2deg)}50%{transform:translateY(-5px) rotate(-3deg)}}
@keyframes derby-dust{0%{opacity:.7;transform:translate(0,0) scale(.7)}100%{opacity:0;transform:translate(-12px,-5px) scale(1.5)}}
.race-cheer-panel{margin-top:11px}.race-cheer-button{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;min-height:52px;padding:10px 12px;border:2px solid #bd816c;border-radius:16px;background:#efbaa5;color:#654331;box-shadow:0 3px 0 #bd816c;cursor:pointer;font:inherit;touch-action:manipulation;transition:background .15s,transform .15s}.race-cheer-button:enabled:active{transform:translateY(3px);box-shadow:none}.race-cheer-button:focus-visible{outline:3px solid #426644;outline-offset:4px}.race-cheer-button:disabled{cursor:default;background:#eee1ce;border-color:#c9b79c;box-shadow:0 3px 0 #c9b79c;color:#806d57}.race-cheer-button.is-delivered{background:#f7d69e;border-color:#bd9454;color:#735020;box-shadow:0 3px 0 #bd9454}.race-cheer-heart{font-size:23px;color:#ae5e50}.race-cheer-label{font-size:15px;font-weight:800}.race-cheer-count{margin-left:auto;white-space:nowrap;font-size:11px;background:#fff7ddaa;padding:4px 7px;border-radius:20px;font-variant-numeric:tabular-nums}.race-cheer-note{min-height:20px;margin:7px 0 0;text-align:center;font-size:11px;line-height:1.6;color:#816044}.race-cheer-panel+.race-status{margin-top:3px;min-height:25px}
.race-cheer-body{position:relative;z-index:2;transform-origin:center bottom}.race-cheer-bubble{position:absolute;left:-24px;top:-20px;z-index:11;white-space:nowrap;border:1px solid #c19555;border-radius:7px;background:#fff5cd;color:#76522e;padding:3px 5px;font-size:9px;font-weight:800;opacity:0;pointer-events:none}.race-cheer-sparks{position:absolute;inset:0;z-index:10;pointer-events:none;opacity:0;color:#a95447}.race-cheer-sparks i{position:absolute;font-style:normal;font-size:15px;left:-13px;top:8px;text-shadow:1px 1px #fff4bf}.race-cheer-sparks i:nth-child(2){left:46px;top:3px;color:#fff3b2}.race-cheer-sparks i:nth-child(3){left:36px;top:-7px;font-size:11px}.is-cheering .race-cheer-body{animation:derby-cheer-hop .46s ease-out 3}.is-cheering .race-cheer-bubble{opacity:1;animation:derby-cheer-pop .2s ease-out}.is-cheering .race-cheer-sparks{opacity:1}.is-cheering .race-cheer-sparks i{animation:derby-cheer-spark .7s ease-out 2}.is-cheering .race-shadow{box-shadow:0 0 0 4px #fff2aacc,0 0 16px #fff2ac}
.race-cheer-button:disabled{opacity:1}
@keyframes derby-cheer-hop{0%,100%{transform:translateY(0) rotate(0)}42%{transform:translateY(-9px) rotate(-6deg)}70%{transform:translateY(-3px) rotate(2deg)}}
@keyframes derby-cheer-pop{from{transform:scale(.7);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes derby-cheer-spark{0%{transform:translateY(6px) scale(.7);opacity:.3}30%{opacity:1}100%{transform:translateY(-13px) scale(1.2);opacity:0}}
@media(max-width:400px){.race-cheer-button{gap:7px;padding:9px 8px}.race-cheer-label{font-size:13px}.race-cheer-count{padding:4px 5px;font-size:10px}}
@media(max-width:400px){dialog.race-game{width:calc(100% - 16px);padding:12px;max-height:94dvh;border-radius:18px}.race-intro h3{font-size:15px}.race-distance{font-size:12px}.race-hud{padding:9px 10px;gap:7px}.race-hud-name{max-width:140px;font-size:11px}.race-place{font-size:17px}.race-remaining strong{font-size:21px}.race-live-order li{font-size:9px;padding:5px 4px}.order-bib{display:none}.race-game .modal-head{margin-bottom:9px}.race-game .race-status{font-size:11px}.race-finish-card h3{font-size:15px}}
@media(prefers-reduced-motion:reduce){.race-game *,.race-game *::after{animation:none!important;transition:none!important}.race-racer{will-change:auto}}
.race-course.is-victory{min-height:320px;border-color:#b98d43;background:#fae7b0}.race-victory{position:absolute;inset:0;z-index:25;overflow:hidden;background:radial-gradient(ellipse at 50% 45%,#fff9df 0 19%,#fae8b8 54%,#ebca7e 100%);color:#775029}.race-victory[hidden]{display:none}.victory-content{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:13px 10px;gap:7px;text-align:center}.victory-ribbon{display:inline-block;padding:4px 19px;background:#9d7338;color:#fff6d2;border:1px solid #b8904c;box-shadow:0 3px 0 #b98b4377;border-radius:3px 3px 10px 10px;font-size:10px;font-weight:800;letter-spacing:.16em}.victory-content h3{font-size:22px;line-height:1.25;max-width:100%;overflow-wrap:anywhere;color:#795222;text-shadow:0 1px #fff9e8}.victory-stage{display:flex;align-items:flex-end;justify-content:center;gap:12px;height:129px;padding-top:12px}.victory-trophy{position:relative;color:#aa782b;filter:drop-shadow(0 5px 0 #b78a3129)}.victory-trophy .icon{width:94px;height:106px;fill:#efc963;stroke:#9f7337;stroke-width:1.4}.victory-trophy>span{position:absolute;top:3px;left:0;font-size:24px;color:#fffbe7;text-shadow:1px 1px #cc9c42}.victory-horse{position:relative;transform-origin:center bottom}.victory-horse .pixel-pony{display:block;width:92px;height:98px;filter:drop-shadow(0 5px 0 #bc94313d)}.victory-heart{position:absolute;right:-4px;top:13px;font-size:21px;color:#c17c70;text-shadow:1px 2px #fff4d0}.victory-yay{position:absolute;left:8px;top:-15px;white-space:nowrap;border-radius:7px;background:#fff8da;border:1px solid #d4af60;padding:2px 7px;font-size:10px;color:#8a632b}.victory-podium{display:flex;align-items:center;justify-content:center;gap:17px;width:min(100%,250px);height:43px;border:1px solid #c39b4e;border-bottom:6px solid #ad8040;border-radius:9px 9px 5px 5px;background:linear-gradient(#e4c575,#cfa44f);color:#67491f;box-shadow:0 4px 0 #c19a4e22}.victory-podium b{font:bold 31px Georgia,serif;color:#fff7d9;text-shadow:1px 2px #ad833c}.victory-podium span{font-size:11px;font-weight:700}.victory-thanks{font-size:11px;color:#8b6737;line-height:1.6}.victory-confetti{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:3}.victory-confetti-piece{position:absolute;top:var(--y);left:var(--x);width:6px;height:10px;background:var(--paper);border-radius:1px;opacity:.65;transform:rotate(var(--turn))}.victory-confetti-piece:nth-child(3n){width:4px;height:7px;border-radius:50%}.race-victory.is-celebrating .victory-confetti-piece{top:-18px;animation:victory-confetti-fall var(--fall) var(--delay) ease-out both}.race-victory.is-celebrating .victory-horse{animation:victory-pony-joy .72s .2s ease-in-out 5}.race-victory.is-celebrating .victory-trophy{animation:victory-trophy-pop .7s cubic-bezier(.2,.8,.25,1.2) both}.race-victory.is-celebrating .victory-heart{animation:victory-heart-pop .9s .3s ease-out 4}.race-view.is-victory .race-cheer-panel,.race-view.is-victory .race-live-order{display:none}.race-view.is-victory .race-status{min-height:25px;margin:9px 0 3px}.race-view.is-victory .race-finish-card{padding:10px 12px;margin-top:7px}.race-view.is-victory .race-finish-medal{display:none}
@keyframes victory-confetti-fall{0%{opacity:0;transform:translate(0,-20px) rotate(0)}8%{opacity:1}85%{opacity:.9}100%{opacity:0;transform:translate(var(--drift),370px) rotate(var(--turn))}}
@keyframes victory-pony-joy{0%,100%{transform:translateY(0) rotate(0)}30%{transform:translateY(-15px) rotate(-7deg)}65%{transform:translateY(-5px) rotate(5deg)}}
@keyframes victory-trophy-pop{0%{opacity:0;transform:translateY(15px) scale(.5) rotate(-12deg)}70%{opacity:1;transform:scale(1.08) rotate(4deg)}100%{opacity:1;transform:translateY(0) scale(1) rotate(0)}}
@keyframes victory-heart-pop{0%,100%{transform:scale(1);opacity:.75}45%{transform:translateY(-5px) scale(1.25);opacity:1}}
@media(max-width:400px){.victory-content h3{font-size:18px}.victory-stage{gap:6px}.victory-trophy .icon{width:85px;height:98px}.victory-horse .pixel-pony{width:84px;height:90px}}
@media(prefers-reduced-motion:reduce){.race-victory .victory-confetti-piece{top:var(--y);opacity:.55}}
