# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
# Build output artifacts (LedGrab/, *.zip, *.exe, *.tar.gz, cached downloads)
build/LedGrab/
build/*.zip
build/*.exe
build/*.tar.gz
build/*.msi
build/python-embed-*.zip
build/pip-wheels/
build/win-wheels/
build/tk-extract/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
# …but keep pre-built Android wheels (pydantic-core cross-compiled for
# arm64-v8a / x86_64 / x86, required by the Chaquopy build)
!android/wheels/
!android/wheels/*
*.egg-info/
.installed.cfg
*.egg

# Virtual Environment
venv/
ENV/
env/
.venv

# Node
node_modules/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store
.claude/

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

# Logs
*.log
logs/
*.log.*

# Runtime data — anchor to repo root so nested package data dirs
# (server/src/ledgrab/data/prebuilt_sounds, game_adapters) are NOT ignored.
# An unanchored `data/` rule silently broke the v0.4.2 release by keeping
# shipped sound assets out of the CI tag checkout.
/data/
/server/data/
# Defensive: if the server is launched from server/src/ (uncommon path),
# its relative `data/` dir resolves to server/src/data/. Templates now
# live in SQLite, so any *.json that lands here is stale runtime export
# and must not be committed.
/server/src/data/
*.db
*.sqlite
*.json.bak

# Environment variables
.env
.env.local

# Docker
.dockerignore

# Home Assistant
homeassistant/.storage/

# Temporary files
*.tmp
temp/
tmp/

# OS
Thumbs.db
.DS_Store
# Added by code-review-graph
.code-review-graph/

# vex semantic-search embedding cache (auto-downloaded on first --semantic run)
.fastembed_cache/
