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.
| Badge | Meaning |
|---|
verified | src/Html/ + dedicated fixture suite (≥3 files) or WPT shard (≥50 fixtures); passes deterministically under the structural profile. |
claimed | Implementation evidence in src/Html/, no dedicated fixture. Backfill issue tracked. |
not-supported | Explicitly excluded from the static-PDF scope. Reason recorded. |
unknown | No 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.
| Status | Modules | Confidence (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 |
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 Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Flexible Box Layout (css_flexbox_1) | 1 | CR | Verified | high | src/Html/Flex/, tests/Unit/Html/Flex/ (50 files) |
CSS Grid Layout (css_grid_1) | 1 | REC | Verified | high | src/Html/Grid/, tests/Unit/Html/Grid/ (25), tests/Wpt/corpus/css-grid/ (654) |
CSS Grid Layout — Subgrid (css_grid_2) | 2 | CR | Claimed | medium | src/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) | 3 | ED | Not supported | high | Masonry out of scope for v5.x. |
CSS Display (css_display_3) | 3 | CR | Claimed | medium | DisplayResolver.php + resolver tests; no dedicated property suite. |
CSS Display (css_display_4) | 4 | ED | Unknown | low | No L4 evidence. |
CSS Positioned Layout (css_position_3) | 3 | WD | Verified | high | src/Html/Positioned/, tests/Unit/Html/Positioned/ (8 files) |
CSS Positioned Layout (css_position_4) | 4 | ED | Unknown | low | position: sticky/anchor not evidenced. |
CSS Box Alignment (css_align_3) | 3 | WD | Claimed | medium | Implemented inside Flex/Grid engines; no standalone suite. |
CSS Box Sizing (css_sizing_3) | 3 | CR | Claimed | low | src/Html/Length/; Phase 0 audit shows width/height largely POLICY-ONLY. |
CSS Box Sizing (css_sizing_4) | 4 | ED | Unknown | low | Intrinsic-size keywords not evidenced. |
CSS Box Model (css_box_3) | 3 | WD | Claimed | medium | Margin-collapse coverage; left/right box model missing per Phase 0 audit. Backfill #617. |
CSS Box Model (css_box_4) | 4 | ED | Unknown | low | No evidence. |
CSS Multi-column Layout (css_multicol_1) | 1 | CR | Claimed | medium | src/Html/MultiCol/; no property suite. |
CSS Multi-column Layout (css_multicol_2) | 2 | ED | Unknown | low | No evidence. |
CSS Fragmentation (css_break_3) | 3 | CR | Verified | medium | src/Html/Fragmentation/, tests/Unit/Html/PagedMedia/ (20 files) |
CSS Fragmentation (css_break_4) | 4 | ED | Unknown | low | No evidence. |
CSS Containment (css_contain_1) | 1 | REC | Not supported | medium | No contain layout/paint applicator; no live-update model. |
CSS Containment — @container (css_contain_2) | 2 | CR | Claimed | low | 114-fixture WPT shard + ADR-017/021 retained-layout model. Runtime LIVE (ADR-028 removed only the enum marker). |
CSS Containment (css_contain_3) | 3 | ED | Not supported | medium | Style containment out of scope. |
CSS Inline Layout (css_inline_3) | 3 | WD | Claimed | medium | src/Html/Layout/InlineLayout/ + 8 tests; initial-letter not evidenced. |
CSS Logical Properties (css_logical_1) | 1 | WD | Claimed | medium | WritingMode 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) | 3 | ED | Not supported | high | Out of scope for v5.x. |
CSS Pagination Templates (css_page_templates_3) | 3 | ED | Not supported | high | Multi-region pagination out of scope. |
CSS Exclusions (css_exclusions_1) | 1 | WD | Not supported | high | Tier C; no roadmap commitment. |
CSS Regions (css_regions_1) | 1 | WD | Not supported | high | Discontinued by W3C. |
CSS Template Layout (css_template_1) | 1 | NOTE | Not supported | high | Out of scope. |
CSS Layout API (css_layout_api_1) | 1 | WD | Not supported | high | Worklet runtime; not applicable. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Backgrounds and Borders (css_backgrounds_3) | 3 | CR | Claimed | medium | src/Html/Background/, BorderRenderer.php; bg-color Table-only per Phase 0 audit. Backfill #628. |
CSS Backgrounds (css_backgrounds_4) | 4 | ED | Unknown | low | No evidence. |
CSS Borders and Box Decorations (css_borders_4) | 4 | ED | Unknown | low | No evidence. |
CSS Gap Decorations (css_gaps_1) | 1 | ED | Unknown | low | No evidence. |
CSS Masking (css_masking_1) | 1 | CR | Not supported | medium | clip-path/mask not routed to PDF clip operators. |
CSS Shadow Module (css_shadow_1) | 1 | ED | Claimed | medium | src/Html/Shadow/ (BoxShadowRenderer); no dedicated fixture. |
CSS Shapes (css_shapes_1) | 1 | CR | Not supported | high | shape-outside out of scope for v5.x. |
CSS Shapes (css_shapes_2) | 2 | ED | Not supported | high | Out of scope. |
Filter Effects (filter_effects_1) | 1 | WD | Not supported | high | SVG filter primitives not routed to PDF. |
Filter Effects (filter_effects_2) | 2 | ED | Not supported | high | Out of scope. |
Compositing and Blending (compositing_1) | 1 | CR | Claimed | medium | PDF blend-mode mapping in PaintCommand/; one blend-mode test. |
Compositing (compositing_2) | 2 | ED | Unknown | low | No evidence. |
CSS Fill and Stroke (fill_stroke_3) | 3 | ED | Unknown | low | No evidence. |
Geometry Interfaces (geometry_1) | 1 | CR | Not supported | high | DOM Matrix runtime API. |
DOMMatrix (matrix) | 1 | NOTE | Not supported | high | Browser runtime API. |
Motion Path (motion_1) | 1 | WD | Not supported | high | Animation-only. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Fonts (css_fonts_3) | 3 | REC | Verified | medium | src/Html/Font/, tests/Unit/Font/ (9) + FontResolver tests |
CSS Fonts (css_fonts_4) | 4 | CR | Verified | high | src/Html/FontFace/, tests/Unit/Html/FontFace/ (31 files) |
CSS Fonts (css_fonts_5) | 5 | ED | Unknown | low | font-tech() not evidenced. |
CSS Font Loading (css_font_loading_3) | 3 | WD | Not supported | high | JS FontFace runtime API; PHP-side loading via FontResolver. |
CSS Text (css_text_3) | 3 | CR | Claimed | medium | src/Html/Text/ + 5 tests; Phase 0 FULL for align/indent/spacing, white-space <pre>-only. Backfill #618. |
CSS Text (css_text_4) | 4 | ED | Claimed | medium | src/Html/Layout/Hyphenation/ + strategy tests; other L4 props pending. |
CSS Text Decoration (css_text_decor_3) | 3 | CR | Claimed | medium | src/Html/Text/; Phase 0 FULL but no dedicated fixture. Backfill #619. |
CSS Text Decoration (css_text_decor_4) | 4 | ED | Unknown | low | text-emphasis not evidenced. |
CSS Ruby (css_ruby_1) | 1 | WD | Not supported | high | Ruby annotations out of scope for v5.x. |
CSS Writing Modes (css_writing_modes_3) | 3 | REC | Claimed | medium | src/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) | 4 | ED | Unknown | low | No evidence. |
CSS Speech (css_speech_1) | 1 | CR | Not supported | high | Aural rendering not applicable. |
CSS Mobile Text Size Adjustment (css_size_adjust_1) | 1 | ED | Not supported | high | Mobile UA hint; not applicable. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Color (css_color_3) | 3 | REC | Claimed | medium | src/Html/Color/, NamedColors.php + parser tests; no module fixture. Backfill #620. |
CSS Color (css_color_4) | 4 | CR | Claimed | medium | Lab/LCH/OKLab parsing; PDF-colorspace fidelity not asserted. |
CSS Color (css_color_5) | 5 | WD | Unknown | low | color-mix() not evidenced. |
CSS Color (css_color_6) | 6 | ED | Unknown | low | No evidence. |
CSS Color Adjustment (css_color_adjust_1) | 1 | CR | Not supported | high | color-scheme UA-driven; not applicable. |
CSS Color HDR (css_color_hdr_1) | 1 | ED | Not supported | high | HDR not routed to PDF colorspace. |
CSS Images (css_images_3) | 3 | CR | Claimed | medium | src/Html/Gradient/ (linear/radial/conic) + parser tests. |
CSS Images (css_images_4) | 4 | ED | Unknown | low | image()/image-set() not evidenced. |
CSS Images (css_images_5) | 5 | ED | Unknown | low | No evidence. |
CSS Image Animation (css_image_animation_1) | 1 | ED | Not supported | high | Animation-only. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Selectors (selectors_3) | 3 | REC | Claimed | medium | HasSelectorResolver.php + CssRule tests; fixture is a single corpus.json. Backfill #627. |
CSS Selectors (selectors_4) | 4 | WD | Claimed | medium | :is()/:where()/:not()/:has() tested; advanced L4 pending. |
CSS Selectors (selectors_5) | 5 | ED | Unknown | low | No evidence. |
CSS Non-element Selectors (selectors_nonelement_1) | 1 | WD | Not supported | high | Browser-stylesheet hooks; not applicable. |
CSS Pseudo-Elements (css_pseudo_4) | 4 | WD | Claimed | medium | src/Html/Pseudo/ (12) + ~10 renderer tests; no module suite. |
CSS Cascading and Inheritance (css_cascade_3) | 3 | REC | Verified | high | src/Html/Cascade/, tests/Unit/Html/Cascade/ (9 files) |
CSS Cascading (css_cascade_4) | 4 | CR | Verified | high | Cascade/Layer/ + revert/layer tests |
CSS Cascading (css_cascade_5) | 5 | CR | Verified | high | AtRule/Layer/ + Cascade/Layer/ suites |
CSS Cascading (css_cascade_6) | 6 | WD | Unknown | low | @scope not evidenced. |
CSS Values and Units (css_values_3) | 3 | REC | Claimed | medium | CssValueParser.php + unit tests; fixture is single corpus.json. Backfill #626. |
CSS Values and Units (css_values_4) | 4 | CR | Claimed | medium | calc() implemented; nested min()/max()/clamp() not fully evidenced. |
CSS Values and Units (css_values_5) | 5 | ED | Unknown | low | No evidence. |
CSS Custom Properties (css_variables_1) | 1 | CR | Claimed | medium | src/Html/CustomProperty/ + scope coverage test. |
CSS Custom Properties (css_variables_2) | 2 | ED | Unknown | low | No evidence. |
CSS Conditional Rules (css_conditional_3) | 3 | CR | Claimed | medium | @media/@supports parsing tested; @container runtime preserved (ADR-028). |
CSS Conditional Rules (css_conditional_4) | 4 | ED | Unknown | low | No evidence. |
CSS Conditional Rules (css_conditional_5) | 5 | ED | Unknown | low | No evidence. |
CSS Conditional Values (css_conditional_values_1) | 1 | ED | Unknown | low | No evidence. |
CSS Namespaces (css_namespaces_3) | 3 | REC | Claimed | low | Parser tolerates @namespace; no matching coverage. |
CSS Style Attributes (css_style_attr_1) | 1 | CR | Claimed | medium | Inline style parsing across pipeline; no dedicated fixture. Backfill #622. |
CSS Syntax (css_syntax_3) | 3 | CR | Claimed | medium | CssParser/ + grammar/fuzz tests; no conformance fixture. Backfill #623. |
CSS Nesting (css_nesting_1) | 1 | CR | Claimed | medium | Promoted from unknown — CssNestingTest + desugar/inner-scan tests. |
CSS Environment Variables (css_env_1) | 1 | ED | Not supported | medium | UA-driven env(); not applicable. |
CSS Custom Functions and Mixins (css_mixins_1) | 1 | ED | Unknown | low | No evidence. |
CSS Extensions (css_extensions_1) | 1 | NOTE | Unknown | low | No evidence. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Lists and Counters (css_lists_3) | 3 | WD | Claimed | medium | HtmlListRenderer.php/CssCounterManager.php + 18 tests; list-style-type not applied to ol/ul (Phase 0). |
CSS Counter Styles (css_counter_styles_3) | 3 | CR | Claimed | medium | Built-in counter styles; @counter-style pending. |
CSS Generated Content (css_content_3) | 3 | WD | Claimed | medium | CssContentSegment.php + pseudo tests; bypasses applicator (Phase 0). Backfill #621. |
CSS Generated Content for Paged Media (css_gcpm_3) | 3 | WD | Claimed | medium | src/Html/Gcpm/ registries + footnote-capture test. |
CSS Generated Content for Paged Media (css_gcpm_4) | 4 | ED | Unknown | low | No evidence. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Paged Media (css_page_3) | 3 | WD | Claimed | medium | Page/, PagedMedia/, PageRule.php + PageRuleParser/PageMarginBox tests; tests/Unit/Html/Page/ has 1 file. Backfill #624. |
CSS Paged Media (css_page_4) | 4 | NOTE | Unknown | low | Future proposals. |
CSS Print Profile (css_print) | 1 | NOTE | Claimed | low | Static-PDF target honors print constraints; no conformance fixture. |
CSS Presentation Levels (css_preslev_1) | 1 | NOTE | Not supported | high | Slideware navigation; not applicable. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Overflow (css_overflow_3) | 3 | WD | Claimed | low | OverflowClip/ClipRect tests; clipping Table-cells-only (Phase 0). |
CSS Overflow (css_overflow_4) | 4 | ED | Unknown | low | No evidence. |
CSS Overflow (css_overflow_5) | 5 | ED | Unknown | low | No evidence. |
CSS Overscroll Behavior (css_overscroll_1) | 1 | CR | Not supported | high | Scrolling-runtime; not applicable. |
CSS Scroll Anchoring (css_scroll_anchoring_1) | 1 | WD | Not supported | high | Scrolling-runtime; not applicable. |
CSS Scroll Snap (css_scroll_snap_1) | 1 | REC | Not supported | high | Scrolling-runtime; not applicable. |
CSS Scroll Snap (css_scroll_snap_2) | 2 | WD | Not supported | high | Scrolling-runtime; not applicable. |
CSS Scrollbars Styling (css_scrollbars_1) | 1 | CR | Not supported | high | UA-runtime; not applicable. |
CSS Basic User Interface (css_ui_3) | 3 | REC | Not supported | medium | cursor/resize browser-UI only. |
CSS Basic User Interface (css_ui_4) | 4 | WD | Not supported | high | UA-runtime; not applicable. |
CSS Form Control Styling (css_forms_1) | 1 | ED | Not supported | high | Form widgets not rendered by static PDF. |
CSS View Transitions (css_view_transitions_1) | 1 | WD | Not supported | high | Animation-only. |
CSS View Transitions (css_view_transitions_2) | 2 | ED | Not supported | high | Animation-only. |
CSS Spatial Navigation (css_nav_1) | 1 | NOTE | Not supported | high | UA-runtime; not applicable. |
CSS Route Matching (css_navigation_1) | 1 | ED | Not supported | high | UA-runtime; not applicable. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Table (css_tables_3) | 3 | WD | Verified | high | src/Html/Table/, tests/Unit/Html/Table/ (17) + ~60 TableParser tests + 5 synthetic golden PDFs in tests/Corpus/tables/ |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Transforms (css_transforms_1) | 1 | CR | Claimed | medium | Renderer/Transform/ + ApplyTransformCommand.php; no dedicated fixture. |
CSS Transforms (css_transforms_2) | 2 | ED | Unknown | low | 3D transforms not evidenced. |
CSS Animations (css_animations_1) | 1 | WD | Not supported | high | Animation timeline not applicable to static PDF. |
CSS Animations (css_animations_2) | 2 | ED | Not supported | high | Out of scope. |
CSS Transitions (css_transitions_1) | 1 | WD | Not supported | high | Out of scope. |
CSS Transitions (css_transitions_2) | 2 | ED | Not supported | high | Out of scope. |
CSS Easing Functions (css_easing_1) | 1 | CR | Not supported | high | Animation-only. |
CSS Easing Functions (css_easing_2) | 2 | ED | Not supported | high | Animation-only. |
Web Animations (web_animations_1) | 1 | WD | Not supported | high | Browser runtime API. |
Web Animations (web_animations_2) | 2 | ED | Not supported | high | Browser runtime API. |
Web Animations CSS Integration (web_animations_css_integration) | 1 | ED | Not supported | high | Browser runtime API. |
Animation Triggers (animation_triggers) | 1 | ED | Not supported | high | Animation-only. |
Pointer-driven Animations (pointer_animations_1) | 1 | ED | Not supported | high | Runtime input event; not applicable. |
Scroll-driven Animations (scroll_animations_1) | 1 | ED | Not supported | high | Scrolling-runtime; not applicable. |
CSS Animation Worklet (css_animation_worklet) | 1 | ED | Not supported | high | Browser worklet runtime. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Anchor Positioning (css_anchor_position_1) | 1 | WD | Unknown | low | No anchor() source. |
CSS Anchor Positioning (css_anchor_position_2) | 2 | ED | Unknown | low | No evidence. |
CSS Highlight API (css_highlight_api_1) | 1 | WD | Not supported | high | Browser runtime API. |
CSS Properties and Values API (css_properties_values_api_1) | 1 | CR | Not supported | high | Browser runtime API. |
CSS Painting API (css_paint_api_1) | 1 | WD | Not supported | high | Browser worklet runtime. |
CSS Typed OM (css_typed_om_1) | 1 | WD | Not supported | high | Browser runtime API. |
CSSOM (cssom_1) | 1 | WD | Not supported | high | Browser DOM API. |
CSSOM View (cssom_view_1) | 1 | WD | Not supported | high | Browser DOM API. |
CSS Will Change (css_will_change_1) | 1 | CR | Not supported | high | Browser optimization hint. |
CSS Linked Parameters (css_link_params_1) | 1 | ED | Unknown | low | No evidence. |
CSS Line Grid (css_line_grid_1) | 1 | NOTE | Unknown | low | No evidence. |
CSS Rhythmic Sizing (css_rhythm_1) | 1 | ED | Unknown | low | No evidence. |
CSS Round Display (css_round_display_1) | 1 | ED | Not supported | high | Round-display target not applicable. |
CSS Shaders (css_shaders_1) | 1 | NOTE | Not supported | high | Removed by W3C. |
CSS Viewport (css_viewport_1) | 1 | NOTE | Not supported | high | UA-viewport; not applicable. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
Media Queries (mediaqueries_3) | 3 | REC | Claimed | medium | CssParser/ + media-query coverage tests; no dedicated fixture. Backfill #625. |
Media Queries (mediaqueries_4) | 4 | CR | Claimed | medium | @media print/prefers-color-scheme parsed; range syntax pending. |
Media Queries (mediaqueries_5) | 5 | WD | Unknown | low | No evidence. |
| W3C Module | Level | W3C | Status | Confidence | Evidence |
|---|
CSS Level 2 (css_2_1) | 2.1 | REC | Claimed | low | Distributed baseline across src/Html/; no single conformance fixture. |
CSS Level 2.2 (css_2_2) | 2.2 | NOTE | Claimed | low | Distributed baseline; no dedicated fixture. |
CSS Snapshot 2026 (css_snapshot_2026) | snapshot | NOTE | Claimed | low | Index 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 Module | W3C | Status | Confidence | Where |
|---|
W3C SVG 1.1 (svg_1_1) | REC | Claimed | low | Inline SVG paint subset in Renderer/PaintCommand/; no CSS-matrix fixture. |
W3C SVG 2.0 (svg_2_0) | CR | Unknown | low | Premium-pipeline concern; no core evidence. |
W3C PNG 3rd Edition (png_3) | WD | Claimed | low | PNG decode in Graphics/ module (outside HTML/CSS). |
W3C WOFF 1.0 (woff_1_0) | REC | Claimed | low | WOFF via Font stack; no CSS-matrix fixture. |
W3C WOFF 2.0 (woff_2_0) | REC | Claimed | low | WOFF2 via Font stack; no CSS-matrix fixture. |
W3C WCAG 2.2 (wcag_2_2) | REC | Verified | medium | src/Html/Aam/, tests/Unit/Accessibility/HtmlAam/ (4 files) — PDF/UA-2. |
W3C WAI-ARIA 1.2 (wai_aria_1_2) | REC | Verified | medium | tests/Unit/Accessibility/HtmlAam/ (4 files). |
W3C ARIA Bundle (w3c_aria_bundle) | REC | Claimed | low | Guidance bundle; concrete evidence is the WAI-ARIA row. |
W3C AAM Bundle (w3c_aam_bundle) | NOTE | Claimed | low | Bundle pointer; evidence is the WAI-ARIA/WCAG rows. |
W3C ATAG 2.0 (atag_2_0) | REC | Not supported | high | Authoring-tool accessibility; not applicable. |
W3C XSL 1.1 (xsl_1_1) | REC | Not supported | high | XSL-FO parallel formatting model; not implemented. |
W3C XSD 1.1 Part 1 (xsd_1_1_part1) | REC | Not supported | high | XML schema; not applicable. |
W3C XSLT 3.0 (xslt_3_0) | REC | Not supported | high | Transformation language; not applicable. |
Resize Observer (resize_observer_1) | CR | Not supported | high | Browser runtime API. |
For a row to graduate from claimed → verified:
- 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.
- The fixture asserts NextPDF’s behavior against the W3C grammar for the
module’s primary properties.
- The fixture passes deterministically under a
NextPDF\Testing\ReproducibilityProfile (structural for assertion
fixtures; bitwise only once per-module golden PDF baselines exist).
- 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 unknown → claimed:
- An audit pass confirms implementation evidence in
src/Html/ (cite the
path in evidence + notes).
- 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