@ -140,8 +140,11 @@ arquetipo).
navigation-menu, words). dialog/drawer/popover/dropdown-menu/context-menu/menubar/
navigation-menu, words). dialog/drawer/popover/dropdown-menu/context-menu/menubar/
tooltip/listbox/select usan `surface-raised` /`surface-default` a dedo → **off-doctrine** .
tooltip/listbox/select usan `surface-raised` /`surface-default` a dedo → **off-doctrine** .
**Decisión 2 — Radio por defecto = `sm` , vía variable de tema.**
**Decisión 2 — Radio por defecto = `md` (reconsiderado 2026-06-22), vía variable de tema.**
- **NO existe** un `--radius-default` hoy → **hay que definirlo** = `var(--radius-sm)` .
- `--radius-default` = `var(--radius-md)` . (Era `sm` ; cambiado a `md` tras comparar
referencias — el default debe igualar el centro de gravedad de los controles eidos
= md/6px, como Bootstrap/Chakra/Radix-medium; `sm` dejaría el default MÁS apretado
que los propios controles. Implementado en `render-css > appendRadiusDeclarations` .)
Los componentes sin radio de arquetipo propio lo consumen por defecto.
Los componentes sin radio de arquetipo propio lo consumen por defecto.
- El **radio concéntrico YA existe** en el shape engine: `[data-shape-nest]` +
- El **radio concéntrico YA existe** en el shape engine: `[data-shape-nest]` +
`border-radius: max(0px, calc(var(--shape-outer-radius) − var(--shape-nest-gap)))` .
`border-radius: max(0px, calc(var(--shape-outer-radius) − var(--shape-nest-gap)))` .
@ -809,7 +812,7 @@ cada una — no son faltas per-componente, son los arquetipos que faltan):
| eje | canon — QUÉ consumir | NO hacer (deriva) | estado |
| eje | canon — QUÉ consumir | NO hacer (deriva) | estado |
|---|---|---|---|
|---|---|---|---|
| **Superficie / elevación** | `data-depth='overlay'\|'modal'\|…` → **bundle completo** (surface·shadow·halo·border·blur·z) | `surface-raised` /`-default` a dedo; `--{c}-overlay-z` propio; frost arbitrario | **LIVE ✓** (B2, 2026-06-22; guard `elevation-plane.test.ts` ) |
| **Superficie / elevación** | `data-depth='overlay'\|'modal'\|…` → **bundle completo** (surface·shadow·halo·border·blur·z) | `surface-raised` /`-default` a dedo; `--{c}-overlay-z` propio; frost arbitrario | **LIVE ✓** (B2, 2026-06-22; guard `elevation-plane.test.ts` ) |
| **Radio** | `--radius-default` (=s m) / factor global + `[data-shape-nest]` concéntrico | `calc(--radius-md − space)` a mano; px fijo | **A2** |
| **Radio** | `--radius-default` (=md ) / factor global + `[data-shape-nest]` concéntrico | `calc(--radius-md − space)` a mano; px fijo | **A2** (default+factor+scaling LIVE; falta migrar concéntricos) |
| **Estado (hover/active)** | `--state-{variant}-hover/active` (ghost = state-layer `currentColor` ) | `color-mix` ad-hoc; 9 familias sueltas | **A3** |
| **Estado (hover/active)** | `--state-{variant}-hover/active` (ghost = state-layer `currentColor` ) | `color-mix` ad-hoc; 9 familias sueltas | **A3** |
| **Foco** | `--focus-ring-*` + `--focus-ring-surface` + `outline` (HCM-safe); intent vía `data-intent` | tokens de foco propios; box-shadow que muere en HCM | **A3** |
| **Foco** | `--focus-ring-*` + `--focus-ring-surface` + `outline` (HCM-safe); intent vía `data-intent` | tokens de foco propios; box-shadow que muere en HCM | **A3** |
| **Label de campo** | rol label canónico (size-relativo + weight/color unificados) | redefinir `--{c}-label-*` | **A4** |
| **Label de campo** | rol label canónico (size-relativo + weight/color unificados) | redefinir `--{c}-label-*` | **A4** |