@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@500;600;700;800&family=Barlow:wght@400;500;600;700&display=swap');
:root{color-scheme:dark;--bg:#081625;--panel:#102438;--gold:#f7c962;--muted:#afc2d1}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 10% 10%,#143d52,transparent 50%),var(--bg);color:#f1f6fa;font-family:Barlow,Arial,sans-serif}button,select,input{font:inherit}button{cursor:pointer;border:1px solid #466077;border-radius:7px;background:#193449;color:#f1f6fa;padding:11px 15px;font-weight:600}button:hover{background:#28516b}button:focus-visible{outline:3px solid var(--gold);outline-offset:3px}button:disabled{opacity:.4;cursor:default}[hidden]{display:none!important}header{display:flex;justify-content:space-between;align-items:center;padding:22px 4vw;border-bottom:1px solid #ffffff1f;background:#071522}header>div{display:flex;gap:8px;flex-wrap:wrap}.brand{font-family:'Barlow Condensed',Impact,sans-serif;font-size:30px;line-height:.95;font-weight:800;color:white;text-decoration:none}.brand span{color:var(--gold)}.brand small{display:block;font:10px Arial;letter-spacing:3px;margin-top:9px}main{max-width:1800px;margin:auto;padding:30px 4vw}.intro{display:flex;justify-content:space-between;align-items:center;margin-bottom:25px}.eyebrow{font-size:12px;font-weight:700;letter-spacing:2px;color:var(--gold)}h1,h2,h3{font-family:'Barlow Condensed',Impact,sans-serif;margin:0}h1{font-size:clamp(40px,5vw,70px);text-transform:uppercase;letter-spacing:-1px}h2{font-size:32px}h3{font-size:22px}.intro p{color:var(--muted);line-height:1.6}#eventNav{display:grid;grid-template-columns:repeat(8,1fr);gap:6px;margin-bottom:22px}#eventNav button{padding:12px 5px;font-size:14px;background:#10273a}#eventNav button.active{background:var(--gold);color:#092033;border-color:var(--gold)}.layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:24px}.stadium{position:relative;border:1px solid #7293a9;border-radius:12px;overflow:hidden}.stadium img{width:100%;display:block}.hotspot{position:absolute;border:2px solid transparent;background:transparent;border-radius:12px;padding:0}.hotspot:hover,.hotspot.active{background:#f7c96215;border-color:#ffe897;box-shadow:0 0 18px #ffe38c50}.hotspot span{position:absolute;left:50%;top:0;transform:translate(-50%,-30%);white-space:nowrap;background:#081625ed;font-size:12px;padding:5px;border-radius:4px;opacity:0}.hotspot:focus-visible span,.hotspot:hover span{opacity:1}.stadium-tag{position:absolute;bottom:1.5%;left:37%;width:26%;text-align:center;font-size:9px;letter-spacing:1px;color:white;background:#071b30bb;border-radius:5px;padding:4px;pointer-events:none}.playfield{background:#10273a;border:1px solid #345068;border-radius:12px;padding:22px;margin-top:20px}.field-title{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:22px}.lane{margin:14px 0}.lane-head{display:flex;justify-content:space-between;font-size:14px;margin-bottom:7px;gap:8px}.lane-head b{color:var(--team)}.cells{display:grid;grid-template-columns:repeat(var(--cells),1fr);gap:2px}.cell{position:relative;min-width:0;height:30px;background:#061522;border:1px solid #456075;border-radius:3px;text-align:center;line-height:28px;font-size:11px;color:#9cb3c3}.cell.filled{background:color-mix(in srgb,var(--team) 20%,#081625)}.token{position:absolute;inset:1px;background:var(--team);color:#07131d;border-radius:50%;font-weight:800;box-shadow:0 1px 8px #0008}.lane.current{background:#ffffff07;padding:9px;border-radius:6px}.track-note{font-size:12px;color:#99adbf;margin-top:18px}.turn-card,.rules,.medals,.history{background:#102438;border:1px solid #30485d;padding:21px;border-radius:12px;margin-bottom:16px}.turn-card{border-top:3px solid var(--gold)}#turn{margin-top:10px}#message,.rules p{line-height:1.55;color:#c9d8e3;font-size:15px}#message{min-height:65px}#actions{display:flex;flex-direction:column;gap:9px}.primary,#actions button:first-child{background:var(--gold);color:#0a1d2b;border-color:var(--gold)}#dice{display:flex;gap:10px;margin:18px 0;min-height:52px}.die{width:50px;height:50px;background:#f3f0df;border-radius:9px;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);gap:3px;padding:7px;box-shadow:0 4px 0 #aeb6b9}.pip{background:#102030;border-radius:50%}.rolling .die{animation:shake .12s infinite alternate}@keyframes shake{to{transform:rotate(15deg) translateY(-4px)}}.medals h3 span{float:right;font:14px Barlow;color:var(--gold)}.medal-row{display:grid;grid-template-columns:1fr auto;gap:6px;padding:12px 0;border-bottom:1px solid #ffffff15}.medal-row small{color:var(--muted);font-size:13px}.medal-row strong{grid-column:2;grid-row:1/3;font-size:26px;color:var(--gold)}.history ol{padding:0 0 0 18px;color:#afc2d1;font-size:14px;line-height:1.5}.history li{margin:10px 0}footer{font-size:12px;color:#8da6b9;letter-spacing:1px;padding:35px 0}dialog{background:#102438;color:white;border:1px solid #587088;border-radius:15px;padding:30px;width:min(95vw,550px);max-height:92vh}dialog::backdrop{background:#020915dd;backdrop-filter:blur(6px)}dialog h2{margin:12px 0 22px}dialog p{color:#aec2d1;font-size:14px;line-height:1.5}label{display:block;margin:15px 0}select,input{width:100%;padding:10px;background:#081827;color:white;border:1px solid #4a6378;border-radius:5px;margin-top:6px}dialog .primary{width:100%;margin-top:12px}.close{float:right}.player-input{display:grid;grid-template-columns:1fr 130px;gap:8px}.focused .stadium{display:none}.focused .playfield{margin-top:0;min-height:500px;background:linear-gradient(#081625ed,#102438f5),url(stadium.png) center/cover}.focused .cell{height:48px;line-height:46px;font-size:14px}.focused .lane{margin:28px 0}.result{padding:10px;background:#ffffff08;border-radius:6px;margin:8px 0}.finish{color:var(--gold)}@media(max-width:1050px){.layout{grid-template-columns:1fr}aside{display:grid;grid-template-columns:1fr 1fr;gap:16px}#eventNav{grid-template-columns:repeat(4,1fr)}.turn-card{grid-row:span 2}}@media(max-width:600px){main{padding:20px 12px}header{padding:17px 12px;align-items:flex-start;gap:14px}header>div{justify-content:flex-end}header button{font-size:12px;padding:8px}.intro p{display:none}aside{display:block}.playfield{padding:12px}.field-title h2{font-size:25px}.field-title button{font-size:12px}.cell{font-size:9px}.cells{gap:1px}.focused .cell{height:32px;line-height:30px;font-size:10px}.lane-head{font-size:12px}.stadium-tag{display:none}}
/* Swimming: a real water surface with persistent moving athletes. */
.playfield.swimming-event,.focused .playfield.swimming-event{background:#0b263b;min-height:0;padding:22px}
.pool-scoreline,.pool-endlabels{display:flex;justify-content:space-between;gap:12px;font-size:11px;letter-spacing:1.4px;font-weight:700}.pool-scoreline{color:#a6def2;margin:0 0 12px}.pool-deck{background:#d0e1e7;border:6px solid #eef6f8;border-radius:7px;padding:12px;box-shadow:0 15px 35px #0004}.pool-endlabels{color:#1a4760;padding:2px 6px 12px}.pool-endlabels:last-child{padding:12px 6px 0}.pool-water{background:#069dc4 url('water.png') center/550px;border:5px solid #f8ffff;box-shadow:inset 0 0 20px #003c6577;overflow:hidden}.swim-lane{height:145px;position:relative;border-bottom:7px solid transparent;border-image:repeating-linear-gradient(90deg,#f4e645 0 10px,#176cc2 10px 20px) 7;border-image-slice:7;background:#0b759f12}.swim-lane:last-child{border-bottom:0}.swim-lane.active{background:#ffffff12;box-shadow:inset 0 0 0 2px #fff8}.pool-lane-label{position:absolute;z-index:3;top:6px;left:8px;right:8px;display:flex;justify-content:space-between;gap:8px;font-size:12px;pointer-events:none}.pool-lane-label b,.pool-status{background:#063147e8;border-radius:4px;padding:5px 8px;color:#fff}.pool-lane-label b{border-left:4px solid var(--team)}.pool-track{position:absolute;top:35px;bottom:5px;left:0;right:0}.pool-floor-line{position:absolute;left:5%;right:5%;height:5px;top:52%;background:#06406b70;border-left:5px solid #06406b;border-right:5px solid #06406b}.pool-floor-line:before,.pool-floor-line:after{content:'';position:absolute;height:45px;width:5px;top:-20px;background:#06406b80}.pool-floor-line:before{left:0}.pool-floor-line:after{right:0}.pool-marks{position:absolute;left:5%;right:5%;bottom:0;display:flex;justify-content:space-between;color:#e7fcff;font-size:11px;text-shadow:0 1px 3px #002d42}.swimmer-position{position:absolute;top:50%;width:105px;height:76px;transform:translate(-50%,-50%);transition:left 1s ease-in-out;z-index:2}.swimmer-direction{width:100%;height:100%;transition:transform .35s}.swimmer-art{display:block;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 3px 3px #003f5b88)}.swimmer-badge{position:absolute;left:44%;top:-3px;border:2px solid white;background:var(--team);border-radius:50%;width:23px;height:23px;line-height:19px;text-align:center;font-size:12px;color:#051b26;box-shadow:0 2px 8px #0004}.swimming .swimmer-art{animation:stroke .24s ease-in-out infinite alternate}.finished .swimmer-badge{background:#ffd564}@keyframes stroke{to{transform:translateY(-3px) rotate(3deg)}}
#dice{min-height:88px;align-items:center;justify-content:center;gap:40px;margin:20px 0;padding:15px;perspective:500px;background:#071827;border-radius:10px}.dice-stage{height:54px;width:54px;perspective:400px}.dice-cube{width:54px;height:54px;position:relative;transform-style:preserve-3d;transform:var(--result);transition:transform .3s}.dice-face{position:absolute;inset:0;background:#fff9e8;border:1px solid #b7b4a4;box-shadow:inset 0 0 8px #b0a08050;border-radius:7px;padding:8px;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);gap:4px;backface-visibility:hidden}.face-1{transform:translateZ(27px)}.face-2{transform:rotateY(90deg) translateZ(27px)}.face-3{transform:rotateX(90deg) translateZ(27px)}.face-4{transform:rotateX(-90deg) translateZ(27px)}.face-5{transform:rotateY(-90deg) translateZ(27px)}.face-6{transform:rotateY(180deg) translateZ(27px)}.rolling .dice-cube{animation:dice-tumble .58s linear infinite}.rolling .dice-stage:nth-child(2){animation:dice-hop .3s ease-in-out infinite alternate}.rolling .dice-stage:first-child{animation:dice-hop .23s ease-in-out infinite alternate}@keyframes dice-tumble{from{transform:rotateX(0) rotateY(0) rotateZ(0)}to{transform:rotateX(360deg) rotateY(540deg) rotateZ(360deg)}}@keyframes dice-hop{to{transform:translateY(-9px)}}
@media(max-width:600px){.playfield.swimming-event,.focused .playfield.swimming-event{padding:12px}.pool-deck{padding:5px;border-width:3px}.pool-water{border-width:3px}.swim-lane{height:125px}.pool-lane-label{font-size:10px;left:3px;right:3px}.pool-lane-label b,.pool-status{padding:4px}.pool-scoreline,.pool-endlabels{font-size:9px;letter-spacing:.5px}.swimmer-position{width:70px;height:58px}.pool-marks{font-size:9px}.swimmer-badge{width:19px;height:19px;line-height:15px;font-size:10px}}
@media(prefers-reduced-motion:reduce){.rolling .dice-cube{animation-duration:1.8s}.rolling .dice-stage{animation:none!important}.swimming .swimmer-art{animation:none}.swimmer-position{transition-duration:.1s}}
.pool-floor-line,.pool-marks{left:53px;right:53px}
/* Each team has its own shooting station, target and five recorded arrows. */
.playfield.archery-event,.focused .playfield.archery-event{background:#102c29;min-height:0}.archery-topline{display:flex;justify-content:space-between;gap:12px;font-size:11px;letter-spacing:1px;color:#b9ddd1;font-weight:700;margin:0 0 16px}.archery-range{display:grid;gap:16px}.archery-station{border:1px solid #729887;border-radius:10px;overflow:hidden;background:#16382e;box-shadow:0 8px 18px #0003}.archery-station.active{border-color:var(--team);box-shadow:0 0 0 2px color-mix(in srgb,var(--team) 30%,transparent)}.archery-head,.archery-bottom{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 15px;background:#0b231fed;font-size:14px}.archery-head b{color:var(--team)}.archery-head>span{color:#edf8e8}.archery-scene{position:relative;height:205px;overflow:hidden;background:linear-gradient(0deg,#235d35cc,#0c3729cc),url(stadium.png) 10% 15%/1000px auto}.shooting-line{position:absolute;top:0;bottom:0;width:3px;left:115px;background:#e7f5b477;transform:skewY(-15deg)}.archer-art{position:absolute;left:10px;bottom:8px;width:140px;height:185px;object-fit:contain;filter:drop-shadow(1px 4px 5px #001c20aa);z-index:2;transform-origin:bottom center}.archery-target{position:absolute;right:15px;top:7px;width:190px;height:190px;filter:drop-shadow(0 7px 6px #03140c77);z-index:2}.archery-target svg{width:100%;height:100%;display:block}.archery-bottom{min-height:50px}.shot-slots{display:flex;gap:6px}.shot-slot{display:inline-flex;align-items:center;justify-content:center;width:30px;height:29px;border:1px solid #567a65;border-radius:4px;background:#0a211b;color:#89ad9a;font-weight:700}.shot-slot.used{background:#f4d67e;color:#152b1e;border-color:#ffe8a9}.archery-focus{color:#c4d3a3;font-size:12px}.arrow-flight{position:absolute;top:88px;left:130px;right:109px;height:20px;z-index:3;pointer-events:none;opacity:0}.arrow-flight span{position:absolute;left:0;top:0;font:42px Georgia;color:#fff0bd;line-height:20px;text-shadow:0 1px 3px #000}.shooting .arrow-flight{animation:arrow-visibility .8s linear both}.shooting .arrow-flight span{animation:arrow-shot .8s cubic-bezier(.2,.4,.6,1) both}.target-hit.arriving{animation:arrow-impact .8s step-end both}.shot-callout{position:absolute;bottom:12px;left:40%;transform:translateX(-50%);padding:7px 12px;background:#071f1bd9;border:1px solid #cce5bd44;border-radius:5px;color:#ffe497;font-weight:700;font-size:14px;z-index:4}.shooting .shot-callout{animation:arrow-impact .8s step-end both}.aiming .archer-art{animation:archer-aim 1s ease-in-out infinite alternate}.shooting .archer-art{animation:archer-release .5s ease-out}.archery-station .archery-scene:after{content:'';position:absolute;left:140px;right:220px;bottom:40px;border-top:1px dashed #e7f5b440;pointer-events:none}@keyframes arrow-visibility{0%,95%{opacity:1}100%{opacity:0}}@keyframes arrow-shot{from{left:0;transform:translateX(-100%)}to{left:100%;transform:translateX(-30%)}}@keyframes arrow-impact{from{opacity:0}to{opacity:1}}@keyframes archer-aim{to{transform:rotate(-1deg)}}@keyframes archer-release{25%{transform:rotate(-3deg)}100%{transform:rotate(0)}}
@media(max-width:600px){.archery-scene{height:155px}.archer-art{width:95px;height:140px;left:0}.archery-target{width:135px;height:135px;right:3px;top:6px}.shooting-line{left:75px}.arrow-flight{top:62px;left:85px;right:70px}.archery-head,.archery-bottom{padding:8px;font-size:12px;gap:6px}.archery-topline{font-size:9px;letter-spacing:0}.archery-focus{font-size:10px}.shot-slot{width:25px;height:26px}.shot-slots{gap:3px}.shot-callout{left:38%;bottom:5px;font-size:11px;padding:4px 6px}.archery-station .archery-scene:after{display:none}}
@media(prefers-reduced-motion:reduce){.aiming .archer-art,.shooting .archer-art{animation:none}}
/* High jump: the bar height and jump outcome follow the actual dice result. */
.playfield.high-event,.focused .playfield.high-event{background:#152c3d;min-height:0}.high-topline{font-size:14px;letter-spacing:1px;color:#bfd1db;margin-bottom:14px}.high-stations{display:grid;gap:18px}.high-station{border:1px solid #516b7c;border-radius:10px;overflow:hidden}.high-station.active{border-color:var(--team);box-shadow:0 0 0 2px color-mix(in srgb,var(--team) 30%,transparent)}.high-head,.high-bottom{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:12px 14px;background:#0a2031;font-size:14px}.high-head b{color:var(--team)}.high-bottom{color:#d0dee7}.high-scene{height:245px;position:relative;overflow:hidden;background:linear-gradient(#153f37b8,#173b33b8),url(stadium.png) center/cover}.high-runway{position:absolute;bottom:0;height:65px;left:0;right:0;background:repeating-linear-gradient(0deg,transparent 0 24px,#ffe8db66 25px 26px),#b55b45;border-top:3px solid #ecdad1}.high-mat{position:absolute;right:5%;bottom:22px;width:36%;height:48px;border:3px solid #87bff0;border-bottom:12px solid #1e4c85;border-radius:5px;background:#367fbd;transform:skewY(-3deg);display:grid;place-items:center;box-shadow:0 8px 8px #07152266}.high-mat span{font-size:12px;letter-spacing:1px;color:#fff}.high-upright{position:absolute;width:5px;height:167px;background:#e3e7ea;bottom:27px;box-shadow:2px 2px 0 #233b48}.high-upright.back{left:53%;z-index:1}.high-upright.front{left:81%;z-index:5}.high-crossbar{position:absolute;left:53%;width:28%;bottom:var(--bar-height);height:5px;background:repeating-linear-gradient(90deg,#fff3b0 0 25px,#ee5950 25px 50px);z-index:3;transform-origin:90% center;box-shadow:0 2px 3px #0005}.high-crossbar b{position:absolute;right:-33px;top:-9px;background:#fff0b2;color:#172d3c;border-radius:3px;min-width:25px;padding:3px;text-align:center;font-size:14px}.jumper-position{position:absolute;left:12%;bottom:39px;width:125px;height:95px;z-index:4;transform:rotate(-35deg);filter:drop-shadow(0 4px 3px #0005)}.jumper-art{width:100%;height:100%;object-fit:contain;display:block}.high-callout{position:absolute;left:14px;top:14px;background:#061c2de8;border-radius:5px;padding:8px 12px;font-size:14px;font-weight:700;color:#ffe09d;z-index:6}.preparing .jumper-position{animation:jump-ready .6s ease-in-out infinite alternate}.jumping .jumper-position{animation:high-jump 2.2s ease-in-out both}.jumping .high-callout{animation:jump-result 2.2s both}.missed .high-crossbar{animation:bar-fall 2.2s both}@keyframes jump-ready{to{transform:translateY(-5px) rotate(-30deg)}}@keyframes high-jump{0%{left:12%;bottom:39px;transform:rotate(-35deg)}28%{left:38%;bottom:55px;transform:rotate(-25deg)}53%{left:54%;bottom:calc(var(--bar-height) + 8px);transform:rotate(0)}72%{left:64%;bottom:calc(var(--bar-height) - 15px);transform:rotate(25deg)}90%,100%{left:66%;bottom:64px;transform:rotate(8deg)}}@keyframes bar-fall{0%,55%{transform:rotate(0);opacity:1}85%,100%{transform:translateY(50px) rotate(-24deg);opacity:.8}}@keyframes jump-result{0%,65%{opacity:0}75%,100%{opacity:1}}@media(max-width:600px){.high-scene{height:230px}.jumper-position{width:90px;height:80px}.high-head,.high-bottom{font-size:14px;padding:10px}.high-crossbar b{right:-26px}.high-callout{font-size:12px;padding:6px 8px}.high-mat{right:3%;width:38%}.high-mat span{font-size:10px}.high-topline{font-size:12px}}@media(prefers-reduced-motion:reduce){.preparing .jumper-position{animation:none}.jumping .jumper-position{animation:none;left:65%;bottom:65px;transform:none}.missed .high-crossbar{animation:none;transform:translateY(35px) rotate(-20deg)}.jumping .high-callout{animation:none}}
/* Sprint lanes share one aligned start and finish, with position from the game state. */
.playfield.sprint-event,.focused .playfield.sprint-event{background:#12352d;min-height:0}.sprint-topline{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:14px;color:#d8e9de;margin-bottom:16px}.sprint-topline b{color:#ffe4a2}.sprint-track{background:#b94d3c;border:5px solid #e9dfc8;border-radius:8px;padding:0 12px;overflow:hidden;box-shadow:0 10px 25px #0004}.sprint-distance{display:flex;justify-content:space-between;margin:0 46px;padding:10px 0;color:#fff2dd;font-size:12px;font-weight:700}.sprint-lane{position:relative;height:158px;border-top:3px solid #ffeddb;background:#a940301c}.sprint-lane:nth-child(odd){background:#d363462b}.sprint-lane.active{background:#f6cc8530;box-shadow:inset 0 0 0 2px var(--team)}.sprint-head{position:absolute;top:7px;left:8px;right:8px;display:flex;justify-content:space-between;gap:8px;z-index:4;font-size:14px}.sprint-head b,.sprint-status{padding:4px 7px;background:#321f1ce8;border-radius:4px;color:#fff}.sprint-head b{border-left:4px solid var(--team)}.sprint-course{position:absolute;left:46px;right:46px;top:35px;bottom:5px}.sprint-grid{position:absolute;inset:0;background:repeating-linear-gradient(90deg,#fff4df35 0 1px,transparent 1px 10%)}.sprint-start,.sprint-finish{position:absolute;top:-35px;bottom:-5px;width:4px;background:#fff4df;pointer-events:none}.sprint-start{left:0}.sprint-finish{left:100%;width:12px;background:repeating-conic-gradient(#fff8e8 0% 25%,#26312d 0% 50%) 0 0/12px 12px;opacity:.95}.runner-position{position:absolute;bottom:0;width:90px;height:108px;transform:translateX(-50%);transition:left 1.4s cubic-bezier(.25,.65,.4,1);z-index:3}.runner-art{width:100%;height:100%;object-fit:contain;display:block;filter:drop-shadow(0 4px 2px #50291f88);transform-origin:50% 90%}.runner-badge{position:absolute;top:35%;left:38%;display:grid;place-items:center;background:var(--team);border:2px solid white;border-radius:50%;color:#09202b;width:24px;height:24px;font-size:13px}.running .runner-art{animation:sprint-stride .17s ease-in-out infinite alternate}.ready .runner-art{animation:sprint-ready .6s ease-in-out infinite alternate}.sprint-endlabels{display:flex;justify-content:space-between;padding:10px 33px;border-top:3px solid #ffeddb;font-weight:800;font-size:14px;color:#fff4df}.sprint-lane.winner .sprint-status{background:#ffe29a;color:#392b11}.sprint-lane.finished .runner-badge{border-color:#ffe29a}@keyframes sprint-stride{from{transform:translateY(0) rotate(-3deg)}to{transform:translateY(-6px) rotate(3deg)}}@keyframes sprint-ready{to{transform:translateY(-2px) rotate(-3deg)}}@media(max-width:600px){.sprint-track{padding:0 4px;border-width:3px}.sprint-course{left:30px;right:30px}.sprint-distance{margin:0 30px;font-size:12px}.sprint-lane{height:140px}.runner-position{width:64px;height:88px}.sprint-head{font-size:12px;left:3px;right:3px}.runner-badge{width:19px;height:19px;font-size:12px}.sprint-topline{font-size:12px}.sprint-endlabels{padding:9px 19px}}@media(prefers-reduced-motion:reduce){.runner-position{transition-duration:.1s}.running .runner-art,.ready .runner-art{animation:none}}
.race-announcement{display:flex;align-items:center;gap:18px;background:#213e39;border:2px solid #c5ddc7;border-radius:10px;padding:18px 22px;margin-bottom:18px;color:#fff}.race-announcement[hidden]{display:none}.race-announcement.final-result{background:linear-gradient(115deg,#ffe29a,#f5bd4d);border-color:#fff1bf;color:#30220e;box-shadow:0 5px 24px #f5bd4d30}.race-trophy{font-size:48px;line-height:1.2}.race-announcement small{display:block;font-size:14px;font-weight:800;letter-spacing:1px}.race-announcement strong{display:block;font-size:clamp(26px,3vw,42px);line-height:1.15;margin:5px 0;overflow-wrap:anywhere}.race-announcement p{font-size:14px;line-height:1.5;margin:4px 0 0}.sprint-lane.winner{background:#ffd26538;box-shadow:inset 0 0 0 3px #ffe29a}.sprint-lane.winner .sprint-status{font-weight:800;font-size:14px;padding:6px 10px}.sprint-lane.winner .sprint-head b{background:#ffe29a;color:#30220e}@media(max-width:600px){.race-announcement{gap:12px;padding:14px}.race-trophy{font-size:34px}.sprint-lane.winner .sprint-status{font-size:12px;padding:4px 6px}}
.endurance-track .sprint-lane{height:185px}.endurance-track .sprint-course{top:65px}.endurance-track .sprint-start,.endurance-track .sprint-finish{top:-65px}.endurance-track .sprint-grid{background:repeating-linear-gradient(90deg,#fff4df35 0 1px,transparent 1px 6.25%)}.runner-energy{position:absolute;left:8px;top:40px;display:flex;align-items:center;gap:9px;z-index:4;color:#fff;font-size:14px;background:#321f1ce8;border-radius:4px;padding:4px 7px}.runner-energy meter{width:85px;height:14px;accent-color:#72e3aa}.low-energy .runner-energy{color:#ffcd96}.endurance-track .sprint-distance{font-size:14px}@media(max-width:600px){.endurance-track .sprint-lane{height:166px}.runner-energy{font-size:12px;left:3px}.endurance-track .sprint-distance{font-size:12px}}
.cycling-track{background:#4d555b;border-color:#ccd5d4}.cycling-track .sprint-lane{background:#536068;border-color:#eee5c7}.cycling-track .sprint-lane:nth-child(odd){background:#48555b}.cycling-track .sprint-lane.active{background:#63716a}.cycling-track .sprint-course{left:65px;right:65px}.cycling-track .sprint-distance{margin-left:65px;margin-right:65px}.cycling-track .sprint-grid{background:repeating-linear-gradient(90deg,#f2ebd926 0 1px,transparent 1px 4.166667%)}.cycling-track .runner-position{width:126px;height:108px}.cycling-track .runner-badge{top:28%;left:43%}.cycling-track .running .runner-art{animation:cycle-pedal .18s ease-in-out infinite alternate}.cycling-track .ready .runner-art{animation:none}.cycling-track .sprint-head b,.cycling-track .sprint-status,.cycling-track .runner-energy{background:#15232bef}.draft-status{position:absolute;right:8px;top:43px;font-size:12px;font-weight:700;color:#ffe59e;z-index:4}.cycling-track .sprint-lane.winner{background:#77724d;box-shadow:inset 0 0 0 3px #ffe29a}.cycling-track .sprint-lane.winner .sprint-status,.cycling-track .sprint-lane.winner .sprint-head b{background:#ffe29a;color:#30220e}@keyframes cycle-pedal{to{transform:translateY(-2px) rotate(-1deg)}}@media(max-width:600px){.cycling-track .sprint-course{left:44px;right:44px}.cycling-track .sprint-distance{margin-left:44px;margin-right:44px;font-size:10px}.cycling-track .runner-position{width:88px;height:90px}.draft-status{top:66px;left:10px;right:auto;font-size:10px}.cycling-track .sprint-lane{height:184px}.cycling-track .sprint-course{top:83px}.cycling-track .sprint-start,.cycling-track .sprint-finish{top:-83px}}@media(prefers-reduced-motion:reduce){.cycling-track .running .runner-art{animation:none}}
.velodrome{position:relative;aspect-ratio:1.85;margin:16px 0 24px;isolation:isolate}.velodrome>svg{position:absolute;inset:0;width:100%;height:100%}.velo-center{position:absolute;left:29%;right:29%;top:36%;bottom:36%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center;color:#d4e5d3}.velo-center b{font-size:12px;letter-spacing:2px}.velo-center strong{font:clamp(16px,3vw,34px) 'Barlow Condensed',sans-serif;color:#ffe2a0}.velo-center span{font-size:12px}.velo-start{position:absolute;bottom:0;left:50%;transform:translateX(-50%);background:#11291f;color:#fff3ca;font-size:12px;padding:3px 8px;border-radius:4px;white-space:nowrap}.velo-rider{position:absolute;width:clamp(48px,7vw,95px);height:clamp(38px,5vw,70px);transform:translate(-50%,-72%);z-index:3;pointer-events:none}.velo-rider img{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 3px 2px #0005)}.velo-rider b{position:absolute;left:45%;top:15%;display:grid;place-items:center;width:23px;height:23px;background:var(--team);border:2px solid white;border-radius:50%;color:#122430;font-size:13px}.velo-rider.pedaling{animation:velo-bounce .16s ease-in-out infinite alternate}@keyframes velo-bounce{to{margin-top:-2px}}.velodrome-event .cycling-track{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;background:transparent;border:0;box-shadow:none;padding:0;overflow:visible}.velodrome-event .cycling-track .sprint-distance,.velodrome-event .cycling-track .sprint-course,.velodrome-event .cycling-track .sprint-endlabels{display:none}.velodrome-event .cycling-track .sprint-lane{height:105px;border:1px solid #637b71;border-radius:8px;background:#15352c}.velodrome-event .cycling-track .sprint-head{font-size:13px;flex-wrap:wrap}.velodrome-event .runner-energy{top:43px}.velodrome-event .draft-status{top:78px;left:12px;right:auto}.velodrome-event .cycling-track .sprint-lane.winner{background:#68603a}@media(max-width:600px){.velodrome{aspect-ratio:1.3}.velo-center b{font-size:9px;letter-spacing:0}.velo-center span{font-size:9px}.velo-rider b{width:18px;height:18px;font-size:11px}.velodrome-event .cycling-track{grid-template-columns:1fr}.velo-start{font-size:10px}}@media(prefers-reduced-motion:reduce){.velo-rider.pedaling{animation:none}}
.exchange-zone{position:absolute;z-index:5;background:#fff0b8;color:#3e2714;padding:4px 7px;font-size:12px;font-weight:800;border-radius:4px;white-space:nowrap}.exchange-1{right:0;top:50%;transform:translateY(110%)}.exchange-2{left:50%;top:0;transform:translateX(-50%)}.exchange-3{left:0;top:50%;transform:translateY(110%)}.relay-oval .velo-rider{width:clamp(40px,6vw,78px);height:clamp(43px,6vw,85px)}.relay-oval .velo-rider b{width:29px;border-radius:5px;left:36%;top:24%;font-size:12px}.relay-status{position:absolute;top:45px;left:12px;right:12px;font-size:14px;color:#f3e4c0;line-height:1.5}.velodrome-event .relay-track .sprint-lane{height:100px}@media(max-width:600px){.exchange-zone{font-size:9px;padding:3px}.relay-status{font-size:12px}.relay-oval .velo-rider b{width:24px;height:18px;font-size:10px}}
.playfield.long-event,.focused .playfield.long-event{background:#14382d;min-height:0}.long-station{margin:18px 0;border:1px solid #6f8b79;border-radius:10px;overflow:hidden;background:#193d30}.long-station.active{border-color:var(--team);box-shadow:0 0 0 2px var(--team)}.long-head,.long-bottom{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:12px 16px;font-size:14px}.long-head b{color:var(--team)}.long-bottom{background:#0e2c22;color:#f6dfab}.long-scene{height:210px;position:relative;overflow:hidden;background:linear-gradient(#376e55,#214730)}.long-runway{position:absolute;left:0;right:54%;top:120px;height:62px;background:repeating-linear-gradient(0deg,transparent 0 28px,#fff5 29px 31px),#b95740;border-block:3px solid #f1dcc0}.long-sand{position:absolute;left:47%;right:3%;top:120px;height:62px;background:repeating-radial-gradient(ellipse at 70% 40%,#e2bd79 0 2px,#d8ad69 3px 5px,#eac889 6px 10px);border:5px solid #b5986b;box-shadow:inset 0 5px 12px #75501c55}.long-sand>span{position:absolute;bottom:5px;width:100%;text-align:center;font-size:10px;letter-spacing:2px;color:#745526}.long-board{position:absolute;left:43%;top:117px;width:7px;height:68px;background:white;z-index:2}.long-board span{position:absolute;bottom:-20px;left:50%;transform:translateX(-50%);font-size:10px}.long-scale{position:absolute;left:49%;right:8%;top:98px;display:flex;justify-content:space-between;font-size:12px;color:#fff2d5}.long-athlete{position:absolute;left:var(--approach,10%);bottom:56px;width:78px;height:116px;transform:translateX(-50%);z-index:4;transition:left .7s}.long-athlete img{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 4px 2px #0005)}.long-athlete b{position:absolute;top:35%;left:40%;background:var(--team);color:#102332;border:2px solid white;border-radius:50%;width:23px;height:23px;text-align:center}.long-best{position:absolute;top:116px;height:69px;border-left:3px solid var(--team);z-index:3}.long-best span{position:absolute;top:68px;transform:translateX(-50%);font-size:9px;color:var(--team);font-weight:800}.long-flight .long-athlete{animation:long-leap 2.1s ease-in-out forwards}.long-foul .long-athlete{animation:long-null 2.1s ease-in-out forwards}.long-foul .long-callout{color:#ff9494;font-weight:800}.long-charge .long-athlete img{animation:sprint-stride .17s infinite alternate}.long-result:not(:empty){background:#f7c962;color:#30220e;padding:18px;border-radius:8px;font-weight:800;font-size:22px}@keyframes long-leap{0%{left:10%;bottom:56px;rotate:0deg}30%{left:43%;bottom:56px;rotate:-8deg}55%{left:calc((43% + var(--landing))/2);bottom:110px;rotate:-24deg}82%,100%{left:var(--landing);bottom:50px;rotate:15deg}}@keyframes long-null{0%{left:10%}40%,100%{left:45%}60%{rotate:18deg}100%{rotate:0deg}}@media(max-width:600px){.long-head,.long-bottom{font-size:12px;padding:10px}.long-athlete{width:56px;height:96px}.long-scene{height:210px}.long-sand>span{font-size:8px;letter-spacing:0}.long-result:not(:empty){font-size:18px}}@media(prefers-reduced-motion:reduce){.long-flight .long-athlete,.long-foul .long-athlete{animation-duration:.1s}.long-charge .long-athlete img{animation:none}}
/* Athletics: straightaways, semicircular bends and eight measured lanes. */
.athletics-stadium{aspect-ratio:5/3;border-radius:18px;overflow:hidden;box-shadow:0 12px 30px #0005;background:#1a303b}.athletics-stadium .velo-center{top:36%;bottom:36%;left:38%;right:38%;gap:5px;background:#173d30d9;border:1px solid #a4c7a440;border-radius:8px;padding:8px}.athletics-stadium .velo-center strong{font-size:clamp(18px,2.5vw,30px)}.athletics-stadium .velo-center span{font-size:10px}.athletics-stadium .velo-rider{width:clamp(28px,4vw,52px);height:clamp(40px,5vw,70px);transform:translate(-50%,-90%)}.athletics-stadium .velo-rider b{width:20px;height:18px;font-size:10px;left:34%;top:25%;border-width:1px}.athletics-stadium .velo-start{bottom:9%;font-size:10px;background:#102a25df}.athletics-stadium .exchange-1{right:7%;top:49%;transform:translateY(-50%)}.athletics-stadium .exchange-2{top:12%}.athletics-stadium .exchange-3{left:7%;top:49%;transform:translateY(-50%)}.athletics-stadium .exchange-zone{font-size:10px;padding:3px 5px;background:#16392be8;color:#ffe5a5;border:1px solid #d4d9b770}@media(max-width:600px){.athletics-stadium{aspect-ratio:5/3;margin-inline:-12px}.athletics-stadium .velo-center b{font-size:7px}.athletics-stadium .velo-center strong{font-size:15px}.athletics-stadium .velo-center span{font-size:7px}.athletics-stadium .velo-center{padding:3px;gap:2px}.athletics-stadium .exchange-zone,.athletics-stadium .velo-start{font-size:8px}.athletics-stadium .velo-rider{width:27px;height:39px}.athletics-stadium .velo-rider b{width:15px;height:14px;font-size:8px}}
/* Pool deck, underwater markings and floating lane ropes. */
.pool-deck{padding:20px 34px;background:repeating-linear-gradient(0deg,transparent 0 27px,#8b9a9e55 28px 29px),repeating-linear-gradient(90deg,#c8d1d0 0 27px,#9dadaf 28px 29px);border:1px solid #b4c1c6;border-radius:5px;box-shadow:0 16px 38px #0006,inset 0 2px 0 #eff3ef,inset 0 -6px 14px #566d7e66}.pool-water{position:relative;background:linear-gradient(90deg,#05334f50,transparent 12%,transparent 88%,#05334f60),url('pool-water-real.png') center/cover;border:9px solid #e0e8e5;border-radius:2px;box-shadow:0 0 0 3px #6e8c97,0 0 0 7px #e0e5df,inset 0 0 32px #002c54aa}.swim-lane{height:170px;border:0;border-image:none;background:transparent}.swim-lane.active{background:#b0e4f409;box-shadow:none}.swim-lane.active .pool-lane-label b{box-shadow:0 0 0 1px var(--team)}.swim-lane:not(:last-child):after{content:'';position:absolute;bottom:-4px;left:0;right:0;height:9px;z-index:4;background:linear-gradient(0deg,#0007,transparent 45%,#fff9 55%,transparent 80%),repeating-linear-gradient(90deg,#da3f30 0 5px,#782322 5px 7px) left/15% 100% no-repeat,linear-gradient(0deg,#0007,transparent 45%,#fff9 55%,transparent 80%),repeating-linear-gradient(90deg,#e2b91d 0 6px,#bd8e11 6px 8px,#23689b 8px 14px,#154676 14px 16px);border-radius:8px;box-shadow:0 4px 3px #00365088}.pool-lane-label{top:10px;left:58px;right:12px;font-size:11px}.pool-lane-label b,.pool-status{background:#072d40bc;font-weight:500;padding:5px 7px;backdrop-filter:blur(3px)}.pool-track{top:32px;bottom:16px}.pool-floor-line{height:7px;background:#082b49aa;filter:blur(.65px);opacity:.8;box-shadow:0 2px 3px #17709a44}.pool-floor-line:before,.pool-floor-line:after{background:#082b49aa;width:7px;height:48px}.pool-marks{color:#c8e2ec99;font-size:10px;text-shadow:0 1px 2px #002d42}.pool-start-block{position:absolute;left:6px;top:50%;transform:translateY(-50%);width:35px;height:43px;z-index:5;background:linear-gradient(115deg,#dce4e5,#f3f6f4 50%,#96a8b3);border:2px solid #dce6e7;border-radius:3px;box-shadow:5px 6px 5px #002f4966,0 3px 0 #617c89}.pool-start-block:before{content:'';position:absolute;inset:3px;background:repeating-linear-gradient(0deg,#28779c 0 2px,#388dad 2px 3px);border:1px solid #164e6c}.pool-start-block b{position:absolute;inset:0;display:grid;place-items:center;font-size:18px;color:white;text-shadow:0 1px 3px #00334c}.swimmer-art{filter:drop-shadow(0 5px 3px #00304f88)}.swimmer-position:before{content:'';position:absolute;inset:28% -12% 20% -32%;border-radius:50%;background:radial-gradient(ellipse,transparent 25%,#cff4ff50 45%,transparent 68%);transform:scaleX(1.3);opacity:.5}.swimming .swimmer-position:before,.swimmer-position.swimming:before{animation:pool-wake .6s infinite alternate;opacity:1}.swimmer-badge{width:20px;height:20px;line-height:16px;font-size:10px;top:0;border-width:1px;box-shadow:0 2px 6px #002d4966}.pool-endlabels{color:#304956;text-shadow:0 1px #eef3ef;letter-spacing:2px;font-size:10px;padding-bottom:18px}.pool-endlabels:last-child{padding-top:18px}.playfield.swimming-event,.focused .playfield.swimming-event{background:linear-gradient(135deg,#153848,#0a2030)}@keyframes pool-wake{to{transform:scaleX(1.65) scaleY(1.15);opacity:.5}}@media(max-width:600px){.pool-deck{padding:14px 12px}.pool-water{border-width:5px}.swim-lane{height:145px}.pool-start-block{width:24px;height:34px;left:3px}.pool-start-block b{font-size:14px}.pool-lane-label{left:34px;font-size:9px;right:5px}.pool-endlabels{font-size:8px;letter-spacing:.6px}.pool-marks{font-size:9px}}@media(prefers-reduced-motion:reduce){.swimmer-position.swimming:before{animation:none}}
#dice.card-matrices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 12px;padding:14px 10px;perspective:none;min-height:0;background:#061a29}.matrix-intro,.matrix-total{grid-column:1/-1;text-align:center;font-size:12px;color:#b7d5e3;line-height:1.4}.matrix-total:empty{display:none}.matrix-total{color:#ffe1a0;font-weight:700;font-size:16px}.card-matrix:only-of-type{grid-column:1/-1;max-width:245px;width:100%;justify-self:center}.card-matrix h4{text-align:center;font-size:12px;color:#f7c962;margin:0 0 10px}.matrix-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px 6px}.round-card{position:relative;aspect-ratio:1;padding:0;border:0;border-radius:50%;background:transparent;perspective:500px;min-width:0;box-shadow:0 4px 8px #0007}.round-card:hover{background:transparent}.round-card:disabled{opacity:1}.round-card-inner{display:block;width:100%;height:100%;transform-style:preserve-3d;transition:transform .6s}.round-card.revealed .round-card-inner{transform:rotateY(180deg)}.card-back,.card-front{position:absolute;inset:0;border-radius:50%;backface-visibility:hidden;display:flex;align-items:center;justify-content:center;border:2px solid #d3ae5b}.card-back{flex-direction:column;background:radial-gradient(circle at 35% 25%,#315f7b,#132e46 65%,#091c2b);color:#f7d38a;font-weight:800;font-size:clamp(17px,2vw,28px);box-shadow:inset 0 0 0 3px #112c40,inset 0 0 0 4px #8b7945}.card-back>span{font-size:6px;letter-spacing:1px}.card-front{transform:rotateY(180deg);background:radial-gradient(circle at 30% 20%,#fffbea,#f5d681);color:#13283a;font-size:clamp(22px,3vw,36px);font-weight:800;box-shadow:inset 0 -3px 6px #be944577}.round-card:not(:disabled):hover .card-back{border-color:white;filter:brightness(1.2)}.round-card:disabled:not(.revealed) .card-back{filter:brightness(.7)}@media(prefers-reduced-motion:reduce){.round-card-inner{transition-duration:.01s}}
.round-card.revealed .round-card-inner.card-turning{animation:card-turn .7s cubic-bezier(.25,.6,.3,1) both;animation-delay:var(--flip-delay,0ms);transition:none}.card-back,.card-front{-webkit-backface-visibility:hidden}.matrix-total:not(:empty){animation:card-result .01s both;animation-delay:var(--result-delay,0ms)}@keyframes card-turn{0%{transform:rotateY(0deg) scale(1)}40%{transform:rotateY(80deg) scale(1.12)}75%{transform:rotateY(160deg) scale(1.06)}100%{transform:rotateY(180deg) scale(1)}}@keyframes card-result{from{opacity:0}to{opacity:1}}
.cycling-stadium{aspect-ratio:5/3;background:#182731;border:1px solid #68818d;border-radius:16px;overflow:hidden;box-shadow:0 16px 35px #0006}.cycling-stadium .velo-center{left:36%;right:36%;top:38%;bottom:38%;padding:10px;gap:5px;background:linear-gradient(#172f3de8,#11232bea);border:2px solid #8b9eaa;border-radius:6px;box-shadow:0 8px 14px #0005}.cycling-stadium .velo-center b{color:#91b5c9;font-size:10px}.cycling-stadium .velo-center strong{font-size:clamp(18px,2.7vw,33px);color:#f1d395}.cycling-stadium .velo-center span{font-size:10px}.cycling-stadium .velo-rider{width:clamp(40px,6vw,80px);height:clamp(35px,4.5vw,60px);transform:translate(-50%,-83%)}.cycling-stadium .velo-rider img{filter:drop-shadow(4px 7px 3px #281d1477)}.cycling-stadium .velo-rider b{width:20px;height:20px;font-size:11px;top:10%;left:42%}.cycling-stadium .velo-start{bottom:9%;font-size:10px;background:#172c36ed}.velodrome-event:has(.cycling-stadium){background:linear-gradient(130deg,#253d48,#152a35)}@media(max-width:600px){.cycling-stadium{aspect-ratio:5/3;margin-inline:-10px}.cycling-stadium .velo-center{padding:4px;gap:2px}.cycling-stadium .velo-center b,.cycling-stadium .velo-center span{font-size:7px}.cycling-stadium .velo-center strong{font-size:15px}.cycling-stadium .velo-rider{width:36px;height:31px}.cycling-stadium .velo-rider b{width:14px;height:14px;font-size:8px;border-width:1px}.cycling-stadium .velo-start{font-size:8px}}@media(prefers-reduced-motion:reduce){.round-card.revealed .round-card-inner.card-turning{animation:none}.matrix-total:not(:empty){animation:none}}
