Title
+Body bounded to the medium max-width.
+` — el recipe
+de Flex añade selectores `[data-box][data-flex] { … }` sobre los de
+Box. Los props heredados (padding, margin, size, position) se pasan
+intactos al Box raíz.
+
+## Comparativa
+
+| Capacidad | UIX | Radix Themes | Chakra UI | Mantine |
+| --- | --- | --- | --- | --- |
+| `direction` (row/column +reverse) | Sí | Sí | Sí (`flexDirection`) | Sí |
+| `align` → align-items | Sí | Sí | Sí (`alignItems`) | Sí |
+| `justify` → justify-content | Sí | Sí | Sí (`justifyContent`) | Sí |
+| `wrap` → flex-wrap | Sí | Sí | Sí (`flexWrap`) | Sí |
+| `gap` + `rowGap` / `columnGap` | Sí | Sí (`gap`, `gapX`, `gapY`) | Sí | Sí |
+| `inline` boolean (inline-flex) | Sí | Vía `display="inline-flex"` | Sí | Sí (`inline`) |
+| `alignContent` (multi-line cross) | **No** — gap conocido | Sí | Sí | Sí |
+| Item props heredados de Box | Sí (composición) | Sí | Sí (style-props todo en Box) | — split |
+| Responsive | Sí | Sí | Sí | Sí |
+
+## Decisiones
+
+- **Hereda Box por composición, no por mixin** — Flex renderiza a través
+ de `` con `display="flex"` fijo. Mantiene el contrato Box-as-foundation
+ y permite que `[data-box]` siga siendo el selector canónico para todo lo
+ que pinta como box.
+- **`align`/`justify` cortos** — preferimos `align` sobre `alignItems`
+ (Mantine convention). Coincide con Radix Themes; difiere de Chakra.
+- **`inline` boolean en vez de `display="inline-flex"`** — ergonomía;
+ el resto de la API queda consistente con Box (un solo display).
+- **Item props NO en Flex** — `flex`, `grow`, `alignSelf`, `gridColumn`
+ van en el `` hijo. Split estilo Radix.
+
+## Eventos Sema
+
+0 eventos. Pasivo — sólo organiza hijos. Mismas reglas que Box.
+
+## Gaps
+
+| Gap | Disposición | Detalle |
+| --- | --- | --- |
+| `alignContent` (multi-line cross-axis) | **implementar** | Radix + Chakra lo tienen. Útil cuando `wrap` está activo. Backlog Layout fixes. |
+| Helpers `HStack` / `VStack` (alias direction-fijo) | **diferir** | Ergonomía Chakra. UIX usa ``. Reconsiderar si la fricción es real. |
+| `inline-flex` shorthand alternativo (e.g. ``) | **descartar** | `inline` boolean cubre el caso. |
+| Slot `divider` entre hijos (separator automático) | **diferir** | Patrón Chakra Stack. Más natural en Stack que en Flex. |
+
+## Referencias
+
+- Radix Themes Flex: https://www.radix-ui.com/themes/docs/components/flex
+- Chakra UI Flex: https://chakra-ui.com/docs/components/flex
+- Mantine Flex: https://mantine.dev/core/flex/
+- MDN flexbox: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_flexible_box_layout
+
+## Passive justification
+
+Visual-only (`scope: ['eidos']`). Una sola part Provider, marker
+`[data-flex]`. Sin estados ni keyboard ni ARIA ni eventos. El recipe
+consume `--flex-*` writeable inline.
diff --git a/src/uix/eidos/components/grid/README.md b/src/uix/eidos/components/grid/README.md
new file mode 100644
index 000000000..4b9c72696
--- /dev/null
+++ b/src/uix/eidos/components/grid/README.md
@@ -0,0 +1,76 @@
+# Eidos Grid
+
+`display:grid` container. Eidos-native: añade los props grid-template /
+auto-flow / placement de container (`align`, `justify`, `placeItems`,
+`placeContent`) sobre la superficie de [Box](../box/README.md). Item-side
+placement (`gridColumn`, `gridRow`, `gridArea`, `placeSelf`) vive en el
+hijo Box — corregido en `66c6897c` (air los puso erróneamente en Grid).
+
+## Superficie
+
+```svelte
+
+ Cell 1
+ Cell 2 (spans 2)
+ Cell 3
+
+```
+
+## Baseline
+
+Origen: `air/components/layout/grid`. Misma adaptación que el resto.
+Composición a través de Box (``), con recipe que añade
+selectores `[data-box][data-grid] { … }`.
+
+## Comparativa
+
+| Capacidad | UIX | Radix Themes | Chakra UI | Mantine SimpleGrid |
+| --- | --- | --- | --- | --- |
+| `templateColumns` / `templateRows` | Sí (string libre) | Sí | Sí | — (sólo cols) |
+| `columns` / `rows` shorthand (`columns={3}` → `repeat(3, 1fr)`) | **No** — gap conocido | Sí (`columns="3"`) | Sí (`columns={3}`) | Sí |
+| `autoColumns` / `autoRows` / `autoFlow` | Sí | Sí | Sí | — |
+| `gap` + `rowGap` / `columnGap` | Sí | Sí | Sí | Sí |
+| `align` → align-items | Sí | Sí | Sí | — |
+| `justify` → justify-content | Sí | Sí | Sí | — |
+| `placeItems` / `placeContent` | Sí | Sí | Sí | — |
+| `alignContent` (multi-line) | **No** — gap conocido | Sí | Sí | — |
+| `inline` boolean (inline-grid) | **No** — gap conocido | Vía `display="inline-grid"` | Sí | — |
+| Item placement (`gridColumn`, `gridRow`, `gridArea`, `placeSelf`) | **En Box** (Radix) | En Box | En Box | — |
+| Responsive `breakpoints` | Sí | Sí | Sí | Sí |
+
+## Decisiones
+
+- **Item placement en Box** — corrección del port. Air tenía
+ `gridColumn`/`gridRow`/`gridArea` en Grid pero son props del HIJO,
+ no del contenedor. Movidos a Box + añadido `placeSelf`.
+- **`templateColumns` como string libre** — más flexible que el shorthand
+ numérico. El gap `columns` shorthand está en el backlog (ergonomía).
+- **Sin `inline-grid` shorthand** — Box ya soporta `display="inline-grid"`
+ vía passthrough. Backlog para añadir `inline` boolean por paridad con
+ Flex.
+
+## Eventos Sema
+
+0 eventos. Pasivo — sólo organiza hijos.
+
+## Gaps
+
+| Gap | Disposición | Detalle |
+| --- | --- | --- |
+| `columns` / `rows` numeric shorthand | **implementar** | Patrón Radix Themes (`columns="3"` → `repeat(3, 1fr)`). Ergonomía Mantine SimpleGrid. Backlog Layout fixes. |
+| `inline` boolean | **implementar** | Paridad con Flex.inline. Trivial — display: inline-grid. |
+| `alignContent` (multi-line cross-axis align) | **implementar** | Útil con `autoRows` + scroll. Radix lo tiene. |
+| Slot/Cell helpers (e.g. ``) | **diferir** | Box ya cumple. Reconsiderar si emerge un patrón estable. |
+| `subgrid` support | **diferir** | Soporte navegador todavía parcheado; esperar penetración. |
+
+## Referencias
+
+- Radix Themes Grid: https://www.radix-ui.com/themes/docs/components/grid
+- Chakra UI Grid: https://chakra-ui.com/docs/components/grid
+- Mantine SimpleGrid: https://mantine.dev/core/simple-grid/
+- MDN grid layout: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout
+
+## Passive justification
+
+Visual-only (`scope: ['eidos']`). Sin estado mutable, sin keyboard,
+sin ARIA, sin eventos.
diff --git a/src/uix/eidos/components/group/README.md b/src/uix/eidos/components/group/README.md
new file mode 100644
index 000000000..f1eaa7996
--- /dev/null
+++ b/src/uix/eidos/components/group/README.md
@@ -0,0 +1,66 @@
+# Eidos Group
+
+Cluster horizontal inline. Es [Flex](../flex/README.md) con `direction="row"`
++ `wrap="wrap"` + `align="center"` por defecto. Útil para barras de
+acciones, listas de tags, conjuntos de chips.
+
+## Superficie
+
+```svelte
+
+
+
+
+
+```
+
+## Baseline
+
+Origen: `air/components/layout/group`. Adaptación estándar.
+Composición: a través de Flex (`
`).
+El recipe sólo aplica defaults distintos a los de Flex puro
+(`align: center`, `flex-wrap: wrap`).
+
+## Comparativa
+
+| Capacidad | UIX | Mantine Group | Chakra HStack | Radix Themes |
+| --- | --- | --- | --- | --- |
+| Row con wrap por defecto | Sí | Sí | No (HStack no wrap) | Vía Flex |
+| `gap` / `align` / `justify` | Sí | Sí | Sí | Sí |
+| `grow` boolean (hijos llenan ancho equitativamente) | **No** — gap conocido | Sí | No | — |
+| `preventGrowOverflow` | **No** — gap conocido | Sí | — | — |
+| `attached` (cero gap + radios continuos) | Vía CSS local | No | No | — |
+
+## Decisiones
+
+- **Defaults pensados para action rows** — `align: center`, `wrap: wrap`,
+ cero margen. Match Mantine Group.
+- **Mantine `grow`** — útil para distribuir hijos equitativamente. Sin
+ añadirlo todavía; backlog.
+- **`attached` no es un prop de Group canon** — el demo lo expone para
+ ilustrar el patrón "buttons attached" pero en producción se hace con
+ CSS local en el container que envuelve los buttons.
+
+## Eventos Sema
+
+0 eventos. Pasivo.
+
+## Gaps
+
+| Gap | Disposición | Detalle |
+| --- | --- | --- |
+| `grow` boolean (children fill equally) | **implementar** | Patrón Mantine. Backlog Layout fixes prioritario. |
+| `preventGrowOverflow` boolean | **diferir** | Refinamiento de `grow`. Sólo aplica cuando `grow` está activo. |
+| `attached` como prop canónico | **diferir** | Hoy se hace con CSS local. Si emerge un patrón estable, promover. |
+| Slot `divider` | **diferir** | Mismo backlog que Stack. |
+
+## Referencias
+
+- Mantine Group: https://mantine.dev/core/group/
+- Chakra HStack: https://chakra-ui.com/docs/components/stack
+- Radix Themes: usa ``.
+
+## Passive justification
+
+Visual-only (`scope: ['eidos']`). Marker `[data-group]`, sin estados
+ni ARIA. Composición sobre Flex.
diff --git a/src/uix/eidos/components/section/README.md b/src/uix/eidos/components/section/README.md
new file mode 100644
index 000000000..7568397dd
--- /dev/null
+++ b/src/uix/eidos/components/section/README.md
@@ -0,0 +1,70 @@
+# Eidos Section
+
+Bloque con padding vertical canónico. Aplica padding-block según un
+size variant (`xs`/`sm`/`md`/`lg`/`xl`) y opcionalmente un tono de
+fondo. Pensado para separar secciones de página sin tener que repetir
+cálculos de spacing.
+
+## Superficie
+
+```svelte
+
+
+```
+
+## Baseline
+
+Origen: `air/components/layout/section`. Adaptación estándar.
+**Limitación conocida**: el root se renderiza como `
Section title
+Content with consistent vertical breathing.
+` en este
+batch (sin `as` prop). Para semantic `` HTML, envuelve
+manualmente o espera al batch que añada polimorfismo.
+
+## Comparativa
+
+| Capacidad | UIX | Radix Themes Section | Chakra | Mantine |
+| --- | --- | --- | --- | --- |
+| `size` chip (xs/sm/md/lg/xl) | Sí | Sí (`1`–`4`) | — (no Section) | — (no Section) |
+| Padding-block según size | Sí | Sí | — | — |
+| `tone` (background variant) | Sí (`default`/`subtle`/`muted`) | No | — | — |
+| Render `` semántico | **No** — `
` (batch 1) | Sí | — | — |
+
+Chakra y Mantine no tienen un componente Section dedicado — usan Box
+o Container directamente. UIX justifica el componente para encapsular
+el padding-block canónico repetido en páginas.
+
+## Decisiones
+
+- **Render como `
` en batch 1** — sin `as` prop todavía. Si el SEO o
+ el screen reader necesita ``, envuelve manualmente. Se
+ reconsiderará si ≥2 consumers piden polimorfismo.
+- **`tone` propio en lugar de `bg` heredado** — `tone` mapea a tokens
+ canónicos (`surface-default`, `surface-subtle`, `surface-muted`) que
+ garantizan contraste con el body text. `bg` libre rompería el contrato
+ de contraste.
+- **Padding-block dependiente del size token** — match Radix Themes Section
+ semantic (sus sizes 1-4 mapean al mismo set).
+
+## Eventos Sema
+
+0 eventos. Pasivo.
+
+## Gaps
+
+| Gap | Disposición | Detalle |
+| --- | --- | --- |
+| `as` prop para semantic ``/``/`` | **implementar** | Es el caso de uso primario. Backlog Layout polymorphic batch. |
+| Más tonos / background imagery | **diferir** | El tone scale actual es suficiente. Imagery vía `style=`. |
+| Padding-inline matching | **diferir** | Hoy se compone con Container dentro de Section. |
+
+## Referencias
+
+- Radix Themes Section: https://www.radix-ui.com/themes/docs/components/section
+- Chakra y Mantine: no tienen Section dedicado.
+
+## Passive justification
+
+Visual-only (`scope: ['eidos']`). Marker `[data-section]`. Sin estados
+ni keyboard ni ARIA. El size variant define padding-block; el tone
+variant define background.
diff --git a/src/uix/eidos/components/stack/README.md b/src/uix/eidos/components/stack/README.md
new file mode 100644
index 000000000..039ae2ea8
--- /dev/null
+++ b/src/uix/eidos/components/stack/README.md
@@ -0,0 +1,71 @@
+# Eidos Stack
+
+Direction-controlled Flex wrapper. Por defecto vertical (column); con
+`direction="row"` se convierte en horizontal. Es azúcar sobre
+[Flex](../flex/README.md) cuando lo único que importa es apilar items
+con un gap.
+
+## Superficie
+
+```svelte
+
+ Row A
+ Row B
+ Row C
+
+
+…
+```
+
+## Baseline
+
+Origen: `air/components/layout/stack`. Adaptación estándar (drop air,
+vars `--stack-*`, `var(--space-N)`).
+
+Composición: se renderiza a través de Flex (no de Box directamente).
+El DOM final es `
`. El recipe de
+Stack es prácticamente un marker — todo el comportamiento viene del
+Flex inferior.
+
+## Comparativa
+
+| Capacidad | UIX | Chakra Stack | Mantine Stack | Radix Themes |
+| --- | --- | --- | --- | --- |
+| `direction` row/column | Sí | Sí (Stack/HStack/VStack) | Sólo column (Stack), Group para row | Vía Flex |
+| `gap` | Sí | Sí (`spacing`) | Sí | Sí |
+| `align` / `justify` | Sí | Sí | Sí | Vía Flex |
+| `wrap` | Sí (heredado Flex) | No directo | No | Vía Flex |
+| Slot `divider` entre hijos | **No** — gap conocido | Sí (`divider={ }`) | Sí (`gap` + Divider component) | — |
+| Helpers `HStack` / `VStack` | **No** — gap conocido | Sí | Sí (`Group` = HStack) | — |
+
+## Decisiones
+
+- **Componente único con `direction` en vez de tres componentes**
+ — preferimos un solo Stack con prop sobre el patrón Chakra
+ `Stack`/`HStack`/`VStack`. Menos superficie pública, mismo poder.
+- **Defaults a column** — match Mantine. Si quieres row con espacio entre
+ items y wrap, [Group](../group/README.md) ofrece esos defaults.
+- **No `divider` slot por ahora** — useful pero no crítico. Backlog.
+
+## Eventos Sema
+
+0 eventos. Pasivo.
+
+## Gaps
+
+| Gap | Disposición | Detalle |
+| --- | --- | --- |
+| Slot `divider` para insertar separator entre items | **diferir** | Patrón Chakra. Útil para listas/menús. Backlog Layout fixes. |
+| Helpers `HStack` / `VStack` | **diferir** | Ergonomía Chakra. UIX prefiere ``. Reconsiderar si la fricción es real en consumers. |
+| `preventGrowOverflow` para hijos con `grow` | **diferir** | Patrón Mantine Group; aplicable también a Stack horizontal. |
+
+## Referencias
+
+- Chakra UI Stack: https://chakra-ui.com/docs/components/stack
+- Mantine Stack: https://mantine.dev/core/stack/
+- Radix Themes: usa `` sin Stack dedicado.
+
+## Passive justification
+
+Visual-only (`scope: ['eidos']`). Sin estado, sin keyboard, sin ARIA,
+sin eventos. Marker pasa a través de Flex/Box.
diff --git a/src/uix/eidos/components/wrap/README.md b/src/uix/eidos/components/wrap/README.md
new file mode 100644
index 000000000..0432745e5
--- /dev/null
+++ b/src/uix/eidos/components/wrap/README.md
@@ -0,0 +1,68 @@
+# Eidos Wrap
+
+Like [Group](../group/README.md) but enforces wrapping. Pensado para
+clusters de elementos de ancho variable (pills, badges, tags) donde
+la nueva línea es comportamiento explícito, no fallback. Expone
+`rowGap` / `columnGap` como first-class para separar espaciado de
+ejes en wrap dinámico.
+
+## Superficie
+
+```svelte
+
+ svelte
+ kit
+ vite
+ …
+
+```
+
+## Baseline
+
+Origen: `air/components/layout/wrap`. Adaptación estándar.
+Composición: a través de Flex con `wrap="wrap"` fijo. DOM:
+`
`.
+
+## Comparativa
+
+| Capacidad | UIX | Chakra Wrap | Mantine | Radix Themes |
+| --- | --- | --- | --- | --- |
+| `wrap` siempre activo | Sí (fijo) | Sí | Vía Group | Vía Flex |
+| `rowGap` / `columnGap` first-class | Sí | Sí (`spacingX`/`spacingY`) | Sí | Sí |
+| `align` / `justify` | Sí | Sí | Sí | Sí |
+| `shouldWrapChildren` (auto-wrap cada hijo en WrapItem) | **No** — gap conocido | Sí | — | — |
+| Componente `WrapItem` paralelo | **No** | Sí | — | — |
+
+## Decisiones
+
+- **Sin `WrapItem` companion** — los hijos son Box plain. Si necesitas
+ control individual de wrap, ponlo en el Box hijo via `flex` /
+ `basis` props.
+- **`shouldWrapChildren` no por defecto** — Chakra lo hace con un
+ `Children.map` que envuelve cada hijo. En Svelte sería un snippet
+ pattern más complejo; no añade poder real. Backlog si llega caso.
+- **Differencia con Group** — Group por defecto tiene wrap pero la
+ intención semántica es "row con fallback wrap"; Wrap es "siempre
+ wrap, optimiza para clusters dinámicos".
+
+## Eventos Sema
+
+0 eventos. Pasivo.
+
+## Gaps
+
+| Gap | Disposición | Detalle |
+| --- | --- | --- |
+| `shouldWrapChildren` (auto-wrap cada hijo) | **diferir** | Patrón Chakra. En Svelte sería más complejo; valorar si llega caso real. |
+| `WrapItem` companion para control fino | **descartar** | Box hijo ya cubre. Reduce superficie pública. |
+
+## Referencias
+
+- Chakra Wrap: https://chakra-ui.com/docs/components/wrap
+- Mantine: usa Group sin componente separado.
+- Radix Themes: Flex con `wrap="wrap"`.
+
+## Passive justification
+
+Visual-only (`scope: ['eidos']`). Marker `[data-wrap]`. Sin estados,
+sin ARIA, sin eventos.