.sports-dialog .sports-canvas{position:static;display:block;inset:auto;width:100%;height:auto;border:2px solid #252047;border-radius:22px;margin:16px 0;touch-action:manipulation}
.sports-dialog .sports-scores{font-weight:700;margin:12px 0;font-size:1rem}
.sports-dialog .sports-stroke{width:100%;min-height:58px;touch-action:manipulation}
.sports-dialog details{margin:16px 0}.sports-dialog details input{display:block;width:100%;margin:12px 0}.sports-dialog .sports-status{min-height:1.3em}
.swimming-dialog{width:min(620px,calc(100vw - 24px));padding:clamp(18px,4vw,30px);font-size:17px;line-height:1.5}
.swimming-dialog .activity-heading{gap:14px;margin:12px 0 20px}.swimming-dialog h2{font-size:clamp(26px,5vw,34px);line-height:1.25;margin:0}
.swimming-dialog .sports-scores.swim-scoreboard{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;margin:18px 0}
.swim-score{display:flex;flex-direction:column;gap:4px;background:#ddd0f4;border:2px solid #252047;border-radius:18px;padding:14px;min-width:0}.swim-score:nth-child(2){background:#f4cee6}
.swim-name{font-size:16px;overflow-wrap:anywhere}.swim-distance{font-size:25px;font-weight:700;line-height:1.35}.swim-lap{font-size:13px;font-weight:400}
.swimming-dialog .sports-canvas{border-radius:20px;margin:18px 0 22px}
.swim-pace{background:#d9efc7;border:2px solid #252047;border-radius:18px;padding:16px;margin:16px 0}.swim-race-status{font-size:17px;font-weight:700;margin:0 0 14px;line-height:1.5;text-align:center}
.swim-timing-track{height:24px;position:relative;background:#fff09d;border-radius:12px;overflow:hidden}.swim-timing-target{position:absolute;left:28.6%;width:42.8%;top:0;bottom:0;background:#b31378}.swim-timing-marker{position:absolute;left:50%;top:3px;width:18px;height:18px;border-radius:50%;background:#252047;border:2px solid #fff9e7;box-sizing:border-box;transform:translateX(-50%)}
.swimming-dialog .sports-stroke{font-size:20px;min-height:62px;margin:16px 0;padding:16px;line-height:1.4}
.badminton-dialog{width:min(620px,calc(100vw - 24px));padding:clamp(18px,4vw,30px);font-size:17px;line-height:1.5}.badminton-dialog .swim-scoreboard{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px}.badminton-dialog h2{font-size:clamp(26px,5vw,34px);line-height:1.25}.badminton-cue{font-size:18px;font-weight:700;text-align:center;margin:18px 0;min-height:1.5em}.badminton-dialog .badminton-hit{min-height:58px;font-size:18px}
/* One viewport owns the race: shrink the artwork, not the score or tap target. */
.swimming-dialog.swim-active[open]{display:flex;flex-direction:column;gap:10px;height:auto;max-height:calc(100dvh - 32px);padding:20px 16px;overflow-y:auto}
.swim-active> :not(.sports-canvas){flex-shrink:0}.swim-active>.eyebrow,.swim-active>.taste-meta{display:none}
.swim-active .taste-close{position:absolute;right:14px;top:14px;margin:0;width:40px;min-height:40px;height:40px}
.swimming-dialog.swim-active .activity-heading{margin:0 0 12px;min-height:48px;padding-right:48px;gap:14px;align-items:center}.swim-active .activity-heading h2{font-size:28px;line-height:1.2;flex:0 1 auto;min-width:0}.swimming-dialog .activity-info{flex:0 0 36px;width:36px;height:36px;min-width:36px;min-height:36px;margin:0;padding:0;line-height:1;border-radius:50%;box-sizing:border-box}
.swim-active .demo-partner{display:flex;align-items:center;gap:10px;padding:6px 10px;margin:0;border-radius:12px}.swim-active .demo-partner strong{font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.swim-active .demo-partner .hint{display:none}.swim-active .demo-partner button,.swim-active>.partner-view{width:auto;margin:0 0 0 auto;padding:6px 12px;min-height:36px;font-size:14px}.swim-active .demo-partner::after{content:'Demo';font-size:12px}
.swimming-dialog.swim-active .swim-scoreboard{margin:0;gap:8px}.swim-active .swim-score{padding:8px 10px;gap:0;border-radius:12px}.swim-active .swim-name{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.swim-active .swim-distance{font-size:22px;line-height:1.2}.swim-active .swim-lap{font-size:12px;line-height:1.3}
.swimming-dialog.swim-active .sports-canvas{flex:0 1 auto;min-height:0;height:auto;max-height:max(90px,calc(100dvh - 370px));width:100%;aspect-ratio:720 / 440;object-fit:contain;margin:0;border:0;border-radius:12px}
.swimming-dialog.swim-active .swim-pace{padding:8px 10px;margin:0;border-radius:12px}.swim-active .swim-race-status{font-size:15px;line-height:1.3;margin:0 0 6px}.swim-active .swim-timing-track{height:22px}
.swimming-dialog.swim-active .sports-stroke{margin:0;min-height:52px;padding:10px;font-size:20px;line-height:1.3}.swim-active .sports-status{margin:0;min-height:0;font-size:12px}.swim-active .sports-status:empty{display:none}.swim-active>h3{margin:0;font-size:18px}.swim-active>button:not(.taste-close):not(.sports-stroke):not(.partner-view){margin:0;min-height:44px;padding:8px}
/* Badminton uses the same compact composition without compressing its artwork. */
.badminton-dialog.badminton-active[open]{display:flex;flex-direction:column;gap:10px;height:auto;max-height:calc(100dvh - 32px);padding:20px 16px;overflow-y:auto}
.badminton-active> :not(.sports-canvas){flex-shrink:0}.badminton-active>.eyebrow,.badminton-active>.taste-meta{display:none}
.badminton-active .taste-close{position:absolute;right:14px;top:14px;margin:0;width:40px;min-height:40px;height:40px}
.badminton-dialog .activity-heading{margin:0 0 12px;min-height:48px;padding-right:48px;gap:14px;align-items:center}.badminton-dialog .activity-heading h2{font-size:28px;line-height:1.2;flex:0 1 auto;min-width:0}.badminton-dialog .activity-info{flex:0 0 36px;width:36px;height:36px;min-width:36px;min-height:36px;margin:0;padding:0;line-height:1;border-radius:50%;box-sizing:border-box}
.badminton-active .demo-partner{display:flex;align-items:center;gap:10px;padding:6px 10px;margin:0;border-radius:12px}.badminton-active .demo-partner strong{font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.badminton-active .demo-partner .hint{display:none}.badminton-active .demo-partner button,.badminton-active>.partner-view{width:auto;margin:0 0 0 auto;padding:6px 12px;min-height:36px;font-size:14px}.badminton-active .demo-partner::after{content:'Demo';font-size:12px}
.badminton-dialog.badminton-active .swim-scoreboard{margin:0;gap:8px}.badminton-active .swim-score{padding:8px 10px;gap:0;border-radius:12px}.badminton-active .swim-name{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.badminton-active .swim-distance{font-size:22px;line-height:1.2}.badminton-active .swim-lap{font-size:12px;line-height:1.3}
.badminton-dialog.badminton-active .sports-canvas{flex:0 1 auto;min-height:0;height:auto;max-height:max(90px,calc(100dvh - 360px));width:100%;aspect-ratio:720 / 520;object-fit:contain;margin:0;border:0;border-radius:12px}
.badminton-active .badminton-cue{font-size:16px;line-height:1.4;min-height:1.4em;margin:0;text-align:center}.badminton-dialog.badminton-active .badminton-hit{margin:0;min-height:52px;padding:10px;font-size:18px;line-height:1.3}
.badminton-active .sports-status{margin:0;min-height:0;font-size:12px}.badminton-active .sports-status:empty{display:none}.badminton-active>h3{margin:0;font-size:18px}.badminton-active>button:not(.taste-close):not(.badminton-hit):not(.partner-view){margin:0;min-height:44px;padding:8px}
