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

# ─── Env ───────────────────────────────
.env
.env.local
.env.*.local
!.env.example

# ─── Editor ────────────────────────────
.idea/
.vscode/

# ─── Python ────────────────────────────
__pycache__/
*.py[cod]
*.so
.Python
build/
dist/
*.egg-info/
.pytest_cache/
.ruff_cache/
.mypy_cache/
.coverage
htmlcov/
.venv/
venv/
env/

# uv: a workspace has a single root uv.lock. Per-member lockfiles
# (e.g. core/uv.lock) only appear when a member is invoked as a
# standalone project — never commit those.
*/uv.lock

# ─── Node ──────────────────────────────
node_modules/
npm-debug.log*
yarn-debug.log*
pnpm-debug.log*

# ─── Next.js (web app) ─────────────────
web/.next/
web/node_modules/
web/out/
web/next-env.d.ts
web/tsconfig.tsbuildinfo

# ─── Go ────────────────────────────────
bin/
*.exe
*.exe~
*.dll
*.dylib
*.test
*.out
coverage.*
profile.cov

# ─── Local data ────────────────────────
/data/
/tmp/

# ─── Terraform (infra/terraform) ───────
# Provider plugin downloads. Regenerated by `terraform init`.
infra/terraform/.terraform/
# State + backups. Production state should live in a remote backend
# (S3 + DynamoDB or Terraform Cloud), not the repo.
infra/terraform/terraform.tfstate
infra/terraform/terraform.tfstate.backup
infra/terraform/*.tfstate
infra/terraform/*.tfstate.*
# Concrete tfvars files carry secrets (hail_inbound_hmac_secret).
# Only the .example variant is committed.
infra/terraform/*.tfvars
!infra/terraform/*.tfvars.example
# Generated Lambda zip artifact directory.
infra/terraform/.build/
# Crash dumps.
infra/terraform/crash.log
infra/terraform/crash.*.log
# Plan output files (`terraform plan -out=...`).
infra/terraform/*.tfplan
# Terragrunt cache (downloaded modules + generated backend stubs).
**/.terragrunt-cache/
# The S3 backend stub Terragrunt drops into the module dir at runtime.
infra/terraform/backend.tf
