__pycache__/
*.py[cod]
.pytest_cache/
.ruff_cache/
*.egg-info/
build/
dist/
.venv/
.DS_Store
.claude/handoffs/

# demo capture intermediates (the GIF itself is committed)
misc/demo/_capture/
misc/demo/report.html
