# 
.hidden

# Files
.env
.installed

# Local Claude Code project config (machine-specific dev-server launch paths)
.claude

# 
vendor
node_modules

# Runtime
runtime/cache/*
!runtime/cache/index.html
runtime/logs/*
!runtime/logs/index.html

# Media uploads — real public directory (see LocalMediaStorage), served
# directly by the web server. User content, never committed.
uploads/*
!uploads/index.html

# Legacy media upload location (pre-uploads/ refactor). Still holds user
# content locally until fully migrated; never committed.
storage/media/*
!storage/media/index.html

# Zenton Cloud connection — machine credential, instance identity and
# operational state (see config/cloud.php, docs/CLOUD.md). Must never reach
# Git, a commit, or the release archive.
storage/cloud/*
!storage/cloud/index.html

# Installer state before .env exists: wizard state with DB
# credentials (installer/Support/SetupDirectory). Wiped on a finished install.
storage/install/

# Plugin management work area: upload staging, backups of replaced packages,
# removed packages, export archives (see Zenton\Foundation\Packages\PackageManager).
storage/packages/

# Pre-rename path (Ecosystem Phase 2 Slice 1 — App\Cloud\Cloud reads an
# already-connected instance's files from here for one release if the new
# storage/cloud/ path is empty; see that class's own docblock). Remove once
# every real install has reconnected.
storage/platform/*
!storage/platform/index.html

# Types
*.bak
*.log
*.zip

# Tests
.phpunit.cache

# Release artifacts (built by release/build.php) — never committed, always
# reproducible from a clean tree + tag. See release/README.md.
/release/dist

# Zenton Cloud upload token for `release/publish.php` — personal secret,
# like the local .env. Template: release/.publish.env.example.
/release/.publish.env

# Published package (plugin/theme) CSS/JS — real public copies of
# app/plugins/*/assets, regenerated from source packages, never committed.
/packages