Add safe-coloured-text-parsing for ANSI escape code parsing ## Summary - New package `safe-coloured-text-parsing`: parses ANSI SGR escape codes from `Text` into styled `Chunk`s — the inverse of `renderChunkText` - New package `safe-coloured-text-parsing-gen`: `GenValid` instances and 28 tests - Two-layer attoparsec architecture: tokenizer (`Text -> [AnsiToken]`) + interpreter (`[AnsiToken] -> [Chunk]`) - Both layers support lazy `Text` for streaming via `Data.Attoparsec.Text.Lazy` ## Test plan - [x] 28 tests: unit, property, roundtrip (render then parse recovers style), lazy/strict equivalence - [x] `stack build --pedantic` - [x] `stack test` - [x] `pre-commit run -a` - [x] `nix flake check` (all backward/forward compat checks)