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/media-player.md

10 KiB

media-player — 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: 0% — 0 de 45 knobs por token público
  • Knobs de apariencia: 45 — público 0 · privado 0 · global 37 · literal 8 · sistema 0 (fuera del ratio)
  • Contrato hoy (lib/recipes/base.ts): 2 pública(s) — accent, accent-strong
  • Eje size: sí · ficheros: media-player.css

1. Knobs fuera de alcance

1.1 Directo a primitivo global (37)

# fichero:línea selector propiedad valor
1 media-player.css:46 [data-media-player] border-radius var(--radius-lg)
2 media-player.css:47 [data-media-player] background var(--color-surface-default)
3 media-player.css:48 [data-media-player] color var(--_mp-fg)
4 media-player.css:86 [data-media-player-media] background var(--color-surface-default)
5 media-player.css:118 [data-media-player][data-media='video']::after background linear-gradient(to top, var(--_mp-scrim), transparent)
6 media-player.css:139 [data-media-player-buffering-indicator]::after width var(--space-8)
7 media-player.css:140 [data-media-player-buffering-indicator]::after height var(--space-8)
8 media-player.css:141 [data-media-player-buffering-indicator]::after border-radius var(--radius-full)
9 media-player.css:142 [data-media-player-buffering-indicator]::after border 3px solid var(--_mp-track)
10 media-player.css:159 [data-media-player-title] padding var(--space-3) var(--space-4)
11 media-player.css:160 [data-media-player-title] color var(--_mp-fg)
12 media-player.css:161 [data-media-player-title] font-size var(--font-size-md)
13 media-player.css:162 [data-media-player-title] font-weight var(--font-weight-semibold)
14 media-player.css:163 [data-media-player-title] background linear-gradient(to bottom, var(--_mp-scrim), transparent)
15 media-player.css:173 [data-media-player][data-media='audio'] [data-media-player-title] padding var(--space-2) var(--space-3)
16 media-player.css:202 [data-media-player-captions] gap var(--space-1)
17 media-player.css:203 [data-media-player-captions] padding-inline var(--_mp-pad-inline)
18 media-player.css:217 [data-media-player-captions] span padding var(--space-1) var(--space-2)
19 media-player.css:218 [data-media-player-captions] span border-radius var(--radius-sm)
20 media-player.css:219 [data-media-player-captions] span background var(--_mp-captions-bg)
21 media-player.css:220 [data-media-player-captions] span color var(--_mp-captions-fg)
22 media-player.css:221 [data-media-player-captions] span font-size var(--_mp-time-font)
23 media-player.css:222 [data-media-player-captions] span line-height var(--font-line-height-md)
24 media-player.css:237 [data-media-player-controls] gap var(--_mp-gap)
25 media-player.css:238 [data-media-player-controls] padding var(--_mp-pad-block) var(--_mp-pad-inline)
26 media-player.css:239 [data-media-player-controls] background var(--_mp-glass)
27 media-player.css:240 [data-media-player-controls] border-top 1px solid var(--_mp-border)
28 media-player.css:247 [data-media-player-controls] color var(--_mp-fg)
29 media-player.css:271 [data-media-player-controls] [data-button][data-variant='ghost'] color var(--_mp-fg)
30 media-player.css:311 [data-media-player-time] font-family var(--font-family-mono)
31 media-player.css:312 [data-media-player-time] font-size var(--_mp-time-font)
32 media-player.css:313 [data-media-player-time] color var(--_mp-fg)
33 media-player.css:314 [data-media-player-time] padding 0 var(--space-2)
34 media-player.css:320 [data-media-player-time][data-type='duration'] color var(--_mp-fg-muted)
35 media-player.css:372 [data-media-player-time-slider] min-width var(--space-8)
36 media-player.css:411 [data-media-player-volume-slider] width var(--_mp-volume-width)
37 media-player.css:475 [data-media-player-volume-float] [data-popover-viewport] padding var(--space-6) var(--space-2)

1.2 A través de un privado (0)

Ninguno.

1.3 Literales (8)

# fichero:línea selector propiedad valor
1 media-player.css:44 [data-media-player] width 100%
2 media-player.css:83 [data-media-player-media] width 100%
3 media-player.css:84 [data-media-player-media] height 100%
4 media-player.css:97 [data-media-player-poster] width 100%
5 media-player.css:98 [data-media-player-poster] height 100%
6 media-player.css:115 [data-media-player][data-media='video']::after height 42%
7 media-player.css:453 [data-media-player-rate-button] min-inline-size 4.6em
8 media-player.css:466 [data-media-player-rate-float], [data-media-player-caption-float] inline-size max-content

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

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

Ninguno.

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

La receta no declara privados propios en su CSS.

4. Propuesta de corrección

  • Tiene eje size: los tokens dimensionales van por talla ({part}-{eje}-{k}) apuntando al bundle --size-{k}-*, nunca al primitivo crudo (theming §5; el guard recipe-css-contract prohíbe el primitivo).

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

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 (--media-player-…) scope TSC valor propuesto usos
bg root ⚠ var(--color-surface-default) / linear-gradient(to top, var(--_mp-scrim), transparent) 2
time-fg root ⚠ var(--_mp-fg) / var(--_mp-fg-muted) 2
radius root var(--radius-lg) 1
fg root var(--_mp-fg) 1
media-bg root var(--color-surface-default) 1
buffering-indicator-radius root var(--radius-full) 1
title-fg root var(--_mp-fg) 1
title-font-size root var(--font-size-md) 1
title-font-weight root var(--font-weight-semibold) 1
title-bg root linear-gradient(to bottom, var(--_mp-scrim), transparent) 1
captions-gap root var(--space-1) 1
captions-padding-inline root var(--_mp-pad-inline) 1
captions-radius root var(--radius-sm) 1
captions-bg root var(--_mp-captions-bg) 1
captions-fg root var(--_mp-captions-fg) 1
captions-font-size root var(--_mp-time-font) 1
captions-line-height root var(--font-line-height-md) 1
controls-gap root var(--_mp-gap) 1
controls-bg root var(--_mp-glass) 1
controls-fg root var(--_mp-fg) 1
ghost-controls-fg root var(--_mp-fg) 1
time-font-family root var(--font-family-mono) 1
time-font-size root var(--_mp-time-font) 1
rate-button-width root 4.6em 1
rate-float-width root max-content 1

4.2 Sin nombre mecánico (18)

  • ⚠ decisión: width es shorthand o eje físico — hay que partirlo en ejes lógicos antes de nombrarlo (recipe-contract §1, R-4.4) — 5: width.
  • ⚠ decisión: height es shorthand o eje físico — hay que partirlo en ejes lógicos antes de nombrarlo (recipe-contract §1, R-4.4) — 4: height.
  • ⚠ decisión: border es shorthand o eje físico — hay que partirlo en ejes lógicos antes de nombrarlo (recipe-contract §1, R-4.4) — 1: border.
  • ⚠ decisión: padding es shorthand o eje físico — hay que partirlo en ejes lógicos antes de nombrarlo (recipe-contract §1, R-4.4) — 6: padding.
  • ⚠ decisión: border-top es shorthand o eje físico — hay que partirlo en ejes lógicos antes de nombrarlo (recipe-contract §1, R-4.4) — 1: border-top.
  • ⚠ decisión: min-width es shorthand o eje físico — hay que partirlo en ejes lógicos antes de nombrarlo (recipe-contract §1, R-4.4) — 1: min-width.

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.