# Auto-normalise line endings — repo stores LF, working copy gets native EOL on
# checkout. Stops the "LF will be replaced by CRLF" warnings on Windows.
* text=auto eol=lf

# Force LF on text files we never want to be CRLF (shell scripts, configs).
*.sh        text eol=lf
*.bash      text eol=lf
Makefile    text eol=lf
Dockerfile  text eol=lf
*.dockerfile text eol=lf
*.yml       text eol=lf
*.yaml      text eol=lf
*.toml      text eol=lf
*.json      text eol=lf
*.md        text eol=lf
*.py        text eol=lf
*.pyi       text eol=lf
*.cfg       text eol=lf
*.ini       text eol=lf
*.env.example text eol=lf
.gitignore  text eol=lf
.gitattributes text eol=lf
.editorconfig text eol=lf
.dockerignore text eol=lf
.python-version text eol=lf

# CRLF for native Windows scripts.
*.bat       text eol=crlf
*.cmd       text eol=crlf
*.ps1       text eol=crlf

# Treat lockfiles as generated for diff hygiene (still committed).
uv.lock             linguist-generated=true
package-lock.json   linguist-generated=true

# Binary types — never treat as text.
*.png       binary
*.jpg       binary
*.jpeg      binary
*.gif       binary
*.ico       binary
*.zip       binary
*.gz        binary
*.tgz       binary
*.tar       binary
*.pdf       binary
*.db        binary
*.sqlite    binary
*.sqlite3   binary
