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.perfa 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
strengthdel scrim no está ordenada por peso. Medido:ghost0,30 ·scrim0,45 ·overlay0,65 ·muted0,65 (duplicado) ·subtle0,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 deBackground. - La banda de
feature-split, ¿por sección o por fila? La columna B del plan de calidad pedía «Backdropalterno» POR FILA; lo resolví en la SECCIÓN porque una banda por fila obligaría a cadaRowa 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ó
Ambienthonrando la pausa (D-BG.8): el canon publica el contexto (paused,reduced,seen); el pack lo lee y llamahandle.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>(ImageProviderensoma/layers) y ninguno para vídeo. HoyScrollFramesescucha a mano yBackground.Videotambién. Dos consumidores es el umbral que este repo usa para extraer una capa. (Anotado ennext-features.md§11.) - Los huecos
Display/Linkbajodata-onsiguen siendo candidatos de canon aparte, como los dejó el hero.
Lo que este eje enseñó, y conviene no volver a aprender
- A30 no es estilo, es supervivencia. Registrarse con el padre desde un
$effectescribe 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 endeclare.svelte.tscon sus dos mitades (registrar desde el init, y seguir el prop sin escribir en la primera pasada). revert-layersin@layeresrevert. Costó dos defectos distintos: la regla de anfitrión que no posicionaba (D-BG.16) y elflexdeBoxque no crecía. Cuando una declaración «no hace nada», mira si un shorthand vecino la borró.- La demo destapa lo que una sonda no. El registro de «esta capa se mueve»
era un hecho de montaje: encender
animateen caliente no hacía aparecer el control de pausa. Invisible en una sonda, obvio con un interruptor. - 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.
- La decoración que parece mejor puede ser la ilegible. Dentro del panel
sólido del
cta, elglowhunde 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 |