## Summary

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

Closes #<!-- issue number -->

## Type of change

- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that changes existing behavior)
- [ ] Documentation update
- [ ] Refactor / cleanup (no behavior change)
- [ ] CI / tooling

## Changes

<!-- Bullet list of what changed and why. Be specific about files. -->

-
-

## Testing

<!-- How did you test this? What cases are covered? -->

- [ ] Added unit tests in `tests/`
- [ ] All existing tests pass (`uv run pytest`)
- [ ] Pre-commit passes (`uv run pre-commit run --all-files`)

## Checklist

- [ ] My code follows the project's coding standards (see `CONTRIBUTING.md`)
- [ ] I have added type annotations to all new public functions/classes
- [ ] I have updated the relevant docs / docstrings
- [ ] I have updated `CHANGELOG.md` under `[Unreleased]` if this is user-facing
- [ ] New optional dependencies are guarded with `try/except ImportError`
- [ ] No `# type: ignore` without an explanatory comment

## Breaking changes

<!-- If this is a breaking change, describe what breaks and how to migrate. Delete if not applicable. -->

## Screenshots / output

<!-- For UI or CLI changes, paste terminal output or screenshots. Delete if not applicable. -->
