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/audit/theming/background.md

9.6 KiB

background — alcance de tema: análisis y propuesta

Generado por node --import tsx/esm scripts/theming-census.ts --report. Lo medido y la propuesta se regeneran; el Veredicto (§5) se conserva. Vista de conjunto: README · método y protocolo: PLAN-theming.md §1, §2, §7.

  • Medido: 2026-08-20 · Alcance: 35% — 8 de 23 knobs por token público
  • Knobs de apariencia: 26 — público 8 · privado 6 · global 6 · literal 3 · sistema 3 (fuera del ratio)
  • Contrato hoy (lib/recipes/base.ts): 31 pública(s) — pattern-rule, pattern-cell, pattern-dot-size, pattern-glow-size, pattern-glow-at, pattern-glow-strength, pattern-mesh-opacity, pattern-noise-opacity, pattern-vignette-strength, pattern-lines-width, pattern-lines-gap, pattern-lines-angle, pattern-rings-width, pattern-rings-gap, fade-size, fade-at, scrim-color, scrim-color-on-dark, scrim-color-on-light, scrim-strength-xs, scrim-strength-sm, scrim-strength-md, scrim-strength-lg, scrim-strength-xl, gradient-drift-duration, pause-offset, pause-z, parallax-travel, spotlight-size, spotlight-strength, spotlight-color
  • Eje size: no · ficheros: background.css

1. Knobs fuera de alcance

1.1 Directo a primitivo global (6)

# fichero:línea selector propiedad valor
1 background.css:192 [data-background-layer][data-pattern='mesh'] background-image var(--gradient-aurora)
2 background.css:379 [data-background-layer][data-kind='scrim'][data-blur='sm'] backdrop-filter blur(var(--blur-sm))
3 background.css:382 [data-background-layer][data-kind='scrim'][data-blur='md'] backdrop-filter blur(var(--blur-md))
4 background.css:385 [data-background-layer][data-kind='scrim'][data-blur='lg'] backdrop-filter blur(var(--blur-lg))
5 background.css:388 [data-background-layer][data-kind='scrim'][data-blur='xl'] backdrop-filter blur(var(--blur-xl))
6 background.css:391 [data-background-layer][data-kind='scrim'][data-blur='xxl'] backdrop-filter blur(var(--blur-xxl))

1.2 A través de un privado (6)

# fichero:línea selector propiedad valor
1 background.css:197 [data-background-layer][data-pattern='grid'] background-image linear-gradient(to right, var(--_background-rule) 1px, transparent 1px), linear-gradient(to bottom, var(--_background-rule) 1px, transparent 1px)
2 background.css:264 [data-background-layer][data-kind='gradient'] background var(--_background-gradient-image, transparent)
3 background.css:303 [data-background-layer][data-kind='scrim'] background color-mix( in oklch, var(--_background-scrim-ink) calc(var(--_background-scrim-weight) * 100%), transparent )
4 background.css:345 [data-background-layer][data-kind='scrim'][data-gradient='to-t'] background linear-gradient( to top, color-mix( in oklch, var(--_background-scrim-ink) calc(var(--_background-scrim-weight) * 100%), transparent ), transparent )
5 background.css:356 [data-background-layer][data-kind='scrim'][data-gradient='to-b'] background linear-gradient( to bottom, color-mix( in oklch, var(--_background-scrim-ink) calc(var(--_background-scrim-weight) * 100%), transparent ), transparent )
6 background.css:367 [data-background-layer][data-kind='scrim'][data-gradient='radial'] background radial-gradient( closest-side, transparent 30%, color-mix( in oklch, var(--_background-scrim-ink) calc(var(--_background-scrim-weight) * 100%), transparent ) )

1.3 Literales (3)

# fichero:línea selector propiedad valor
1 background.css:76 [data-background-layer] :where(img, video) inline-size 100%
2 background.css:77 [data-background-layer] :where(img, video) block-size 100%
3 background.css:239 [data-background-layer][data-pattern='noise'] background-image url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E")

2. Sistema transversal (3) — informativo, fuera del ratio

Un tema los alcanza a nivel de sistema, por diseño (recipe-contract §2).

# fichero:línea selector propiedad valor
1 background.css:100 [data-background-layer][data-opacity='subtle'] opacity var(--opacity-subtle)
2 background.css:103 [data-background-layer][data-opacity='muted'] opacity var(--opacity-muted)
3 background.css:106 [data-background-layer][data-opacity='ghost'] opacity var(--opacity-ghost)

3. Privados de la receta — ¿de dónde sale su valor?

privado declaraciones valor(es) origen ¿deriva de un público?
--_background-tint 2 var(--color-primary-solid), var(--palette-solid, var(--color-primary-solid)) global no
--_background-rule 1 var(--background-pattern-rule) public sí
--_background-cell 1 var(--background-pattern-cell) public sí
--_background-scrim-ink 4 var(--background-scrim-color), var(--background-scrim-color-on-dark), var(--background-scrim-color-on-light), var(--palette-solid, var(--background-scrim-color)) public sí
--_background-scrim-weight 5 var(--background-scrim-strength-md), var(--background-scrim-strength-xs), var(--background-scrim-strength-sm), var(--background-scrim-strength-lg), var(--background-scrim-strength-xl) public sí
--_background-parallax-offset 3 calc(var(--_background-parallax-travel) * -1), var(--_background-parallax-travel), calc( (var(--background-progress, 0.5) - 0.5) * 2 * var(--_background-parallax-travel) ) private, public no
--_background-parallax-travel 1 calc( var(--background-parallax-travel) * var(--_background-speed, 0) ) public sí
--_background-bleed-size 1 var( --_background-bleed, max(var(--_background-parallax-travel), var(--_background-parallax-travel) * -1) ) private no
--_background-spotlight-ink 2 var(--background-spotlight-color), var(--palette-solid, var(--background-spotlight-color)) public sí

Consumidos y no declarados en el CSS (vienen de base.ts o de un estilo inline del wrapper): --_background-bleed, --_background-depth, --_background-gradient-image, --_background-speed.

4. Propuesta de corrección

4.1 Tokens a declarar en lib/recipes/base.ts (2)

Valor verbatim del CSS de hoy: el default no se mueve, sólo cambia quién puede moverlo. Nombres derivados de recipe-contract §1 (ejes lógicos, talla al final) y theming §6.7 (slots de color, modificador delante). Un token con DOS valores distintos es una colisión de nombre: son dos knobs, o el nombre no distingue lo que debería — se marca ⚠.

token (--background-…) scope TSC valor propuesto usos
layer-backdrop-filter root ⚠ blur(var(--blur-sm)) / blur(var(--blur-md)) / blur(var(--blur-lg)) / blur(var(--blur-xl)) / blur(var(--blur-xxl)) 5
layer-bg-image root ⚠ var(--gradient-aurora) / url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E") 2

4.2 Sin nombre mecánico (8)

  • ⚠ decisión: 100% es un valor identidad o geometría de layout, no un knob de tema — el perímetro de «knob» es D-TH.2, sin firmar — 2: inline-size, block-size.
  • ya alcanzable: el privado --_background-rule deriva de un público (var(--background-pattern-rule)) — sin acción; el censo lo cuenta como no alcanzable por el límite del regex — 1: background-image.
  • ⚠ decisión: el privado que alimenta este knob no se declara en el CSS (viene de base.ts o de un estilo inline) — hay que resolverlo antes de nombrarlo — 1: background.
  • ya alcanzable: el privado --_background-scrim-ink deriva de un público (var(--background-scrim-color), var(--background-scrim-color-on-dark), var(--background-scrim-color-on-light), var(--palette-solid, var(--background-scrim-color))) — sin acción; el censo lo cuenta como no alcanzable por el límite del regex — 4: background.

4.4 Lo que hay que comprobar a mano (PLAN-theming §1.3 · §7.4)

  • Privado que no deriva de un público — §3 lo marca; el privado debe leer el público o desaparecer.
  • Velo o acento en el nodo equivocado (archetype: 'item' en un envoltorio, un background en shorthand que mata la capa de estado) — se mide desde el píxel hacia arriba.
  • Doble animación al mover un sello a una superficie con animación propia — registro de animationstart/animationend.
  • Diff de computed = 0 en reposo · hover · abierto · disabled · foco, por talla, antes y después.
  • Centinela por token nuevo: valor imposible en el root → el nodo lo sigue. Si no, el token miente.

5. Veredicto

(pendiente — lo escribe el autor; se conserva al regenerar)

Powered by TurnKey Linux.