O NextPDF implementa a renderização de Cascading Style Sheets (CSS) com base em especificações publicadas pelo World Wide Web Consortium (W3C). Use esta página para consultar cada módulo CSS do corpus de especificações do NextPDF e o status de suporte auditado quanto à veracidade desse módulo no pipeline de renderização.
Esta revisão vem da auditoria de veracidade da Wave 4 B2 (seção 4.4 do plano). A revisão estrutural anterior usava selos provisórios não verificados. A auditoria reclassificou cada linha com base em evidências reais em disco (src/Html/, tests/, tests/Wpt/corpus/), nos registros de decisão de arquitetura (ADRs) com mudanças incompatíveis v8/v9 e na auditoria interna de cobertura de propriedades CSS. A auditoria priorizou a honestidade em vez da cobertura: quando as evidências apontavam para um selo inferior, o selo era rebaixado.
Quatro selos classificam cada linha sob o contrato de verificação:
- Verified — Implementação em
src/Html/ mais uma fixture automatizada dedicada e substantiva: ou um conjunto de três ou mais arquivos no nível de propriedade em tests/Unit/Html/<Module>/, ou um shard do corpus de Web Platform Tests (WPT) com cinquenta ou mais fixtures em tests/Wpt/corpus/. Ainda não há nenhuma baseline de PDF (Portable Document Format) de referência por módulo CSS conectada; portanto, as linhas verificadas usam o perfil de reprodutibilidade structural (equivalência de asserções do PHPUnit), nunca bitwise.
- Claimed — O comportamento do módulo está implementado em
src/Html/ (caminho de origem citado), mas a fixture dedicada é tênue, compartilhada ou inexistente. Cada linha reivindicada com uma implementação concreta tem uma issue de backfill.
- Not supported — O pipeline de renderização de PDF estático não inclui este módulo: APIs runtime/browser-only, runtimes de scrolling/animation e trabalhos descontinuados pelo W3C. A linha registra o motivo.
- Unknown — O módulo está no corpus, mas a auditoria não encontrou evidência de implementação nem de fixture. A auditoria nunca elevou um palpite para melhorar a contagem.
O selo partial da revisão estrutural foi aposentado: cada linha antes parcial foi reclassificada como claimed (implementação presente, sem fixture dedicada) ou verified.
| Selo | Significado |
|---|
verified | src/Html/ + conjunto de fixtures dedicado (≥3 arquivos) ou shard WPT (≥50 fixtures); passa de forma determinística sob o perfil structural. |
claimed | Evidência de implementação em src/Html/, sem fixture dedicada. Issue de backfill rastreada. |
not-supported | Explicitamente excluído do escopo de PDF estático. Motivo registrado. |
unknown | Sem evidência determinável. Sem promoção por palpite. |
A coluna Confidence é um indicador honesto e não binário da evidência por trás do selo declarado (high / medium / low). Ela é independente do próprio selo.
O NextPDF oferece suporte aos módulos CSS listados abaixo nos níveis indicados. As linhas Verified têm um conjunto de fixtures automatizado dedicado ou um shard substantivo do corpus WPT que verifica o comportamento do NextPDF e passa de forma determinística sob o perfil de reprodutibilidade structural. As linhas Claimed têm evidência de implementação em src/Html/, mas ainda não têm fixture dedicada; cada linha é rastreada por uma issue de backfill na issue de rastreamento #614. As linhas Not supported documentam limites de escopo explícitos para o alvo de PDF estático.
Nenhuma linha reivindica reprodutibilidade em nível de byte porque esta revisão não tem baseline PDF de referência por módulo CSS. O contrato de verificação proíbe linhas vazias: quando o suporte não pode ser determinado, a linha é unknown.
| Status | Módulos | Confiança (high / medium / low) |
|---|
| Verified | 12 | 8 / 4 / 0 |
| Claimed | 49 | 0 / 35 / 14 |
| Not supported | 67 | 62 / 5 / 0 |
| Unknown | 39 | 0 / 0 / 39 |
| Total | 167 | 70 / 44 / 53 |
O bloco summary da revisão estrutural era internamente inconsistente: declarava 148 no total (18 verified / 11 partial / 11 claimed / 53 not-supported / 55 unknown), enquanto o arquivo continha 167 linhas de módulo cujos rótulos somavam 34 verified / 13 partial / 13 claimed / 68 not-supported / 39 unknown. Esta auditoria corrigiu o total para os 167 reais e reclassificou cada linha com base em evidências em disco: o número de Verified caiu de 34 reivindicados para 12 comprovados. Essa redução é o resultado correto de uma auditoria honesta, não uma regressão. O delta completo before/after está no arquivo auxiliar _css-matrix-truth-report.md no repositório.
A revisão estrutural rotulou incorretamente três capacidades ativas como removidas ou não suportadas. O ADR-027 e o ADR-028 removeram do enum ExperimentalFeature apenas os marcadores de opt-in; as capacidades permanecem ATIVAS por padrão:
- Subgrid (
css_grid_2) — ATIVO; CssFeatureFlags::$layoutSubgrid ligado por padrão. Foi rotulado incorretamente como “subgrid hard-removed v9.0.0”.
- Consultas
@container (css_contain_2) — despacho em tempo de execução explicitamente mantido pelo ADR-028; opt-out via flag preservado. Foi rotulado incorretamente como “hard-removed v9.0.0”.
writing-mode: vertical-lr (css_writing_modes_3) — Stable por padrão desde a v7.0.0; o ADR-027 graduou apenas o handshake de descontinuação. Foi rotulado incorretamente como “deprecated/removed v8.0.0”.
O conjunto de linhas por módulo, legível por máquina, fica no arquivo css-support-matrix-data.yaml no repositório, que é a fonte da verdade. Esta página é a projeção legível por pessoas, agrupada por categoria. Os componentes Astro consomem os dados YAML diretamente durante o build da documentação.
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Flexible Box Layout (css_flexbox_1) | 1 | CR | Verified | high |
CSS Grid Layout (css_grid_1) | 1 | REC | Verified | high |
CSS Grid Layout — Subgrid (css_grid_2) | 2 | CR | Claimed | medium |
CSS Grid Layout — Masonry (css_grid_3) | 3 | ED | Not supported | high |
CSS Display (css_display_3) | 3 | CR | Claimed | medium |
CSS Display (css_display_4) | 4 | ED | Unknown | low |
CSS Positioned Layout (css_position_3) | 3 | WD | Verified | high |
CSS Positioned Layout (css_position_4) | 4 | ED | Unknown | low |
CSS Box Alignment (css_align_3) | 3 | WD | Claimed | medium |
CSS Box Sizing (css_sizing_3) | 3 | CR | Claimed | low |
CSS Box Sizing (css_sizing_4) | 4 | ED | Unknown | low |
CSS Box Model (css_box_3) | 3 | WD | Claimed | medium |
CSS Box Model (css_box_4) | 4 | ED | Unknown | low |
CSS Multi-column Layout (css_multicol_1) | 1 | CR | Claimed | medium |
CSS Multi-column Layout (css_multicol_2) | 2 | ED | Unknown | low |
CSS Fragmentation (css_break_3) | 3 | CR | Verified | medium |
CSS Fragmentation (css_break_4) | 4 | ED | Unknown | low |
CSS Containment (css_contain_1) | 1 | REC | Not supported | medium |
CSS Containment — @container (css_contain_2) | 2 | CR | Claimed | low |
CSS Containment (css_contain_3) | 3 | ED | Not supported | medium |
CSS Inline Layout (css_inline_3) | 3 | WD | Claimed | medium |
CSS Logical Properties (css_logical_1) | 1 | WD | Claimed | medium |
CSS Page Floats (css_page_floats_3) | 3 | ED | Not supported | high |
CSS Pagination Templates (css_page_templates_3) | 3 | ED | Not supported | high |
CSS Exclusions (css_exclusions_1) | 1 | WD | Not supported | high |
CSS Regions (css_regions_1) | 1 | WD | Not supported | high |
CSS Template Layout (css_template_1) | 1 | NOTE | Not supported | high |
CSS Layout API (css_layout_api_1) | 1 | WD | Not supported | high |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Backgrounds and Borders (css_backgrounds_3) | 3 | CR | Claimed | medium |
CSS Backgrounds (css_backgrounds_4) | 4 | ED | Unknown | low |
CSS Borders and Box Decorations (css_borders_4) | 4 | ED | Unknown | low |
CSS Gap Decorations (css_gaps_1) | 1 | ED | Unknown | low |
CSS Masking (css_masking_1) | 1 | CR | Not supported | medium |
CSS Shadow Module (css_shadow_1) | 1 | ED | Claimed | medium |
CSS Shapes (css_shapes_1) | 1 | CR | Not supported | high |
CSS Shapes (css_shapes_2) | 2 | ED | Not supported | high |
Filter Effects (filter_effects_1) | 1 | WD | Not supported | high |
Filter Effects (filter_effects_2) | 2 | ED | Not supported | high |
Compositing and Blending (compositing_1) | 1 | CR | Claimed | medium |
Compositing (compositing_2) | 2 | ED | Unknown | low |
CSS Fill and Stroke (fill_stroke_3) | 3 | ED | Unknown | low |
Geometry Interfaces (geometry_1) | 1 | CR | Not supported | high |
DOMMatrix (matrix) | 1 | NOTE | Not supported | high |
Motion Path (motion_1) | 1 | WD | Not supported | high |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Fonts (css_fonts_3) | 3 | REC | Verified | medium |
CSS Fonts (css_fonts_4) | 4 | CR | Verified | high |
CSS Fonts (css_fonts_5) | 5 | ED | Unknown | low |
CSS Font Loading (css_font_loading_3) | 3 | WD | Not supported | high |
CSS Text (css_text_3) | 3 | CR | Claimed | medium |
CSS Text (css_text_4) | 4 | ED | Claimed | medium |
CSS Text Decoration (css_text_decor_3) | 3 | CR | Claimed | medium |
CSS Text Decoration (css_text_decor_4) | 4 | ED | Unknown | low |
CSS Ruby (css_ruby_1) | 1 | WD | Not supported | high |
CSS Writing Modes (css_writing_modes_3) | 3 | REC | Claimed | medium |
CSS Writing Modes (css_writing_modes_4) | 4 | ED | Unknown | low |
CSS Speech (css_speech_1) | 1 | CR | Not supported | high |
CSS Mobile Text Size Adjustment (css_size_adjust_1) | 1 | ED | Not supported | high |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Color (css_color_3) | 3 | REC | Claimed | medium |
CSS Color (css_color_4) | 4 | CR | Claimed | medium |
CSS Color (css_color_5) | 5 | WD | Unknown | low |
CSS Color (css_color_6) | 6 | ED | Unknown | low |
CSS Color Adjustment (css_color_adjust_1) | 1 | CR | Not supported | high |
CSS Color HDR (css_color_hdr_1) | 1 | ED | Not supported | high |
CSS Images (css_images_3) | 3 | CR | Claimed | medium |
CSS Images (css_images_4) | 4 | ED | Unknown | low |
CSS Images (css_images_5) | 5 | ED | Unknown | low |
CSS Image Animation (css_image_animation_1) | 1 | ED | Not supported | high |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Selectors (selectors_3) | 3 | REC | Claimed | medium |
CSS Selectors (selectors_4) | 4 | WD | Claimed | medium |
CSS Selectors (selectors_5) | 5 | ED | Unknown | low |
CSS Non-element Selectors (selectors_nonelement_1) | 1 | WD | Not supported | high |
CSS Pseudo-Elements (css_pseudo_4) | 4 | WD | Claimed | medium |
CSS Cascading and Inheritance (css_cascade_3) | 3 | REC | Verified | high |
CSS Cascading (css_cascade_4) | 4 | CR | Verified | high |
CSS Cascading (css_cascade_5) | 5 | CR | Verified | high |
CSS Cascading (css_cascade_6) | 6 | WD | Unknown | low |
CSS Values and Units (css_values_3) | 3 | REC | Claimed | medium |
CSS Values and Units (css_values_4) | 4 | CR | Claimed | medium |
CSS Values and Units (css_values_5) | 5 | ED | Unknown | low |
CSS Custom Properties (css_variables_1) | 1 | CR | Claimed | medium |
CSS Custom Properties (css_variables_2) | 2 | ED | Unknown | low |
CSS Conditional Rules (css_conditional_3) | 3 | CR | Claimed | medium |
CSS Conditional Rules (css_conditional_4) | 4 | ED | Unknown | low |
CSS Conditional Rules (css_conditional_5) | 5 | ED | Unknown | low |
CSS Conditional Values (css_conditional_values_1) | 1 | ED | Unknown | low |
CSS Namespaces (css_namespaces_3) | 3 | REC | Claimed | low |
CSS Style Attributes (css_style_attr_1) | 1 | CR | Claimed | medium |
CSS Syntax (css_syntax_3) | 3 | CR | Claimed | medium |
CSS Nesting (css_nesting_1) | 1 | CR | Claimed | medium |
CSS Environment Variables (css_env_1) | 1 | ED | Not supported | medium |
CSS Custom Functions and Mixins (css_mixins_1) | 1 | ED | Unknown | low |
CSS Extensions (css_extensions_1) | 1 | NOTE | Unknown | low |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Lists and Counters (css_lists_3) | 3 | WD | Claimed | medium |
CSS Counter Styles (css_counter_styles_3) | 3 | CR | Claimed | medium |
CSS Generated Content (css_content_3) | 3 | WD | Claimed | medium |
CSS Generated Content for Paged Media (css_gcpm_3) | 3 | WD | Claimed | medium |
CSS Generated Content for Paged Media (css_gcpm_4) | 4 | ED | Unknown | low |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Paged Media (css_page_3) | 3 | WD | Claimed | medium |
CSS Paged Media (css_page_4) | 4 | NOTE | Unknown | low |
CSS Print Profile (css_print) | 1 | NOTE | Claimed | low |
CSS Presentation Levels (css_preslev_1) | 1 | NOTE | Not supported | high |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Overflow (css_overflow_3) | 3 | WD | Claimed | low |
CSS Overflow (css_overflow_4) | 4 | ED | Unknown | low |
CSS Overflow (css_overflow_5) | 5 | ED | Unknown | low |
CSS Overscroll Behavior (css_overscroll_1) | 1 | CR | Not supported | high |
CSS Scroll Anchoring (css_scroll_anchoring_1) | 1 | WD | Not supported | high |
CSS Scroll Snap (css_scroll_snap_1) | 1 | REC | Not supported | high |
CSS Scroll Snap (css_scroll_snap_2) | 2 | WD | Not supported | high |
CSS Scrollbars Styling (css_scrollbars_1) | 1 | CR | Not supported | high |
CSS Basic User Interface (css_ui_3) | 3 | REC | Not supported | medium |
CSS Basic User Interface (css_ui_4) | 4 | WD | Not supported | high |
CSS Form Control Styling (css_forms_1) | 1 | ED | Not supported | high |
CSS View Transitions (css_view_transitions_1) | 1 | WD | Not supported | high |
CSS View Transitions (css_view_transitions_2) | 2 | ED | Not supported | high |
CSS Spatial Navigation (css_nav_1) | 1 | NOTE | Not supported | high |
CSS Route Matching (css_navigation_1) | 1 | ED | Not supported | high |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Table (css_tables_3) | 3 | WD | Verified | high |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Transforms (css_transforms_1) | 1 | CR | Claimed | medium |
CSS Transforms (css_transforms_2) | 2 | ED | Unknown | low |
CSS Animations (css_animations_1) | 1 | WD | Not supported | high |
CSS Animations (css_animations_2) | 2 | ED | Not supported | high |
CSS Transitions (css_transitions_1) | 1 | WD | Not supported | high |
CSS Transitions (css_transitions_2) | 2 | ED | Not supported | high |
CSS Easing Functions (css_easing_1) | 1 | CR | Not supported | high |
CSS Easing Functions (css_easing_2) | 2 | ED | Not supported | high |
Web Animations (web_animations_1) | 1 | WD | Not supported | high |
Web Animations (web_animations_2) | 2 | ED | Not supported | high |
Web Animations CSS Integration (web_animations_css_integration) | 1 | ED | Not supported | high |
Animation Triggers (animation_triggers) | 1 | ED | Not supported | high |
Pointer-driven Animations (pointer_animations_1) | 1 | ED | Not supported | high |
Scroll-driven Animations (scroll_animations_1) | 1 | ED | Not supported | high |
CSS Animation Worklet (css_animation_worklet) | 1 | ED | Not supported | high |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Anchor Positioning (css_anchor_position_1) | 1 | WD | Unknown | low |
CSS Anchor Positioning (css_anchor_position_2) | 2 | ED | Unknown | low |
CSS Highlight API (css_highlight_api_1) | 1 | WD | Not supported | high |
CSS Properties and Values API (css_properties_values_api_1) | 1 | CR | Not supported | high |
CSS Painting API (css_paint_api_1) | 1 | WD | Not supported | high |
CSS Typed OM (css_typed_om_1) | 1 | WD | Not supported | high |
CSSOM (cssom_1) | 1 | WD | Not supported | high |
CSSOM View (cssom_view_1) | 1 | WD | Not supported | high |
CSS Will Change (css_will_change_1) | 1 | CR | Not supported | high |
CSS Linked Parameters (css_link_params_1) | 1 | ED | Unknown | low |
CSS Line Grid (css_line_grid_1) | 1 | NOTE | Unknown | low |
CSS Rhythmic Sizing (css_rhythm_1) | 1 | ED | Unknown | low |
CSS Round Display (css_round_display_1) | 1 | ED | Not supported | high |
CSS Shaders (css_shaders_1) | 1 | NOTE | Not supported | high |
CSS Viewport (css_viewport_1) | 1 | NOTE | Not supported | high |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
Media Queries (mediaqueries_3) | 3 | REC | Claimed | medium |
Media Queries (mediaqueries_4) | 4 | CR | Claimed | medium |
Media Queries (mediaqueries_5) | 5 | WD | Unknown | low |
| Módulo W3C | Nível | W3C | Status | Confiança |
|---|
CSS Level 2 (css_2_1) | 2.1 | REC | Claimed | low |
CSS Level 2.2 (css_2_2) | 2.2 | NOTE | Claimed | low |
CSS Snapshot 2026 (css_snapshot_2026) | snapshot | NOTE | Claimed | low |
Estes módulos do W3C aparecem no corpus, mas estão fora do pipeline de renderização CSS. Quando aplicável, as páginas de recurso correspondentes apontam para eles.
| Módulo W3C | W3C | Status | Confiança | Onde |
|---|
W3C SVG 1.1 (svg_1_1) | REC | Claimed | low | Subconjunto de pintura de SVG inline em Renderer/PaintCommand/; sem fixture da matriz CSS. |
W3C SVG 2.0 (svg_2_0) | CR | Unknown | low | Assunto do pipeline Premium; sem evidência no core. |
W3C PNG 3rd Edition (png_3) | WD | Claimed | low | Decodificação de PNG no módulo Graphics/ (fora de HTML/CSS). |
W3C WOFF 1.0 (woff_1_0) | REC | Claimed | low | WOFF via pilha de Font; sem fixture da matriz CSS. |
W3C WOFF 2.0 (woff_2_0) | REC | Claimed | low | WOFF2 via pilha de Font; sem fixture da matriz CSS. |
W3C WCAG 2.2 (wcag_2_2) | REC | Verified | medium | src/Html/Aam/, tests/Unit/Accessibility/HtmlAam/ (4 arquivos) — PDF/UA-2. |
W3C WAI-ARIA 1.2 (wai_aria_1_2) | REC | Verified | medium | tests/Unit/Accessibility/HtmlAam/ (4 arquivos). |
W3C ARIA Bundle (w3c_aria_bundle) | REC | Claimed | low | Pacote de orientação; a evidência concreta é a linha WAI-ARIA. |
W3C AAM Bundle (w3c_aam_bundle) | NOTE | Claimed | low | Ponteiro de pacote; a evidência são as linhas WAI-ARIA/WCAG. |
W3C ATAG 2.0 (atag_2_0) | REC | Not supported | high | Acessibilidade de ferramenta de autoria; não aplicável. |
W3C XSL 1.1 (xsl_1_1) | REC | Not supported | high | Modelo de formatação paralelo XSL-FO; não implementado. |
W3C XSD 1.1 Part 1 (xsd_1_1_part1) | REC | Not supported | high | Esquema XML; não aplicável. |
W3C XSLT 3.0 (xslt_3_0) | REC | Not supported | high | Linguagem de transformação; não aplicável. |
Resize Observer (resize_observer_1) | CR | Not supported | high | API de runtime do navegador. |
Para uma linha evoluir de claimed → verified:
- Um conjunto de fixtures dedicado no nível de propriedade reside em
tests/Unit/Html/<Module>/ (≥3 arquivos) ou um shard substantivo do corpus WPT (≥50 fixtures) em tests/Wpt/corpus/ e promovido a um teste que faz asserções.
- A fixture verifica o comportamento do NextPDF em relação à gramática do W3C para as propriedades primárias do módulo.
- A fixture passa de forma determinística sob um
NextPDF\Testing\ReproducibilityProfile (structural para fixtures de asserção; bitwise somente quando existirem baselines PDF de referência por módulo).
- O
nextpdf_status da linha no arquivo css-support-matrix-data.yaml no repositório muda para verified, com fixture_path, repro_profile e confidence atualizados.
Para uma linha evoluir de unknown → claimed:
- Uma passagem de auditoria confirma a evidência de implementação em
src/Html/ (cite o caminho em evidence + notes).
- Uma issue de backfill é aberta e vinculada em
backfill_issue.
- HTML: subsistema de renderização de HTML+CSS em PDF — o motor por trás dessas capacidades, incluindo as notas de comportamento de tabelas, flex, gradientes e paginação.
- Recursos CSS não suportados e soluções alternativas — os limites específicos por comportamento.
- Renderizar HTML árabe da direita para a esquerda — o suporte da direita para a esquerda e bidirecional e seus limites atuais.
- Pagine uma tabela HTML grande em várias páginas — paginação de tabelas entre páginas.
- Relatório de veracidade da matriz CSS (
_css-matrix-truth-report.md, no repositório) — deltas before/after da auditoria, distribuição de confiança, registro de deflação.
- Auditoria de cobertura de propriedades CSS (
architecture/css-property-coverage-audit.md, no repositório) — auditoria interna de quatro estados por propriedade (Policy/Parsed/Applied/Rendered).
- ADR-027 v8.0.0 BREAKING (
architecture/adr/ADR-027-v8-breaking.md, no repositório) — graduação do handshake de descontinuação de vertical-lr (capacidade preservada).
- ADR-028 v9.0.0 BREAKING (
architecture/adr/ADR-028-v9-breaking.md, no repositório) — remoção do marcador de enum de Grid/Subgrid/@container (capacidades preservadas).
- Issue de rastreamento de backfill: https://github.com/nextpdf-labs/nextpdf/issues/614