// Volume arithmetic for BOTH players, kept out of the components so it can be unit-tested. Every // rule here was established by a bug: a wheel spin that lost notches to the iframe's lagging // getVolume, a partial stored object that became NaN and persisted as `null`, and a "corrupt → // default" fallback that jumped an already-quiet session to full blast. // // The two players run on different native scales — the YouTube iframe API takes 0–100 integers, the // HTML5