CommunityImagengithub.com

nkurunziza-saddy/layout

Estructura y espacio en la interfaz de producto en la web. Define la escala de espaciado, agrupación, alineación, densidad (compacta o cómoda), áreas de interacción, cascarones de aplicación (barra lateral, barra de herramientas, contenido, inspector), anchos máximos, capacidad de respuesta por contenedor, tamaño de menús desplegables y ventanas emergentes, espacio para texto largo y traducido, estabilidad del diseño (sin desplazamiento al cargar) y elementos fijos que no deben cubrir el foco.

¿Qué es layout?

Esta habilidad para agentes de IA (compatible con Claude Code, Cursor y Codex) sistematiza la toma de decisiones de diseño de layout en interfaces de producto web. En lugar de depender de la intuición o de valores de espaciado arbitrarios, establece un proceso ordenado y una escala de espaciado fija (base 4px con pasos predefinidos como `--space-xs`, `--space-sm`, etc.) que garantiza consistencia, ritmo visual y accesibilidad. El agente primero define la estructura del shell (barra lateral, contenido, inspector), luego asigna anchos según el tipo de contenido (440px para formularios, 720px para lectura, 1200px para datos), agrupa con espacio antes que con líneas divisorias, alinea con precisión de píxel, ajusta la densidad y las áreas de interacción, prueba con datos extremos (texto largo, traducido o vacío), adapta el diseño mediante consultas de contenedor en lugar de consultas de viewport, y finalmente mide el resultado renderizado a 2× para verificar que los píxeles coincidan con la intención. También aplica reglas críticas como no usar valores de espaciado fuera de la escala, mantener el orden visual igual al orden del DOM para accesibilidad, usar propiedades lógicas para soporte RTL, y asegurar que los elementos fijos (como encabezados pegajosos) no oculten el foco mediante `scroll-padding-block`. El agente finaliza verificando patrones comunes de error (como márgenes incorrectos, anchos fijos en menús o imágenes sin dimensiones) y produce un reporte de lo que no pudo verificar.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nkurunziza-saddy/hmm-interfaces/tree/HEAD/layout

Installed? Explore more Imagen skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace layout?

Esta habilidad decide dónde van las cosas, qué tan separadas están y qué tamaño tienen. Toma las mismas decisiones en el mismo orden y verifica el resultado contra los píxeles renderizados.

Antes de cualquier decisión, aplica product-ui §1 (el diario de gusto y precedencia) y §5 (qué habilidad posee qué).

Decidir en este orden

  1. Cascarón. Nombra las regiones de la pantalla: barra lateral, barra de herramientas, contenido, inspector. Cada región es propietaria de un desplazamiento o ninguno. Detalles y anchos: shell-and-responsive.md. Por qué: el cascarón fija cada ancho dentro del cual debe vivir el diseño interior.
  2. Ancho y medida. Establece la columna de contenido según lo que contiene: formulario 440px, lectura 720px con prosa limitada a la medida de type (66ch), datos 1200px. Una columna nunca se estira porque la pantalla sea ancha. Por qué: más allá de 75 caracteres una línea pierde al lector, y un formulario estirado envía los ojos a través de la pantalla.
  3. Espacio. Usa la escala a continuación y nada más. Agrupa primero, con espacio; añade un relleno, luego una línea, solo donde el espacio no puede soportarlo. spacing-and-density.md.
  4. Alinear. Elige los bordes compartidos y coloca todo sobre ellos. Un error de 1–4px es un bug. Corrige ópticamente donde la geometría se ve mal. spacing-and-density.md.
  5. Tamaño. Elige la densidad para la región, luego las áreas de interacción. spacing-and-density.md.
  6. Datos en el peor caso. Redimensiona la caja para el contenido más largo, más corto, faltante, traducido y aún cargándose antes de darlo por terminado. stability-and-text.md.
  7. Adaptar. Haz que la estructura responda a su contenedor, no al dispositivo. shell-and-responsive.md.
  8. Medir. Renderiza a 2×, mide espacios y bordes, corrige lo que muestran los píxeles. measure.md.

La escala

Una escala, base 4px. Nunca escribas un valor de espaciado que no sea un paso. Por qué: los valores únicos (10px, 14px, 18px) hacen que el ritmo sea imposible de ver e imposible de mantener.

TokenpxUso típico
--space-xs4etiqueta a su descripción; icono a etiqueta en un chip
--space-sm8elementos dentro de un grupo; padding de control en bloque
--space-md12entre controles con borde; padding de control en línea
--space-lg16entre campos; padding compacto de tarjeta
--space-2020entre bloques dentro de una tarjeta
--space-xl24entre grupos; padding cómodo de tarjeta
--space-2xl32entre secciones
--space-3xl48encima del primer título de una página
--space-4xl64debajo del último bloque de una página

Ajustes de 1–2px para alineación óptica son los únicos valores fuera de la escala. Nómbralos (--play-nudge: 2px).

Reglas que no necesitan referencia

  • Agrupa con espacio. El salto entre grupos es al menos 2× el espacio dentro de uno: 8px dentro significa 16px o más entre grupos. Espaciado igual en todas partes hace que la agrupación sea ambigua, y la ambigüedad aquí es un bug funcional.
  • Elimina líneas antes de añadirlas. Espacio primero, un relleno segundo, un divisor al final, y solo para datos densos. Por qué: cada línea cuesta atención que la misma información da gratis con espacio.
  • Espacio arriba igual a espacio abajo para cualquier cosa entre dos elementos. Por qué: una cosa más cerca de un vecino se lee como propiedad de este.
  • Los controles deben verse como controles. Un botón, enlace o interruptor tiene una forma, un subrayado o una posición en la barra de herramientas. El texto estático nunca comparte esos. Por qué: un control con estilo de texto se oculta, y el texto con estilo de control acumula clics muertos.
  • Las acciones se colocan sobre los datos que afectan, nunca debajo de ellos. Un control que establece algo se coloca junto a ello.
  • El contenido principal va primero y al inicio. El orden visual es igual al orden del DOM: nunca uses order, row-reverse ni colocación en grid para reordenar contenido. Por qué: el orden del teclado y del lector de pantalla sigue el DOM.
  • Propiedades lógicas (margin-inline-start, padding-block, inset-inline-end, text-align: start) para cualquier cosa que se refleje. Por qué: RTL entonces funciona sin una segunda hoja de estilo.
  • Nunca coloques controles críticos en el borde inferior de una ventana o barra lateral. Por qué: las personas empujan las ventanas parcialmente fuera de la pantalla.
  • El desplazamiento muestra lo que está oculto. El contenido más allá de un borde recibe una señal visible: un vistazo de 16–32px o un degradado.
  • Nada se desplaza. El hover, la selección y el foco nunca cambian el tamaño de un elemento. Los datos cargados ocupan la caja que tenía el esqueleto.

Pares

RotoArregladoPor qué
gap: 12px en el formulario y gap: 12px entre sus fieldsetsgap: 8px dentro, gap: 24px entreLos grupos necesitan un salto de al menos 2×
padding: 10px 14pxpadding: var(--space-sm) var(--space-md)Solo pasos
Título en x=24, descripción en x=26Ambos en x=24Un error de 1–4px se lee como un error
Botón de icono 16×16 con padding: 0Glifo de 16px, ::before { inset: -12px } para un objetivo de 40pxEl objetivo del ratón es 40px
.row + .row { margin-top: 8px } con hover y click en filas.row { padding-block: 4px }, sin marginUn espacio entre filas es una zona muerta y parpadea en hover
.menu { width: 200px }width: max-content; min-width: 160px; max-width: 320pxEl menú se ajusta a su etiqueta más larga
@media (max-width: 768px) en una tarjeta@container (width < 400px) en el padre de la tarjetaUna tarjeta en una barra lateral estrecha necesita su propio ancho, no el de la pantalla
<img src> sin tamaño, luego una tarjeta que saltawidth, height o aspect-ratio establecidosLa caja existe antes de los bytes
Encabezado fijo, ancla aterriza debajo de élscroll-padding-block-start: 56px en el scrollerEl foco y las anclas nunca se colocan debajo del chrome

Antes de terminar

Busca en el diff estos patrones, luego verifica.

PatrónArreglo
margin, padding o gap con un valor que no está en la escalaPaso más cercano
Un valor de gap usado dentro y entre gruposDentro ≤ la mitad de entre
Botón solo icono de menos de 24px, o menos de 40px sin ::beforeExpandir con un pseudo-elemento
gap o margin entre filas o elementos de menú cliqueablesPadding dentro del elemento
width fijo en un menú, botón o cuadro de textomax-content, min-width, max-width; min-height para texto
@media (max-width dentro de un componente reutilizable@container en su padre
height: 100vh para un cascarón100dvh
Pista 1fr o hijo de flex que contiene texto largominmax(0, 1fr) o min-width: 0
margin-left, padding-right, left: 0, text-align: left en UI reflejadaForma lógica
Encabezado o pie fijo sin scroll-padding-blockEstablecerlo a la altura del chrome
Alto de fila o ancho de columna del esqueleto diferente al cargadoEmparejarlos
<img> sin dimensiones o aspect-ratioAñadir uno

Verifica con measure.md: renderiza a 2× a 390px y al ancho más ancho del cascarón, ejecuta el script, recorta cada candidato y cuenta píxeles. Luego navega con Tab por la pantalla con el chrome fijo en su lugar, y carga las cadenas más largas. Informa lo que no pudiste verificar como no verificado.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

nkurunziza-saddy/break

Stress-tests a piece of UI with worst-case data and every reachable state, then reports what broke with a numbered fix for each. Use it when the user types /break, or asks to "break this", "stress-test", "try the worst case", "what happens with long names", "check the empty and error states" or "find the edge cases" on a component or screen.

nkurunziza-saddy/motion

Builds motion for product UI on the web. It decides whether something should move at all, then why, which tool (CSS transition, WAAPI, Motion, spring), which properties, curve, duration, interruption, exit and reduced-motion path, and it writes the code. Also covers stagger and choreography, gestures (drag, flick, sheets), motion tokens and animation performance.

nkurunziza-saddy/pick-library

Picks the right library for a frontend task from a curated, status-checked list, instead of hand-rolling it or installing an abandoned package. Use it when the user asks "what should I use for…", "is there a library for…", or names a package, and when you are about to build a toast, command menu, drawer, date picker, table, virtual list, drag and drop, chart, OTP input, animated number, theme switch, form validation…

nkurunziza-saddy/surfaces

What product UI is made of on the web. It sets elevation levels with exact shadow recipes for light and dark mode, when to use a shadow and when a border, the transparent border for forced-colours mode, a small radius scale with concentric nesting, image outlines, every interactive state as a surface change (hover, pressed, selected, disabled, focus-visible), icons (one set, currentColor, outline and fill, stroke tha…

Skills relacionados