Major overhaul: ditch Canvas and use normal HTML.