# Dependencies
node_modules/

# Build output
dist/
*.tsbuildinfo

# Environment
.env
.env.local
.env.*.local

# Lefthook per-developer overrides (not shared; see lefthook.yml for shared hooks)
lefthook-local.yml

# OS
.DS_Store
Thumbs.db

# Docs media — served from CDN, not committed.
# Regenerate with scripts/generate-{catalog,template}-previews.ts then upload
# with `bun run upload:docs-images`. Add explicit negations below for any
# non-generated assets (logos, svgs) that should stay in the repo.
docs/images/

videos/

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

# Test
coverage/
.debug/

# Producer regression test failures (generated debugging artifacts).
# RECURSIVE (`**`) so a failures/ dump at ANY fixture depth is ignored — the
# old non-recursive `tests/*/failures/` + `tests/distributed/*/failures/` rules
# only matched one level deep, so a nested fixture like
# `tests/hdr-regression/hdr-pq/failures/` could still get committed.
packages/producer/tests/**/failures/
packages/producer/tests/parity/fixtures/hyperframe.runtime.iife.js

# Player perf test results (generated each run, attached as CI artifact)
packages/player/tests/perf/results/

# Rendered output (not test fixtures — those use git LFS)
output/
renders/
!packages/producer/tests/*/output/
!packages/producer/tests/distributed/*/output/
# Source dir that the renders/ output rule accidentally shadows (its files are
# tracked; without this, pre-commit's format re-stage fails on them).
!packages/studio/src/components/renders/

# Composition source media (large binaries)
compositions/**/*.mp4
compositions/**/*.mov
compositions/**/*.MOV

# npm pack artifacts
*.tgz

# Logs
*.log
npm-debug.log*

# Temporary
tmp/
.tmp/

# Generated files
packages/core/src/generated/*
!packages/core/src/generated/position-edits-render-inline.ts
!packages/core/src/generated/position-edits-render-inline.test.ts
packages/producer/src/services/fontData.generated.ts

# Plan documents (working artifacts, not committed)
docs/plans/

# Local proof / test artifacts
qa-artifacts/
my-video/
# Studio project state (hf-id backups, per-file state) — always runtime-generated,
# never committed. Broadened from .hyperframes/backup/ after preview-generated state
# leaked into a fixture commit.
.hyperframes/
# Studio authoring proxies are generated locally and can grow to multiple GB.
.transcode-cache/
examples/*
# Tracked OSS examples — negations override the blanket `examples/*` ignore.
!examples/aws-lambda
!examples/aws-lambda/**
!examples/k8s-jobs
!examples/k8s-jobs/**
!examples/gcp-cloud-run
!examples/gcp-cloud-run/**
# …but never the local smoke run's build/render artifacts.
examples/gcp-cloud-run/scripts/gcp-smoke-artifacts/
packages/studio/data/

.desloppify/
.worktrees/

# Playwright MCP browser cache
.playwright-mcp/

# Installed skills (user-specific — agent-installed during sessions).
# .claude/ = Claude Code, .agents/ = Codex CLI (both auto-discover their project skills
# from these dirs). The two mirror each other and both need the same "ignore agent-installed
# skills; keep the six repo-native ones" recipe. See .claude/skills/README.md for the
# packaging notes.

.claude/*
!.claude/settings.json
!.claude/skills
.claude/skills/*
!.claude/skills/README.md
!.claude/skills/changelog-video
!.claude/skills/motion-doctrine
!.claude/skills/cut-the-curve
!.claude/skills/seam-craft
!.claude/skills/captions-overlay
!.claude/skills/oversized-cursor

.agents/*
!.agents/skills
.agents/skills/*
!.agents/skills/README.md
!.agents/skills/changelog-video
!.agents/skills/motion-doctrine
!.agents/skills/cut-the-curve
!.agents/skills/seam-craft
!.agents/skills/captions-overlay
!.agents/skills/oversized-cursor
skills-lock.json

# Skills from other PRs (not managed here)
skills/hyperframes-animation-map/
skills/hyperframes-contrast/

# Capture outputs
captures/
# Legacy test captures at repo root (use captures/ instead)
*-capture/
*-demo/
*-ad/
*-tour/
*-brand/

# Local regression-test and video project scratch directories.
# These hold per-site captures, compositions, narration audio, rendered MP4s.
cursor-tests/
basecamp-video/
launch-video*/
!skills/launch-video/
ab-test/
compositions/
video-6-2-patched/
claude-design-hyperframes-video/
# Per-site video work at the repo root (huly-*, raycast-*, etc.)
# Anything under videos/ is already covered above, but agents sometimes write
# project dirs to the repo root when iterating. Catch the common per-brand
# patterns and any *-demo-N variants the *-demo/ rule above misses.
huly-*/
raycast-*/
*-demo-*/
test-runs/
test-outputs/

# Superpowers docs (Claude Code worktrees + local state are handled above by
# the blanket .claude/ rule and its re-inclusions)
docs/superpowers/
.worktrees
hyperframes-bench/
tmp/
# Studio-generated preview thumbnails
.thumbnails/

# Local editor settings
.zed/
