Arquitectura CSS
FDS está construido sobre cascade layers (@layer) de CSS nativo. El orden de capas determina qué reglas ganan, y dentro de cada capa los archivos se cargan en una secuencia concreta desde main.css.
Orden de capas
main.css declara el orden global:
@layer theme, base, layouts, components, utilities, custom;
De menor a mayor especificidad efectiva: theme aporta tokens, base resetea y aplica defaults a elementos HTML, layouts resuelve estructura, components aporta clases reutilizables, utilities son las atómicas de Tailwind y custom es el escape hatch del proyecto.
Una utility de Tailwind (text-xl) siempre gana sobre un default de base porque está en una capa posterior. Por eso puedes sobrescribir tipografía base con clases sin pelear especificidad.
base/base.css
Resets globales y comportamiento de elementos HTML básicos. Vive en el layer base.
Contiene:
html:overflow-x: hiddenyfont-size: 100%.body: aplica--font-body,--text-base,--ft-color-background,--ft-color-text,scroll-behavior: smoothymin-height: 100vh.*,*::before,*::after:box-sizing: border-box,border-width: 0,border-color: var(--color-neutral-300). Esto sustituye al border-reset de Tailwind con un color por defecto neutro.img,svg,video:display: block; max-width: 100%; height: auto.figure > img:object-fit: coverocupando elfigure.- Utilidad
.skip-linkpara accesibilidad (oculta hasta recibir:focus). - Resets de
abbr[title],fieldsetylegend.
No define tipografía: solo elementos de chasis y multimedia. Toda la tipografía base vive en el archivo siguiente.
base/typography.css
Aplica tipografía por defecto a h1–h6, a y, sobre todo, define .prose: el contenedor que da formato editorial a contenido HTML semántico (artículos, contenido de WordPress, Markdown renderizado).
Estructura del archivo:
Override fuera de layer. La primera regla vive fuera de
@layer base:a:where(:not(.wp-element-button)) { text-decoration: none; }Esto sirve para ganar la cascada contra reglas no encapsuladas en layers (típicamente las que inyecta Gutenberg en WordPress). Las reglas sin layer ganan a las que sí lo tienen, así que para neutralizar el
text-decoration: underlinede Gutenberg hay que jugar también fuera de layer.Defaults dentro de
@layer baseparah1–h6(escala fluida confont-display,font-bold,tracking-tight,text-balance) ya(no-underline).Bloque
.prosecon reglas anidadas para tipografía editorial: tamaños de heading dentro del contenedor, espaciado entre párrafos y headings, listas, tablas, blockquotes, primer/último hijo sin margen, etc.Aquí es donde están realmente definidos los estilos
prosede FDS. La página Prose (Typography) documenta el uso; este archivo es la fuente.
components/typography.css
Diferente a base/typography.css. Vive en el layer components (carga después de base) y aporta clases de componente con intención visual, independientes del elemento HTML:
.display,.display-lg,.display-md,.display-sm,.display-single.heading-lg,.heading,.heading-md,.heading-sm.subheading-lg,.subheading,.subheading-sm.text-large,.text-medium,.text-small
Documentadas en Tipografía. Estas clases ganan sobre los defaults de base/typography.css porque viven en una capa posterior — por eso puedes hacer <h2 class="display"> y la h2 adoptará los estilos del display sin necesidad de !important.
Cómo se cargan
Desde main.css:
@layer theme, base, layouts, components, utilities, custom;
@import "tailwindcss/theme.css" layer(theme);
@import "tailwindcss/preflight.css" layer(base);
@import "tailwindcss/utilities.css" layer(utilities);
@import './theme/flowtitude.css';
@import './base/base.css';
@import './base/typography.css';
@import './layouts/section.css';
@import './layouts/content-flex.css';
@import './components/components.css';
@import './components/typography.css';
@import './components/buttons.css';
@import './components/cards.css';
@import './components/custom.css';
Importar fds/main.css desde el entry del proyecto trae todo en el orden correcto. No hay que importar archivos sueltos salvo casos avanzados.
Cómo sobrescribir
Tres niveles, de menos a más invasivo:
- Cambiar tokens en
@themedel proyecto: afecta a todos los componentes que los referencian. Es la opción correcta el 90 % de las veces. - Aplicar utilities de Tailwind sobre el HTML: ganan a
base/typography.cssycomponents/typography.csspor orden de capa. - Sobrescribir reglas en el layer
customdel proyecto: declarado al final del orden de capas, gana a todo lo demás. Reservado para casos donde tokens y utilities no llegan.
@layer custom {
.prose h2 {
/* override puntual sin tocar el sistema */
@apply text-primary-700;
}
}
No edites los archivos de FDS
Editar base/base.css o base/typography.css directamente rompe las actualizaciones del sistema. Usa @theme para tokens y el layer custom para overrides puntuales.
Referencias
- Prose (Typography) — uso del contenedor
.prosedefinido aquí. - Tipografía — clases de componente del layer
components. - Colores — tokens semánticos referenciados desde
body.