# Dependencies
**/node_modules/

# Build output
**/dist/
**/.vitepress/cache/
**/dist-exe/
**/*.tsbuildinfo
hub/src/web/embeddedAssets.generated.ts
hub/src/generated/

# Downloaded tools (fetched at build time)
shared/tools/tunwg/tunwg-*
shared/tools/tunwg/*.exe

# Env files (can contain secrets)
**/.env
**/.env.*
**/.env*.local

# Logs
**/*.log
**/*-debug.log
**/*-error.log
npm-debug.log*

# Coverage
coverage/

# OS / IDE
**/.DS_Store
.idea/
.vscode/
**/*.swp
**/*.swo

# Claude local settings
.claude/settings.local.json
.claude/worktrees/
localdocs/
execplan/

# Generated npm bundle output (local)
cli/npm/main/
.ace-tool/

# Playwright e2e artifacts
test-results/
playwright-report/
e2e-output/
.xyz-harness
.agents/
.pi/

# Xcode / iOS build artifacts
ios/**/xcuserdata/
# Standalone projects recreate this workspace wrapper; keep Package.resolved trackable.
ios/**/*.xcodeproj/project.xcworkspace/contents.xcworkspacedata
ios/**/.build/
ios/**/.swiftpm/
**/*.xcresult
**/DerivedData/

# App Store configuration, metadata, and screenshots (local only)
/.asc/
/metadata/
/screenshots/

# Android (android/)
android/**/build/
android/.gradle/
android/.kotlin/
android/local.properties
android/captures/
*.keystore
*.jks

# Firebase config is per-operator (official builds inject via CI; self-builds
# drop in their own) — never commit a real one. The committed placeholder is
# android/app/google-services.json.example.
android/app/google-services.json
