Collision is explicit AABB. The ball advances in ≤1.2 px sub-steps, the shallowest penetration axis decides the bounce (top/bottom → flip dy, side → flip dx), and a destroyed brick is removed before the next test — so it can never stick inside a row.
Paddle angle is real. Hitting the left/right thirds bends the return up to ±66°, centre returns nearly vertical. Side grazes flip dx.
Scales for 320 px+ viewports, portrait and landscape. Backing store matches devicePixelRatio (capped at 2) for crisp pixels without burning mobile GPUs.