# PLAN — Motor de escenas + pack Ambient + vía de promoción agéntica > **Tipo**: plan de ejecución por fases (process — efímero, no fuente de verdad). > **Fecha**: 2026-07-11 · **Estado**: D1–D9 RESUELTAS · **F0 ✅ + F1 ✅ + F2 ✅ + F3 ✅ + F4 ✅ + F4b ✅ (2026-07-12)** — los 45 fondos aprobados (32 en el pack) migrados; queda F5 texto (plan separado, D9) y el visual píxel en pestaña visible. > F4b: **Tier B completo (16/16, D6)** — galaxy · eter · hyperspeed · particles · pixel-blast · grid · prismatic · pillar · dither · blinds · balastro · iridiscence · liquid-metal · line-waves · floating-lines · letters. Mismo mecanismo que F4 (port verbatim + registro + chip); custom-pipeline reutilizado por 6 (particles gl.POINTS · dither 2-pases FBO · grid 2-pases+composite · eter fluidos 8-programas/7-FBOs half-float · pixel-blast cadena dither→liquid→noise · hyperspeed instancing+depth-FBO+bloom). **Contrato completado con consumidores reales**: `glContext.dprCap` (dither exige DPR 1 — look chunky del seed; engine toma el mín) · hooks P-5 simétricos `onPointerLeave` (floating-lines/galaxy/eter) y `onPointerUp` (hyperspeed press) · **bug F1 cazado**: el leave del engine recentraba `nx/ny` pero NO `x/y` (el hover de orb jamás decaía). Recortes declarados: gyro+snapBackDelay (grid, plataforma/chrome) · quality por navigator (pillar → high fijo; adaptación por dispositivo = futura opción del engine) · resolutionScale (veil, ya en F4) · mixBlendMode/paused/callbacks onSpeedUp (chrome del host/handle) · presets hyperspeed no exportados. Gates: packs:check 0/36 · engine 9/9 · scene+eidos 323/323 · check 0 propios · docs:check 0/0 · **navegador: 32/32 efectos montan+compilan+linkan** (prueba estructural canvas+data-scene; la escena interna de hyperspeed compila en su primer frame — cubierta por el pendiente visual). > F4: **Tier A completo (13/13, D6)** — agénticos primero (silk · radar · threads · orb · waves · lumen) y después fog · grainient · veil · dots · beam · ray · snow-pixels. Cada efecto: port limpio a `$scene/effects/{name}.ts` (shader/física verbatim; `iTime`/`iResolution`→`uTime`/`uResolution` estándar; colores `[0,1]`→hex por P-4; booleans de interacción colapsados en hooks opt-in / `mouseInfluence:0`; `reduce: 'static-frame'` los 13) + módulo de registro en el pack + chip en el catálogo. Adaptaciones de ciudadanía declaradas: waves/dots pierden overlays de chrome del seed (cursor-dot / SVG-glow→dibujado en canvas) · dots cambia `setInterval(20ms)`→acumulador sobre `api.time` (P-3) · veil pierde `resolutionScale` (el buffer es del driver; si hace falta, opción de engine) · orb deriva el hover del puntero suavizado del engine (decae al salir sin hook de leave). **Extensión de contrato justificada por beam** (geometría 3D real, primera del tier): `WebglSceneEffect.vertexShader?()` + `glContext.depth?` + `draw?()` — el driver conserva contexto/loop/resize/uniforms/teardown y solo cede geometría+draw; Tier B (particles/hyperspeed/galaxy) la reutilizará. Fix F3 arrastrado: `eidos.getMode()` NO existía en `ActiveEidos` (error de check) → `getThemeContext()` (vía pública reactiva). Gates: `packs:check` 0/20 · engine 9/9 · check 0 errores en scene/packs · **verificado en navegador: los 16 efectos (3 pilotos + 13 Tier A) montan/compilan/linkan y el remount en cascada no deja errores** (canvas presente + `data-scene` correcto; un fallo de build habría hecho `canvas.remove()`) · README del pack lista el catálogo completo (cierre D6). El look visual píxel-a-píxel sigue pendiente de pestaña visible (limitación de entorno documentada). > F3: `src/packs/ambient` (`` genérico con registro declaration-merging `AmbientEffects` · `resolve-params.ts` P-4 token→hex con drop-a-default · un engine por superficie DOM vía WeakMap para presupuesto global · re-tintado enganchado a `eidos.getMode()`) · módulos `effects/{mesh,aurora,dot-grid}` (import = opt-in) · README con el contrato P · `scripts/packs-check.ts` + npm `packs:check` (P-3 APIs crudas · S-1 sin `