Radios y sombras

Los radios se exponen como tokens semánticos, no como escalas sueltas, para que cambiarlos unifique todo el sistema.


Radios semánticos

TokenAliasUso
--radius-buttonvar(--radius-sm)Botones
--radius-cardvar(--radius-md)Cards
--radius-sectionvar(--radius-md)Secciones con fondo
--radius-badgevar(--radius-full)Pills, badges

Los componentes nunca usan --radius-sm directamente: usan --radius-button. Así, si decides cambiar todos los botones a más redondeados, cambias un único token.

Escalas primitivas

TokenValor típico
--radius-xs0.125rem
--radius-sm0.375rem
--radius-md0.625rem
--radius-lg1rem
--radius-xl1.5rem
--radius-full9999px

Sombras

Escala primitiva (un token por nivel):

TokenValor
--shadow-xs0 1px 2px oklch(0 0 0 / 0.04)
--shadow-sm0 2px 4px oklch(0 0 0 / 0.06)
--shadow-md0 4px 8px oklch(0 0 0 / 0.08)
--shadow-lg0 10px 20px oklch(0 0 0 / 0.12)
--shadow-xl0 20px 40px oklch(0 0 0 / 0.16)

Semánticas:

TokenAliasUso
--shadow-cardvar(--shadow-sm)Cards en reposo
--shadow-elevatedvar(--shadow-md)Elementos elevados
--shadow-overlayvar(--shadow-lg)Modales, popovers

Uso

<div class="rounded-[var(--radius-card)] shadow-[var(--shadow-card)]">
  Card con tokens semánticos
</div>

O con las clases de componente (que ya los usan internamente):

<article class="card card-elevated">
  <!-- usa --radius-card y --shadow-elevated por defecto -->
</article>

Motion

Para transiciones, FDS incluye utility/animations/durations.css con duraciones semánticas:

TokenValorUso
--duration-fast120msHover, micro-interacciones
--duration-normal200msTransiciones estándar
--duration-slow320msModales, paneles

Con utilities:

<button class="transition duration-[var(--duration-normal)]">
  Hover suave
</button>

Proporcionalidad entre tokens

Cuando extiendas radios o sombras, mantén la proporción: duplicar el radio debería coincidir con subir un paso en la sombra. Los usuarios perciben visualmente la consistencia entre escalas.

Aspect ratios

FDS también expone ratios comunes como tokens:

TokenRatioUso
--aspect-rrss1.91 / 1Open Graph, redes sociales
--aspect-wide18 / 8Heroes anchos
--aspect-ultrawide18 / 5Banners cinemáticos
--aspect-golden1.618 / 1Proporción áurea
--aspect-portrait3 / 4Imágenes verticales
--aspect-landscape4 / 3Imágenes horizontales

Usables directamente en aspect-ratio:

<div style="aspect-ratio: var(--aspect-wide);">...</div>