Whether the element has ended (mirrors el.ended). Suppresses benign buffering.
Whether the user intends playback (the element is not paused). Drives ready-vs-playing
and whether conservative events (stalled/suspend) should show buffering.
The element's readyState (HAVE_NOTHING=0 … HAVE_ENOUGH_DATA=4). Used by seeked to
decide whether we can clear buffering immediately or must wait for canplay.
Context the reducer needs beyond the raw event + current state. These are read off the media element at the moment the event fires (kept as plain inputs so the reducer stays a pure, fully unit-testable function with no DOM dependency).