# ── Python artifacts ──────────────────────────────────────────────────────────
__pycache__/
*.py[cod]
*$py.class
*.so
*.egg
*.egg-info/
dist/
build/
.eggs/

# ── Packaging ─────────────────────────────────────────────────────────────────
.hatch/
dist/

# ── Vendor wheels (downloaded locally, never committed) ──────────────────────
# Run `make vendor` on a networked machine to populate before working offline.
vendor/

# ── Virtual environments ──────────────────────────────────────────────────────
.venv/
venv/
env/
ENV/

# ── Testing / coverage ────────────────────────────────────────────────────────
.pytest_cache/
.coverage
htmlcov/
.tox/

# ── Type checking / linting caches ───────────────────────────────────────────
.mypy_cache/
.ruff_cache/
.cache/

# ── pre-commit internal cache (hook envs — not used with language: system,
#    but pre-commit still creates the directory) ───────────────────────────────
.pre-commit-cache/

# ── Claude Code project settings ──────────────────────────────────────────────
.claude/

# ── IDEs ──────────────────────────────────────────────────────────────────────
.idea/
.vscode/
*.swp
*.swo

# ── OS ────────────────────────────────────────────────────────────────────────
.DS_Store
Thumbs.db

# ── Secrets — never commit these ─────────────────────────────────────────────
.env
.env.*
*.pem
*.key
secrets/

# ── Vendor tarball (the vendor/ directory itself IS committed) ────────────────
vendor.tar.gz
