:root{--accent:#f4f7fb;--beat:800ms;--power:1;--font:Inter,"Segoe UI",sans-serif;--font-size:112px;--scale:1}*{box-sizing:border-box}html,body{width:100%;height:100%;margin:0;overflow:hidden;background:transparent}body{font-family:var(--font)}.stage{width:100%;height:100%;display:flex;padding:22px}.stage.top-left{align-items:flex-start;justify-content:flex-start}.stage.top-right{align-items:flex-start;justify-content:flex-end}.stage.bottom-left{align-items:flex-end;justify-content:flex-start}.stage.bottom-right{align-items:flex-end;justify-content:flex-end}.stage.center{align-items:center;justify-content:center}.hud{display:flex;align-items:center;gap:20px;color:var(--accent);transform:scale(var(--scale));transform-origin:inherit;filter:drop-shadow(0 4px 10px #000b)}.heart-box{width:125px;height:116px;position:relative;display:grid;place-items:center}.heart{width:110px;fill:currentColor;transform-origin:50% 58%;animation:beat var(--beat) ease-in-out infinite;filter:drop-shadow(0 0 calc(8px + 10px * var(--power)) currentColor)}.glow{position:absolute;inset:22%;z-index:-1;border-radius:50%;background:currentColor;filter:blur(calc(16px + 12px * var(--power)));opacity:calc(.15 + .25 * var(--power));animation:glow var(--beat) ease-out infinite}.numbers{display:flex;align-items:baseline;gap:10px;line-height:.86}#bpm{font-size:var(--font-size);font-weight:950;letter-spacing:-6px;font-variant-numeric:tabular-nums;text-shadow:0 3px #0007,0 0 16px currentColor}.numbers small{font-size:24px;font-weight:900;letter-spacing:2px}.status{margin-top:12px;font-size:21px;font-weight:950;letter-spacing:4px}.error{margin-top:7px;font-size:12px;color:#ffb86b;letter-spacing:1px}.offline{opacity:.72}.flash{animation:flash .48s ease-in-out infinite}@keyframes beat{0%,45%,100%{transform:scale(1)}12%{transform:scale(calc(1.10 + .10 * var(--power)))}22%{transform:scale(1.03)}31%{transform:scale(calc(1.05 + .06 * var(--power)))}}@keyframes glow{0%,45%,100%{opacity:.12;transform:scale(.75)}14%{opacity:calc(.32 + .35 * var(--power));transform:scale(calc(1.05 + .35 * var(--power)))}}@keyframes flash{0%,100%{filter:drop-shadow(0 4px 10px #000b)}50%{filter:drop-shadow(0 0 30px var(--accent));opacity:.58}}
