Skip to content

CSS support matrix

NextPDF implements Cascading Style Sheets (CSS) rendering against published World Wide Web Consortium (W3C) specifications. Use this page to review every CSS module in NextPDF’s specification corpus and the truth-audited support state for that module in the rendering pipeline.

This revision comes from the Wave 4 B2 truth audit (plan section 4.4). The prior structural revision used unverified placeholder badges. The audit re-graded every row against real on-disk evidence (src/Html/, tests/, tests/Wpt/corpus/), the v8/v9 breaking-change architecture decision records (ADRs), and the internal CSS property coverage audit. The audit prioritized honesty over coverage: when evidence lowered a badge, the badge was lowered.

Four badges classify each row under the verification contract:

  • Verified — Implementation in src/Html/ plus a substantive dedicated automated fixture: either a property-level suite of three or more files under tests/Unit/Html/<Module>/, or a Web Platform Tests (WPT) corpus shard of fifty or more fixtures under tests/Wpt/corpus/. No per-CSS-module golden Portable Document Format (PDF) baseline is wired yet, so verified rows use the structural reproducibility profile (PHPUnit assertion equivalence), never bitwise.
  • Claimed — Module behavior is implemented in src/Html/ (source path cited), but the dedicated fixture is thin, shared, or absent. Each claimed row with a concrete implementation has a backfill issue.
  • Not supported — The static-PDF rendering pipeline does not include this module: runtime/browser-only APIs, scrolling/animation runtimes, and W3C-discontinued work. The row records the reason.
  • Unknown — The module is in the corpus, but the audit found no implementation or fixture evidence. The audit never guessed upward to improve the count.

The structural revision’s partial badge is retired: every former partial row was re-graded to claimed (implementation present, no dedicated fixture) or verified.

BadgeMeaning
verifiedsrc/Html/ + dedicated fixture suite (≥3 files) or WPT shard (≥50 fixtures); passes deterministically under the structural profile.
claimedImplementation evidence in src/Html/, no dedicated fixture. Backfill issue tracked.
not-supportedExplicitly excluded from the static-PDF scope. Reason recorded.
unknownNo determinable evidence. Not guessed upward.

The Confidence column is an honest, non-binary signal for the evidence behind the stated badge (high / medium / low). It is independent of the badge itself.

NextPDF supports the CSS modules listed below at the levels noted. Verified rows have a dedicated automated fixture suite or a substantive WPT corpus shard that asserts NextPDF’s behavior and passes deterministically under the structural reproducibility profile. Claimed rows have implementation evidence in src/Html/, but no dedicated fixture yet; each row is tracked by a backfill issue under tracking issue #614. Not supported rows document explicit scope boundaries for the static-PDF target.

No row claims byte-level reproducibility because this revision has no per-CSS-module golden PDF baseline. The verification contract forbids empty rows: when support cannot be determined, the row is unknown.

StatusModulesConfidence (high / medium / low)
Verified128 / 4 / 0
Claimed490 / 35 / 14
Not supported6762 / 5 / 0
Unknown390 / 0 / 39
Total16770 / 44 / 53

The structural revision’s summary block was internally inconsistent: it declared 148 total (18 verified / 11 partial / 11 claimed / 53 not-supported / 55 unknown), while the file contained 167 module rows whose labels tallied to 34 verified / 13 partial / 13 claimed / 68 not-supported / 39 unknown. This audit corrected the total to the true 167 and re-graded every row against on-disk evidence: Verified dropped from a claimed 34 to a substantiated 12. That reduction is the correct result of an honest audit, not a regression. The full before/after delta is in the in-repo _css-matrix-truth-report.md sidecar.

The structural revision mislabeled three live capabilities as removed or not-supported. ADR-027 and ADR-028 removed only the ExperimentalFeature enum opt-in markers; the capabilities remain LIVE default-on:

  • Subgrid (css_grid_2) — LIVE; CssFeatureFlags::$layoutSubgrid default on. It was mislabeled “subgrid hard-removed v9.0.0”.
  • @container queries (css_contain_2) — runtime dispatch explicitly unchanged by ADR-028; flag opt-out preserved. It was mislabeled “hard-removed v9.0.0”.
  • writing-mode: vertical-lr (css_writing_modes_3) — default-on Stable since v7.0.0; ADR-027 graduated only the deprecation handshake. It was mislabeled “deprecated/removed v8.0.0”.

The machine-readable per-module rowset lives in the in-repo css-support-matrix-data.yaml, which is the source of truth. This page is the human-readable projection, grouped by category. Astro components consume the YAML data directly during the docs build.

W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Flexible Box Layout (css_flexbox_1)1CRVerifiedhighsrc/Html/Flex/, tests/Unit/Html/Flex/ (50 files)
CSS Grid Layout (css_grid_1)1RECVerifiedhighsrc/Html/Grid/, tests/Unit/Html/Grid/ (25), tests/Wpt/corpus/css-grid/ (654)
CSS Grid Layout — Subgrid (css_grid_2)2CRClaimedmediumsrc/Html/Grid/Subgrid/ + 80-fixture WPT shard + 1 integration test. LIVE default-on (ADR-028 removed only the enum marker).
CSS Grid Layout — Masonry (css_grid_3)3EDNot supportedhighMasonry out of scope for v5.x.
CSS Display (css_display_3)3CRClaimedmediumDisplayResolver.php + resolver tests; no dedicated property suite.
CSS Display (css_display_4)4EDUnknownlowNo L4 evidence.
CSS Positioned Layout (css_position_3)3WDVerifiedhighsrc/Html/Positioned/, tests/Unit/Html/Positioned/ (8 files)
CSS Positioned Layout (css_position_4)4EDUnknownlowposition: sticky/anchor not evidenced.
CSS Box Alignment (css_align_3)3WDClaimedmediumImplemented inside Flex/Grid engines; no standalone suite.
CSS Box Sizing (css_sizing_3)3CRClaimedlowsrc/Html/Length/; Phase 0 audit shows width/height largely POLICY-ONLY.
CSS Box Sizing (css_sizing_4)4EDUnknownlowIntrinsic-size keywords not evidenced.
CSS Box Model (css_box_3)3WDClaimedmediumMargin-collapse coverage; left/right box model missing per Phase 0 audit. Backfill #617.
CSS Box Model (css_box_4)4EDUnknownlowNo evidence.
CSS Multi-column Layout (css_multicol_1)1CRClaimedmediumsrc/Html/MultiCol/; no property suite.
CSS Multi-column Layout (css_multicol_2)2EDUnknownlowNo evidence.
CSS Fragmentation (css_break_3)3CRVerifiedmediumsrc/Html/Fragmentation/, tests/Unit/Html/PagedMedia/ (20 files)
CSS Fragmentation (css_break_4)4EDUnknownlowNo evidence.
CSS Containment (css_contain_1)1RECNot supportedmediumNo contain layout/paint applicator; no live-update model.
CSS Containment — @container (css_contain_2)2CRClaimedlow114-fixture WPT shard + ADR-017/021 retained-layout model. Runtime LIVE (ADR-028 removed only the enum marker).
CSS Containment (css_contain_3)3EDNot supportedmediumStyle containment out of scope.
CSS Inline Layout (css_inline_3)3WDClaimedmediumsrc/Html/Layout/InlineLayout/ + 8 tests; initial-letter not evidenced.
CSS Logical Properties (css_logical_1)1WDClaimedmediumWritingMode logical→physical resolver; no dedicated fixture. Logical text-align: start/end resolve against direction — under direction: rtl, start is the right edge — and are applied in table cells.
CSS Page Floats (css_page_floats_3)3EDNot supportedhighOut of scope for v5.x.
CSS Pagination Templates (css_page_templates_3)3EDNot supportedhighMulti-region pagination out of scope.
CSS Exclusions (css_exclusions_1)1WDNot supportedhighTier C; no roadmap commitment.
CSS Regions (css_regions_1)1WDNot supportedhighDiscontinued by W3C.
CSS Template Layout (css_template_1)1NOTENot supportedhighOut of scope.
CSS Layout API (css_layout_api_1)1WDNot supportedhighWorklet runtime; not applicable.

Box model — backgrounds, borders, effects

Section titled “Box model — backgrounds, borders, effects”
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Backgrounds and Borders (css_backgrounds_3)3CRClaimedmediumsrc/Html/Background/, BorderRenderer.php; bg-color Table-only per Phase 0 audit. Backfill #628.
CSS Backgrounds (css_backgrounds_4)4EDUnknownlowNo evidence.
CSS Borders and Box Decorations (css_borders_4)4EDUnknownlowNo evidence.
CSS Gap Decorations (css_gaps_1)1EDUnknownlowNo evidence.
CSS Masking (css_masking_1)1CRNot supportedmediumclip-path/mask not routed to PDF clip operators.
CSS Shadow Module (css_shadow_1)1EDClaimedmediumsrc/Html/Shadow/ (BoxShadowRenderer); no dedicated fixture.
CSS Shapes (css_shapes_1)1CRNot supportedhighshape-outside out of scope for v5.x.
CSS Shapes (css_shapes_2)2EDNot supportedhighOut of scope.
Filter Effects (filter_effects_1)1WDNot supportedhighSVG filter primitives not routed to PDF.
Filter Effects (filter_effects_2)2EDNot supportedhighOut of scope.
Compositing and Blending (compositing_1)1CRClaimedmediumPDF blend-mode mapping in PaintCommand/; one blend-mode test.
Compositing (compositing_2)2EDUnknownlowNo evidence.
CSS Fill and Stroke (fill_stroke_3)3EDUnknownlowNo evidence.
Geometry Interfaces (geometry_1)1CRNot supportedhighDOM Matrix runtime API.
DOMMatrix (matrix)1NOTENot supportedhighBrowser runtime API.
Motion Path (motion_1)1WDNot supportedhighAnimation-only.
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Fonts (css_fonts_3)3RECVerifiedmediumsrc/Html/Font/, tests/Unit/Font/ (9) + FontResolver tests
CSS Fonts (css_fonts_4)4CRVerifiedhighsrc/Html/FontFace/, tests/Unit/Html/FontFace/ (31 files)
CSS Fonts (css_fonts_5)5EDUnknownlowfont-tech() not evidenced.
CSS Font Loading (css_font_loading_3)3WDNot supportedhighJS FontFace runtime API; PHP-side loading via FontResolver.
CSS Text (css_text_3)3CRClaimedmediumsrc/Html/Text/ + 5 tests; Phase 0 FULL for align/indent/spacing, white-space <pre>-only. Backfill #618.
CSS Text (css_text_4)4EDClaimedmediumsrc/Html/Layout/Hyphenation/ + strategy tests; other L4 props pending.
CSS Text Decoration (css_text_decor_3)3CRClaimedmediumsrc/Html/Text/; Phase 0 FULL but no dedicated fixture. Backfill #619.
CSS Text Decoration (css_text_decor_4)4EDUnknownlowtext-emphasis not evidenced.
CSS Ruby (css_ruby_1)1WDNot supportedhighRuby annotations out of scope for v5.x.
CSS Writing Modes (css_writing_modes_3)3RECClaimedmediumsrc/Html/Layout/WritingMode/ (7 tests) + 140-fixture WPT shard. vertical-lr LIVE default-on (ADR-027). direction: rtl is functional — UAX#9 bidirectional reordering plus Arabic contextual shaping, with table-cell start-alignment. Non-table block alignment and justify are not yet applied, and the HTML dir attribute does not map (use CSS direction). See Render right-to-left Arabic HTML. Backfill #629.
CSS Writing Modes (css_writing_modes_4)4EDUnknownlowNo evidence.
CSS Speech (css_speech_1)1CRNot supportedhighAural rendering not applicable.
CSS Mobile Text Size Adjustment (css_size_adjust_1)1EDNot supportedhighMobile UA hint; not applicable.
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Color (css_color_3)3RECClaimedmediumsrc/Html/Color/, NamedColors.php + parser tests; no module fixture. Backfill #620.
CSS Color (css_color_4)4CRClaimedmediumLab/LCH/OKLab parsing; PDF-colorspace fidelity not asserted.
CSS Color (css_color_5)5WDUnknownlowcolor-mix() not evidenced.
CSS Color (css_color_6)6EDUnknownlowNo evidence.
CSS Color Adjustment (css_color_adjust_1)1CRNot supportedhighcolor-scheme UA-driven; not applicable.
CSS Color HDR (css_color_hdr_1)1EDNot supportedhighHDR not routed to PDF colorspace.
CSS Images (css_images_3)3CRClaimedmediumsrc/Html/Gradient/ (linear/radial/conic) + parser tests.
CSS Images (css_images_4)4EDUnknownlowimage()/image-set() not evidenced.
CSS Images (css_images_5)5EDUnknownlowNo evidence.
CSS Image Animation (css_image_animation_1)1EDNot supportedhighAnimation-only.
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Selectors (selectors_3)3RECClaimedmediumHasSelectorResolver.php + CssRule tests; fixture is a single corpus.json. Backfill #627.
CSS Selectors (selectors_4)4WDClaimedmedium:is()/:where()/:not()/:has() tested; advanced L4 pending.
CSS Selectors (selectors_5)5EDUnknownlowNo evidence.
CSS Non-element Selectors (selectors_nonelement_1)1WDNot supportedhighBrowser-stylesheet hooks; not applicable.
CSS Pseudo-Elements (css_pseudo_4)4WDClaimedmediumsrc/Html/Pseudo/ (12) + ~10 renderer tests; no module suite.
CSS Cascading and Inheritance (css_cascade_3)3RECVerifiedhighsrc/Html/Cascade/, tests/Unit/Html/Cascade/ (9 files)
CSS Cascading (css_cascade_4)4CRVerifiedhighCascade/Layer/ + revert/layer tests
CSS Cascading (css_cascade_5)5CRVerifiedhighAtRule/Layer/ + Cascade/Layer/ suites
CSS Cascading (css_cascade_6)6WDUnknownlow@scope not evidenced.
CSS Values and Units (css_values_3)3RECClaimedmediumCssValueParser.php + unit tests; fixture is single corpus.json. Backfill #626.
CSS Values and Units (css_values_4)4CRClaimedmediumcalc() implemented; nested min()/max()/clamp() not fully evidenced.
CSS Values and Units (css_values_5)5EDUnknownlowNo evidence.
CSS Custom Properties (css_variables_1)1CRClaimedmediumsrc/Html/CustomProperty/ + scope coverage test.
CSS Custom Properties (css_variables_2)2EDUnknownlowNo evidence.
CSS Conditional Rules (css_conditional_3)3CRClaimedmedium@media/@supports parsing tested; @container runtime preserved (ADR-028).
CSS Conditional Rules (css_conditional_4)4EDUnknownlowNo evidence.
CSS Conditional Rules (css_conditional_5)5EDUnknownlowNo evidence.
CSS Conditional Values (css_conditional_values_1)1EDUnknownlowNo evidence.
CSS Namespaces (css_namespaces_3)3RECClaimedlowParser tolerates @namespace; no matching coverage.
CSS Style Attributes (css_style_attr_1)1CRClaimedmediumInline style parsing across pipeline; no dedicated fixture. Backfill #622.
CSS Syntax (css_syntax_3)3CRClaimedmediumCssParser/ + grammar/fuzz tests; no conformance fixture. Backfill #623.
CSS Nesting (css_nesting_1)1CRClaimedmediumPromoted from unknown — CssNestingTest + desugar/inner-scan tests.
CSS Environment Variables (css_env_1)1EDNot supportedmediumUA-driven env(); not applicable.
CSS Custom Functions and Mixins (css_mixins_1)1EDUnknownlowNo evidence.
CSS Extensions (css_extensions_1)1NOTEUnknownlowNo evidence.
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Lists and Counters (css_lists_3)3WDClaimedmediumHtmlListRenderer.php/CssCounterManager.php + 18 tests; list-style-type not applied to ol/ul (Phase 0).
CSS Counter Styles (css_counter_styles_3)3CRClaimedmediumBuilt-in counter styles; @counter-style pending.
CSS Generated Content (css_content_3)3WDClaimedmediumCssContentSegment.php + pseudo tests; bypasses applicator (Phase 0). Backfill #621.
CSS Generated Content for Paged Media (css_gcpm_3)3WDClaimedmediumsrc/Html/Gcpm/ registries + footnote-capture test.
CSS Generated Content for Paged Media (css_gcpm_4)4EDUnknownlowNo evidence.
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Paged Media (css_page_3)3WDClaimedmediumPage/, PagedMedia/, PageRule.php + PageRuleParser/PageMarginBox tests; tests/Unit/Html/Page/ has 1 file. Backfill #624.
CSS Paged Media (css_page_4)4NOTEUnknownlowFuture proposals.
CSS Print Profile (css_print)1NOTEClaimedlowStatic-PDF target honors print constraints; no conformance fixture.
CSS Presentation Levels (css_preslev_1)1NOTENot supportedhighSlideware navigation; not applicable.
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Overflow (css_overflow_3)3WDClaimedlowOverflowClip/ClipRect tests; clipping Table-cells-only (Phase 0).
CSS Overflow (css_overflow_4)4EDUnknownlowNo evidence.
CSS Overflow (css_overflow_5)5EDUnknownlowNo evidence.
CSS Overscroll Behavior (css_overscroll_1)1CRNot supportedhighScrolling-runtime; not applicable.
CSS Scroll Anchoring (css_scroll_anchoring_1)1WDNot supportedhighScrolling-runtime; not applicable.
CSS Scroll Snap (css_scroll_snap_1)1RECNot supportedhighScrolling-runtime; not applicable.
CSS Scroll Snap (css_scroll_snap_2)2WDNot supportedhighScrolling-runtime; not applicable.
CSS Scrollbars Styling (css_scrollbars_1)1CRNot supportedhighUA-runtime; not applicable.
CSS Basic User Interface (css_ui_3)3RECNot supportedmediumcursor/resize browser-UI only.
CSS Basic User Interface (css_ui_4)4WDNot supportedhighUA-runtime; not applicable.
CSS Form Control Styling (css_forms_1)1EDNot supportedhighForm widgets not rendered by static PDF.
CSS View Transitions (css_view_transitions_1)1WDNot supportedhighAnimation-only.
CSS View Transitions (css_view_transitions_2)2EDNot supportedhighAnimation-only.
CSS Spatial Navigation (css_nav_1)1NOTENot supportedhighUA-runtime; not applicable.
CSS Route Matching (css_navigation_1)1EDNot supportedhighUA-runtime; not applicable.
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Table (css_tables_3)3WDVerifiedhighsrc/Html/Table/, tests/Unit/Html/Table/ (17) + ~60 TableParser tests + 5 synthetic golden PDFs in tests/Corpus/tables/
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Transforms (css_transforms_1)1CRClaimedmediumRenderer/Transform/ + ApplyTransformCommand.php; no dedicated fixture.
CSS Transforms (css_transforms_2)2EDUnknownlow3D transforms not evidenced.
CSS Animations (css_animations_1)1WDNot supportedhighAnimation timeline not applicable to static PDF.
CSS Animations (css_animations_2)2EDNot supportedhighOut of scope.
CSS Transitions (css_transitions_1)1WDNot supportedhighOut of scope.
CSS Transitions (css_transitions_2)2EDNot supportedhighOut of scope.
CSS Easing Functions (css_easing_1)1CRNot supportedhighAnimation-only.
CSS Easing Functions (css_easing_2)2EDNot supportedhighAnimation-only.
Web Animations (web_animations_1)1WDNot supportedhighBrowser runtime API.
Web Animations (web_animations_2)2EDNot supportedhighBrowser runtime API.
Web Animations CSS Integration (web_animations_css_integration)1EDNot supportedhighBrowser runtime API.
Animation Triggers (animation_triggers)1EDNot supportedhighAnimation-only.
Pointer-driven Animations (pointer_animations_1)1EDNot supportedhighRuntime input event; not applicable.
Scroll-driven Animations (scroll_animations_1)1EDNot supportedhighScrolling-runtime; not applicable.
CSS Animation Worklet (css_animation_worklet)1EDNot supportedhighBrowser worklet runtime.
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Anchor Positioning (css_anchor_position_1)1WDUnknownlowNo anchor() source.
CSS Anchor Positioning (css_anchor_position_2)2EDUnknownlowNo evidence.
CSS Highlight API (css_highlight_api_1)1WDNot supportedhighBrowser runtime API.
CSS Properties and Values API (css_properties_values_api_1)1CRNot supportedhighBrowser runtime API.
CSS Painting API (css_paint_api_1)1WDNot supportedhighBrowser worklet runtime.
CSS Typed OM (css_typed_om_1)1WDNot supportedhighBrowser runtime API.
CSSOM (cssom_1)1WDNot supportedhighBrowser DOM API.
CSSOM View (cssom_view_1)1WDNot supportedhighBrowser DOM API.
CSS Will Change (css_will_change_1)1CRNot supportedhighBrowser optimization hint.
CSS Linked Parameters (css_link_params_1)1EDUnknownlowNo evidence.
CSS Line Grid (css_line_grid_1)1NOTEUnknownlowNo evidence.
CSS Rhythmic Sizing (css_rhythm_1)1EDUnknownlowNo evidence.
CSS Round Display (css_round_display_1)1EDNot supportedhighRound-display target not applicable.
CSS Shaders (css_shaders_1)1NOTENot supportedhighRemoved by W3C.
CSS Viewport (css_viewport_1)1NOTENot supportedhighUA-viewport; not applicable.
W3C ModuleLevelW3CStatusConfidenceEvidence
Media Queries (mediaqueries_3)3RECClaimedmediumCssParser/ + media-query coverage tests; no dedicated fixture. Backfill #625.
Media Queries (mediaqueries_4)4CRClaimedmedium@media print/prefers-color-scheme parsed; range syntax pending.
Media Queries (mediaqueries_5)5WDUnknownlowNo evidence.
W3C ModuleLevelW3CStatusConfidenceEvidence
CSS Level 2 (css_2_1)2.1RECClaimedlowDistributed baseline across src/Html/; no single conformance fixture.
CSS Level 2.2 (css_2_2)2.2NOTEClaimedlowDistributed baseline; no dedicated fixture.
CSS Snapshot 2026 (css_snapshot_2026)snapshotNOTEClaimedlowIndex of other modules; status is the aggregate of referenced rows.

These W3C modules appear in the corpus but are outside the CSS rendering pipeline. When applicable, corresponding feature pages link to them.

W3C ModuleW3CStatusConfidenceWhere
W3C SVG 1.1 (svg_1_1)RECClaimedlowInline SVG paint subset in Renderer/PaintCommand/; no CSS-matrix fixture.
W3C SVG 2.0 (svg_2_0)CRUnknownlowPremium-pipeline concern; no core evidence.
W3C PNG 3rd Edition (png_3)WDClaimedlowPNG decode in Graphics/ module (outside HTML/CSS).
W3C WOFF 1.0 (woff_1_0)RECClaimedlowWOFF via Font stack; no CSS-matrix fixture.
W3C WOFF 2.0 (woff_2_0)RECClaimedlowWOFF2 via Font stack; no CSS-matrix fixture.
W3C WCAG 2.2 (wcag_2_2)RECVerifiedmediumsrc/Html/Aam/, tests/Unit/Accessibility/HtmlAam/ (4 files) — PDF/UA-2.
W3C WAI-ARIA 1.2 (wai_aria_1_2)RECVerifiedmediumtests/Unit/Accessibility/HtmlAam/ (4 files).
W3C ARIA Bundle (w3c_aria_bundle)RECClaimedlowGuidance bundle; concrete evidence is the WAI-ARIA row.
W3C AAM Bundle (w3c_aam_bundle)NOTEClaimedlowBundle pointer; evidence is the WAI-ARIA/WCAG rows.
W3C ATAG 2.0 (atag_2_0)RECNot supportedhighAuthoring-tool accessibility; not applicable.
W3C XSL 1.1 (xsl_1_1)RECNot supportedhighXSL-FO parallel formatting model; not implemented.
W3C XSD 1.1 Part 1 (xsd_1_1_part1)RECNot supportedhighXML schema; not applicable.
W3C XSLT 3.0 (xslt_3_0)RECNot supportedhighTransformation language; not applicable.
Resize Observer (resize_observer_1)CRNot supportedhighBrowser runtime API.

For a row to graduate from claimedverified:

  1. A dedicated property-level fixture suite lives under tests/Unit/Html/<Module>/ (≥3 files) or a substantive WPT corpus shard (≥50 fixtures) under tests/Wpt/corpus/ is promoted into an asserting test.
  2. The fixture asserts NextPDF’s behavior against the W3C grammar for the module’s primary properties.
  3. The fixture passes deterministically under a NextPDF\Testing\ReproducibilityProfile (structural for assertion fixtures; bitwise only once per-module golden PDF baselines exist).
  4. The row’s nextpdf_status in the in-repo css-support-matrix-data.yaml flips to verified, with fixture_path, repro_profile, and confidence updated.

For a row to graduate from unknownclaimed:

  1. An audit pass confirms implementation evidence in src/Html/ (cite the path in evidence + notes).
  2. A backfill issue is opened and linked in backfill_issue.
  • CSS matrix truth report (_css-matrix-truth-report.md, in-repo) — before/after audit deltas, confidence distribution, de-inflation log.
  • CSS property coverage audit (architecture/css-property-coverage-audit.md, in-repo) — internal four-state per-property audit (Policy/Parsed/Applied/Rendered).
  • ADR-027 v8.0.0 BREAKING (architecture/adr/ADR-027-v8-breaking.md, in-repo) — vertical-lr deprecation-handshake graduation (capability preserved).
  • ADR-028 v9.0.0 BREAKING (architecture/adr/ADR-028-v9-breaking.md, in-repo) — Grid/Subgrid/@container enum-marker removal (capabilities preserved).
  • Backfill tracking issue: https://github.com/nextpdf-labs/nextpdf/issues/614