# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
venv/
.venv/
ENV/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
.pytest_cache/
.ruff_cache/
.coverage
htmlcov/
.tox/
.hypothesis/
*.log

# Node.js
node_modules/
npm-debug.log
yarn-error.log
package-lock.json
yarn.lock
dist/
.next/
out/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store
.project
.pydevproject
.settings/
*.sublime-project
*.sublime-workspace

# OS
Thumbs.db
.DS_Store

# AutoCAD / DWG
*.bak
*.dwl
*.dwl2
*.sv$
*.ac$
plot.log
*.log
acad.err
*.plt

# .NET plug-in build output (Autodesk assemblies are never committed: AutoCAD supplies them)
bin/
obj/
*.user
.vs/
TestResults/

# Temporary files
*.tmp
*.temp
*.TMP

# Obsidian vault (workspace state only, keep vault content)
.obsidian/workspace*.json

# Local environment
.env
.env.local
.env.*.local
secrets.json
credentials.json

# Generated files from research (transient)
/downloads/
/cache/

# Component datasheets and extraction cache (copyrighted PDFs, token cache)
# Raw PDFs: never commit (copyright)
datasheets/inbox/
# Markitdown markdown cache: never commit (derived, token-heavy)
datasheets/cache/
# Committed component records: stored in datasheets/records/ (extracted facts only, no full text)

# The owner's source templates stay local; the neutral DXF of `pvsld sheet import` is committed
sheet_templates/*.dwg
