Turning left and right moved the dot up and down, which is a ninety degree error — the rotation correction was landing on the wrong axis because the browser's three gyroscope channels were labelled wrongly.
Fitting the pivot geometry could not save it: with two channels swapped, 98 % of the signal survived uncorrected. So the labels are gone. The app now learns the whole rotation‑to‑acceleration map from your own motion, which needs no labels at all and measured 0.00 % residual under every channel permutation.
Turn and tilt the phone for a few seconds after starting — the ring around the centre fills as it learns, and turns green when it has enough.
Learns online from the raw gyroscope channels — no axis labels, so a mislabelled channel cannot put the correction on the wrong axis. It only learns while you are actually turning the phone; sitting still leaves what it knows untouched. Set Strength to 0 % to see what it is doing.
Settled offset from a 0.03 m/s² residual: 10 mm.
World is correct: a point in the room does not roll with you. Screen ignores roll and is easier to read while tuning.
Roll axis: detecting.