One file. Zero libraries. A 400×600 canvas, an AABB resolver and a fixed 60 Hz physics step.
The ball carries a constant magnitude between 3.44 and 4.00 px per frame. Paddle bounces are re-derived from the hit offset — strike the edge and it leaves at up to 62°; strike the centre and it goes straight back up. Brick hits resolve on the axis of least penetration, one brick per frame, with the body pushed clear of the grid so nothing ever sticks.