Gestures

Same curve, same duration — the release still felt different. Frame timing explained it.
The rebuilt carousel used the same easing curve and duration as the reference, yet releasing a drag felt slightly more abrupt.
Log from inside the page
I timestamped the pointerup event and the track position on every animation frame, in both versions. Once the snap started, the curves agreed within a few percent. The difference was the start: the reference held the released position for roughly 50ms before easing.
The smallest correct fix
A 50ms delay on the snap tween after pointer release only. Dragging stays 1:1, keyboard navigation stays immediate, and the release now matches.