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/link-preview.md

92 lines
4.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# link-preview — 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](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-23 · **Alcance**: **100%** — 14 de 14 knobs por token público
- **Knobs de apariencia**: 17 — público 14 · privado 0 · global 0 · literal 0 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 35 pública(s) — `padding-block-xs`, `padding-block-sm`, `padding-block-md`, `padding-block-lg`, `padding-block-xl`, `padding-inline-xs`, `padding-inline-sm`, `padding-inline-md`, `padding-inline-lg`, `padding-inline-xl`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `min-width-xs`, `min-width-sm`, `min-width-md`, `min-width-lg`, `min-width-xl`, `padding-block`, `padding-inline`, `font-size`, `min-width`, `max-width`, `gap`, `radius`, `fg`, `font-weight`, `font-family`, `line-height`, `trigger-radius`, `trigger-fg`, `hover-trigger-fg`, `trigger-underline`
- **Eje `size`**: no · **ficheros**: `link-preview.css`
## 1. Knobs fuera de alcance
### 1.1 Directo a primitivo global (0)
_Ninguno._
### 1.2 A través de un privado (0)
_Ninguno._
### 1.3 Literales (0)
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 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 | `link-preview.css:41` | `[data-link-preview-trigger]:focus-visible` | `outline` | `var(--focus-ring-width) solid var(--focus-ring-color)` |
| 2 | `link-preview.css:105` | `[data-link-preview-arrow] polygon` | `fill` | `var(--depth-overlay-surface)` |
| 3 | `link-preview.css:110` | `[data-link-preview-arrow] path` | `stroke` | `var(--depth-overlay-border)` |
## 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
_Nada que proponer: no hay knobs fuera de alcance._
### 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
<!-- veredicto:start -->
**Medido 2026-08-21.** Sonda dirigida (550 valores × 5 tallas, 0 diffs entre
dos corridas): la genérica ve **1 nodo** porque el panel está PORTALADO y abre
en HOVER con retardo, y el `data-size` vive en el CONTENT, no en el trigger.
1. **Los per-talla van con `parts: ['content']`**, no al host: los bloques son
`[data-link-preview-content][data-size='X']` y el content está portalado —
una cascada en el host no lo alcanza. Cuatro ejes por talla
(`padding-block`, `padding-inline`, `font-size`, `min-width`), veinte
coordenadas. La propia receta ya avisa de que la talla mueve **sólo
dimensiones físicas**: familia, peso e interlineado son constantes a
propósito, así que ésos son knobs planos.
2. **`--_link-preview-max-width` no se declara por talla** (es
`min(28rem, calc(100vw - var(--space-4)))` en las cinco): un knob plano, no
una quinta coordenada.
3. **El color del trigger lleva FALLBACK encadenado**
(`var(--color-primary-text, var(--color-content-primary))`) — la coma es
parte del valor, no un segundo knob. Se tokeniza verbatim, fallback
incluido, y lo mismo el del hover.
4. **La flecha NO se tokeniza**: su `fill` y su `stroke` consumen el plano
`overlay` del sistema de profundidad (`--depth-overlay-surface` / `-border`)
para casar siempre con el panel, y el censo ya los clasifica como sistema.
Acuñar `arrow-fg` rompería justo la garantía que esa regla da.
5. **El `text-decoration-color` del reposo es un `color-mix` sobre
`currentColor`** (35 %): la mezcla es construcción — el subrayado tenue de
un enlace —, así que el knob es la declaración entera, no el porcentaje.
<!-- veredicto:end -->

Powered by TurnKey Linux.