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.
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)
5. Veredicto
(pendiente — lo escribe el autor; se conserva al regenerar)