fn blur_pass(img: &mut Frame, scratch: &mut Frame, r: usize)
One separable box pass (radius r, edge-replicated): rows img→scratch, columns scratch→img.
r