## What

<!-- What does this PR do? One sentence. -->

## Why

<!-- Why is this change needed? Link to issue if applicable. -->

## How

<!-- Brief description of the approach. -->

## Test plan

- [ ] `pytest` passes
- [ ] `ruff check src/ tests/` clean
- [ ] Tested with a real PDF (describe which type)

## Checklist

- [ ] No new dependencies added (or justified in description)
- [ ] Public API unchanged (or `CHANGELOG.md` updated)
- [ ] Types/docstrings updated if API changed
