body.tool-page{--accent:#2f7fe0;--accent-soft:#e8f1fd;--track:#dfeaf4;--line:var(--border);--surface-alt:var(--surface-muted);--scene-dim:1;flex-direction:column;min-height:100dvh;display:flex}:root.dark body.tool-page{--accent:#5aa4f0;--accent-soft:#1d3a55;--track:#26404e;--scene-dim:.58}body.tool-page>.site-header{min-height:54px;padding:0 16px}body.tool-page>.site-header .site-brand{font-size:19px}body.tool-page>main.sport{flex-direction:column;flex:1 0 auto;gap:10px;min-height:0;display:flex}.sport .page-header{margin-bottom:0}.sport-tabs{border:1px solid var(--line);background:var(--surface);border-radius:999px;gap:4px;padding:4px;display:flex}.sport-tabs button{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:999px;padding:7px 16px;font-size:14px;font-weight:700;transition:background .18s,color .18s}.sport-tabs button:hover{color:var(--accent)}.sport-tabs button.on{background:var(--accent);color:#fff;box-shadow:0 6px 14px #2f7fe04d}.stage{border:1px solid var(--line);border-radius:22px;flex:auto;min-height:clamp(420px,52vh,560px);position:relative;overflow:hidden}.backdrop{filter:brightness(var(--scene-dim));position:absolute;inset:0}.backdrop i{animation-name:pan;animation-timing-function:linear;animation-iteration-count:infinite;display:block;position:absolute;inset:0}.figure-wrap{justify-content:center;align-items:flex-end;display:flex;position:absolute;inset:0}.figure{aspect-ratio:1;width:auto;height:min(94%,540px);overflow:visible}.stage[data-sport=run] .clouds,.stage[data-sport=bike] .clouds{--pan:320px;animation-duration:calc(var(--cycle) * 16);background-image:radial-gradient(circle at 42px 46%,#ffffffe0 0 20px,#0000 21px),radial-gradient(circle at 76px 52%,#ffffffe0 0 15px,#0000 16px);background-repeat:repeat-x;background-size:320px 150px;inset:0 0 40%}.stage[data-sport=run] .sky{background:linear-gradient(#cfe7ff 0%,#e6f5f0 62%,#f6efe2 100%)}.stage[data-sport=run] .far{--pan:58px;height:26%;animation-duration:calc(var(--cycle) * 7);background-image:radial-gradient(circle at 29px 100%,#b5dcc3 0 19px,#0000 20px);background-position:0 100%;background-repeat:repeat-x;background-size:58px 36px;inset:auto 0 24%}.stage[data-sport=run] .near{--pan:76px;height:24%;animation-duration:calc(var(--cycle) * 2.2);background-color:#eee1ca;background-image:linear-gradient(90deg,#fffaf0 0 34px,#0000 34px 76px);background-position:0 34%;background-repeat:repeat-x;background-size:76px 7px;border-top:2px solid #ddc9a6;inset:auto 0 0}.stage[data-sport=bike] .sky{background:linear-gradient(#cbe6ff 0%,#eaf4fd 66%,#f3f6f9 100%)}.stage[data-sport=bike] .far{--pan:150px;height:30%;animation-duration:calc(var(--cycle) * 6);background-image:radial-gradient(circle at 70px 100%,#c9dcef 0 46px,#0000 47px);background-position:0 100%;background-repeat:repeat-x;background-size:150px 74px;inset:auto 0 30%}.stage[data-sport=bike] .near{--pan:120px;height:30%;animation-duration:calc(var(--cycle) * 1.1);background-color:#b3bcc4;background-image:linear-gradient(90deg,#fdfefe 0 44px,#0000 44px 120px);background-position:0 44%;background-repeat:repeat-x;background-size:120px 7px;border-top:3px solid #a9b3bc;inset:auto 0 0}.stage[data-sport=swim] .sky{background:linear-gradient(#c6ecff 0%,#93d3f2 56%,#2f8fc9 63%,#0f4f7a 100%)}.stage[data-sport=swim] .far{--pan:90px;height:10px;animation-duration:calc(var(--cycle) * 2);background-image:radial-gradient(18px 5px at 22px,#ffffffd9 0 100%,#0000 100%);background-repeat:repeat-x;background-size:90px 10px;inset:62% 0 auto}.stage[data-sport=swim] .near{--pan:60px;animation-name:pan-y;animation-duration:calc(var(--cycle) * 3.4);background-image:repeating-linear-gradient(4deg,#ffffff17 0 3px,#0000 3px 46px),repeating-linear-gradient(90deg,#ffffff12 0 2px,#0000 2px 64px),repeating-linear-gradient(0deg,#ffffff0f 0 2px,#0000 2px 64px);inset:64% 0 0}.stage[data-sport=rope] .sky{background:linear-gradient(#f2f6fa 0%,#e4ecf3 62%,#dbe4ec 100%)}.stage[data-sport=rope] .far{--pan:170px;height:5px;animation-duration:calc(var(--cycle) * 5);background-image:linear-gradient(90deg,#c3d0dc 0 74px,#0000 74px 170px);background-repeat:repeat-x;background-size:170px 5px;inset:auto 0 26%}.stage[data-sport=rope] .near{--pan:46px;height:26%;animation-duration:calc(var(--cycle) * 4);background-color:#e6c69b;background-image:repeating-linear-gradient(90deg,#ffffff73 0 2px,#0000 2px 46px);border-top:2px solid #cfa877;inset:auto 0 0}.stage.is-paused .backdrop i,.stage.is-paused .figure *{animation-play-state:paused}@keyframes pan{to{background-position-x:calc(var(--pan) * -1)}}@keyframes pan-y{to{background-position-y:calc(var(--pan) * -1)}}.figure *{transform-box:view-box}.figure .limb{fill:none;stroke:#f2c09b;stroke-width:10px;stroke-linecap:round;stroke-linejoin:round}.figure .limb.far{stroke:#d8a37c}.figure .limb.arm{stroke-width:8px}.figure .skin{fill:#f6c9a4}.figure .shirt{fill:#3b82f6}.figure .shorts{fill:#24405f}.figure .hair{fill:#2f3a4d}.figure .eye{fill:#22303f}.figure .mouth{fill:none;stroke:#22303f;stroke-width:1.8px;stroke-linecap:round}.figure .shadow{fill:#1b3a5a;opacity:.16}.figure .neck{fill:#f2c09b}.figure .shoe{fill:#e2e8f0}.figure .shoe.far{fill:#cbd5e1}.figure .hand{fill:#f6c9a4}.figure .hand.far{fill:#d8a37c}.figure .nose{fill:none;stroke:#d99a72;stroke-width:1.5px;stroke-linecap:round}.figure .sole{fill:#94a3b8}.figure.run .body{animation:run-bob calc(var(--cycle) * .5) ease-in-out infinite}.figure.run .thigh{animation:run-thigh var(--cycle) ease-in-out infinite}.figure.run .arm-swing{animation:run-arm var(--cycle) ease-in-out infinite}.figure.run .shin,.figure.run .fore{animation-duration:var(--cycle);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-delay:inherit}.figure.run .shin{animation-name:run-knee}.figure.run .fore{animation-name:run-elbow}.figure.run .shoe{animation-name:run-foot;animation-duration:var(--cycle);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-delay:inherit}@keyframes run-foot{0%{transform:rotate(-8deg)}18%{transform:rotate(0)}36%{transform:rotate(-2deg)}52%{transform:rotate(7deg)}70%{transform:rotate(-10deg)}86%{transform:rotate(-16deg)}to{transform:rotate(-8deg)}}@keyframes run-thigh{0%{transform:rotate(-30deg)}18%{transform:rotate(-6deg)}36%{transform:rotate(18deg)}52%{transform:rotate(32deg)}70%{transform:rotate(4deg)}86%{transform:rotate(-26deg)}to{transform:rotate(-30deg)}}@keyframes run-knee{0%{transform:rotate(62deg)}18%{transform:rotate(12deg)}36%{transform:rotate(6deg)}52%{transform:rotate(16deg)}70%{transform:rotate(88deg)}86%{transform:rotate(95deg)}to{transform:rotate(62deg)}}@keyframes run-arm{0%{transform:rotate(34deg)}25%{transform:rotate(2deg)}50%{transform:rotate(-40deg)}75%{transform:rotate(-8deg)}to{transform:rotate(34deg)}}@keyframes run-elbow{0%{transform:rotate(-70deg)}50%{transform:rotate(-100deg)}to{transform:rotate(-70deg)}}@keyframes run-bob{0%,to{transform:translateY(0)}25%{transform:translateY(-5px)}50%{transform:translateY(0)}75%{transform:translateY(-5px)}}.figure.bike .wheel circle{fill:none;stroke:#26333f;stroke-width:4px}.figure.bike .wheel .rim{stroke:#cdd7e0;stroke-width:2px}.figure.bike .wheel .hub{fill:#26333f;stroke:none}.figure.bike .spokes path{stroke:#cdd7e0;stroke-width:1.5px;stroke-linecap:round}.figure.bike .frame path{fill:none;stroke:#ef6f4f;stroke-width:4.5px;stroke-linecap:round;stroke-linejoin:round}.figure.bike .frame .saddle{fill:#26333f;stroke-width:2px}.figure.bike .crank path{fill:none;stroke:#4b5763;stroke-width:4px;stroke-linecap:round}.figure.bike .crank rect{fill:#26333f}.figure.bike .helmet{fill:#f97316}.figure.bike .wheel{animation:spin calc(var(--cycle) / 2.6) linear infinite}.figure.bike .crank{animation:spin var(--cycle) linear infinite;transform-origin:100px 162px}.figure.bike .thigh{animation:bike-thigh var(--cycle) linear infinite}.figure.bike .shin{animation:bike-knee var(--cycle) linear infinite;animation-delay:inherit}.figure.bike .shoe{animation:bike-foot var(--cycle) linear infinite;animation-delay:inherit}@keyframes bike-thigh{0%{transform:rotate(-18.4deg)}12.5%{transform:rotate(-29.2deg)}25%{transform:rotate(-46.5deg)}37.5%{transform:rotate(-57.2deg)}50%{transform:rotate(-56.9deg)}62.5%{transform:rotate(-47.4deg)}75%{transform:rotate(-35.6deg)}87.5%{transform:rotate(-25.4deg)}to{transform:rotate(-18.4deg)}}@keyframes bike-knee{0%{transform:rotate(15.2deg)}12.5%{transform:rotate(25.2deg)}25%{transform:rotate(52.1deg)}37.5%{transform:rotate(74.7deg)}50%{transform:rotate(86.6deg)}62.5%{transform:rotate(83.2deg)}75%{transform:rotate(65.8deg)}87.5%{transform:rotate(40.6deg)}to{transform:rotate(15.2deg)}}@keyframes bike-foot{0%{transform:rotate(3.2deg)}12.5%{transform:rotate(4deg)}25%{transform:rotate(-5.7deg)}37.5%{transform:rotate(-17.6deg)}50%{transform:rotate(-29.7deg)}62.5%{transform:rotate(-35.8deg)}75%{transform:rotate(-30.2deg)}87.5%{transform:rotate(-15.1deg)}to{transform:rotate(3.2deg)}}.figure.swim .trunks{fill:#1f4f8f}.figure.swim .cap{fill:#22b8cf}.figure.swim .goggle{fill:#22303f}.figure.swim .neck-line{fill:none;stroke:#f2c09b;stroke-width:11px;stroke-linecap:round}.figure.swim .water-glass{fill:#1a72b4;opacity:.55}.figure.swim .arm-swing{animation:spin var(--cycle) linear infinite}.figure.swim .sw-leg{animation:flutter calc(var(--cycle) / 2) ease-in-out infinite}.figure.swim .head{animation:breathe var(--cycle) ease-in-out infinite}@keyframes flutter{0%,to{transform:rotate(-9deg)}50%{transform:rotate(9deg)}}@keyframes breathe{0%,to{transform:translateY(1px)}50%{transform:translateY(-3px)}}.figure.rope .rope-loop{fill:none;stroke:#36618d;stroke-width:3px;opacity:.35}.figure.rope .rope-run{fill:none;stroke:#36618d;stroke-width:3.4px;stroke-linecap:round;stroke-dasharray:60 340;animation:rope-travel var(--cycle) linear infinite}.figure.rope .handle{fill:none;stroke:#37506b;stroke-width:7px;stroke-linecap:round}.figure.rope .body{animation:jump var(--cycle) ease-in-out infinite}.figure.rope .shadow{transform-origin:110px 202px;animation:jump-shadow var(--cycle) ease-in-out infinite}@keyframes rope-travel{to{stroke-dashoffset:-400px}}@keyframes jump{0%,to{transform:translateY(-12px)}30%{transform:translateY(0)}70%{transform:translateY(0)}}@keyframes jump-shadow{0%,to{opacity:.1;transform:scale(.8)}30%,70%{opacity:.18;transform:scale(1)}}@keyframes spin{to{transform:rotate(360deg)}}.panel{border:1px solid var(--line);background:var(--surface);border-radius:18px;flex:none;padding:14px 18px 16px;box-shadow:0 8px 24px #1432500f}.panel-head{justify-content:space-between;align-items:baseline;gap:14px;margin-bottom:10px;display:flex}.panel-head h2{margin:0;font-size:15px;font-weight:800}.speed-read{color:var(--muted);font-size:12px}.speed-read strong{color:var(--accent);font-variant-numeric:tabular-nums;margin-right:4px;font-size:24px;font-weight:900}.panel input[type=range]{appearance:none;cursor:pointer;border-radius:999px;outline:none;width:100%;height:10px;margin:0}.panel input[type=range]::-webkit-slider-thumb{appearance:none;border:3px solid var(--accent);background:#fff;border-radius:50%;width:22px;height:22px;box-shadow:0 2px 8px #2f7fe066}.panel input[type=range]::-moz-range-thumb{border:3px solid var(--accent);background:#fff;border-radius:50%;width:16px;height:16px}.panel input[type=range]:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.range-labels{color:var(--muted);justify-content:space-between;margin-top:6px;font-size:12px;display:flex}.action-row{align-items:center;gap:10px;margin-top:12px;display:flex}.action-row button{background:var(--accent);color:#fff;font:inherit;cursor:pointer;border:0;border-radius:12px;padding:11px 22px;font-weight:800;transition:transform .15s,opacity .15s}.action-row button.secondary{background:var(--accent-soft);color:var(--accent)}.action-row button:hover:not(:disabled){transform:translateY(-1px)}.action-row button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.action-row button:disabled{cursor:not-allowed;opacity:.45}.timer{color:var(--muted);align-items:baseline;gap:8px;margin:0 0 0 auto;font-size:12px;display:flex}.timer strong{color:var(--text);font-variant-numeric:tabular-nums;font-size:19px}.report-overlay{z-index:40;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#081c308c;place-items:center;padding:20px;animation:.2s ease-out fade-in;display:grid;position:fixed;inset:0}.report{background:var(--surface);border-radius:20px;width:min(560px,100%);padding:20px 22px 22px;animation:.24s ease-out pop-in;box-shadow:0 24px 60px #06182c59}.report h2{color:var(--accent);letter-spacing:.1em;margin:0 0 14px;font-size:13px}.report-grid{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.report-item{background:var(--surface-alt);border-radius:12px;padding:10px 12px}.report-item span{color:var(--muted);font-size:12px;display:block}.report-item strong{margin-top:2px;font-size:19px;display:block}.report-note{color:var(--muted);margin:14px 0 16px;font-size:13px}.report button{background:var(--accent);color:#fff;width:100%;font:inherit;cursor:pointer;border:0;border-radius:12px;padding:12px;font-weight:800}.report button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@keyframes fade-in{0%{opacity:0}}@keyframes pop-in{0%{opacity:0;transform:translateY(10px)scale(.97)}}@media (max-width:720px){.sport-tabs{justify-content:space-between;align-self:stretch}.sport-tabs button{flex:1;padding:7px 8px}.stage{min-height:300px}.report-grid{grid-template-columns:repeat(2,1fr)}.action-row{flex-wrap:wrap}.timer{justify-content:flex-end;width:100%;margin:4px 0 0}}@media (prefers-reduced-motion:reduce){.backdrop i,.figure *{animation-play-state:paused}}
