You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/docs/process/CONTINUE-background.md

6.6 KiB

CONTINUE — eje Background (handoff, act. 2026-08-18)

Estado: F0 → F5 CERRADAS Y COMMITEADAS. El componente existe, tiene demo, está documentado y el tier lo usa. Cuatro commits en alpha-0.1-background:

Commit Qué cerró
70f45033f F1 — la pila y la adopción del anfitrión (+ F1.5, con el bug de Box flex)
33031c2ad F2 — Image · Video · Pause, y el hero se queda sin CSS
740274a84 F3 + F3.5 + F4 — parallax, puntero, attach, la demo v2 y el registro documental
331912cf2 F5 — rollout a los seis blocks

Por dónde entrar mañana: §Qué queda. Nada bloquea el uso del componente. Lo que queda son cuatro firmas tuyas, una verificación que este entorno no puede hacer y dos tareas de otros ejes.

⚠️ LO PRIMERO: la fuente viva es el PLAN, no este fichero

docs/process/PLAN-background.md — decisiones firmadas D-BG.1…D-BG.18 en §6, y el registro de ejecución fase por fase en §7.bis…§7.octies, cada uno con sus mediciones. Este handoff indexa; el plan manda.

Qué queda

1. Verificación que este entorno no puede dar (necesita Chrome VISIBLE)

El panel del navegador va oculto y con viewport 0×0, y ahí las animaciones scroll-driven declaradas en CSS no se activan. Está comprobado que es del ENTORNO y no del código: un div pelado con animation-timeline: view() inyectado en la misma página sale con la línea de tiempo inactiva, mientras una ViewTimeline creada por API sobre el mismo sujeto marca 68%.

Falta medir, con una pestaña real:

  • el travel de verdad al hacer scroll (que la capa se mueva, no sólo que las declaraciones sean correctas);
  • 60 fps durante ese scroll;
  • el detector de reflow de uix.perf a 0 violaciones;
  • la rama @supports not (el fallback JS): Chrome soporta scroll-driven, así que sólo se puede ejercitar en Firefox sin el flag.

Lo que SÍ está medido: la composición de los dos ejes en un translate (parallax solo 0px 30px; con puntero y depth: 20px → 20px 10px), el puntero entero con sus valores exactos, attach='fixed', y RTL.

2. Cuatro firmas tuyas

  • La escala strength del scrim no está ordenada por peso. Medido: ghost 0,30 · scrim 0,45 · overlay 0,65 · muted 0,65 (duplicado) · subtle 0,80 — el más pesado, y su nombre dice lo contrario. La causa es que esos tokens nombran cuán opaco es un ELEMENTO, no cuánto vela un scrim. Renombrar o renumerar es cambio de API, no arreglo de pasada. (README del componente §Gaps.)
  • Sobre una foto CLARA ningún peso llega a AA: 2,10:1 el default, 4,42:1 el más fuerte, con texto blanco. O entra un peso por encima de --opacity-subtle, o se doctrina que la respuesta es el scrim graduado.
  • Borrar src/uix/eidos/components/backdrop/. D-BG.1 lo firmó, pero el borrado exige orden explícita tuya. Ya no lo usa nadie: sólo se cita en el README de Background.
  • La banda de feature-split, ¿por sección o por fila? La columna B del plan de calidad pedía «Backdrop alterno» POR FILA; lo resolví en la SECCIÓN porque una banda por fila obligaría a cada Row a poseer el estado de alternancia, y eso es coordinación — un block que coordina deja de ser un block que no posee nada. Si lo quieres por fila, es otra decisión.

3. Tareas de otros ejes que este abrió

  • Ambient honrando la pausa (D-BG.8): el canon publica el contexto (paused, reduced, seen); el pack lo lee y llama handle.pause(). Es tarea DEL PACK — la dependencia corre pack → framework y nunca al revés.
  • Un puerto de estado para <video> compartido: el framework tiene contrato de carga para <img> (ImageProvider en soma/layers) y ninguno para vídeo. Hoy ScrollFrames escucha a mano y Background.Video también. Dos consumidores es el umbral que este repo usa para extraer una capa. (Anotado en next-features.md §11.)
  • Los huecos Display / Link bajo data-on siguen siendo candidatos de canon aparte, como los dejó el hero.

Lo que este eje enseñó, y conviene no volver a aprender

  1. A30 no es estilo, es supervivencia. Registrarse con el padre desde un $effect escribe su estado en fase de efectos, el hermano que lo lee re-entra y el flush no cierra: effect_update_depth_exceeded. No hace ruido — mata el efecto raíz, así que la superficie se pinta una vez y luego ignora todos los clics en silencio. La ley vive en declare.svelte.ts con sus dos mitades (registrar desde el init, y seguir el prop sin escribir en la primera pasada).
  2. revert-layer sin @layer es revert. Costó dos defectos distintos: la regla de anfitrión que no posicionaba (D-BG.16) y el flex de Box que no crecía. Cuando una declaración «no hace nada», mira si un shorthand vecino la borró.
  3. La demo destapa lo que una sonda no. El registro de «esta capa se mueve» era un hecho de montaje: encender animate en caliente no hacía aparecer el control de pausa. Invisible en una sonda, obvio con un interruptor.
  4. Mide antes de afirmar rendimiento. Escribí tres veces que el travel «va en el compositor»; animar una custom property registrada no se puede compositar. Lo cierto era «sin listener ni rAF», que es otra cosa.
  5. La decoración que parece mejor puede ser la ilegible. Dentro del panel sólido del cta, el glow hunde el titular blanco de 5,18:1 a 3,06:1.

Mapa de ficheros

Qué Dónde
Plan + decisiones firmadas docs/process/PLAN-background.md
El componente src/uix/eidos/components/background/ (README con todas las mediciones)
El morfo src/uix/morfo/components/background.ts
Los dos puertos que abrió src/arts/adom/scroll-progress.svelte.ts · reduced-data.svelte.ts
La regla de anfitrión src/uix/eidos/lib/render-css.ts → renderBackgroundHostBlock
La demo web/routes/uix/components/background/+page.svelte
Ledger del tier docs/process/AUDIT-blocks-ledger.md — filas A-100…A-105

Powered by TurnKey Linux.