NextPDF implementa el renderizado de CSS conforme a las especificaciones publicadas por el W3C. Esta página enumera cada módulo de CSS del corpus de especificaciones de NextPDF y registra el estado de compatibilidad auditado por veracidad de cada módulo en el pipeline de renderizado.
Esta revisión es el resultado de la auditoría de veracidad de la Wave 4 B2 (sección 4.4 del plan). Las insignias de la revisión estructural anterior eran marcadores de posición sin verificar. Cada fila se reclasificó a partir de evidencia real en disco (src/Html/, tests/, tests/Wpt/corpus/), los ADR de cambios incompatibles v8/v9 y la auditoría interna de cobertura de propiedades de CSS. Se priorizó la honestidad sobre la cobertura: cuando la auditoría exigió rebajar una insignia, se rebajó.
Cuatro insignias clasifican cada fila según el contrato de verificación:
- Verificado — implementación en
src/Html/ más un fixture automatizado, dedicado y sustancial: una suite de nivel de propiedad con tres o más archivos en tests/Unit/Html/<Module>/, o un fragmento de corpus de Web Platform Tests con cincuenta o más fixtures en tests/Wpt/corpus/. Todavía no hay una línea base de PDF de referencia conectada por módulo de CSS, por lo que las filas verificadas usan el perfil de reproducibilidad structural (equivalencia de aserciones de PHPUnit), nunca bitwise.
- Declarado — el comportamiento del módulo está implementado en
src/Html/ (se cita la ruta de origen), pero el fixture dedicado es escaso, compartido o inexistente. Cada fila declarada con una implementación concreta tiene una incidencia de relleno asociada.
- No compatible — fuera de alcance para el pipeline de renderizado de PDF estático. Incluye API exclusivas del tiempo de ejecución o del navegador, motores en tiempo de ejecución para scrolling/animation y trabajo descontinuado por el W3C. El motivo queda registrado.
- Desconocido — el módulo está en el corpus, pero no se pudo determinar evidencia de implementación ni de fixture. La auditoría nunca infirió al alza para mejorar el recuento.
La insignia partial de la revisión estructural se retiró: cada fila marcada anteriormente como partial se reclasificó como claimed (implementación presente, sin fixture dedicado) o verified.
| Insignia | Significado |
|---|
verified | src/Html/ + suite de fixtures dedicada (≥3 archivos) o fragmento de WPT (≥50 fixtures); pasa de forma determinista bajo el perfil structural. |
claimed | Evidencia de implementación en src/Html/, sin fixture dedicado. Incidencia de relleno con seguimiento. |
not-supported | Excluido explícitamente del alcance del PDF estático. Motivo registrado. |
unknown | Sin evidencia determinable. No se infirió al alza. |
La columna Confianza es una señal honesta y no binaria de qué tan sólida es la evidencia para la insignia indicada (high / medium / low), independiente de la insignia en sí.
NextPDF es compatible con los módulos de CSS que se enumeran a continuación en los niveles indicados. Las filas marcadas como Verificado cuentan con una suite de fixtures automatizada dedicada o con un fragmento de corpus de WPT sustancial que valida el comportamiento de NextPDF, y pasan de forma determinista bajo el perfil de reproducibilidad structural. Las filas marcadas como Declarado tienen evidencia de implementación en src/Html/, pero todavía no tienen fixture dedicado; cada una recibe seguimiento mediante una incidencia de relleno en la incidencia de seguimiento #614. Las filas marcadas como No compatible documentan límites de alcance explícitos para el destino de PDF estático.
No hay una línea base de PDF de referencia por módulo de CSS en esta revisión; ninguna fila declara reproducibilidad a nivel de byte. Las filas vacías están prohibidas por el contrato de verificación: cuando no se puede determinar la compatibilidad, la fila es unknown.
| Estado | Módulos | Confianza (alto / medio / bajo) |
|---|
| Verificado | 12 | 8 / 4 / 0 |
| Declarado | 49 | 0 / 35 / 14 |
| No compatible | 67 | 62 / 5 / 0 |
| Desconocido | 39 | 0 / 0 / 39 |
| Total | 167 | 70 / 44 / 53 |
El bloque summary de la revisión estructural presentaba inconsistencias internas: declaraba 148 en total (18 verified / 11 partial / 11 claimed / 53 not-supported / 55 unknown), pero el archivo en realidad contenía 167 filas de módulos cuyas propias etiquetas sumaban 34 verified / 13 partial / 13 claimed / 68 not-supported / 39 unknown. Esta auditoría corrigió el total al valor real de 167 y reclasificó cada fila frente a la evidencia en disco: la categoría Verificado pasó de 34 declarados a 12 fundamentados. Esa reducción es el resultado correcto de una auditoría honesta, no una regresión. El delta completo before/after está en el archivo complementario _css-matrix-truth-report.md del repositorio.
La revisión estructural etiquetó incorrectamente tres capacidades activas como eliminadas o no compatibles. El ADR-027 y el ADR-028 eliminaron del enum ExperimentalFeature únicamente los marcadores de adhesión; las capacidades en sí siguen ACTIVAS de forma predeterminada:
- Subgrid (
css_grid_2) — ACTIVO; CssFeatureFlags::$layoutSubgrid activado de forma predeterminada. Se había etiquetado incorrectamente como «subgrid eliminado a la fuerza en v9.0.0».
- Consultas
@container (css_contain_2) — el despacho en tiempo de ejecución queda explícitamente sin cambios por el ADR-028; se preserva la exclusión por marca. Se había etiquetado incorrectamente como «eliminado a la fuerza en v9.0.0».
writing-mode: vertical-lr (css_writing_modes_3) — estable y activo de forma predeterminada desde v7.0.0; el ADR-027 solo graduó el protocolo de obsolescencia. Se había etiquetado incorrectamente como «obsoleto/eliminado en v8.0.0».
El conjunto legible por máquina de filas por módulo reside en el archivo css-support-matrix-data.yaml del repositorio y es la fuente de verdad. Esta página es la proyección legible para humanos, agrupada por categoría. Los componentes de Astro consumen el YAML directamente durante la compilación de la documentación.
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Flexible Box Layout (css_flexbox_1) | 1 | CR | Verificado | alto |
CSS Grid Layout (css_grid_1) | 1 | REC | Verificado | alto |
CSS Grid Layout — Subgrid (css_grid_2) | 2 | CR | Declarado | medio |
CSS Grid Layout — Masonry (css_grid_3) | 3 | ED | No compatible | alto |
CSS Display (css_display_3) | 3 | CR | Declarado | medio |
CSS Display (css_display_4) | 4 | ED | Desconocido | bajo |
CSS Positioned Layout (css_position_3) | 3 | WD | Verificado | alto |
CSS Positioned Layout (css_position_4) | 4 | ED | Desconocido | bajo |
CSS Box Alignment (css_align_3) | 3 | WD | Declarado | medio |
CSS Box Sizing (css_sizing_3) | 3 | CR | Declarado | bajo |
CSS Box Sizing (css_sizing_4) | 4 | ED | Desconocido | bajo |
CSS Box Model (css_box_3) | 3 | WD | Declarado | medio |
CSS Box Model (css_box_4) | 4 | ED | Desconocido | bajo |
CSS Multi-column Layout (css_multicol_1) | 1 | CR | Declarado | medio |
CSS Multi-column Layout (css_multicol_2) | 2 | ED | Desconocido | bajo |
CSS Fragmentation (css_break_3) | 3 | CR | Verificado | medio |
CSS Fragmentation (css_break_4) | 4 | ED | Desconocido | bajo |
CSS Containment (css_contain_1) | 1 | REC | No compatible | medio |
CSS Containment — @container (css_contain_2) | 2 | CR | Declarado | bajo |
CSS Containment (css_contain_3) | 3 | ED | No compatible | medio |
CSS Inline Layout (css_inline_3) | 3 | WD | Declarado | medio |
CSS Logical Properties (css_logical_1) | 1 | WD | Declarado | medio |
CSS Page Floats (css_page_floats_3) | 3 | ED | No compatible | alto |
CSS Pagination Templates (css_page_templates_3) | 3 | ED | No compatible | alto |
CSS Exclusions (css_exclusions_1) | 1 | WD | No compatible | alto |
CSS Regions (css_regions_1) | 1 | WD | No compatible | alto |
CSS Template Layout (css_template_1) | 1 | NOTE | No compatible | alto |
CSS Layout API (css_layout_api_1) | 1 | WD | No compatible | alto |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Backgrounds and Borders (css_backgrounds_3) | 3 | CR | Declarado | medio |
CSS Backgrounds (css_backgrounds_4) | 4 | ED | Desconocido | bajo |
CSS Borders and Box Decorations (css_borders_4) | 4 | ED | Desconocido | bajo |
CSS Gap Decorations (css_gaps_1) | 1 | ED | Desconocido | bajo |
CSS Masking (css_masking_1) | 1 | CR | No compatible | medio |
CSS Shadow Module (css_shadow_1) | 1 | ED | Declarado | medio |
CSS Shapes (css_shapes_1) | 1 | CR | No compatible | alto |
CSS Shapes (css_shapes_2) | 2 | ED | No compatible | alto |
Filter Effects (filter_effects_1) | 1 | WD | No compatible | alto |
Filter Effects (filter_effects_2) | 2 | ED | No compatible | alto |
Compositing and Blending (compositing_1) | 1 | CR | Declarado | medio |
Compositing (compositing_2) | 2 | ED | Desconocido | bajo |
CSS Fill and Stroke (fill_stroke_3) | 3 | ED | Desconocido | bajo |
Geometry Interfaces (geometry_1) | 1 | CR | No compatible | alto |
DOMMatrix (matrix) | 1 | NOTE | No compatible | alto |
Motion Path (motion_1) | 1 | WD | No compatible | alto |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Fonts (css_fonts_3) | 3 | REC | Verificado | medio |
CSS Fonts (css_fonts_4) | 4 | CR | Verificado | alto |
CSS Fonts (css_fonts_5) | 5 | ED | Desconocido | bajo |
CSS Font Loading (css_font_loading_3) | 3 | WD | No compatible | alto |
CSS Text (css_text_3) | 3 | CR | Declarado | medio |
CSS Text (css_text_4) | 4 | ED | Declarado | medio |
CSS Text Decoration (css_text_decor_3) | 3 | CR | Declarado | medio |
CSS Text Decoration (css_text_decor_4) | 4 | ED | Desconocido | bajo |
CSS Ruby (css_ruby_1) | 1 | WD | No compatible | alto |
CSS Writing Modes (css_writing_modes_3) | 3 | REC | Declarado | medio |
CSS Writing Modes (css_writing_modes_4) | 4 | ED | Desconocido | bajo |
CSS Speech (css_speech_1) | 1 | CR | No compatible | alto |
CSS Mobile Text Size Adjustment (css_size_adjust_1) | 1 | ED | No compatible | alto |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Color (css_color_3) | 3 | REC | Declarado | medio |
CSS Color (css_color_4) | 4 | CR | Declarado | medio |
CSS Color (css_color_5) | 5 | WD | Desconocido | bajo |
CSS Color (css_color_6) | 6 | ED | Desconocido | bajo |
CSS Color Adjustment (css_color_adjust_1) | 1 | CR | No compatible | alto |
CSS Color HDR (css_color_hdr_1) | 1 | ED | No compatible | alto |
CSS Images (css_images_3) | 3 | CR | Declarado | medio |
CSS Images (css_images_4) | 4 | ED | Desconocido | bajo |
CSS Images (css_images_5) | 5 | ED | Desconocido | bajo |
CSS Image Animation (css_image_animation_1) | 1 | ED | No compatible | alto |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Selectors (selectors_3) | 3 | REC | Declarado | medio |
CSS Selectors (selectors_4) | 4 | WD | Declarado | medio |
CSS Selectors (selectors_5) | 5 | ED | Desconocido | bajo |
CSS Non-element Selectors (selectors_nonelement_1) | 1 | WD | No compatible | alto |
CSS Pseudo-Elements (css_pseudo_4) | 4 | WD | Declarado | medio |
CSS Cascading and Inheritance (css_cascade_3) | 3 | REC | Verificado | alto |
CSS Cascading (css_cascade_4) | 4 | CR | Verificado | alto |
CSS Cascading (css_cascade_5) | 5 | CR | Verificado | alto |
CSS Cascading (css_cascade_6) | 6 | WD | Desconocido | bajo |
CSS Values and Units (css_values_3) | 3 | REC | Declarado | medio |
CSS Values and Units (css_values_4) | 4 | CR | Declarado | medio |
CSS Values and Units (css_values_5) | 5 | ED | Desconocido | bajo |
CSS Custom Properties (css_variables_1) | 1 | CR | Declarado | medio |
CSS Custom Properties (css_variables_2) | 2 | ED | Desconocido | bajo |
CSS Conditional Rules (css_conditional_3) | 3 | CR | Declarado | medio |
CSS Conditional Rules (css_conditional_4) | 4 | ED | Desconocido | bajo |
CSS Conditional Rules (css_conditional_5) | 5 | ED | Desconocido | bajo |
CSS Conditional Values (css_conditional_values_1) | 1 | ED | Desconocido | bajo |
CSS Namespaces (css_namespaces_3) | 3 | REC | Declarado | bajo |
CSS Style Attributes (css_style_attr_1) | 1 | CR | Declarado | medio |
CSS Syntax (css_syntax_3) | 3 | CR | Declarado | medio |
CSS Nesting (css_nesting_1) | 1 | CR | Declarado | medio |
CSS Environment Variables (css_env_1) | 1 | ED | No compatible | medio |
CSS Custom Functions and Mixins (css_mixins_1) | 1 | ED | Desconocido | bajo |
CSS Extensions (css_extensions_1) | 1 | NOTE | Desconocido | bajo |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Lists and Counters (css_lists_3) | 3 | WD | Declarado | medio |
CSS Counter Styles (css_counter_styles_3) | 3 | CR | Declarado | medio |
CSS Generated Content (css_content_3) | 3 | WD | Declarado | medio |
CSS Generated Content for Paged Media (css_gcpm_3) | 3 | WD | Declarado | medio |
CSS Generated Content for Paged Media (css_gcpm_4) | 4 | ED | Desconocido | bajo |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Paged Media (css_page_3) | 3 | WD | Declarado | medio |
CSS Paged Media (css_page_4) | 4 | NOTE | Desconocido | bajo |
CSS Print Profile (css_print) | 1 | NOTE | Declarado | bajo |
CSS Presentation Levels (css_preslev_1) | 1 | NOTE | No compatible | alto |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Overflow (css_overflow_3) | 3 | WD | Declarado | bajo |
CSS Overflow (css_overflow_4) | 4 | ED | Desconocido | bajo |
CSS Overflow (css_overflow_5) | 5 | ED | Desconocido | bajo |
CSS Overscroll Behavior (css_overscroll_1) | 1 | CR | No compatible | alto |
CSS Scroll Anchoring (css_scroll_anchoring_1) | 1 | WD | No compatible | alto |
CSS Scroll Snap (css_scroll_snap_1) | 1 | REC | No compatible | alto |
CSS Scroll Snap (css_scroll_snap_2) | 2 | WD | No compatible | alto |
CSS Scrollbars Styling (css_scrollbars_1) | 1 | CR | No compatible | alto |
CSS Basic User Interface (css_ui_3) | 3 | REC | No compatible | medio |
CSS Basic User Interface (css_ui_4) | 4 | WD | No compatible | alto |
CSS Form Control Styling (css_forms_1) | 1 | ED | No compatible | alto |
CSS View Transitions (css_view_transitions_1) | 1 | WD | No compatible | alto |
CSS View Transitions (css_view_transitions_2) | 2 | ED | No compatible | alto |
CSS Spatial Navigation (css_nav_1) | 1 | NOTE | No compatible | alto |
CSS Route Matching (css_navigation_1) | 1 | ED | No compatible | alto |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Table (css_tables_3) | 3 | WD | Verificado | alto |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Transforms (css_transforms_1) | 1 | CR | Declarado | medio |
CSS Transforms (css_transforms_2) | 2 | ED | Desconocido | bajo |
CSS Animations (css_animations_1) | 1 | WD | No compatible | alto |
CSS Animations (css_animations_2) | 2 | ED | No compatible | alto |
CSS Transitions (css_transitions_1) | 1 | WD | No compatible | alto |
CSS Transitions (css_transitions_2) | 2 | ED | No compatible | alto |
CSS Easing Functions (css_easing_1) | 1 | CR | No compatible | alto |
CSS Easing Functions (css_easing_2) | 2 | ED | No compatible | alto |
Web Animations (web_animations_1) | 1 | WD | No compatible | alto |
Web Animations (web_animations_2) | 2 | ED | No compatible | alto |
Web Animations CSS Integration (web_animations_css_integration) | 1 | ED | No compatible | alto |
Animation Triggers (animation_triggers) | 1 | ED | No compatible | alto |
Pointer-driven Animations (pointer_animations_1) | 1 | ED | No compatible | alto |
Scroll-driven Animations (scroll_animations_1) | 1 | ED | No compatible | alto |
CSS Animation Worklet (css_animation_worklet) | 1 | ED | No compatible | alto |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Anchor Positioning (css_anchor_position_1) | 1 | WD | Desconocido | bajo |
CSS Anchor Positioning (css_anchor_position_2) | 2 | ED | Desconocido | bajo |
CSS Highlight API (css_highlight_api_1) | 1 | WD | No compatible | alto |
CSS Properties and Values API (css_properties_values_api_1) | 1 | CR | No compatible | alto |
CSS Painting API (css_paint_api_1) | 1 | WD | No compatible | alto |
CSS Typed OM (css_typed_om_1) | 1 | WD | No compatible | alto |
CSSOM (cssom_1) | 1 | WD | No compatible | alto |
CSSOM View (cssom_view_1) | 1 | WD | No compatible | alto |
CSS Will Change (css_will_change_1) | 1 | CR | No compatible | alto |
CSS Linked Parameters (css_link_params_1) | 1 | ED | Desconocido | bajo |
CSS Line Grid (css_line_grid_1) | 1 | NOTE | Desconocido | bajo |
CSS Rhythmic Sizing (css_rhythm_1) | 1 | ED | Desconocido | bajo |
CSS Round Display (css_round_display_1) | 1 | ED | No compatible | alto |
CSS Shaders (css_shaders_1) | 1 | NOTE | No compatible | alto |
CSS Viewport (css_viewport_1) | 1 | NOTE | No compatible | alto |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
Media Queries (mediaqueries_3) | 3 | REC | Declarado | medio |
Media Queries (mediaqueries_4) | 4 | CR | Declarado | medio |
Media Queries (mediaqueries_5) | 5 | WD | Desconocido | bajo |
| Módulo W3C | Nivel | W3C | Estado | Confianza |
|---|
CSS Level 2 (css_2_1) | 2.1 | REC | Declarado | bajo |
CSS Level 2.2 (css_2_2) | 2.2 | NOTE | Declarado | bajo |
CSS Snapshot 2026 (css_snapshot_2026) | snapshot | NOTE | Declarado | bajo |
Estos módulos del W3C aparecen en el corpus, pero quedan fuera del alcance del pipeline de renderizado de CSS. Se enlazan desde las páginas de funcionalidad correspondientes cuando procede.
| Módulo W3C | W3C | Estado | Confianza | Dónde |
|---|
W3C SVG 1.1 (svg_1_1) | REC | Declarado | bajo | Subconjunto de pintado de SVG en línea en Renderer/PaintCommand/; sin fixture de la matriz de CSS. |
W3C SVG 2.0 (svg_2_0) | CR | Desconocido | bajo | Pertenece al pipeline de Premium; sin evidencia en Core. |
W3C PNG 3rd Edition (png_3) | WD | Declarado | bajo | Decodificación de PNG en el módulo Graphics/ (fuera de HTML/CSS). |
W3C WOFF 1.0 (woff_1_0) | REC | Declarado | bajo | WOFF mediante la pila de fuentes; sin fixture de la matriz de CSS. |
W3C WOFF 2.0 (woff_2_0) | REC | Declarado | bajo | WOFF2 mediante la pila de fuentes; sin fixture de la matriz de CSS. |
W3C WCAG 2.2 (wcag_2_2) | REC | Verificado | medio | src/Html/Aam/, tests/Unit/Accessibility/HtmlAam/ (4 archivos) — PDF/UA-2. |
W3C WAI-ARIA 1.2 (wai_aria_1_2) | REC | Verificado | medio | tests/Unit/Accessibility/HtmlAam/ (4 archivos). |
W3C ARIA Bundle (w3c_aria_bundle) | REC | Declarado | bajo | Paquete de orientación; la evidencia concreta es la fila de WAI-ARIA. |
W3C AAM Bundle (w3c_aam_bundle) | NOTE | Declarado | bajo | Puntero al paquete; la evidencia son las filas de WAI-ARIA/WCAG. |
W3C ATAG 2.0 (atag_2_0) | REC | No compatible | alto | Accesibilidad de la herramienta de autoría; no aplicable. |
W3C XSL 1.1 (xsl_1_1) | REC | No compatible | alto | Modelo de formato paralelo XSL-FO; no implementado. |
W3C XSD 1.1 Part 1 (xsd_1_1_part1) | REC | No compatible | alto | Esquema XML; no aplicable. |
W3C XSLT 3.0 (xslt_3_0) | REC | No compatible | alto | Lenguaje de transformación; no aplicable. |
Resize Observer (resize_observer_1) | CR | No compatible | alto | API de tiempo de ejecución del navegador. |
Para que una fila ascienda de claimed a verified:
- Una suite de fixtures dedicada a nivel de propiedad reside en
tests/Unit/Html/<Module>/ (≥3 archivos) o se promueve un fragmento de corpus de WPT sustancial (≥50 fixtures) en tests/Wpt/corpus/ a una prueba con aserciones.
- El fixture valida el comportamiento de NextPDF frente a la gramática del W3C para las propiedades principales del módulo.
- El fixture pasa de forma determinista bajo un
NextPDF\Testing\ReproducibilityProfile (structural para los fixtures de aserciones; bitwise solo una vez que existan líneas base de PDF de referencia por módulo).
- El
nextpdf_status de la fila en el archivo css-support-matrix-data.yaml del repositorio cambia a verified con fixture_path, repro_profile y confidence actualizados.
Para que una fila ascienda de unknown a claimed:
- Una auditoría confirma evidencia de implementación en
src/Html/ (con la ruta citada en evidence + notes).
- Se abre una incidencia de relleno y se enlaza en
backfill_issue.
- HTML: subsistema de renderizado de HTML+CSS a PDF — el motor que hay detrás de estas capacidades, incluidas las notas de comportamiento de tablas, flex, degradados y paginación.
- Funcionalidades CSS no compatibles y soluciones alternativas — los límites concretos por comportamiento.
- Representar HTML en árabe de derecha a izquierda — la compatibilidad con la escritura de derecha a izquierda y bidireccional y sus límites actuales.
- Paginar una tabla HTML extensa en varias páginas — paginación de tablas entre páginas.
- Informe de veracidad de la matriz de CSS (
_css-matrix-truth-report.md, en el repositorio) — deltas de auditoría before/after, distribución de confianza, registro de desinflado.
- Auditoría de cobertura de propiedades de CSS (
architecture/css-property-coverage-audit.md, en el repositorio) — auditoría interna de cuatro estados por propiedad (Policy/Parsed/Applied/Rendered).
- ADR-027 v8.0.0 BREAKING (
architecture/adr/ADR-027-v8-breaking.md, en el repositorio) — graduación del protocolo de obsolescencia de vertical-lr (capacidad preservada).
- ADR-028 v9.0.0 BREAKING (
architecture/adr/ADR-028-v9-breaking.md, en el repositorio) — eliminación del marcador del enum Grid/Subgrid/@container (capacidades preservadas).
- Incidencia de seguimiento del relleno: https://github.com/nextpdf-labs/nextpdf/issues/614