Create a complete falling-blocks puzzle game in a single self-contained HTML file. No external libraries, no internet resources, no images: everything inline (HTML, CSS, JavaScript, canvas rendering). Requirements: - 10 wide by 20 tall playfield rendered on a canvas. - Seven distinct piece shapes, each made of four squares, each with its own color. - Controls: left/right arrows move, up arrow rotates, down arrow soft-drops, spacebar hard-drops. - Rotation must respect walls and stacked blocks (no clipping through anything). - Completed horizontal lines clear, rows above fall down, and clearing multiple lines at once scores more. - Score, lines cleared, and level displayed. Speed increases with level. - Next-piece preview box. - Game over when the stack reaches the top, with a visible game-over state and a restart key. - Clean, readable dark visual style. Output only the complete HTML file.