paged-media — 100.00% verified visual parity

← all categories · PASS 87 · FAIL 0 · REFERENCE-DISPUTED 3 · 90 total · 300 DPI

diff colours:MissingExtraColorErrMatchFull-page diff: matching and per-channel ≤1.0% pixels are blank; coloured classes are same-coordinate above-floor evidence. Exact RGBA mismatch remains numeric.

footnote — 100.00% verified visual parity PASS 4 · FAIL 0 · REFERENCE-DISPUTED 3all categories ↑

REFERENCE-DISPUTED 6021 px · above-floor 1.81% · raw 2.05% max-page diff paged-footnote-max-height · area-max-height · oracle: weasyprint · REFERENCE DISPUTED · 2 pagesMissingmissing 5.1%extra 5.1%ΔE 21.3
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: page 2: candidate lacks paint present in reference (5.1%)
@footnote max-height is constrained when a page has body content, but GCPM exempts a footnote-only last page. The standards-derived reference preserves the full final footnote body rather than WeasyPrint 69's clipped output.
reference dispute: CSS GCPM limits the footnote area with max-height except on a page containing only footnotes, and footnote-policy:auto permits the body to move to a later page. Both PDFs keep the call on page 1, move the complete body to the footnote-only page 2, and preserve the same three-line wrapping and rule geometry. Every body line in the WeasyPrint PDF is uniformly 0.1157pt lower; horizontal word bounds differ by at most 0.028pt. That renderer-specific baseline and glyph quantization is not prescribed by GCPM, so the WeasyPrint PDF is not a unique pixel oracle; raw shared-pdftoppm evidence remains reported.
regions (1206 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr58445900,0 → 180,51563total 5.1% · largest 0.6%
Extra3027150,24 → 178,5011total 0.8% · largest 0.01%
Missing3207160,27 → 178,5115total 0.8% · largest 0.02%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage0,0 → 180,00.6ΔRGB(-154,-154,-154)antialiasing coverage residue on a shared outline
AntialiasCoverage44,27 → 50,330.1ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage141,27 → 147,330.1ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage1,25 → 4,310.04ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage71,25 → 75,310.04ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage87,25 → 90,310.04ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage167,25 → 171,310.04ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage34,8 → 36,150.04ΔRGB(3,3,3)antialiasing coverage residue on a shared outline
AntialiasCoverage121,8 → 123,150.04ΔRGB(3,3,3)antialiasing coverage residue on a shared outline
AntialiasCoverage1,7 → 3,140.03ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage16,31 → 20,330.03ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage31,31 → 34,330.03ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage65,31 → 68,330.03ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage127,31 → 131,330.03ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage161,31 → 164,330.03ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage6,49 → 10,510.03ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage38,27 → 41,280.03ΔRGB(-19,-19,-19)antialiasing coverage residue on a shared outline
AntialiasCoverage57,27 → 60,280.03ΔRGB(-19,-19,-19)antialiasing coverage residue on a shared outline
AntialiasCoverage93,27 → 96,280.03ΔRGB(-19,-19,-19)antialiasing coverage residue on a shared outline
AntialiasCoverage134,27 → 138,280.03ΔRGB(-19,-19,-19)antialiasing coverage residue on a shared outline
AntialiasCoverage153,27 → 156,280.03ΔRGB(-19,-19,-19)antialiasing coverage residue on a shared outline
AntialiasCoverage17,44 → 18,510.03ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage30,9 → 31,150.03ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage49,9 → 50,150.03ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage87,9 → 89,150.03ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage116,9 → 118,150.03ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage135,9 → 137,150.03ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage76,27 → 80,290.03ΔRGB(-56,-56,-56)antialiasing coverage residue on a shared outline
AntialiasCoverage105,27 → 108,290.03ΔRGB(-56,-56,-56)antialiasing coverage residue on a shared outline
AntialiasCoverage112,27 → 116,290.03ΔRGB(-56,-56,-56)antialiasing coverage residue on a shared outline
AntialiasCoverage173,27 → 177,290.03ΔRGB(-56,-56,-56)antialiasing coverage residue on a shared outline
AntialiasCoverage2,45 → 4,510.03ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage40,8 → 40,150.02ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage127,8 → 127,150.02ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage76,29 → 82,310.02ΔRGB(115,115,115)antialiasing coverage residue on a shared outline
AntialiasCoverage105,29 → 110,310.02ΔRGB(115,115,115)antialiasing coverage residue on a shared outline
AntialiasCoverage112,29 → 117,310.02ΔRGB(115,115,115)antialiasing coverage residue on a shared outline
AntialiasCoverage173,29 → 178,310.02ΔRGB(115,115,115)antialiasing coverage residue on a shared outline
AntialiasCoverage77,27 → 80,270.02ΔRGB(-21,-21,-21)antialiasing coverage residue on a shared outline
AntialiasCoverage105,27 → 108,270.02ΔRGB(-21,-21,-21)antialiasing coverage residue on a shared outline
AntialiasCoverage112,27 → 116,270.02ΔRGB(-21,-21,-21)antialiasing coverage residue on a shared outline
AntialiasCoverage173,27 → 177,270.02ΔRGB(-21,-21,-21)antialiasing coverage residue on a shared outline
AntialiasCoverage77,32 → 81,330.02ΔRGB(-91,-91,-91)antialiasing coverage residue on a shared outline
AntialiasCoverage105,32 → 109,330.02ΔRGB(-91,-91,-91)antialiasing coverage residue on a shared outline
AntialiasCoverage113,32 → 117,330.02ΔRGB(-91,-91,-91)antialiasing coverage residue on a shared outline
AntialiasCoverage173,32 → 178,330.02ΔRGB(-91,-91,-91)antialiasing coverage residue on a shared outline
AntialiasCoverage45,34 → 49,350.02ΔRGB(57,57,57)antialiasing coverage residue on a shared outline
AntialiasCoverage141,34 → 145,350.02ΔRGB(57,57,57)antialiasing coverage residue on a shared outline
AntialiasCoverage0,45 → 1,510.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage12,26 → 14,280.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage12,44 → 14,490.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage36,9 → 39,110.02ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage123,9 → 125,110.02ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage32,9 → 32,150.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage51,9 → 51,150.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage89,9 → 90,150.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage119,9 → 119,150.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage138,9 → 138,150.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage36,12 → 39,140.02ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage123,12 → 125,140.02ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage1,32 → 4,330.02ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage72,32 → 75,330.02ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage87,32 → 90,330.02ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage168,32 → 171,330.02ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-footnote-max-height.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>footnote area max height</title><style>
3@page{size:200px 150px;margin:10px;@footnote{max-height:30px;border-top:2px solid #111}}
4html{font-family:ParitySans;line-height:1.5;font-size:12px}
5*{margin:0;box-sizing:border-box}
6.lead{height:80px;background:#bfdbfe}.fn{float:footnote}
7</style></head><body><div class="lead"></div><p>Line with note<span class="fn">long note one long note two long note three long note four</span></p></body></html>
REFERENCE-DISPUTED 23746 px · above-floor 1.99% · raw 2.03% max-page diff footnote-float · float-footnote · oracle: weasyprint · REFERENCE DISPUTEDMissingmissing 26.1%extra 25.8%ΔE 28.3
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: candidate lacks paint present in reference (26.1%)
CSS GCPM float: footnote pulls a box into the page's footnote area with an auto-numbered call marker left in the body text. The standards-derived source materializes GCPM relocation and its normative baseline-aligned font-variant-position:super call, without prescribing renderer-specific synthetic glyph metrics.
reference dispute: CSS GCPM 3 section 2.6 defines the default footnote call as a superscripted counter with vertical-align:baseline, font-size:100%, line-height:inherit, and font-variant-position:super. Ironpress emits that superscript without moving the body line; WeasyPrint leaves the call full-size on the baseline, so its PDF is a compatibility canary, not a normative pixel oracle.
regions (2995 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr153888100,0 → 316,220104total 1.3% · largest 0.02%
Extra72074080,0 → 314,218228total 1.1% · largest 0.03%
Missing73775280,4 → 316,220233total 1.1% · largest 0.03%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing308,7 → 316,190.03candidate lacks paint present in reference (0.03%)
Extra276,4 → 278,150.03candidate adds paint absent from reference (0.03%)
Missing304,4 → 306,160.03candidate lacks paint present in reference (0.03%)
Extra232,4 → 234,150.03candidate adds paint absent from reference (0.03%)
Extra306,7 → 311,190.03candidate adds paint absent from reference (0.03%)
Missing243,4 → 244,160.03candidate lacks paint present in reference (0.03%)
Missing219,10 → 226,160.03candidate lacks paint present in reference (0.03%)
Extra245,7 → 251,160.03candidate adds paint absent from reference (0.03%)
Missing250,7 → 255,160.03candidate lacks paint present in reference (0.03%)
Missing257,7 → 262,160.02candidate lacks paint present in reference (0.02%)
Extra286,7 → 292,160.02candidate adds paint absent from reference (0.02%)
Extra255,7 → 257,150.02candidate adds paint absent from reference (0.02%)
Missing291,7 → 296,160.02candidate lacks paint present in reference (0.02%)
Extra261,7 → 267,160.02candidate adds paint absent from reference (0.02%)
Extra296,7 → 301,160.02candidate adds paint absent from reference (0.02%)
Missing282,7 → 286,160.02candidate lacks paint present in reference (0.02%)
Missing263,7 → 271,140.02candidate lacks paint present in reference (0.02%)
Missing234,6 → 235,160.02candidate lacks paint present in reference (0.02%)
Extra241,7 → 243,150.02candidate adds paint absent from reference (0.02%)
Missing278,8 → 282,140.02candidate lacks paint present in reference (0.02%)
Extra301,8 → 304,140.02candidate adds paint absent from reference (0.02%)
Missing288,8 → 291,140.02candidate lacks paint present in reference (0.02%)
Extra238,4 → 243,110.02candidate adds paint absent from reference (0.02%)
Missing247,8 → 250,140.02candidate lacks paint present in reference (0.02%)
Missing298,8 → 301,140.02candidate lacks paint present in reference (0.02%)
Extra291,8 → 294,140.02candidate adds paint absent from reference (0.02%)
Extra250,8 → 253,140.02candidate adds paint absent from reference (0.02%)
Extra281,8 → 284,140.02candidate adds paint absent from reference (0.02%)
AntialiasCoverage164,208 → 171,2140.02ΔRGB(4,14,12)antialiasing coverage residue on a shared outline
Missing235,4 → 238,110.01candidate lacks paint present in reference (0.01%)
AntialiasCoverage70,208 → 77,2140.01ΔRGB(4,13,11)antialiasing coverage residue on a shared outline
AntialiasCoverage236,208 → 243,2140.01ΔRGB(4,13,11)antialiasing coverage residue on a shared outline
AntialiasCoverage268,208 → 274,2140.01ΔRGB(4,13,11)antialiasing coverage residue on a shared outline
Extra311,7 → 314,130.01candidate adds paint absent from reference (0.01%)
Extra218,0 → 222,40.01candidate adds paint absent from reference (0.01%)
Extra20,204 → 29,2040.01candidate adds paint absent from reference (0.01%)
Missing308,7 → 310,130.01candidate lacks paint present in reference (0.01%)
Extra209,207 → 216,2150.01candidate adds paint absent from reference (0.01%)
Extra162,207 → 170,2120.01candidate adds paint absent from reference (0.01%)
AntialiasCoverage210,208 → 216,2150.01ΔRGB(-43,-139,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage252,209 → 256,2160.01ΔRGB(-1,-4,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage278,209 → 282,2160.01ΔRGB(-1,-4,-3)antialiasing coverage residue on a shared outline
Missing238,8 → 241,130.01candidate lacks paint present in reference (0.01%)
Missing59,213 → 67,2170.01candidate lacks paint present in reference (0.01%)
Missing69,213 → 76,2170.01candidate lacks paint present in reference (0.01%)
Missing235,213 → 243,2170.01candidate lacks paint present in reference (0.01%)
Missing266,213 → 274,2170.01candidate lacks paint present in reference (0.01%)
Extra69,207 → 76,2100.01candidate adds paint absent from reference (0.01%)
Extra83,207 → 91,2100.01candidate adds paint absent from reference (0.01%)
Extra103,207 → 111,2100.01candidate adds paint absent from reference (0.01%)
Extra183,207 → 191,2100.01candidate adds paint absent from reference (0.01%)
Extra193,207 → 201,2100.01candidate adds paint absent from reference (0.01%)
Extra219,207 → 227,2100.01candidate adds paint absent from reference (0.01%)
Extra235,207 → 243,2100.01candidate adds paint absent from reference (0.01%)
Extra266,207 → 274,2100.01candidate adds paint absent from reference (0.01%)
Extra236,7 → 238,130.01candidate adds paint absent from reference (0.01%)
Missing210,208 → 215,2160.01candidate lacks paint present in reference (0.01%)
Missing250,215 → 258,2170.01candidate lacks paint present in reference (0.01%)
Missing276,215 → 284,2170.01candidate lacks paint present in reference (0.01%)
Extra302,4 → 304,70.01candidate adds paint absent from reference (0.01%)
Missing84,214 → 91,2170.01candidate lacks paint present in reference (0.01%)
Missing184,214 → 191,2170.01candidate lacks paint present in reference (0.01%)
Missing193,214 → 200,2170.01candidate lacks paint present in reference (0.01%)
Missing220,214 → 227,2170.01candidate lacks paint present in reference (0.01%)
source · cases/paged-media/footnote-float.html
1<!DOCTYPE html>
2<html>
3<head>
4<meta charset="utf-8">
5<style>
6  /* CSS GCPM `float: footnote`: the floated element is pulled out of flow and
7     rendered in the page's footnote area at the bottom, with an automatically
8     numbered call/marker left in the body text. This fixture uses a WeasyPrint
9     oracle because Chrome --print-to-pdf does not implement GCPM footnotes. */
10  @page { size: 400px 300px; margin: 1cm; }
11  * { margin: 0; box-sizing: border-box; }
12  html { font-family: ParitySans; line-height: 1.5; background: #ffffff; color: #111111; }
13  p { font-size: 16px; }
14  .fn { float: footnote; color: #b00020; }
15</style>
16</head>
17<body>
18  <p>Body text with a reference.<span class="fn">This belongs in the footnote area.</span> More body text follows the call.</p>
19</body>
20</html>
REFERENCE-DISPUTED 5507 px · above-floor 1.78% · raw 1.83% max-page diff paged-footnote-display-compact · display-compact · oracle: weasyprint · REFERENCE DISPUTEDAntialiasCoveragemissing 0.4%extra 0.4%ΔE 28.3
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: above-floor complete-page mismatch 1.777371% exceeds 1.0% PASS ceiling; visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
footnote-display:compact places fitting short footnotes inline in the footnote area; the standards-derived source preserves CSS Fonts 4 baseline-aligned synthesized calls.
reference dispute: CSS GCPM requires both fitting compact footnotes to share one inline footnote-area line at the page-area bottom, which both PDFs do. Ironpress preserves a 76.5pt separation between the body and footnote baselines; WeasyPrint preserves the same separation but shifts both by 0.1157pt. Chromium rendering of the independent standards-derived source matches Ironpress within 0.0021pt. The remaining raw signal is renderer-specific text contour and baseline quantization, not compact-footnote placement, so the WeasyPrint PDF is not a unique pixel oracle.
regions (702 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr29744930,1 → 143,115232total 2.0% · largest 0.1%
Missing2075090,4 → 143,11527total 0.2% · largest 0.01%
Extra1985052,106 → 143,11524total 0.2% · largest 0.01%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage6,6 → 12,130.1ΔRGB(1,1,1)antialiasing coverage residue on a shared outline
AntialiasCoverage85,6 → 91,130.1ΔRGB(1,1,1)antialiasing coverage residue on a shared outline
AntialiasCoverage101,6 → 107,130.1ΔRGB(1,1,1)antialiasing coverage residue on a shared outline
AntialiasCoverage35,6 → 41,130.10ΔRGB(-4,-4,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage50,4 → 56,130.09ΔRGB(4,4,3)antialiasing coverage residue on a shared outline
AntialiasCoverage13,6 → 19,130.08ΔRGB(-4,-4,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage108,6 → 114,130.08ΔRGB(-4,-4,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage73,6 → 79,130.08ΔRGB(-2,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage63,6 → 71,130.08ΔRGB(4,4,3)antialiasing coverage residue on a shared outline
AntialiasCoverage115,4 → 119,130.07ΔRGB(-2,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage120,1 → 124,80.06ΔRGB(-22,-21,-18)antialiasing coverage residue on a shared outline
AntialiasCoverage44,6 → 48,130.05ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage21,4 → 24,130.04ΔRGB(-4,-4,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage97,4 → 100,130.04ΔRGB(-4,-4,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage0,4 → 8,40.02ΔRGB(-84,-81,-66)antialiasing coverage residue on a shared outline
AntialiasCoverage110,108 → 114,1150.02ΔRGB(-103,-103,-103)antialiasing coverage residue on a shared outline
AntialiasCoverage82,6 → 85,90.02ΔRGB(6,6,5)antialiasing coverage residue on a shared outline
AntialiasCoverage43,107 → 46,1130.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage115,107 → 118,1130.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage124,107 → 127,1130.02ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage26,1 → 28,30.01ΔRGB(-22,-21,-17)antialiasing coverage residue on a shared outline
AntialiasCoverage2,107 → 4,1140.01ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage31,113 → 35,1150.01ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage52,113 → 56,1150.01ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage104,113 → 107,1150.01ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage139,113 → 142,1150.01ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
Missing110,109 → 113,1150.01candidate lacks paint present in reference (0.01%)
AntialiasCoverage73,110 → 77,1150.01ΔRGB(-49,-49,-49)antialiasing coverage residue on a shared outline
AntialiasCoverage24,108 → 27,1100.01ΔRGB(-19,-19,-19)antialiasing coverage residue on a shared outline
AntialiasCoverage60,108 → 63,1100.01ΔRGB(-19,-19,-19)antialiasing coverage residue on a shared outline
AntialiasCoverage96,108 → 99,1100.01ΔRGB(-19,-19,-19)antialiasing coverage residue on a shared outline
Extra110,108 → 111,1150.01candidate adds paint absent from reference (0.01%)
AntialiasCoverage39,108 → 43,1090.01ΔRGB(-6,-6,-6)antialiasing coverage residue on a shared outline
AntialiasCoverage67,109 → 70,1110.01ΔRGB(-56,-56,-56)antialiasing coverage residue on a shared outline
AntialiasCoverage4,5 → 8,50.009735ΔRGB(58,56,46)antialiasing coverage residue on a shared outline
AntialiasCoverage77,107 → 79,1120.009735ΔRGB(27,27,27)antialiasing coverage residue on a shared outline
AntialiasCoverage67,111 → 72,1130.009735ΔRGB(115,115,115)antialiasing coverage residue on a shared outline
AntialiasCoverage67,108 → 70,1090.009293ΔRGB(-21,-21,-21)antialiasing coverage residue on a shared outline
AntialiasCoverage67,114 → 71,1150.009293ΔRGB(-91,-91,-91)antialiasing coverage residue on a shared outline
AntialiasCoverage0,5 → 3,50.008850ΔRGB(118,112,92)antialiasing coverage residue on a shared outline
AntialiasCoverage135,108 → 136,1100.008850ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
Missing73,115 → 79,1150.008408candidate lacks paint present in reference (0.008408%)
AntialiasCoverage17,108 → 20,1090.007965ΔRGB(-14,-14,-14)antialiasing coverage residue on a shared outline
AntialiasCoverage89,108 → 92,1090.007965ΔRGB(-14,-14,-14)antialiasing coverage residue on a shared outline
AntialiasCoverage43,114 → 46,1150.007965ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage115,114 → 118,1150.007965ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage124,114 → 127,1150.007965ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
Missing2,115 → 7,1150.007523candidate lacks paint present in reference (0.007523%)
AntialiasCoverage66,110 → 67,1140.007523ΔRGB(24,24,24)antialiasing coverage residue on a shared outline
AntialiasCoverage27,110 → 27,1150.007080ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage63,110 → 63,1150.007080ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage99,110 → 100,1150.007080ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage75,113 → 79,1140.007080ΔRGB(-227,-227,-227)antialiasing coverage residue on a shared outline
Missing67,112 → 71,1120.006638candidate lacks paint present in reference (0.006638%)
AntialiasCoverage120,8 → 124,80.006638ΔRGB(254,243,199)antialiasing coverage residue on a shared outline
AntialiasCoverage127,11 → 128,130.006638ΔRGB(-77,-73,-60)antialiasing coverage residue on a shared outline
AntialiasCoverage28,110 → 28,1150.006638ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage64,110 → 64,1150.006638ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage100,110 → 100,1150.006638ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage19,111 → 21,1140.006638ΔRGB(-52,-52,-52)antialiasing coverage residue on a shared outline
AntialiasCoverage91,111 → 93,1140.006638ΔRGB(-52,-52,-52)antialiasing coverage residue on a shared outline
AntialiasCoverage26,8 → 30,80.006195ΔRGB(254,243,199)antialiasing coverage residue on a shared outline
AntialiasCoverage128,110 → 129,1130.006195ΔRGB(64,64,64)antialiasing coverage residue on a shared outline
AntialiasCoverage20,6 → 21,70.005753ΔRGB(2,2,2)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-footnote-display-compact.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>footnote display compact</title><style>
3@page{size:220px 140px;margin:10px}
4html{font-family:ParitySans;line-height:1.5;font-size:12px}
5*{margin:0;box-sizing:border-box}
6p{height:70px;background:#fef3c7}.fn{float:footnote;footnote-display:compact}
7</style></head><body><p>Text<span class="fn">short one</span> and more text<span class="fn">short two</span>.</p></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.22% · raw 0.22% (667 px) paged-footnote-counter-reset · counter-resetPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 2.8
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
counter-reset:footnote changes generated footnote call and marker numbers; the verified standards-derived source preserves CSS Fonts 4 baseline-aligned synthesized calls.
regions (7 total; showing 7 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr76670,0 → 180,18198total 0.3% · largest 0.09% · max ΔE 2.8

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage57,1 → 61,80.09ΔRGB(1,1,1)antialiasing coverage residue on a shared outline
AntialiasCoverage25,3 → 29,80.05ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage49,6 → 55,130.05ΔRGB(3,3,3)antialiasing coverage residue on a shared outline
AntialiasCoverage50,7 → 54,120.04ΔRGB(1,1,1)antialiasing coverage residue on a shared outline
AntialiasCoverage0,0 → 0,180.02ΔE 2.8 ΔRGB(11,5,0)antialiasing coverage residue on a shared outline
AntialiasCoverage180,0 → 180,180.02ΔE 2.8 ΔRGB(-11,-5,0)antialiasing coverage residue on a shared outline
ColorValue25,1 → 29,20.02ΔRGB(27,29,30)fill recolour ΔRGB(+27,+29,+30) (ΔE 0)
source · cases/paged-media/paged-footnote-counter-reset.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>footnote counter reset</title><style>
3@page{size:200px 152px;margin:10px}
4html{font-family:ParitySans;line-height:1.5;font-size:12px}
5*{margin:0;box-sizing:border-box}
6body{counter-reset:footnote 4}p{background:#e0f2fe}.fn{float:footnote}
7</style></head><body><p>One<span class="fn">first note</span> two<span class="fn">second note</span>.</p></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.09% · raw 0.09% (226 px) paged-footnote-policy-inline · policy-line-display-inline · 2 pagesPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 25.8
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: page 2: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
CSS GCPM footnote-policy:line keeps the line with its first footnote call on the following page while the preceding line remains on the current page; footnote-display:inline lays the note bodies inline. The verified standards-derived source materializes CSS Fonts 4's required synthesized superscript because ParitySans has no sups glyphs and Chromium does not synthesize the missing form.
regions (6 total; showing 6 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr6226132,2 → 143,9142total 0.1% · largest 0.07%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage138,2 → 143,80.07ΔRGB(5,25,21)antialiasing coverage residue on a shared outline
AntialiasCoverage132,2 → 135,30.02ΔRGB(4,21,17)antialiasing coverage residue on a shared outline
AntialiasCoverage138,9 → 143,90.007639ΔRGB(-46,-243,-199)antialiasing coverage residue on a shared outline
AntialiasCoverage132,9 → 137,90.007130ΔRGB(-46,-243,-199)antialiasing coverage residue on a shared outline
AntialiasCoverage132,8 → 134,80.006112ΔRGB(23,119,97)antialiasing coverage residue on a shared outline
AntialiasCoverage135,8 → 137,80.006112ΔRGB(23,119,97)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-footnote-policy-inline.html
1<!doctype html>
2<html>
3<head>
4  <meta charset="utf-8">
5  <style>
6    @page {
7      size: 192px 136px;
8      margin: 8px;
9      @footnote { border-top: 8px solid #111111; padding-top: 8px; }
10    }
11    html { font-family: ParitySans; line-height: 1.5; font-size: 12px; }
12    * { margin: 0; box-sizing: border-box; }
13    .lead { width: 176px; height: 72px; background: #e0f2fe; }
14    p { width: 176px; line-height: 20px; background: #fef3c7; }
15    .fn { float: footnote; footnote-display: inline; footnote-policy: line; color: #d00000; }
16  </style>
17</head>
18<body>
19  <div class="lead"></div>
20  <p>First line stays here<br>Second line has notes<span class="fn">first note</span><span class="fn">second note</span></p>
21</body>
22</html>
PASS exact match paged-footnote-policy-block · policy-block · oracle: weasyprint · 2 pages
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
footnote-policy:block moves the whole owning paragraph with its footnote when the note cannot fit. The verified standards-derived reference isolates that visible page-break geometry from unsupported footnote pseudo-element typography.
PASS exact match paged-footnote-styling-pseudos · styling-and-pseudo-elements
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A nested GCPM @page/@footnote rule plus ::footnote-call and ::footnote-marker custom content affects the footnote area, calls, and markers. The call explicitly resets GCPM's default font-variant-position and uses baseline alignment, isolating pseudo-element styling from user-agent-defined superscript metrics. Chromium lacks native float:footnote, so the authenticated standards-derived source materializes the required page-area result without importing WeasyPrint's incompatible transformed-text rasterization. The fixture uses integral 300-DPI page geometry to isolate generated-footnote styling.

bleed — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.41% · raw 0.41% (821 px) paged-bleed-crop-background · background-into-bleed · oracle: weasyprintPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 34.5
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
@page bleed with crop marks paints the page background into the bleed area; catches renderers that clip backgrounds to the trim page box.
regions (11 total; showing 11 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr118210,0 → 144,144499total 0.4% · largest 0.2%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage12,12 → 92,920.2ΔRGB(-14,89,-36)antialiasing coverage residue on a shared outline
AntialiasCoverage0,11 → 6,120.02ΔRGB(1,27,21)antialiasing coverage residue on a shared outline
AntialiasCoverage138,11 → 144,120.02ΔRGB(1,27,21)antialiasing coverage residue on a shared outline
AntialiasCoverage0,131 → 6,1320.02ΔRGB(1,27,21)antialiasing coverage residue on a shared outline
AntialiasCoverage138,131 → 144,1320.02ΔRGB(1,27,21)antialiasing coverage residue on a shared outline
AntialiasCoverage11,138 → 12,1440.02ΔRGB(1,27,21)antialiasing coverage residue on a shared outline
AntialiasCoverage131,138 → 132,1440.02ΔRGB(1,27,21)antialiasing coverage residue on a shared outline
AntialiasCoverage11,0 → 11,60.009383ΔRGB(1,27,21)antialiasing coverage residue on a shared outline
AntialiasCoverage12,0 → 12,60.009383ΔRGB(1,27,21)antialiasing coverage residue on a shared outline
AntialiasCoverage131,0 → 131,60.009383ΔRGB(1,27,21)antialiasing coverage residue on a shared outline
AntialiasCoverage132,0 → 132,60.009383ΔRGB(1,27,21)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-bleed-crop-background.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>page bleed crop background</title><style>
3@page{size:120px 120px;margin:0;bleed:12px;marks:crop;background:#06d6a0}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.box{width:80px;height:80px;background:#1d4ed8}
7</style></head><body><div class="box"></div></body></html>

break-after — 100.00% verified visual parity PASS 5 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.13% · raw 0.13% (252 px) paged-break-after-left-from-left · left-from-left-page · oracle: weasyprint · 4 pagesPASS via CSS-scale observation: conserved sub-CSS coverageAntialiasCoveragemissing 0.02%extra 0.02%ΔE 12.4
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 4
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: page 4: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
break-after:left on page 2, a left page, must insert a blank right page so following content starts on page 4; catches implementations that alias left to an ordinary page break.
regions (66 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr221606,10 → 15,2119total 0.09% · largest 0.01%
Missing23467,11 → 14,208total 0.02% · largest 0.004267%
Extra21467,12 → 14,2110total 0.02% · largest 0.005333%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage8,12 → 13,130.01ΔRGB(-1,-39,-65)antialiasing coverage residue on a shared outline
AntialiasCoverage9,10 → 12,110.008000ΔRGB(2,47,78)antialiasing coverage residue on a shared outline
AntialiasCoverage7,19 → 10,210.006933ΔRGB(-2,-69,-116)antialiasing coverage residue on a shared outline
AntialiasCoverage6,14 → 6,170.005867ΔRGB(0,0,1)antialiasing coverage residue on a shared outline
AntialiasCoverage8,14 → 8,170.005867ΔRGB(0,-1,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage8,18 → 10,190.005867ΔRGB(1,37,63)antialiasing coverage residue on a shared outline
Extra10,12 → 13,120.005333candidate adds paint absent from reference (0.005333%)
Extra10,21 → 13,210.005333candidate adds paint absent from reference (0.005333%)
AntialiasCoverage13,11 → 15,120.005333ΔRGB(2,56,94)antialiasing coverage residue on a shared outline
AntialiasCoverage12,19 → 14,200.005333ΔRGB(2,61,102)antialiasing coverage residue on a shared outline
AntialiasCoverage10,21 → 13,210.005333ΔRGB(-2,-63,-105)antialiasing coverage residue on a shared outline
AntialiasCoverage13,12 → 15,130.004800ΔRGB(-1,-25,-42)antialiasing coverage residue on a shared outline
AntialiasCoverage13,20 → 15,210.004800ΔRGB(-2,-59,-98)antialiasing coverage residue on a shared outline
Missing10,11 → 12,110.004267candidate lacks paint present in reference (0.004267%)
AntialiasCoverage7,11 → 8,120.003733ΔRGB(3,81,134)antialiasing coverage residue on a shared outline
AntialiasCoverage7,18 → 7,190.003200ΔRGB(-2,-40,-66)antialiasing coverage residue on a shared outline
Missing10,20 → 11,200.002667candidate lacks paint present in reference (0.002667%)
Missing12,20 → 13,200.002667candidate lacks paint present in reference (0.002667%)
AntialiasCoverage10,20 → 11,200.002133ΔRGB(2,64,107)antialiasing coverage residue on a shared outline
Missing9,11 → 10,110.001600candidate lacks paint present in reference (0.001600%)
Missing13,11 → 13,110.001600candidate lacks paint present in reference (0.001600%)
Extra13,12 → 14,120.001600candidate adds paint absent from reference (0.001600%)
AntialiasCoverage7,13 → 7,140.001600ΔRGB(2,41,68)antialiasing coverage residue on a shared outline
AntialiasCoverage8,13 → 8,140.001600ΔRGB(-1,-19,-32)antialiasing coverage residue on a shared outline
AntialiasCoverage14,19 → 15,190.001600ΔRGB(1,23,38)antialiasing coverage residue on a shared outline
Missing9,11 → 9,110.001067candidate lacks paint present in reference (0.001067%)
Missing14,11 → 14,110.001067candidate lacks paint present in reference (0.001067%)
Missing9,20 → 10,200.001067candidate lacks paint present in reference (0.001067%)
Missing13,20 → 14,200.001067candidate lacks paint present in reference (0.001067%)
Extra9,12 → 10,120.001067candidate adds paint absent from reference (0.001067%)
Extra9,20 → 9,200.001067candidate adds paint absent from reference (0.001067%)
Extra14,20 → 14,200.001067candidate adds paint absent from reference (0.001067%)
Extra9,20 → 10,200.001067candidate adds paint absent from reference (0.001067%)
Extra13,20 → 13,200.001067candidate adds paint absent from reference (0.001067%)
AntialiasCoverage7,12 → 7,130.001067ΔRGB(3,74,123)antialiasing coverage residue on a shared outline
Missing8,12 → 8,120.000533candidate lacks paint present in reference (0.000533%)
Missing14,12 → 14,120.000533candidate lacks paint present in reference (0.000533%)
Missing8,12 → 8,120.000533candidate lacks paint present in reference (0.000533%)
Missing8,12 → 8,120.000533candidate lacks paint present in reference (0.000533%)
Missing7,12 → 7,120.000533candidate lacks paint present in reference (0.000533%)
Missing7,13 → 7,130.000533candidate lacks paint present in reference (0.000533%)
Missing7,14 → 7,140.000533candidate lacks paint present in reference (0.000533%)
Missing8,18 → 8,180.000533candidate lacks paint present in reference (0.000533%)
Missing8,19 → 8,190.000533candidate lacks paint present in reference (0.000533%)
Missing9,19 → 9,190.000533candidate lacks paint present in reference (0.000533%)
Missing14,19 → 14,190.000533candidate lacks paint present in reference (0.000533%)
Missing9,19 → 9,190.000533candidate lacks paint present in reference (0.000533%)
Missing14,19 → 14,190.000533candidate lacks paint present in reference (0.000533%)
Missing12,20 → 12,200.000533candidate lacks paint present in reference (0.000533%)
Extra9,12 → 9,120.000533candidate adds paint absent from reference (0.000533%)
Extra14,12 → 14,120.000533candidate adds paint absent from reference (0.000533%)
Extra9,12 → 9,120.000533candidate adds paint absent from reference (0.000533%)
Extra14,12 → 14,120.000533candidate adds paint absent from reference (0.000533%)
Extra8,13 → 8,130.000533candidate adds paint absent from reference (0.000533%)
Extra8,14 → 8,140.000533candidate adds paint absent from reference (0.000533%)
Extra7,17 → 7,170.000533candidate adds paint absent from reference (0.000533%)
Extra7,18 → 7,180.000533candidate adds paint absent from reference (0.000533%)
Extra7,19 → 7,190.000533candidate adds paint absent from reference (0.000533%)
Extra8,19 → 8,190.000533candidate adds paint absent from reference (0.000533%)
Extra8,20 → 8,200.000533candidate adds paint absent from reference (0.000533%)
Extra8,20 → 8,200.000533candidate adds paint absent from reference (0.000533%)
Extra14,20 → 14,200.000533candidate adds paint absent from reference (0.000533%)
AntialiasCoverage13,12 → 13,120.000533ΔRGB(-1,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage12,20 → 12,200.000533ΔRGB(5,132,221)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-break-after-left-from-left.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>break-after left from left page</title><style>
3@page{size:160px 120px;margin:0}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.block{width:160px;height:120px;color:#fff;font-size:14px;padding:6px}.a{background:#1d4ed8}.b{background:#16a34a;break-after:left}.c{background:#f97316}
7</style></head><body><div class="block a">A</div><div class="block b">B</div><div class="block c">C</div></body></html>
PASS exact match break-after-page-mid-document · page-mid-document-real · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Modern break-after:page on the SECOND of three blocks forces the third block onto page 2 while the first two share page 1 — proving the modern break-after path fires mid-flow, not only on the first/last element. The multi-page harness asserts the page COUNT (2) and diffs both pages.
PASS exact match break-after-page-modern · page-modern-real-pagination · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Modern CSS Fragmentation break-after:page on the first block forces the following content onto page 2 — a genuine TWO-page document. The multi-page harness asserts the page COUNT (2) and diffs both pages.
PASS exact match paged-break-after-avoid-keep-next · avoid-keep-with-next · oracle: weasyprint · 2 pages
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
break-after:avoid keeps two adjacent solid boxes on the same page when they fit together; catches implementations that parse avoid but treat it as a no-op for automatic page breaks.
PASS exact match paged-break-after-right-blank · right-parity-blank · oracle: weasyprint · 3 pages
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
break-after:right after a full first page must insert a blank left page so the next real block starts on a right page; catches implementations that alias right to an ordinary page break.

break-before — 100.00% verified visual parity PASS 5 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.13% · raw 0.13% (252 px) paged-break-before-verso-left · verso-left-page · oracle: weasyprint · 4 pagesPASS via CSS-scale observation: conserved sub-CSS coverageAntialiasCoveragemissing 0.02%extra 0.02%ΔE 9.6
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 4
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: page 4: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
break-before:verso after two full pages must skip the natural right page and land on the next left page; catches parsers that treat verso as page or only recognize left/right.
regions (66 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr221606,10 → 15,2119total 0.09% · largest 0.01%
Missing23467,11 → 14,208total 0.02% · largest 0.004267%
Extra21467,12 → 14,2110total 0.02% · largest 0.005333%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage8,12 → 13,130.01ΔRGB(-5,-21,-69)antialiasing coverage residue on a shared outline
AntialiasCoverage9,10 → 12,110.008000ΔRGB(7,25,83)antialiasing coverage residue on a shared outline
AntialiasCoverage7,19 → 10,210.006933ΔRGB(-10,-37,-123)antialiasing coverage residue on a shared outline
AntialiasCoverage6,14 → 6,170.005867ΔRGB(0,0,1)antialiasing coverage residue on a shared outline
AntialiasCoverage8,14 → 8,170.005867ΔRGB(0,-1,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage8,18 → 10,190.005867ΔRGB(5,20,66)antialiasing coverage residue on a shared outline
Extra10,12 → 13,120.005333candidate adds paint absent from reference (0.005333%)
Extra10,21 → 13,210.005333candidate adds paint absent from reference (0.005333%)
AntialiasCoverage13,11 → 15,120.005333ΔRGB(8,30,99)antialiasing coverage residue on a shared outline
AntialiasCoverage12,19 → 14,200.005333ΔRGB(9,33,108)antialiasing coverage residue on a shared outline
AntialiasCoverage10,21 → 13,210.005333ΔRGB(-9,-34,-111)antialiasing coverage residue on a shared outline
AntialiasCoverage13,12 → 15,130.004800ΔRGB(-3,-14,-45)antialiasing coverage residue on a shared outline
AntialiasCoverage13,20 → 15,210.004800ΔRGB(-8,-32,-104)antialiasing coverage residue on a shared outline
Missing10,11 → 12,110.004267candidate lacks paint present in reference (0.004267%)
AntialiasCoverage7,11 → 8,120.003733ΔRGB(12,44,143)antialiasing coverage residue on a shared outline
AntialiasCoverage7,18 → 7,190.003200ΔRGB(-6,-22,-70)antialiasing coverage residue on a shared outline
Missing10,20 → 11,200.002667candidate lacks paint present in reference (0.002667%)
Missing12,20 → 13,200.002667candidate lacks paint present in reference (0.002667%)
AntialiasCoverage10,20 → 11,200.002133ΔRGB(9,35,114)antialiasing coverage residue on a shared outline
Missing9,11 → 10,110.001600candidate lacks paint present in reference (0.001600%)
Missing13,11 → 13,110.001600candidate lacks paint present in reference (0.001600%)
Extra13,12 → 14,120.001600candidate adds paint absent from reference (0.001600%)
AntialiasCoverage7,13 → 7,140.001600ΔRGB(6,23,72)antialiasing coverage residue on a shared outline
AntialiasCoverage8,13 → 8,140.001600ΔRGB(-2,-10,-34)antialiasing coverage residue on a shared outline
AntialiasCoverage14,19 → 15,190.001600ΔRGB(3,12,40)antialiasing coverage residue on a shared outline
Missing9,11 → 9,110.001067candidate lacks paint present in reference (0.001067%)
Missing14,11 → 14,110.001067candidate lacks paint present in reference (0.001067%)
Missing9,20 → 10,200.001067candidate lacks paint present in reference (0.001067%)
Missing13,20 → 14,200.001067candidate lacks paint present in reference (0.001067%)
Extra9,12 → 10,120.001067candidate adds paint absent from reference (0.001067%)
Extra9,20 → 9,200.001067candidate adds paint absent from reference (0.001067%)
Extra14,20 → 14,200.001067candidate adds paint absent from reference (0.001067%)
Extra9,20 → 10,200.001067candidate adds paint absent from reference (0.001067%)
Extra13,20 → 13,200.001067candidate adds paint absent from reference (0.001067%)
AntialiasCoverage7,12 → 7,130.001067ΔRGB(11,40,131)antialiasing coverage residue on a shared outline
Missing8,12 → 8,120.000533candidate lacks paint present in reference (0.000533%)
Missing14,12 → 14,120.000533candidate lacks paint present in reference (0.000533%)
Missing8,12 → 8,120.000533candidate lacks paint present in reference (0.000533%)
Missing8,12 → 8,120.000533candidate lacks paint present in reference (0.000533%)
Missing7,12 → 7,120.000533candidate lacks paint present in reference (0.000533%)
Missing7,13 → 7,130.000533candidate lacks paint present in reference (0.000533%)
Missing7,14 → 7,140.000533candidate lacks paint present in reference (0.000533%)
Missing8,18 → 8,180.000533candidate lacks paint present in reference (0.000533%)
Missing8,19 → 8,190.000533candidate lacks paint present in reference (0.000533%)
Missing9,19 → 9,190.000533candidate lacks paint present in reference (0.000533%)
Missing14,19 → 14,190.000533candidate lacks paint present in reference (0.000533%)
Missing9,19 → 9,190.000533candidate lacks paint present in reference (0.000533%)
Missing14,19 → 14,190.000533candidate lacks paint present in reference (0.000533%)
Missing12,20 → 12,200.000533candidate lacks paint present in reference (0.000533%)
Extra9,12 → 9,120.000533candidate adds paint absent from reference (0.000533%)
Extra14,12 → 14,120.000533candidate adds paint absent from reference (0.000533%)
Extra9,12 → 9,120.000533candidate adds paint absent from reference (0.000533%)
Extra14,12 → 14,120.000533candidate adds paint absent from reference (0.000533%)
Extra8,13 → 8,130.000533candidate adds paint absent from reference (0.000533%)
Extra8,14 → 8,140.000533candidate adds paint absent from reference (0.000533%)
Extra7,17 → 7,170.000533candidate adds paint absent from reference (0.000533%)
Extra7,18 → 7,180.000533candidate adds paint absent from reference (0.000533%)
Extra7,19 → 7,190.000533candidate adds paint absent from reference (0.000533%)
Extra8,19 → 8,190.000533candidate adds paint absent from reference (0.000533%)
Extra8,20 → 8,200.000533candidate adds paint absent from reference (0.000533%)
Extra8,20 → 8,200.000533candidate adds paint absent from reference (0.000533%)
Extra14,20 → 14,200.000533candidate adds paint absent from reference (0.000533%)
AntialiasCoverage13,12 → 13,120.000533ΔRGB(-1,-1,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage12,20 → 12,200.000533ΔRGB(19,72,234)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-break-before-verso-left.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>break-before verso left page</title><style>
3@page{size:160px 120px;margin:0}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.block{width:160px;height:120px;color:#fff;font-size:14px;padding:6px}.a{background:#1d4ed8}.b{background:#22c55e}.c{background:#eab308;break-before:verso}
7</style></head><body><div class="block a">A</div><div class="block b">B</div><div class="block c">C</div></body></html>
PASS exact match break-before-page-modern-real · page-modern-real-pagination · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Modern CSS Fragmentation break-before:page (no legacy fallback) on the second block forces it onto page 2 — a genuine TWO-page document. The multi-page harness asserts the page COUNT (2) and diffs both pages (page 1 = blue box, page 2 = green box). Proves the modern break-* family is now parsed and wired into the forced-break path.
PASS exact match paged-break-before-avoid-page-keep-prev · avoid-page-keep-with-previous · oracle: weasyprint · 2 pages
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
break-before:avoid-page keeps two adjacent solid boxes on the same page when they fit together; catches paginators that ignore break-before avoidance during automatic breaks.
PASS exact match paged-break-before-page-modern · page-leading-noop
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Modern break-before:page on the first block is a no-op (no preceding content): the forced break is suppressed at the document start, so a single page renders. The modern break-* family is now parsed and wired into the forced-break path (see break-before-page-modern-real for the real two-page case).
PASS exact match paged-break-before-recto-leading · recto-leading-noop
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
break-before:recto on the first in-flow block must not create a leading blank page; catches implementations that insert parity pages before suppressing leading breaks.

break-inside — 100.00% verified visual parity PASS 4 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match break-inside-avoid-figure · avoid-figure-keep-together · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
break-inside:avoid on a <figure> (image + caption) that would straddle a boundary: a 200px spacer leaves too little room, so Chrome keeps the figure together and pushes it WHOLE to page 2 (image and caption stay on the same page). The multi-page harness asserts the page COUNT (2) and diffs both pages.
PASS exact match break-inside-avoid-real · avoid-real-keep-together · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
break-inside:avoid keeps a bordered card together across a page boundary: a tall spacer fills most of page 1, so the card would straddle the boundary and is pushed WHOLE onto page 2 (not split). The multi-page harness asserts the page COUNT (2): page 1 = spacer, page 2 = intact card.
PASS exact match paged-break-inside-avoid · avoid
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Modern break-inside:avoid keeps a card intact on a single page. Content already fits, so the rendered result equals an unbroken nested box. The modern break-inside property is now parsed and honored (see break-inside-avoid-real for the cross-page case).
PASS exact match paged-break-inside-avoid-page-card · avoid-page-card · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
break-inside:avoid-page keeps a page-fitting card intact when it would straddle a page boundary; catches parsers that support avoid but not avoid-page.

break-precedence — 100.00% verified visual parity PASS 2 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-break-precedence-before-left-wins · break-before-left-over-break-after-right · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
At a shared class-A break point, break-before:left on the following block must override break-after:right on the preceding block; catches independent-break implementations that insert a blank page for the earlier value.
PASS exact match paged-break-precedence-before-wins · break-before-over-break-after · oracle: weasyprint · 3 pages
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
At a shared class-A break point, break-before:right on the following block must win over break-after:left on the preceding block; catches paginators that emit independent breaks and suppress the later side request.

break-propagation — 100.00% verified visual parity PASS 2 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-child-break-after-propagates · last-child-break-after · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
break-after:page on a wrapper's last in-flow child propagates after the wrapper; catches layouts that fragment the wrapper decoration onto the following page.
PASS exact match paged-child-break-before-propagates · first-child-break-before · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
break-before:page on a wrapper's first in-flow child propagates to before the wrapper; catches layouts that break inside the wrapper and leave wrapper decoration on the previous page.

flex-fragmentation — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-flex-column-fragmentation · column-children-across-pages · 3 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A vertical flex container taller than one page should continue its child items on later pages; catches paginators that treat flex containers as unsplittable atoms.

fragmentation — 100.00% verified visual parity PASS 2 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match multicol-span-all-page-break · multicol-span-all-page-break · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A column-span: all heading inside a multi-column block interrupts the columns; column flow resumes and fragments across page boundaries.
PASS exact match table-row-taller-than-page · table-row-slice · 3 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A single table row taller than the page content box slices its cell background across page fragments.

grid-fragmentation — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-grid-fragmentation-rows · rows-across-pages · 3 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Rows in a one-column grid continue across page fragments instead of clipping as one atomic grid; catches paginators that lose lower grid rows while block/table fragmentation works.

marks — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.22% · raw 0.22% (400 px) paged-marks-crop-cross · crop-cross · oracle: weasyprintPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 21.6
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
@page marks:crop cross emits printer crop and registration marks around the page; catches renderers that implement only page size, margin, and background.
regions (24 total; showing 24 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr244000,0 → 136,13631total 0.2% · largest 0.02%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage66,1 → 70,40.02ΔRGB(28,30,32)antialiasing coverage residue on a shared outline
AntialiasCoverage1,66 → 4,700.02ΔRGB(28,30,32)antialiasing coverage residue on a shared outline
AntialiasCoverage132,66 → 134,700.02ΔRGB(28,30,32)antialiasing coverage residue on a shared outline
AntialiasCoverage66,132 → 70,1340.02ΔRGB(28,30,32)antialiasing coverage residue on a shared outline
AntialiasCoverage7,0 → 8,40.02ΔRGB(-76,-81,-88)antialiasing coverage residue on a shared outline
AntialiasCoverage127,0 → 128,40.02ΔRGB(-76,-81,-88)antialiasing coverage residue on a shared outline
AntialiasCoverage0,7 → 4,80.02ΔRGB(-76,-81,-88)antialiasing coverage residue on a shared outline
AntialiasCoverage132,7 → 136,80.02ΔRGB(-76,-81,-88)antialiasing coverage residue on a shared outline
AntialiasCoverage0,127 → 4,1280.02ΔRGB(-76,-81,-88)antialiasing coverage residue on a shared outline
AntialiasCoverage132,127 → 136,1280.02ΔRGB(-76,-81,-88)antialiasing coverage residue on a shared outline
AntialiasCoverage7,132 → 8,1360.02ΔRGB(-76,-81,-88)antialiasing coverage residue on a shared outline
AntialiasCoverage127,132 → 128,1360.02ΔRGB(-76,-81,-88)antialiasing coverage residue on a shared outline
AntialiasCoverage68,1 → 70,20.003875ΔRGB(-66,-71,-77)antialiasing coverage residue on a shared outline
AntialiasCoverage1,68 → 2,700.003875ΔRGB(-66,-71,-77)antialiasing coverage residue on a shared outline
AntialiasCoverage134,68 → 134,700.003875ΔRGB(-66,-71,-77)antialiasing coverage residue on a shared outline
AntialiasCoverage68,134 → 70,1340.003875ΔRGB(-66,-71,-77)antialiasing coverage residue on a shared outline
AntialiasCoverage68,0 → 68,10.001661ΔRGB(78,83,90)antialiasing coverage residue on a shared outline
AntialiasCoverage68,0 → 68,10.001661ΔRGB(78,83,90)antialiasing coverage residue on a shared outline
AntialiasCoverage0,68 → 1,680.001661ΔRGB(78,83,90)antialiasing coverage residue on a shared outline
AntialiasCoverage135,68 → 136,680.001661ΔRGB(78,83,90)antialiasing coverage residue on a shared outline
AntialiasCoverage0,68 → 1,680.001661ΔRGB(78,83,90)antialiasing coverage residue on a shared outline
AntialiasCoverage135,68 → 136,680.001661ΔRGB(78,83,90)antialiasing coverage residue on a shared outline
AntialiasCoverage68,135 → 68,1360.001661ΔRGB(78,83,90)antialiasing coverage residue on a shared outline
AntialiasCoverage68,135 → 68,1360.001661ΔRGB(78,83,90)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-marks-crop-cross.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>page crop and cross marks</title><style>
3@page{size:120px 120px;margin:10px;marks:crop cross;background:#dbeafe}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.box{height:40px;background:#16a34a}
7</style></head><body><div class="box"></div></body></html>

named-page — 100.00% verified visual parity PASS 5 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.29% · raw 0.29% (3426 px) paged-named-page-size · page-size-override · oracle: weasyprint · 2 pagesPASS via CSS-scale observation: sub-CSS shared-outline coverageAntialiasCoveragemissing 0.4%ΔE 15.7
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
CSS Paged Media 3 §3.4 named-page SIZE: @page big { size: A3 } selected by .big { page: big } makes page 2 physically A3-sized while page 1 keeps the default 400px by 304px size. The authenticated WeasyPrint reference uses the standard 297mm by 420mm A3 MediaBox; box edges use integral 300-DPI geometry so the assertion isolates per-page size selection.
regions (4 total; showing 4 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
Missing211750,0 → 224,152700total 0.4% · largest 0.2%
ColorErr222514,4 → 224,1522250total 0.7% · largest 0.7%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage4,4 → 220,1480.7ΔRGB(-5,-10,-23)antialiasing coverage residue on a shared outline
Missing0,152 → 224,1520.2candidate lacks paint present in reference (0.2%)
Missing224,0 → 224,1520.1candidate lacks paint present in reference (0.1%)
AntialiasCoverage224,152 → 224,1520.000300ΔRGB(4,4,3)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-named-page-size.html
1<!DOCTYPE html>
2<html>
3<head>
4<meta charset="utf-8">
5<style>
6  /* CSS Paged Media 3 §3.4 named-page SIZE: `@page big { size: A3 }` selected by
7     `.big { page: big }` should make the page the box lands on physically larger
8     (A3) than the default page, while page 1 keeps the default 400px by 300px
9     size. */
10  @page { size: 400px 304px; margin: 32px; }
11  @page big { size: A3; margin: 32px; }
12  * { margin: 0; box-sizing: border-box; }
13  html { font-family: ParitySans; line-height: 1.5; background: #ffffff; }
14  .normal { width: 224px; height: 152px; background: #2d6cdf; border: 4px solid #11305f; }
15  .big { page: big; width: 304px; height: 200px; background: #ffb703; border: 4px solid #fb8500; }
16</style>
17</head>
18<body>
19  <div class="normal"></div>
20  <div class="big"></div>
21</body>
22</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.12% · raw 0.12% (200 px) paged-named-page-continuation · continuation-geometry · 5 pagesPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 12.1
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 4
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 5
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: page 2: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
A tall element assigned page:chapter keeps the chapter page size and margin on continuation pages; catches named-page implementations that apply geometry only to the first fragment.
regions (1 total; showing 1 representative)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr12000,0 → 0,64200total 0.3% · largest 0.3%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage0,0 → 0,640.3ΔRGB(70,28,54)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-named-page-continuation.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>named page continuation geometry</title><style>
3@page{size:160px 120px;margin:0}
4@page chapter{size:160px 104px;margin:20px}
5html{font-family:ParitySans;line-height:1.5}
6*{margin:0;box-sizing:border-box}
7.cover{height:120px;background:#1d4ed8;color:#fff;font-size:14px;padding:6px}.chapter{page:chapter;height:220px;background:#16a34a;color:#111;font-size:12px}
8</style></head><body><div class="cover">cover</div><div class="chapter">chapter content</div></body></html>
PASS exact match paged-named-page · page-property-leading-noop
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
The page property names an @page rule (page: cover) on the document's FIRST block, with no matching @page cover rule. Named pages are now parsed (CSS Paged Media 3 §3.4): the property forces a page break before the box, but a forced break at the very start of the fragmentation flow is suppressed, so a single page renders with the section on the default page — matching Chrome. The named-page MARGIN application is covered by paged-named-page-margin.
PASS exact match paged-named-page-margin · page-margin-override · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
CSS Paged Media 3 §3.4 named pages: page: wide on a .cover block forces a page break and the page it starts (page 2) adopts the @page wide margin (16px) instead of the default @page margin (32px). The multi-page harness asserts the page count and compares both page geometries on integral 300-DPI boundaries, avoiding a non-semantic fractional-raster edge.
PASS exact match paged-root-named-page · root-start-page-value
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
CSS Paged Media 3 section 8.1: page: chapter on body supplies the root start page value, so the first printed page uses the matching named @page margin box instead of the universal one.

orphans-widows — 100.00% verified visual parity PASS 6 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match orphans-3 · orphans-3 · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
orphans:3 requires at least three line boxes at the bottom of a fragment before a break. The five-line paragraph fragments across two pages; the break leaves 3 lines on page 1 and 2 on page 2 (Chrome). The harness asserts the page COUNT (2) and diffs both pages.
PASS exact match orphans-4 · orphans-4 · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
orphans:4 requires at least four line boxes left at the bottom of a fragment. A 100px spacer leaves only three line-slots on page 1, so the five-line paragraph cannot satisfy orphans:4 there and is pushed WHOLE to page 2 (Chrome); the initial orphans:2 would instead split it. The multi-page harness asserts the page COUNT (2) and diffs both pages.
PASS exact match orphans-widows-default · default-2-real-fragmentation · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A five-line paragraph taller than the @page content box (which fits four lines) is fragmented across two pages. With the initial orphans:2/widows:2, a naive greedy fill (4 lines on page 1, a single widow on page 2) is corrected so each fragment keeps >=2 lines: Chrome puts 3 lines on page 1 and 2 on page 2. The multi-page harness asserts the page COUNT (2) and diffs both pages — a real orphans/widows test, not a single-page no-op.
PASS exact match paged-orphans-widows · single-page-noop
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
orphans:3/widows:3 on a paragraph whose lines all fit on one page have no visible effect; a single-page guard that the orphans/widows properties parse and never regress the no-break case (real cross-page fragmentation is covered by orphans-widows-default, orphans-3, widows-3, widows-4, orphans-4).
PASS exact match widows-3 · widows-3 · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
widows:3 requires at least three line boxes at the top of the next fragment after a break. The five-line paragraph fragments across two pages; the break moves earlier so the continuation starts with 3 lines, leaving 2 on page 1 (Chrome). The harness asserts the page COUNT (2) and diffs both pages.
PASS exact match widows-4 · widows-4 · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
widows:4 forces at least four line boxes onto the continuation page. An eight-line paragraph in a six-line page would naively split 6/2, but widows:4 moves the break two lines earlier to 4/4 (Chrome). The multi-page harness asserts the page COUNT (2) and diffs both pages.

page-background — 100.00% verified visual parity PASS 2 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match at-page-background-bleed · bleed-area-full-page
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A background declared on @page paints the bleed area — the entire page box INCLUDING the @page margins (CSS Paged Media 3 §3.1). The 40px margin band is filled; a white bordered card sits inset in the content box.
PASS exact match root-background-content-box · canvas-confined-to-content
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A propagated :root/canvas background is the document canvas, confined to the page content box — it does NOT paint the @page margin band (CSS Paged Media 3 §3.1). Same geometry as at-page-background-bleed, but the 40px margins stay white; the blue fills only inside them.

page-break-after — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-page-break-after-always-single · always-trailing-noop
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page-break-after:always on the LAST in-flow block (nothing follows) must NOT emit a trailing blank page — Chrome renders one page, not two. The multi-page harness asserts the page COUNT (1) as well as page-1 content, which catches the trailing-blank-page bug the page-1-only comparison used to hide.

page-break-before — 100.00% verified visual parity PASS 3 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-break-before-third-block · always-mid-document-real · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Legacy page-break-before:always on the THIRD of three blocks moves it to page 2 while the first two share page 1 — proving the legacy forced break fires mid-flow. The multi-page harness asserts the page COUNT (2) and diffs both pages.
PASS exact match paged-forced-break-two-pages · forced-break-real-pagination · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page-break-before:always puts the second box on page 2, so the document is genuinely TWO pages. The multi-page harness asserts the page COUNT (2) and diffs BOTH pages against Chrome (page 1 = blue box, page 2 = green box) — a real pagination test, not a single-page no-op.
PASS exact match paged-page-break-before-avoid-noop · avoid-noop
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page-break-before:avoid on content that already fits on one page is a no-op; both blocks remain stacked. Tracks the legacy avoid-value gap.

page-break-inside — 100.00% verified visual parity PASS 3 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match page-break-inside-avoid-card-legacy · avoid-card-straddle-real · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Legacy page-break-inside:avoid on a bordered CARD that would straddle a boundary: a 220px spacer leaves too little room, so Chrome (and ironpress) push the whole card to page 2. Confirms the legacy alias is honored for block containers. The multi-page harness asserts the page COUNT (2) and diffs both pages.
PASS exact match page-break-inside-avoid-table-straddle · avoid-table-straddle-real · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Legacy page-break-inside:avoid on a TABLE that would straddle a page boundary: a 150px spacer leaves too little room for the 160px table. Chrome keeps the table whole and pushes it to page 2; ironpress now honors table-level keep-together too (the avoid-inside table fits a full page, so the whole row run is moved to page 2 instead of split between rows, matching the block-level keep-together in break-inside-avoid-real). The multi-page harness asserts the page COUNT (2) and diffs both pages.
PASS exact match paged-page-break-inside-avoid-table · avoid-table
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page-break-inside:avoid on a table that already fits keeps the whole table on one page. Tracks the legacy page-break-inside gap with a geometry-deterministic table.

page-counter — 100.00% verified visual parity PASS 5 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.76% · raw 0.77% (1244 px) paged-page-counter-increment-two · counter-increment-page-two · oracle: weasyprint · 3 pagesPASS via CSS-scale observation: conserved sub-CSS coverageMissingmissing 0.9%extra 0.9%ΔE 35.8
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate lacks paint present in reference (0.9%)
@page counter-increment:page 2 changes counter(page) in margin boxes; catches renderers that substitute the physical one-based page index.
regions (51 total; showing 51 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr2514471,0 → 79,1236total 0.2% · largest 0.04%
Extra105500,0 → 160,17500total 0.6% · largest 0.6%
Missing165500,0 → 160,57500total 0.6% · largest 0.6%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing0,57 → 160,570.6candidate lacks paint present in reference (0.6%)
Extra0,17 → 160,170.6candidate adds paint absent from reference (0.6%)
Extra71,1 → 71,120.04candidate adds paint absent from reference (0.04%)
AntialiasCoverage71,1 → 71,120.04ΔRGB(-231,-231,-231)antialiasing coverage residue on a shared outline
AntialiasCoverage73,2 → 73,60.02ΔRGB(39,39,39)antialiasing coverage residue on a shared outline
AntialiasCoverage73,7 → 73,120.02ΔRGB(39,39,39)antialiasing coverage residue on a shared outline
Missing73,8 → 73,120.02candidate lacks paint present in reference (0.02%)
Missing73,2 → 73,60.01candidate lacks paint present in reference (0.01%)
AntialiasCoverage77,1 → 78,30.01ΔRGB(37,37,37)antialiasing coverage residue on a shared outline
AntialiasCoverage75,7 → 77,70.008989ΔRGB(35,35,35)antialiasing coverage residue on a shared outline
Missing79,3 → 79,50.007865candidate lacks paint present in reference (0.007865%)
AntialiasCoverage79,3 → 79,50.007865ΔRGB(183,183,183)antialiasing coverage residue on a shared outline
AntialiasCoverage77,6 → 78,70.007865ΔRGB(54,54,54)antialiasing coverage residue on a shared outline
Extra77,3 → 77,40.005618candidate adds paint absent from reference (0.005618%)
AntialiasCoverage77,3 → 77,40.005618ΔRGB(-42,-42,-42)antialiasing coverage residue on a shared outline
AntialiasCoverage75,6 → 76,60.005618ΔRGB(-8,-8,-8)antialiasing coverage residue on a shared outline
AntialiasCoverage75,0 → 76,00.004494ΔRGB(16,16,16)antialiasing coverage residue on a shared outline
AntialiasCoverage76,0 → 77,10.004494ΔRGB(60,60,60)antialiasing coverage residue on a shared outline
AntialiasCoverage75,2 → 76,20.004494ΔRGB(-20,-20,-20)antialiasing coverage residue on a shared outline
Missing79,2 → 79,30.003371candidate lacks paint present in reference (0.003371%)
AntialiasCoverage76,2 → 76,20.003371ΔRGB(-63,-63,-63)antialiasing coverage residue on a shared outline
AntialiasCoverage76,5 → 76,60.003371ΔRGB(-45,-45,-45)antialiasing coverage residue on a shared outline
Missing79,5 → 79,50.002247candidate lacks paint present in reference (0.002247%)
Missing78,6 → 78,60.002247candidate lacks paint present in reference (0.002247%)
Extra77,3 → 77,30.002247candidate adds paint absent from reference (0.002247%)
Extra77,5 → 77,50.002247candidate adds paint absent from reference (0.002247%)
AntialiasCoverage77,3 → 77,30.002247ΔRGB(-59,-59,-59)antialiasing coverage residue on a shared outline
AntialiasCoverage77,5 → 77,50.002247ΔRGB(-48,-48,-48)antialiasing coverage residue on a shared outline
AntialiasCoverage78,5 → 78,50.002247ΔRGB(134,134,134)antialiasing coverage residue on a shared outline
Missing76,0 → 76,00.001124candidate lacks paint present in reference (0.001124%)
Missing77,1 → 77,10.001124candidate lacks paint present in reference (0.001124%)
Missing78,1 → 78,10.001124candidate lacks paint present in reference (0.001124%)
Missing78,1 → 78,10.001124candidate lacks paint present in reference (0.001124%)
Missing78,2 → 78,20.001124candidate lacks paint present in reference (0.001124%)
Missing78,6 → 78,60.001124candidate lacks paint present in reference (0.001124%)
Missing78,7 → 78,70.001124candidate lacks paint present in reference (0.001124%)
Missing77,7 → 77,70.001124candidate lacks paint present in reference (0.001124%)
Missing76,7 → 76,70.001124candidate lacks paint present in reference (0.001124%)
Extra71,0 → 71,00.001124candidate adds paint absent from reference (0.001124%)
Extra76,2 → 76,20.001124candidate adds paint absent from reference (0.001124%)
Extra76,2 → 76,20.001124candidate adds paint absent from reference (0.001124%)
Extra76,5 → 76,50.001124candidate adds paint absent from reference (0.001124%)
Extra76,6 → 76,60.001124candidate adds paint absent from reference (0.001124%)
AntialiasCoverage71,0 → 71,00.001124ΔRGB(-10,-10,-10)antialiasing coverage residue on a shared outline
AntialiasCoverage77,2 → 77,20.001124ΔRGB(-108,-108,-108)antialiasing coverage residue on a shared outline
AntialiasCoverage76,3 → 76,30.001124ΔRGB(-2,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage77,3 → 77,30.001124ΔRGB(-5,-5,-5)antialiasing coverage residue on a shared outline
AntialiasCoverage77,4 → 77,40.001124ΔRGB(-8,-8,-8)antialiasing coverage residue on a shared outline
AntialiasCoverage76,5 → 76,50.001124ΔRGB(-6,-6,-6)antialiasing coverage residue on a shared outline
AntialiasCoverage77,5 → 77,50.001124ΔRGB(-88,-88,-88)antialiasing coverage residue on a shared outline
AntialiasCoverage79,6 → 79,60.001124ΔRGB(11,11,11)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-page-counter-increment-two.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>page counter increment two</title><style>
3@page{size:160px 104px;margin:20px 0 0 0;counter-increment:page 2;@top-center{content:"P" counter(page)}}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.block{height:40px}.block+.block{break-before:page}.a{background:#ef476f}.b{background:#ffd166}.c{background:#06d6a0}
7</style></head><body><div class="block a"></div><div class="block b"></div><div class="block c"></div></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.62% · raw 0.62% (1000 px) paged-page-counter-reset-increment · counter-reset-then-increment · oracle: weasyprint · 2 pagesPASS via CSS-scale observation: stable same-coordinate outline phaseMissingmissing 0.8%extra 0.8%
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate lacks paint present in reference (0.8%)
counter-reset:page 7 with counter-increment:page 2 resolves each page-local counter to 9; catches renderers that carry a reset between pages or omit an explicit increment after it.
regions (2 total; showing 2 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
Extra15000,17 → 160,17500total 0.6% · largest 0.6%
Missing15000,57 → 160,57500total 0.6% · largest 0.6%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing0,57 → 160,570.6candidate lacks paint present in reference (0.6%)
Extra0,17 → 160,170.6candidate adds paint absent from reference (0.6%)
source · cases/paged-media/paged-page-counter-reset-increment.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>page counter reset and increment</title><style>
3@page{size:160px 104px;margin:20px 0 0 0;counter-reset:page 7;counter-increment:page 2;@top-center{content:"R" counter(page)}}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.block{height:40px}.block+.block{break-before:page}.a{background:#6d28d9}.b{background:#f97316}
7</style></head><body><div class="block a"></div><div class="block b"></div></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.62% · raw 0.62% (1000 px) paged-page-counter-reset-seven · counter-reset-page-seven · oracle: weasyprint · 2 pagesPASS via CSS-scale observation: stable same-coordinate outline phaseMissingmissing 0.8%extra 0.8%
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate lacks paint present in reference (0.8%)
@page counter-reset:page 7 changes the origin of counter(page) in margin boxes; catches renderers that ignore page-context counter reset.
regions (2 total; showing 2 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
Extra15000,16 → 160,16500total 0.6% · largest 0.6%
Missing15000,56 → 160,56500total 0.6% · largest 0.6%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing0,56 → 160,560.6candidate lacks paint present in reference (0.6%)
Extra0,16 → 160,160.6candidate adds paint absent from reference (0.6%)
source · cases/paged-media/paged-page-counter-reset-seven.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>page counter reset seven</title><style>
3@page{size:160px 104px;margin:20px 0 0 0;counter-reset:page 7;@top-center{content:"N" counter(page)}}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.block{height:40px}.block+.block{break-before:page}.a{background:#1d4ed8}.b{background:#16a34a}
7</style></head><body><div class="block a"></div><div class="block b"></div></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.62% · raw 0.62% (1000 px) paged-pages-counter-immutable · pages-counter-immutable · oracle: weasyprint · 2 pagesPASS via CSS-scale observation: stable same-coordinate outline phaseMissingmissing 0.8%extra 0.8%
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate lacks paint present in reference (0.8%)
counter-reset:pages in the page context must not alter counter(pages), which remains the total page count; catches over-eager page counter implementations.
regions (2 total; showing 2 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
Extra15000,17 → 160,17500total 0.6% · largest 0.6%
Missing15000,57 → 160,57500total 0.6% · largest 0.6%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing0,57 → 160,570.6candidate lacks paint present in reference (0.6%)
Extra0,17 → 160,170.6candidate adds paint absent from reference (0.6%)
source · cases/paged-media/paged-pages-counter-immutable.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>pages counter immutable</title><style>
3@page{size:160px 104px;margin:20px 0 0 0;counter-reset:pages 99;@top-center{content:"of " counter(pages)}}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.block{height:40px}.block+.block{break-before:page}.a{background:#ef476f}.b{background:#118ab2}
7</style></head><body><div class="block a"></div><div class="block b"></div></body></html>
PASS exact match paged-page-counter-content · counter-page-in-content
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
content: counter(page) used in NORMAL DOCUMENT FLOW (.pagenum::after) is an ordinary undefined counter that resolves to 0 in both Chrome and ironpress (the page/pages counters are special only inside @page margin boxes, which ironpress now supports — see the render_at_page_margin_box_counters_three_pages PDF-text test). This fixture locks in the in-flow 0-resolution parity with Chrome.

page-margin — 100.00% verified visual parity PASS 3 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.06% · raw 0.06% (187 px) paged-page-margin-percentage · percentagePASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 12.1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
@page margin:10% creates a visible inset from the page box; catches page margin parsers that accept only absolute lengths.
regions (1 total; showing 1 representative)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr11870,0 → 0,60187total 0.4% · largest 0.4%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage0,0 → 0,600.4ΔRGB(70,28,54)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-page-margin-percentage.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>page margin percentage</title><style>
3@page{size:200px 160px;margin:10%}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.box{width:80px;height:60px;background:#16a34a}
7</style></head><body><div class="box"></div></body></html>
PASS exact match paged-body-margin-box · via-body-margin
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Page margin exercised through an explicit 40px body margin (fixtures may not use @page); a filled, bordered content box is inset uniformly inside the single Letter page.
PASS exact match paged-page-margin-three-values · three-value-shorthand
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
@page margin with three values resolves top, horizontal, and bottom margins; catches parsers that ignore this shorthand arity.

page-margin-box — 100.00% verified visual parity PASS 11 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.75% · raw 0.77% (2784 px) paged-margin-box-after-synthetic-weight · font-carrier-transitionPASS via CSS-scale observation: conserved sub-CSS coverageMissingmissing 0.2%extra 0.2%ΔE 20.0
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate lacks paint present in reference (0.2%)
A large plain-weight top-center header remains visible after synthetic-bold document text. Chromium lacks page-margin generated content, so the verified standards-derived Foundation reference materializes CSS Page 3's fixed top-margin geometry and document-before-margin-box paint order. Catches PDF font-carrier state leaking from document content into later page decorations.
regions (676 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr292170813,6 → 178,2429total 0.5% · largest 0.008056%
Extra21253814,6 → 178,2328total 0.1% · largest 0.007778%
Missing17253814,8 → 178,2433total 0.1% · largest 0.009167%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing32,24 → 43,240.009167candidate lacks paint present in reference (0.009167%)
Missing119,24 → 129,240.009167candidate lacks paint present in reference (0.009167%)
AntialiasCoverage18,15 → 25,170.008056ΔRGB(-41,-39,-37)antialiasing coverage residue on a shared outline
AntialiasCoverage80,15 → 87,170.008056ΔRGB(-41,-39,-37)antialiasing coverage residue on a shared outline
AntialiasCoverage104,15 → 111,170.008056ΔRGB(-41,-39,-37)antialiasing coverage residue on a shared outline
AntialiasCoverage167,15 → 173,170.008056ΔRGB(-41,-39,-37)antialiasing coverage residue on a shared outline
AntialiasCoverage34,21 → 43,220.008056ΔRGB(-52,-50,-47)antialiasing coverage residue on a shared outline
AntialiasCoverage121,21 → 129,220.008056ΔRGB(-52,-50,-47)antialiasing coverage residue on a shared outline
Missing62,15 → 71,150.007778candidate lacks paint present in reference (0.007778%)
Missing148,15 → 157,150.007778candidate lacks paint present in reference (0.007778%)
Extra62,13 → 71,130.007778candidate adds paint absent from reference (0.007778%)
Extra148,13 → 157,130.007778candidate adds paint absent from reference (0.007778%)
AntialiasCoverage62,13 → 71,130.007778ΔRGB(-63,-61,-57)antialiasing coverage residue on a shared outline
AntialiasCoverage148,13 → 157,130.007778ΔRGB(-63,-61,-57)antialiasing coverage residue on a shared outline
AntialiasCoverage62,15 → 71,150.007778ΔRGB(7,7,6)antialiasing coverage residue on a shared outline
AntialiasCoverage148,15 → 157,150.007778ΔRGB(7,7,6)antialiasing coverage residue on a shared outline
Extra34,22 → 43,220.007500candidate adds paint absent from reference (0.007500%)
Extra121,22 → 129,220.007500candidate adds paint absent from reference (0.007500%)
Missing18,19 → 26,190.007222candidate lacks paint present in reference (0.007222%)
Missing80,19 → 88,190.007222candidate lacks paint present in reference (0.007222%)
Missing104,19 → 112,190.007222candidate lacks paint present in reference (0.007222%)
Missing166,19 → 174,190.007222candidate lacks paint present in reference (0.007222%)
AntialiasCoverage45,6 → 53,60.006944ΔRGB(-160,-155,-145)antialiasing coverage residue on a shared outline
AntialiasCoverage132,6 → 139,60.006944ΔRGB(-160,-155,-145)antialiasing coverage residue on a shared outline
AntialiasCoverage18,19 → 25,190.006944ΔRGB(7,7,6)antialiasing coverage residue on a shared outline
AntialiasCoverage80,19 → 87,190.006944ΔRGB(7,7,6)antialiasing coverage residue on a shared outline
AntialiasCoverage104,19 → 111,190.006944ΔRGB(7,7,6)antialiasing coverage residue on a shared outline
AntialiasCoverage166,19 → 174,190.006944ΔRGB(7,7,6)antialiasing coverage residue on a shared outline
Extra46,6 → 53,60.006389candidate adds paint absent from reference (0.006389%)
Extra132,6 → 139,60.006389candidate adds paint absent from reference (0.006389%)
Extra18,17 → 25,170.005833candidate adds paint absent from reference (0.005833%)
Extra80,17 → 87,170.005833candidate adds paint absent from reference (0.005833%)
Extra104,17 → 111,170.005833candidate adds paint absent from reference (0.005833%)
Extra167,17 → 173,170.005833candidate adds paint absent from reference (0.005833%)
AntialiasCoverage20,6 → 23,70.004444ΔRGB(-118,-115,-107)antialiasing coverage residue on a shared outline
AntialiasCoverage82,6 → 85,70.004444ΔRGB(-118,-115,-107)antialiasing coverage residue on a shared outline
AntialiasCoverage106,6 → 109,70.004444ΔRGB(-118,-115,-107)antialiasing coverage residue on a shared outline
AntialiasCoverage168,6 → 172,70.004444ΔRGB(-118,-115,-107)antialiasing coverage residue on a shared outline
Extra48,15 → 52,150.004167candidate adds paint absent from reference (0.004167%)
Extra134,15 → 138,150.004167candidate adds paint absent from reference (0.004167%)
AntialiasCoverage48,14 → 52,140.004167ΔRGB(-11,-10,-10)antialiasing coverage residue on a shared outline
AntialiasCoverage134,14 → 138,140.004167ΔRGB(-11,-10,-10)antialiasing coverage residue on a shared outline
Missing48,8 → 52,80.003889candidate lacks paint present in reference (0.003889%)
Missing134,8 → 138,80.003889candidate lacks paint present in reference (0.003889%)
AntialiasCoverage48,8 → 52,80.003889ΔRGB(97,94,88)antialiasing coverage residue on a shared outline
AntialiasCoverage134,8 → 138,80.003889ΔRGB(97,94,88)antialiasing coverage residue on a shared outline
AntialiasCoverage55,7 → 56,90.003611ΔRGB(-89,-87,-81)antialiasing coverage residue on a shared outline
AntialiasCoverage141,7 → 142,90.003611ΔRGB(-89,-87,-81)antialiasing coverage residue on a shared outline
AntialiasCoverage21,9 → 22,110.003611ΔRGB(83,80,76)antialiasing coverage residue on a shared outline
AntialiasCoverage83,9 → 84,110.003611ΔRGB(83,80,76)antialiasing coverage residue on a shared outline
AntialiasCoverage107,9 → 108,110.003611ΔRGB(83,80,76)antialiasing coverage residue on a shared outline
AntialiasCoverage170,9 → 171,110.003611ΔRGB(83,80,76)antialiasing coverage residue on a shared outline
AntialiasCoverage56,10 → 57,130.003611ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage142,10 → 143,130.003611ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
Missing48,17 → 51,170.003333candidate lacks paint present in reference (0.003333%)
Missing134,17 → 137,170.003333candidate lacks paint present in reference (0.003333%)
AntialiasCoverage71,6 → 73,60.003056ΔRGB(-160,-155,-145)antialiasing coverage residue on a shared outline
AntialiasCoverage157,6 → 160,60.003056ΔRGB(-160,-155,-145)antialiasing coverage residue on a shared outline
AntialiasCoverage48,17 → 51,170.003056ΔRGB(7,7,6)antialiasing coverage residue on a shared outline
AntialiasCoverage134,17 → 137,170.003056ΔRGB(7,7,6)antialiasing coverage residue on a shared outline
AntialiasCoverage32,6 → 34,60.002778ΔRGB(-160,-155,-145)antialiasing coverage residue on a shared outline
AntialiasCoverage60,6 → 62,60.002778ΔRGB(-160,-155,-145)antialiasing coverage residue on a shared outline
AntialiasCoverage118,6 → 121,60.002778ΔRGB(-160,-155,-145)antialiasing coverage residue on a shared outline
AntialiasCoverage146,6 → 148,60.002778ΔRGB(-160,-155,-145)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-margin-box-after-synthetic-weight.html
1<!doctype html>
2<html>
3<head>
4  <meta charset="utf-8">
5  <title>page margin box after synthetic weight</title>
6  <style>
7    @page {
8      size: 192px 192px;
9      margin: 32px 0 0;
10      @top-center {
11        content: "ALPHA ALPHA";
12        color: #ffffff;
13        background: #111827;
14        font-family: ParitySans;
15        font-size: 24px;
16        font-weight: normal;
17        line-height: 32px;
18      }
19    }
20    html {
21      color: #111827;
22      font-family: ParitySans;
23      line-height: 1.5;
24    }
25    * { margin: 0; box-sizing: border-box; }
26    h2 {
27      height: 24px;
28      color: #111827;
29      background: #ffd166;
30      font-size: 12px;
31      font-weight: bold;
32      line-height: 24px;
33    }
34    .body { height: 136px; background: #bfdbfe; }
35  </style>
36</head>
37<body>
38  <h2>SYNTHETIC BOLD</h2>
39  <div class="body"></div>
40</body>
41</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.71% · raw 0.71% (2007 px) paged-margin-box-styling · stylingPASS via CSS-scale observation: stable same-coordinate outline phaseAntialiasCoveragemissing 0.2%extra 0.2%ΔE 30.3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
A top-center page margin box applies its own color, background, and font size; catches content-only margin box renderers with hard-coded text styling.
regions (161 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr7711970,7 → 200,28625total 0.6% · largest 0.3%
Missing4640576,7 → 124,2062total 0.2% · largest 0.03%
Extra3840576,8 → 124,2062total 0.2% · largest 0.03%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage0,28 → 200,280.3ΔRGB(-169,-56,-180)antialiasing coverage residue on a shared outline
Missing113,7 → 123,100.03candidate lacks paint present in reference (0.03%)
Extra113,18 → 123,200.03candidate adds paint absent from reference (0.03%)
Missing90,7 → 97,70.02candidate lacks paint present in reference (0.02%)
Extra90,20 → 97,200.02candidate adds paint absent from reference (0.02%)
Missing78,12 → 84,130.02candidate lacks paint present in reference (0.02%)
Missing115,17 → 121,190.02candidate lacks paint present in reference (0.02%)
Extra115,8 → 121,100.02candidate adds paint absent from reference (0.02%)
Extra78,14 → 84,140.02candidate adds paint absent from reference (0.02%)
Missing91,19 → 97,190.02candidate lacks paint present in reference (0.02%)
Extra91,8 → 97,90.02candidate adds paint absent from reference (0.02%)
Extra102,17 → 108,170.02candidate adds paint absent from reference (0.02%)
Missing91,12 → 97,130.02candidate lacks paint present in reference (0.02%)
Extra91,14 → 97,140.02candidate adds paint absent from reference (0.02%)
Missing103,15 → 108,160.01candidate lacks paint present in reference (0.01%)
AntialiasCoverage102,17 → 108,190.01ΔRGB(-113,-44,-88)antialiasing coverage residue on a shared outline
AntialiasCoverage117,7 → 123,90.01ΔRGB(146,57,113)antialiasing coverage residue on a shared outline
AntialiasCoverage90,7 → 97,70.01ΔRGB(3,1,2)antialiasing coverage residue on a shared outline
AntialiasCoverage91,8 → 98,90.01ΔRGB(-157,-62,-122)antialiasing coverage residue on a shared outline
AntialiasCoverage91,19 → 98,190.01ΔRGB(157,62,122)antialiasing coverage residue on a shared outline
AntialiasCoverage91,12 → 97,130.01ΔRGB(47,18,36)antialiasing coverage residue on a shared outline
AntialiasCoverage91,14 → 97,140.01ΔRGB(-109,-43,-85)antialiasing coverage residue on a shared outline
AntialiasCoverage78,12 → 84,120.009970ΔRGB(47,18,36)antialiasing coverage residue on a shared outline
AntialiasCoverage103,14 → 108,150.009970ΔRGB(29,11,22)antialiasing coverage residue on a shared outline
AntialiasCoverage78,14 → 84,140.009970ΔRGB(-109,-43,-85)antialiasing coverage residue on a shared outline
AntialiasCoverage105,9 → 106,120.006647ΔRGB(-92,-36,-71)antialiasing coverage residue on a shared outline
AntialiasCoverage119,9 → 121,110.006647ΔRGB(-84,-33,-66)antialiasing coverage residue on a shared outline
AntialiasCoverage119,17 → 121,180.006647ΔRGB(118,46,92)antialiasing coverage residue on a shared outline
Missing104,7 → 106,70.005697candidate lacks paint present in reference (0.005697%)
AntialiasCoverage115,9 → 118,90.005697ΔRGB(-131,-51,-102)antialiasing coverage residue on a shared outline
AntialiasCoverage115,19 → 118,190.005697ΔRGB(131,51,102)antialiasing coverage residue on a shared outline
AntialiasCoverage113,7 → 116,70.005223ΔRGB(3,1,2)antialiasing coverage residue on a shared outline
AntialiasCoverage124,10 → 124,130.005223ΔRGB(57,22,44)antialiasing coverage residue on a shared outline
AntialiasCoverage124,14 → 124,170.005223ΔRGB(-56,-22,-43)antialiasing coverage residue on a shared outline
Missing76,7 → 77,70.004748candidate lacks paint present in reference (0.004748%)
Extra109,20 → 111,200.004748candidate adds paint absent from reference (0.004748%)
Extra76,20 → 77,200.004748candidate adds paint absent from reference (0.004748%)
AntialiasCoverage84,7 → 86,70.004748ΔRGB(3,1,2)antialiasing coverage residue on a shared outline
Extra100,20 → 101,200.004273candidate adds paint absent from reference (0.004273%)
AntialiasCoverage120,20 → 122,200.004273ΔRGB(-121,-47,-94)antialiasing coverage residue on a shared outline
Missing84,7 → 85,70.003798candidate lacks paint present in reference (0.003798%)
Extra84,20 → 85,200.003798candidate adds paint absent from reference (0.003798%)
AntialiasCoverage99,19 → 100,200.003798ΔRGB(52,20,41)antialiasing coverage residue on a shared outline
AntialiasCoverage109,19 → 109,200.003798ΔRGB(-81,-32,-63)antialiasing coverage residue on a shared outline
AntialiasCoverage117,20 → 119,200.003798ΔRGB(-158,-62,-122)antialiasing coverage residue on a shared outline
AntialiasCoverage122,18 → 123,190.003323ΔRGB(-137,-54,-107)antialiasing coverage residue on a shared outline
AntialiasCoverage104,7 → 106,70.002849ΔRGB(3,1,2)antialiasing coverage residue on a shared outline
AntialiasCoverage103,8 → 104,90.002849ΔRGB(144,57,112)antialiasing coverage residue on a shared outline
AntialiasCoverage107,9 → 108,110.002849ΔRGB(145,57,112)antialiasing coverage residue on a shared outline
AntialiasCoverage103,10 → 103,110.002849ΔRGB(123,48,95)antialiasing coverage residue on a shared outline
AntialiasCoverage104,11 → 105,120.002849ΔRGB(-84,-33,-65)antialiasing coverage residue on a shared outline
AntialiasCoverage108,11 → 108,120.002849ΔRGB(123,48,95)antialiasing coverage residue on a shared outline
AntialiasCoverage122,12 → 122,130.002849ΔRGB(-31,-12,-24)antialiasing coverage residue on a shared outline
AntialiasCoverage102,12 → 102,130.002849ΔRGB(137,54,106)antialiasing coverage residue on a shared outline
AntialiasCoverage107,13 → 107,140.002849ΔRGB(-74,-29,-58)antialiasing coverage residue on a shared outline
AntialiasCoverage109,13 → 109,150.002849ΔRGB(135,53,105)antialiasing coverage residue on a shared outline
AntialiasCoverage101,15 → 101,160.002849ΔRGB(149,59,116)antialiasing coverage residue on a shared outline
AntialiasCoverage110,16 → 110,170.002849ΔRGB(147,58,114)antialiasing coverage residue on a shared outline
AntialiasCoverage100,16 → 100,180.002849ΔRGB(128,50,100)antialiasing coverage residue on a shared outline
AntialiasCoverage110,18 → 111,190.002849ΔRGB(125,49,97)antialiasing coverage residue on a shared outline
AntialiasCoverage111,19 → 111,200.002849ΔRGB(19,7,14)antialiasing coverage residue on a shared outline
AntialiasCoverage76,7 → 77,70.002374ΔRGB(3,1,2)antialiasing coverage residue on a shared outline
AntialiasCoverage106,7 → 107,80.002374ΔRGB(133,52,103)antialiasing coverage residue on a shared outline
AntialiasCoverage122,14 → 122,160.002374ΔRGB(68,27,54)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-margin-box-styling.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>page margin box styling</title><style>
3@page{size:200px 144px;margin:28px 0 0 0;@top-center{content:"HEAD";color:#fff;background:#16a34a;font-size:18px}}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.box{height:80px;background:#bfdbfe}
7</style></head><body><div class="box"></div></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.32% · raw 0.62% (1639 px) paged-margin-box-font-family-fallback · font-family-fallbackPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 0.9
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
A page-margin box skips an unavailable first family and uses the next available face in its font stack.
regions (258 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr258163939,15 → 201,3540total 0.6% · largest 0.02%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage53,17 → 53,290.02ΔRGB(-3,-3,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage132,21 → 132,320.01ΔRGB(3,2,1)antialiasing coverage residue on a shared outline
AntialiasCoverage91,21 → 92,280.01ΔRGB(3,2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage78,21 → 80,290.01ΔRGB(4,3,0)antialiasing coverage residue on a shared outline
AntialiasCoverage64,21 → 65,290.01ΔRGB(4,2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage84,21 → 84,290.01ΔRGB(4,2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage156,26 → 163,280.01ΔRGB(-4,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage68,20 → 73,210.009905ΔRGB(3,2,1)antialiasing coverage residue on a shared outline
AntialiasCoverage113,20 → 117,220.009905ΔRGB(3,2,1)antialiasing coverage residue on a shared outline
AntialiasCoverage43,22 → 51,220.009524ΔRGB(3,3,1)antialiasing coverage residue on a shared outline
AntialiasCoverage72,22 → 72,290.009143ΔRGB(4,3,0)antialiasing coverage residue on a shared outline
AntialiasCoverage116,22 → 117,290.009143ΔRGB(4,3,0)antialiasing coverage residue on a shared outline
AntialiasCoverage91,15 → 91,220.008381ΔRGB(4,3,0)antialiasing coverage residue on a shared outline
AntialiasCoverage188,21 → 189,260.008381ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage108,21 → 108,280.008381ΔRGB(-2,-1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage101,21 → 101,280.008000ΔRGB(3,3,1)antialiasing coverage residue on a shared outline
AntialiasCoverage57,29 → 62,310.008000ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage157,25 → 162,250.007619ΔRGB(-4,-3,0)antialiasing coverage residue on a shared outline
AntialiasCoverage136,22 → 136,270.007238ΔRGB(-3,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage103,30 → 107,310.007238ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage138,30 → 143,310.006857ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage98,23 → 98,280.006476ΔRGB(4,3,0)antialiasing coverage residue on a shared outline
AntialiasCoverage123,23 → 123,280.006476ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage96,22 → 96,270.006095ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage185,27 → 186,300.006095ΔRGB(-2,-1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage131,20 → 134,210.005714ΔRGB(3,2,1)antialiasing coverage residue on a shared outline
AntialiasCoverage125,21 → 127,240.005714ΔRGB(-1,-1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage196,27 → 197,300.005714ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage136,28 → 138,300.005714ΔRGB(-2,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage124,32 → 125,350.005714ΔRGB(3,3,1)antialiasing coverage residue on a shared outline
AntialiasCoverage142,21 → 143,240.005333ΔRGB(-2,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage57,24 → 60,260.005333ΔRGB(-2,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage126,34 → 129,340.005333ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage139,21 → 142,210.004952ΔRGB(-4,-3,0)antialiasing coverage residue on a shared outline
AntialiasCoverage196,23 → 197,260.004952ΔRGB(-3,-3,0)antialiasing coverage residue on a shared outline
AntialiasCoverage60,24 → 63,240.004571ΔRGB(-4,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage59,26 → 59,290.004571ΔRGB(2,1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage154,27 → 155,290.004571ΔRGB(-2,-1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage60,29 → 62,300.004571ΔRGB(-4,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage100,20 → 103,200.004190ΔRGB(3,2,1)antialiasing coverage residue on a shared outline
AntialiasCoverage107,20 → 110,200.004190ΔRGB(3,2,1)antialiasing coverage residue on a shared outline
AntialiasCoverage57,21 → 58,230.004190ΔRGB(-2,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage59,21 → 61,210.004190ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage103,27 → 104,290.004190ΔRGB(1,1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage158,16 → 159,180.003810ΔRGB(3,2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage162,19 → 163,210.003810ΔRGB(2,2,1)antialiasing coverage residue on a shared outline
AntialiasCoverage171,19 → 171,210.003810ΔRGB(3,2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage187,26 → 188,280.003810ΔRGB(2,1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage138,27 → 139,290.003810ΔRGB(1,1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage188,28 → 188,300.003810ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage92,31 → 95,310.003810ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage126,31 → 129,310.003810ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage57,26 → 57,290.003429ΔRGB(-3,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage195,26 → 196,280.003429ΔRGB(0,1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage155,28 → 156,290.003429ΔRGB(2,2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage129,29 → 130,300.003429ΔRGB(-1,-1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage192,16 → 193,180.003048ΔRGB(-2,-2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage184,17 → 185,190.003048ΔRGB(3,2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage183,19 → 183,200.003048ΔRGB(2,2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage198,19 → 198,200.003048ΔRGB(-3,-3,0)antialiasing coverage residue on a shared outline
AntialiasCoverage185,19 → 185,210.003048ΔRGB(3,2,0)antialiasing coverage residue on a shared outline
AntialiasCoverage193,20 → 194,210.003048ΔRGB(-1,-1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage79,20 → 81,200.003048ΔRGB(-1,-1,0)antialiasing coverage residue on a shared outline
AntialiasCoverage198,20 → 199,220.003048ΔRGB(-1,-1,0)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-margin-box-font-family-fallback.html
1<!doctype html>
2<html lang="en">
3<head>
4  <meta charset="utf-8">
5  <title>page margin font family fallback</title>
6  <style>
7    @page {
8      size: 240px 112px;
9      margin: 48px 0 0;
10      @top-center {
11        content: "Hamburge AVW";
12        background: #f4d35e;
13        color: #102a43;
14        font-family: NoSuchParityFace, ParitySerif;
15        font-size: 20px;
16        line-height: 1;
17      }
18    }
19    * { margin: 0; box-sizing: border-box; }
20    html, body { background: #ffffff; }
21    .page-area { height: 64px; background: #d9e2ec; }
22  </style>
23</head>
24<body>
25  <div class="page-area"></div>
26</body>
27</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.54% · raw 0.55% (1553 px) paged-top-bottom-margin-boxes · top-bottom-literal-contentPASS via CSS-scale observation: conserved sub-CSS coverageMissingmissing 0.3%extra 0.3%ΔE 30.5
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate lacks paint present in reference (0.3%)
Default @top-left, @top-center, @top-right, and @bottom-center page margin boxes render literal strings; catches visual parity gaps that only cover PDF-text margin box assertions.
regions (361 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr1628750,0 → 199,13232total 0.3% · largest 0.01%
Missing983380,0 → 199,13132total 0.1% · largest 0.01%
Extra1013400,2 → 199,13224total 0.1% · largest 0.009253%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing90,0 → 100,00.01candidate lacks paint present in reference (0.01%)
Missing179,0 → 188,00.01candidate lacks paint present in reference (0.01%)
AntialiasCoverage90,1 → 100,10.01ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
AntialiasCoverage179,1 → 188,10.01ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
Missing0,0 → 10,00.01candidate lacks paint present in reference (0.01%)
AntialiasCoverage0,1 → 10,10.01ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
Extra11,12 → 18,120.009253candidate adds paint absent from reference (0.009253%)
AntialiasCoverage91,121 → 97,1210.008867ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
Extra90,132 → 96,1320.007711candidate adds paint absent from reference (0.007711%)
AntialiasCoverage12,11 → 18,110.007711ΔRGB(215,215,215)antialiasing coverage residue on a shared outline
AntialiasCoverage92,126 → 97,1270.007711ΔRGB(-103,-103,-103)antialiasing coverage residue on a shared outline
AntialiasCoverage192,5 → 196,60.007325ΔRGB(133,133,133)antialiasing coverage residue on a shared outline
AntialiasCoverage92,122 → 96,1230.007325ΔRGB(-99,-99,-99)antialiasing coverage residue on a shared outline
Missing13,11 → 18,110.006940candidate lacks paint present in reference (0.006940%)
Missing91,120 → 96,1200.006554candidate lacks paint present in reference (0.006554%)
AntialiasCoverage92,131 → 96,1310.006554ΔRGB(233,233,233)antialiasing coverage residue on a shared outline
AntialiasCoverage197,9 → 199,120.006169ΔRGB(108,108,108)antialiasing coverage residue on a shared outline
Missing190,0 → 195,00.005783candidate lacks paint present in reference (0.005783%)
AntialiasCoverage190,1 → 195,10.005783ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
AntialiasCoverage5,2 → 10,20.005783ΔRGB(-75,-75,-75)antialiasing coverage residue on a shared outline
AntialiasCoverage90,2 → 94,20.005783ΔRGB(-75,-75,-75)antialiasing coverage residue on a shared outline
AntialiasCoverage95,2 → 100,20.005783ΔRGB(-75,-75,-75)antialiasing coverage residue on a shared outline
AntialiasCoverage179,2 → 183,20.005783ΔRGB(-75,-75,-75)antialiasing coverage residue on a shared outline
AntialiasCoverage184,2 → 188,20.005783ΔRGB(-75,-75,-75)antialiasing coverage residue on a shared outline
AntialiasCoverage0,2 → 4,20.005398ΔRGB(-75,-75,-75)antialiasing coverage residue on a shared outline
Extra6,2 → 10,20.005012candidate adds paint absent from reference (0.005012%)
Extra90,2 → 93,20.005012candidate adds paint absent from reference (0.005012%)
Extra96,2 → 100,20.005012candidate adds paint absent from reference (0.005012%)
Extra179,2 → 182,20.005012candidate adds paint absent from reference (0.005012%)
Extra185,2 → 188,20.005012candidate adds paint absent from reference (0.005012%)
AntialiasCoverage96,124 → 98,1260.005012ΔRGB(-55,-55,-55)antialiasing coverage residue on a shared outline
AntialiasCoverage92,125 → 95,1250.005012ΔRGB(151,151,151)antialiasing coverage residue on a shared outline
Missing92,131 → 96,1310.004627candidate lacks paint present in reference (0.004627%)
Extra0,2 → 4,20.004627candidate adds paint absent from reference (0.004627%)
Missing92,125 → 95,1250.004241candidate lacks paint present in reference (0.004241%)
Extra103,12 → 107,120.004241candidate adds paint absent from reference (0.004241%)
Extra92,127 → 95,1270.004241candidate adds paint absent from reference (0.004241%)
Extra104,132 → 108,1320.004241candidate adds paint absent from reference (0.004241%)
AntialiasCoverage192,2 → 195,20.004241ΔRGB(-99,-99,-99)antialiasing coverage residue on a shared outline
AntialiasCoverage103,12 → 107,120.004241ΔRGB(-128,-128,-128)antialiasing coverage residue on a shared outline
AntialiasCoverage97,128 → 97,1300.004241ΔRGB(7,7,7)antialiasing coverage residue on a shared outline
AntialiasCoverage104,132 → 108,1320.004241ΔRGB(-128,-128,-128)antialiasing coverage residue on a shared outline
Missing104,11 → 107,110.003855candidate lacks paint present in reference (0.003855%)
Missing105,131 → 108,1310.003855candidate lacks paint present in reference (0.003855%)
Extra92,122 → 95,1220.003855candidate adds paint absent from reference (0.003855%)
AntialiasCoverage192,7 → 194,70.003855ΔRGB(-99,-99,-99)antialiasing coverage residue on a shared outline
AntialiasCoverage104,11 → 107,110.003855ΔRGB(118,118,118)antialiasing coverage residue on a shared outline
AntialiasCoverage97,130 → 98,1320.003855ΔRGB(-75,-75,-75)antialiasing coverage residue on a shared outline
AntialiasCoverage105,131 → 108,1310.003855ΔRGB(118,118,118)antialiasing coverage residue on a shared outline
Missing192,6 → 195,60.003470candidate lacks paint present in reference (0.003470%)
Extra192,2 → 195,20.003470candidate adds paint absent from reference (0.003470%)
AntialiasCoverage196,5 → 198,60.003470ΔRGB(-33,-33,-33)antialiasing coverage residue on a shared outline
AntialiasCoverage101,6 → 101,90.003470ΔRGB(16,16,16)antialiasing coverage residue on a shared outline
AntialiasCoverage107,11 → 109,120.003470ΔRGB(-70,-70,-70)antialiasing coverage residue on a shared outline
AntialiasCoverage102,126 → 102,1290.003470ΔRGB(16,16,16)antialiasing coverage residue on a shared outline
AntialiasCoverage108,131 → 110,1320.003470ΔRGB(-70,-70,-70)antialiasing coverage residue on a shared outline
Extra192,7 → 194,70.003084candidate adds paint absent from reference (0.003084%)
AntialiasCoverage107,1 → 109,20.003084ΔRGB(97,97,97)antialiasing coverage residue on a shared outline
AntialiasCoverage100,7 → 100,90.003084ΔRGB(-51,-51,-51)antialiasing coverage residue on a shared outline
AntialiasCoverage101,11 → 103,120.003084ΔRGB(-91,-91,-91)antialiasing coverage residue on a shared outline
AntialiasCoverage108,121 → 110,1220.003084ΔRGB(97,97,97)antialiasing coverage residue on a shared outline
AntialiasCoverage100,127 → 101,1290.003084ΔRGB(-51,-51,-51)antialiasing coverage residue on a shared outline
AntialiasCoverage102,131 → 104,1320.003084ΔRGB(-91,-91,-91)antialiasing coverage residue on a shared outline
Extra197,12 → 199,120.002699candidate adds paint absent from reference (0.002699%)
source · cases/paged-media/paged-top-bottom-margin-boxes.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>top and bottom page margin boxes</title><style>
3@page{size:200px 144px;margin:24px 0;@top-left{content:"TL"}@top-center{content:"TC"}@top-right{content:"TR"}@bottom-center{content:"BC"}}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.box{height:60px;background:#06d6a0}
7</style></head><body><div class="box"></div></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.40% · raw 0.41% (894 px) paged-margin-box-css-string-escape · css-string-escapePASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 29.1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
A hexadecimal CSS escape in page-margin content is decoded into its Unicode code point; catches raw string slicing that bypasses CSS tokenization.
regions (7 total; showing 7 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr789472,14 → 126,32306total 0.4% · largest 0.1%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage72,14 → 88,320.1ΔRGB(18,14,2)antialiasing coverage residue on a shared outline
AntialiasCoverage114,14 → 126,320.10ΔRGB(12,9,2)antialiasing coverage residue on a shared outline
AntialiasCoverage77,16 → 83,250.06ΔRGB(-25,-18,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage116,23 → 124,300.05ΔRGB(3,3,1)antialiasing coverage residue on a shared outline
AntialiasCoverage116,16 → 123,210.05ΔRGB(8,5,1)antialiasing coverage residue on a shared outline
AntialiasCoverage99,22 → 101,220.007314ΔRGB(119,88,14)antialiasing coverage residue on a shared outline
AntialiasCoverage99,25 → 101,250.007314ΔRGB(-89,-66,-10)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-margin-box-css-string-escape.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>CSS escape in page margin content</title>
6<style>
7  @page {
8    size: 200px 112px;
9    margin: 48px 0 0;
10    @top-center {
11      content: "A \00B7  B";
12      background: #f4d35e;
13      color: #102a43;
14      font-family: ParitySans;
15      font-size: 24px;
16      line-height: 1;
17    }
18  }
19  * { margin: 0; box-sizing: border-box; }
20  html, body { background: #ffffff; }
21  .page-area { height: 64px; background: #d9e2ec; }
22</style>
23</head>
24<body>
25  <div class="page-area"></div>
26</body>
27</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.30% · raw 0.32% (593 px) paged-named-page-margin-box · named-page-override · oracle: weasyprint · 2 pagesPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 28.5
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
A block assigned page:chapter must use the chapter @page top-center margin box instead of the default one. Both generated boxes use a page-width color band and an invisible space, isolating named-page selection from page-margin auto-width behavior and text metrics.
regions (8 total; showing 8 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr85931,31 → 25,39198total 0.3% · largest 0.1%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage18,31 → 25,390.1ΔRGB(-6,-6,-6)antialiasing coverage residue on a shared outline
AntialiasCoverage1,31 → 8,390.07ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage2,32 → 6,380.05ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage11,31 → 16,350.04ΔRGB(-5,-5,-5)antialiasing coverage residue on a shared outline
AntialiasCoverage19,32 → 24,340.04ΔRGB(6,7,7)antialiasing coverage residue on a shared outline
AntialiasCoverage9,31 → 11,310.005333ΔRGB(-16,-17,-18)antialiasing coverage residue on a shared outline
AntialiasCoverage9,39 → 11,390.002667ΔRGB(219,234,254)antialiasing coverage residue on a shared outline
AntialiasCoverage15,39 → 16,390.002667ΔRGB(219,234,254)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-named-page-margin-box.html
1<!doctype html>
2<html>
3<head>
4  <meta charset="utf-8">
5  <style>
6    @page {
7      size: 160px 120px;
8      margin: 24px 0 0 0;
9      @top-center {
10        content: " ";
11        background: #1d4ed8;
12        color: #ffffff;
13        width: 160px;
14      }
15    }
16    @page chapter {
17      size: 160px 120px;
18      margin: 24px 0 0 0;
19      @top-center {
20        content: " ";
21        background: #16a34a;
22        color: #ffffff;
23        width: 160px;
24      }
25    }
26    html { font-family: ParitySans; line-height: 1.5; }
27    * { margin: 0; box-sizing: border-box; }
28    .page { width: 160px; height: 96px; background: #dbeafe; font-size: 14px; }
29    .chapter { page: chapter; background: #bbf7d0; }
30  </style>
31</head>
32<body>
33  <div class="page">one</div>
34  <div class="page chapter">two</div>
35</body>
36</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.27% · raw 0.27% (575 px) paged-first-margin-box-override · first-page-override · oracle: weasyprint · 2 pagesPASS via CSS-scale observation: sub-CSS shared-outline coverageExtraextra 0.3%
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate adds paint absent from reference (0.3%)
@page :first replaces the default top-center header on page one only; catches engines that collect margin boxes only from unselected @page rules. The WeasyPrint Paged CSS oracle is used because Chromium's print path places the same margin-box line at a different baseline than the Page 3 fixed-dimension and line-box rules.
regions (1 total; showing 1 representative)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
Extra15750,17 → 184,17575total 0.3% · largest 0.3%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Extra0,17 → 184,170.3candidate adds paint absent from reference (0.3%)
source · cases/paged-media/paged-first-margin-box-override.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>first page margin box override</title><style>
3@page{size:184px 120px;margin:20px 0 0 0;@top-center{content:"BASE"}}
4@page :first{@top-center{content:"FIRST"}}
5html{font-family:ParitySans;line-height:1.5}
6*{margin:0;box-sizing:border-box}
7.p{height:100px;background:#dbeafe}.q{height:100px;background:#bbf7d0}
8</style></head><body><div class="p"></div><div class="q"></div></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.27% · raw 0.27% (575 px) paged-margin-box-page-context-text · page-context-text-cascade · oracle: weasyprint · 2 pagesPASS via CSS-scale observation: sub-CSS shared-outline coverageExtraextra 0.3%
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate adds paint absent from reference (0.3%)
Page-context font-family, font-size, and line-height inherit into margin boxes, while :first overrides the page context and the nested margin rule overrides that page text. Catches engines that resolve one document-wide margin-box text default before selecting each physical page.
regions (1 total; showing 1 representative)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
Extra15750,18 → 184,18575total 0.3% · largest 0.3%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Extra0,18 → 184,180.3candidate adds paint absent from reference (0.3%)
source · cases/paged-media/paged-margin-box-page-context-text.html
1<!doctype html>
2<html><head><meta charset="utf-8"><title>page context text cascade</title><style>
3@page {
4  size: 184px 120px;
5  margin: 20px 0 0;
6  font-family: ParitySans;
7  font-size: 16px;
8  line-height: 1.5;
9  @top-center { content: "BASE"; }
10}
11@page :first {
12  font-size: 20px;
13  @top-center { content: "FIRST"; }
14}
15html { font-family: ParitySerif; font-size: 10px; line-height: 1; }
16* { margin: 0; box-sizing: border-box; }
17.p { height: 100px; background: #dbeafe; }
18.q { height: 100px; background: #bbf7d0; }
19</style></head><body><div class="p"></div><div class="q"></div></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.17% · raw 0.18% (498 px) paged-corner-margin-box-position · top-left-corner-positionPASS via CSS-scale observation: conserved sub-CSS coverageAntialiasCoveragemissing 0.1%extra 0.1%ΔE 36.6
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
@top-left-corner occupies the page corner while @top-left starts at the content edge; catches simplified top-band renderers that overlap or drop corner margin boxes.
regions (109 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr522690,0 → 19,1257total 0.2% · largest 0.04%
Missing281140,0 → 19,1242total 0.08% · largest 0.03%
Extra291150,1 → 19,1231total 0.08% · largest 0.02%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage12,1 → 19,120.04ΔRGB(-39,-39,-39)antialiasing coverage residue on a shared outline
Missing12,0 → 13,120.03candidate lacks paint present in reference (0.03%)
AntialiasCoverage12,1 → 12,120.02ΔRGB(231,231,231)antialiasing coverage residue on a shared outline
Extra13,1 → 13,100.02candidate adds paint absent from reference (0.02%)
Extra12,11 → 19,120.02candidate adds paint absent from reference (0.02%)
Missing14,11 → 19,110.01candidate lacks paint present in reference (0.01%)
Extra4,12 → 7,120.007761candidate adds paint absent from reference (0.007761%)
AntialiasCoverage4,12 → 7,120.007761ΔRGB(-128,-128,-128)antialiasing coverage residue on a shared outline
Missing4,11 → 7,110.007056candidate lacks paint present in reference (0.007056%)
AntialiasCoverage4,11 → 7,110.007056ΔRGB(118,118,118)antialiasing coverage residue on a shared outline
AntialiasCoverage2,6 → 2,90.006350ΔRGB(16,16,16)antialiasing coverage residue on a shared outline
AntialiasCoverage8,11 → 10,120.006350ΔRGB(-70,-70,-70)antialiasing coverage residue on a shared outline
AntialiasCoverage8,1 → 10,20.005644ΔRGB(97,97,97)antialiasing coverage residue on a shared outline
AntialiasCoverage0,7 → 1,90.005644ΔRGB(-51,-51,-51)antialiasing coverage residue on a shared outline
AntialiasCoverage2,11 → 4,120.005644ΔRGB(-91,-91,-91)antialiasing coverage residue on a shared outline
AntialiasCoverage1,2 → 2,30.004939ΔRGB(78,78,78)antialiasing coverage residue on a shared outline
AntialiasCoverage3,10 → 4,110.004939ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
AntialiasCoverage9,2 → 10,30.004233ΔRGB(-33,-33,-33)antialiasing coverage residue on a shared outline
AntialiasCoverage2,3 → 3,40.004233ΔRGB(-49,-49,-49)antialiasing coverage residue on a shared outline
AntialiasCoverage0,4 → 0,50.004233ΔRGB(48,48,48)antialiasing coverage residue on a shared outline
AntialiasCoverage2,4 → 2,60.004233ΔRGB(-39,-39,-39)antialiasing coverage residue on a shared outline
Missing4,0 → 5,00.003528candidate lacks paint present in reference (0.003528%)
Missing6,0 → 8,00.003528candidate lacks paint present in reference (0.003528%)
Extra4,2 → 5,20.003528candidate adds paint absent from reference (0.003528%)
AntialiasCoverage4,1 → 5,10.003528ΔRGB(65,65,65)antialiasing coverage residue on a shared outline
AntialiasCoverage6,1 → 8,10.003528ΔRGB(68,68,68)antialiasing coverage residue on a shared outline
AntialiasCoverage3,1 → 4,10.003528ΔRGB(122,122,122)antialiasing coverage residue on a shared outline
AntialiasCoverage4,2 → 5,20.003528ΔRGB(-176,-176,-176)antialiasing coverage residue on a shared outline
AntialiasCoverage0,6 → 0,70.003528ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
Extra7,2 → 8,20.002822candidate adds paint absent from reference (0.002822%)
AntialiasCoverage7,2 → 8,20.002822ΔRGB(-98,-98,-98)antialiasing coverage residue on a shared outline
AntialiasCoverage1,10 → 1,100.002822ΔRGB(-72,-72,-72)antialiasing coverage residue on a shared outline
Missing5,0 → 6,00.002117candidate lacks paint present in reference (0.002117%)
Missing3,1 → 4,10.002117candidate lacks paint present in reference (0.002117%)
Missing8,1 → 9,10.002117candidate lacks paint present in reference (0.002117%)
Extra6,2 → 6,20.002117candidate adds paint absent from reference (0.002117%)
Extra3,12 → 4,120.002117candidate adds paint absent from reference (0.002117%)
Extra8,12 → 8,120.002117candidate adds paint absent from reference (0.002117%)
AntialiasCoverage5,0 → 6,00.002117ΔRGB(239,239,239)antialiasing coverage residue on a shared outline
AntialiasCoverage1,3 → 1,30.002117ΔRGB(27,27,27)antialiasing coverage residue on a shared outline
Missing9,1 → 9,10.001411candidate lacks paint present in reference (0.001411%)
Missing2,1 → 2,10.001411candidate lacks paint present in reference (0.001411%)
Missing9,10 → 10,100.001411candidate lacks paint present in reference (0.001411%)
Missing8,10 → 9,100.001411candidate lacks paint present in reference (0.001411%)
Missing4,11 → 4,110.001411candidate lacks paint present in reference (0.001411%)
Missing8,11 → 8,110.001411candidate lacks paint present in reference (0.001411%)
Extra4,2 → 4,20.001411candidate adds paint absent from reference (0.001411%)
Extra8,2 → 8,20.001411candidate adds paint absent from reference (0.001411%)
Extra9,3 → 10,30.001411candidate adds paint absent from reference (0.001411%)
Extra9,12 → 10,120.001411candidate adds paint absent from reference (0.001411%)
Extra3,12 → 3,120.001411candidate adds paint absent from reference (0.001411%)
Extra9,12 → 9,120.001411candidate adds paint absent from reference (0.001411%)
AntialiasCoverage6,1 → 6,10.001411ΔRGB(-7,-7,-7)antialiasing coverage residue on a shared outline
AntialiasCoverage4,2 → 4,20.001411ΔRGB(-29,-29,-29)antialiasing coverage residue on a shared outline
AntialiasCoverage8,2 → 8,20.001411ΔRGB(-38,-38,-38)antialiasing coverage residue on a shared outline
AntialiasCoverage1,4 → 1,40.001411ΔRGB(103,103,103)antialiasing coverage residue on a shared outline
AntialiasCoverage2,9 → 2,90.001411ΔRGB(105,105,105)antialiasing coverage residue on a shared outline
AntialiasCoverage9,10 → 10,100.001411ΔRGB(165,165,165)antialiasing coverage residue on a shared outline
AntialiasCoverage8,11 → 9,110.001411ΔRGB(187,187,187)antialiasing coverage residue on a shared outline
AntialiasCoverage4,11 → 4,110.001411ΔRGB(183,183,183)antialiasing coverage residue on a shared outline
AntialiasCoverage8,11 → 8,110.001411ΔRGB(166,166,166)antialiasing coverage residue on a shared outline
Missing3,1 → 3,10.000706candidate lacks paint present in reference (0.000706%)
Missing10,1 → 10,10.000706candidate lacks paint present in reference (0.000706%)
Missing2,2 → 2,20.000706candidate lacks paint present in reference (0.000706%)
source · cases/paged-media/paged-corner-margin-box-position.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>corner page margin box position</title><style>
3@page{size:200px 144px;margin:24px;@top-left-corner{content:"C"}@top-left{content:"L"}}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6.box{height:70px;background:#fef3c7}
7</style></head><body><div class="box"></div></body></html>
PASS exact match paged-blank-margin-box-specificity · blank-over-right-specificity · oracle: weasyprint · 4 pages
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 4
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
On a blank page inserted by break-after:left, the fixed-width @page :blank top-center band overrides @page :right; isolates blank-page selector specificity from non-normative text-metric differences.
PASS exact match paged-side-margin-boxes · left-right-middle · oracle: weasyprint
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Empty @left-middle and @right-middle generated boxes must paint their side-margin backgrounds; catches renderers that only implement top and bottom margin boxes or suppress empty boxes.

page-orientation — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-page-orientation-rotate-left · rotate-left
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
@page page-orientation:rotate-left rotates the rendered page after layout; catches size-only implementations that leave portrait output upright.

page-selector — 100.00% verified visual parity PASS 6 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-background-named-compound-list · background-named-compound-list · 5 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 4
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 5
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Five complete page backgrounds exercise case-sensitive named pages, comma-separated selector lists, named-plus-spread compounds, :first specificity, unmatched named pages, and source order. Any selector, identity, or global-flattening defect changes most of at least one page. Chromium does not apply one named-plus-spread compound, so the Foundation reference materializes the standard cascade.
PASS exact match paged-background-physical-page-cascade · background-physical-page-cascade · 4 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 4
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Four pages expose their complete page backgrounds: :first wins over :right on page 1, a later equal-specificity :left rule wins on pages 2 and 4, and :right applies to page 3. Catches implementations that flatten selected @page backgrounds into one document-global style.
PASS exact match paged-blank-selector-background · blank-background · 4 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 4
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A sided break inserts a blank left page whose :blank background wins over :left, while a later non-blank left page retains its :left background. Small opaque content markers leave every physical-page background visible, catching both missing selection and selector leakage onto unrelated pages. Chromium does not insert the required sided blank page, so the Foundation reference materializes the specified four-page result.
PASS exact match paged-first-right-cascade · first-plus-right-cascade
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
The first page also matches :right, so declarations from @page :first and @page :right both apply; catches resolvers that pick only one pseudo-page rule.
PASS exact match paged-named-page-left-right · named-left-right · 3 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Named page selectors combined with :left and :right apply spread-specific margins only to matching chapter pages; catches named-only matching that drops pseudo-page selectors.
PASS exact match paged-page-selector-list-named · named-selector-list · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A comma-separated @page selector list applies one margin rule to title and chapter named pages; catches selector classifiers that store the whole list as one page name. Chromium omits both named-list margins, so the Foundation reference materializes the specified two-page result.

page-selectors — 100.00% verified visual parity PASS 2 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-first-page-margin · first-page-margin · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
CSS Paged Media 3 §3.3: @page :first sets a 128px top margin on page 1 only; page 2 keeps the 32px default. The harness compares both pages on integral 300-DPI boundaries, isolating the :first cascade from fractional endpoint sampling.
PASS exact match paged-spread-left-right-margins · spread-left-right-margins · 2 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
CSS Paged Media 3 §3.2 :left/:right spread margins: the right page has a 96px left margin and the left page a 96px right margin, while the opposite edges remain at the 32px default. The two-page assertion uses integral 300-DPI coordinates and isolates spread-selector geometry.

page-size — 100.00% verified visual parity PASS 2 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-size-jis-b4-landscape · jis-b4-landscape
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
@page size:jis-b4 landscape selects the named JIS B4 sheet and swaps axes; catches parsers missing the JIS keyword or orientation combination.
PASS exact match paged-size-ledger-keyword · ledger-keyword
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
@page size:ledger selects the 11in by 17in page box; catches page-size parsers that fall back after supporting only common sizes.

replaced-fragmentation — 100.00% verified visual parity PASS 2 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match paged-bordered-tall-image-fragment · bordered-tall-image · 3 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A bordered tall replaced image must continue its image content and border decoration across pages; catches splitters that only handle undecorated images.
PASS exact match paged-tall-image-object-fit-fill-fragment · tall-object-fit-fill-image · 3 pages
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A tall object-fit:fill image must show continued colored bands across later pages; catches renderers that treat replaced content as monolithic and clip it after page one.

running-element — 100.00% verified visual parity PASS 4 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.90% · raw 0.93% (1955 px) paged-running-first-margin-box · first-page-margin-box · oracle: weasyprint · 2 pagesPASS via CSS-scale observation: one-sided sub-CSS outline coverageMissingmissing 0.2%ΔE 28.2
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate lacks paint present in reference (0.2%)
position:running() referenced from @page :first appears in the first-page header only; catches running-element support that ignores selected page margin boxes.
regions (14 total; showing 14 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr13164954,0 → 125,18238total 0.8% · largest 0.1%
Missing1306180,20 → 180,118306total 0.1% · largest 0.1%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing180,20 → 180,1180.1candidate lacks paint present in reference (0.1%)
AntialiasCoverage73,4 → 80,130.1ΔRGB(-88,-41,-8)antialiasing coverage residue on a shared outline
AntialiasCoverage92,4 → 100,130.09ΔRGB(-151,-69,-13)antialiasing coverage residue on a shared outline
AntialiasCoverage101,4 → 107,130.08ΔRGB(-151,-69,-13)antialiasing coverage residue on a shared outline
AntialiasCoverage108,4 → 116,130.08ΔRGB(-104,-48,-9)antialiasing coverage residue on a shared outline
AntialiasCoverage66,4 → 73,130.07ΔRGB(-149,-69,-13)antialiasing coverage residue on a shared outline
AntialiasCoverage55,4 → 60,130.06ΔRGB(-163,-75,-14)antialiasing coverage residue on a shared outline
AntialiasCoverage117,4 → 125,130.06ΔRGB(-151,-69,-13)antialiasing coverage residue on a shared outline
AntialiasCoverage80,4 → 88,130.06ΔRGB(-147,-68,-13)antialiasing coverage residue on a shared outline
AntialiasCoverage119,5 → 124,120.05ΔRGB(-124,-57,-11)antialiasing coverage residue on a shared outline
AntialiasCoverage62,4 → 63,130.03ΔRGB(-163,-75,-15)antialiasing coverage residue on a shared outline
AntialiasCoverage67,5 → 70,80.03ΔRGB(-88,-41,-8)antialiasing coverage residue on a shared outline
AntialiasCoverage54,0 → 54,180.03ΔRGB(-2,-49,-81)antialiasing coverage residue on a shared outline
AntialiasCoverage110,5 → 114,100.03ΔRGB(-117,-54,-10)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-running-first-margin-box.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>running element first page margin box</title><style>
3@page{size:180px 120px;margin:22px 0 0 0}
4@page :first{@top-center{content:element(h)}}
5html{font-family:ParitySans;line-height:1.5}
6*{margin:0;box-sizing:border-box}
7h1{position:running(h);height:18px;background:#f97316;font-size:12px}.p{height:100px;background:#dbeafe}.q{height:100px;background:#bbf7d0}
8</style></head><body><h1>FIRST HEAD</h1><div class="p"></div><div class="q"></div></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.87% · raw 0.87% (1846 px) paged-element-first-except · element-first-except · oracle: weasyprint · 2 pagesPASS via CSS-scale observation: one-sided sub-CSS outline coverageMissingmissing 0.2%ΔE 33.7
page 1
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: page 2: visually accepted coverage phase; raw candidate lacks paint present in reference (0.2%)
element(head, first-except) suppresses the running element on the page where it first appears but allows it later; catches parsers that only support element(name).
regions (12 total; showing 12 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr11154058,0 → 121,18233total 0.7% · largest 0.1%
Missing1306180,20 → 180,118306total 0.1% · largest 0.1%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing180,20 → 180,1180.1candidate lacks paint present in reference (0.1%)
AntialiasCoverage67,4 → 74,130.1ΔRGB(-90,-74,-36)antialiasing coverage residue on a shared outline
AntialiasCoverage76,4 → 83,130.1ΔRGB(-165,-135,-66)antialiasing coverage residue on a shared outline
AntialiasCoverage89,4 → 96,130.09ΔRGB(-155,-127,-62)antialiasing coverage residue on a shared outline
AntialiasCoverage98,4 → 103,130.08ΔRGB(-155,-127,-62)antialiasing coverage residue on a shared outline
AntialiasCoverage104,4 → 113,130.08ΔRGB(-104,-85,-41)antialiasing coverage residue on a shared outline
AntialiasCoverage59,4 → 66,130.07ΔRGB(-153,-126,-61)antialiasing coverage residue on a shared outline
AntialiasCoverage114,4 → 121,130.06ΔRGB(-152,-125,-61)antialiasing coverage residue on a shared outline
AntialiasCoverage115,5 → 120,120.05ΔRGB(-126,-104,-51)antialiasing coverage residue on a shared outline
AntialiasCoverage60,5 → 63,80.03ΔRGB(-90,-74,-36)antialiasing coverage residue on a shared outline
AntialiasCoverage58,0 → 58,180.03ΔRGB(0,-16,-53)antialiasing coverage residue on a shared outline
AntialiasCoverage107,5 → 110,100.03ΔRGB(-108,-89,-44)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-element-first-except.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>element first-except margin header</title><style>
3@page{size:180px 120px;margin:22px 0 0 0;@top-center{content:element(head, first-except)}}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6h2{position:running(head);height:18px;background:#ffd166;font-size:12px}.p{height:100px;background:#dbeafe}.q{height:100px;background:#bbf7d0}
7</style></head><body><h2>RUN HEAD</h2><div class="p"></div><div class="q"></div></body></html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.86% · raw 0.86% (1862 px) paged-running-named-page-margin-box · named-page-margin-box · 2 pagesPASS via CSS-scale observation: one-sided sub-CSS outline coverageExtraextra 0.2%ΔE 36.2
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: page 2: visually accepted coverage phase; raw candidate adds paint absent from reference (0.2%)
position:running() referenced from a named @page chapter margin box appears only on chapter pages and retains the heading's explicitly authored bold weight. Chromium does not implement GCPM element(), so the Foundation-Chromium reference materializes the same complete styled running box with literal margin content.
regions (49 total; showing 49 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr48156945,4 → 138,13186total 0.7% · largest 0.09%
Extra129345,18 → 139,18293total 0.1% · largest 0.1%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Extra45,18 → 139,180.1candidate adds paint absent from reference (0.1%)
AntialiasCoverage115,4 → 130,130.09ΔRGB(-46,-37,-18)antialiasing coverage residue on a shared outline
AntialiasCoverage62,4 → 71,130.07ΔRGB(21,18,9)antialiasing coverage residue on a shared outline
AntialiasCoverage95,7 → 100,130.03ΔRGB(-32,-27,-13)antialiasing coverage residue on a shared outline
AntialiasCoverage131,9 → 138,130.03ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage71,4 → 80,60.02ΔRGB(59,49,24)antialiasing coverage residue on a shared outline
AntialiasCoverage45,9 → 52,130.02ΔRGB(-90,-74,-36)antialiasing coverage residue on a shared outline
AntialiasCoverage45,4 → 52,70.02ΔRGB(107,88,43)antialiasing coverage residue on a shared outline
AntialiasCoverage131,4 → 138,70.02ΔRGB(147,120,58)antialiasing coverage residue on a shared outline
AntialiasCoverage65,6 → 68,100.02ΔRGB(-24,-19,-9)antialiasing coverage residue on a shared outline
AntialiasCoverage124,6 → 126,100.02ΔRGB(-24,-19,-9)antialiasing coverage residue on a shared outline
AntialiasCoverage47,5 → 52,80.02ΔRGB(-108,-89,-44)antialiasing coverage residue on a shared outline
AntialiasCoverage73,5 → 76,80.02ΔRGB(24,19,9)antialiasing coverage residue on a shared outline
AntialiasCoverage47,9 → 52,120.02ΔRGB(110,90,44)antialiasing coverage residue on a shared outline
AntialiasCoverage95,5 → 98,80.02ΔRGB(4,4,2)antialiasing coverage residue on a shared outline
AntialiasCoverage86,13 → 92,130.02ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage132,5 → 136,80.02ΔRGB(-90,-74,-36)antialiasing coverage residue on a shared outline
AntialiasCoverage93,4 → 99,60.02ΔRGB(147,120,58)antialiasing coverage residue on a shared outline
AntialiasCoverage73,7 → 77,100.02ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage132,9 → 136,120.02ΔRGB(90,74,36)antialiasing coverage residue on a shared outline
AntialiasCoverage88,5 → 92,50.01ΔRGB(-90,-74,-36)antialiasing coverage residue on a shared outline
AntialiasCoverage116,5 → 121,50.01ΔRGB(-90,-74,-36)antialiasing coverage residue on a shared outline
AntialiasCoverage88,12 → 92,120.01ΔRGB(166,137,67)antialiasing coverage residue on a shared outline
AntialiasCoverage116,12 → 121,120.01ΔRGB(166,137,67)antialiasing coverage residue on a shared outline
AntialiasCoverage88,7 → 92,80.01ΔRGB(166,137,67)antialiasing coverage residue on a shared outline
AntialiasCoverage116,7 → 120,80.01ΔRGB(166,137,67)antialiasing coverage residue on a shared outline
AntialiasCoverage88,9 → 92,90.01ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage116,9 → 120,90.01ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage77,4 → 85,40.01ΔRGB(255,209,102)antialiasing coverage residue on a shared outline
AntialiasCoverage56,7 → 59,80.01ΔRGB(166,137,67)antialiasing coverage residue on a shared outline
AntialiasCoverage107,7 → 111,80.01ΔRGB(166,137,67)antialiasing coverage residue on a shared outline
AntialiasCoverage56,9 → 59,90.01ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage107,9 → 111,90.01ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage82,5 → 85,50.009426ΔRGB(-90,-74,-36)antialiasing coverage residue on a shared outline
AntialiasCoverage86,4 → 92,40.008955ΔRGB(255,209,102)antialiasing coverage residue on a shared outline
AntialiasCoverage115,4 → 121,40.008955ΔRGB(255,209,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,13 → 61,130.005656ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage111,13 → 113,130.005656ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage54,13 → 55,130.004713ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage71,13 → 73,130.004713ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage81,13 → 82,130.004713ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage93,13 → 95,130.004713ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage106,13 → 107,130.004713ΔRGB(-89,-72,-35)antialiasing coverage residue on a shared outline
AntialiasCoverage60,4 → 61,40.002828ΔRGB(255,209,102)antialiasing coverage residue on a shared outline
AntialiasCoverage111,4 → 113,40.002828ΔRGB(255,209,102)antialiasing coverage residue on a shared outline
AntialiasCoverage54,4 → 55,40.002357ΔRGB(255,209,102)antialiasing coverage residue on a shared outline
AntialiasCoverage106,4 → 107,40.002357ΔRGB(255,209,102)antialiasing coverage residue on a shared outline
AntialiasCoverage47,8 → 47,90.001885ΔRGB(43,35,17)antialiasing coverage residue on a shared outline
AntialiasCoverage45,7 → 45,70.000943ΔRGB(58,47,23)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-running-named-page-margin-box.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>running element named page margin box</title><style>
3@page{size:184px 120px;margin:0}
4@page chapter{size:184px 120px;margin:22px 0 0 0;@top-center{content:element(ch)}}
5html{font-family:ParitySans;line-height:1.5}
6*{margin:0;box-sizing:border-box}
7.cover{height:120px;background:#1d4ed8}h2{position:running(ch);height:18px;font-size:12px;font-weight:700;background:#ffd166}.body{page:chapter;height:100px;background:#16a34a}
8</style></head><body><div class="cover"></div><section class="body"><h2>CHAPTER HEAD</h2></section></body></html>
PASS exact match running-element-header · position-running · oracle: weasyprint
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
CSS GCPM running elements: position:running(runhead) removes a sized, painted box from normal flow and element(runhead) places that exact box in @top-center. The gold flow probe must start at the content top; this avoids text-metric noise and directly checks moved-box geometry. Validated against WeasyPrint because Chrome --print-to-pdf does not implement GCPM running elements.

running-header — 100.00% verified visual parity PASS 2 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.50% · raw 0.52% (1511 px) paged-gcpm-string-element-last · string-last-element-last · oracle: weasyprintPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 27.2
WeasyPrint ref
WeasyPrint ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
string(section,last) and element(head,last) in page margin boxes must use the last heading on the page; catches GCPM implementations that ignore named strings or only support element(name)'s default selection.
regions (11 total; showing 11 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr1115110,7 → 29,81479total 0.6% · largest 0.2%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage0,7 → 19,160.2ΔRGB(-111,-90,-44)antialiasing coverage residue on a shared outline
AntialiasCoverage15,69 → 21,790.08ΔRGB(3,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage23,72 → 29,810.08ΔRGB(1,1,1)antialiasing coverage residue on a shared outline
AntialiasCoverage8,72 → 14,790.07ΔRGB(-2,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage2,72 → 7,790.06ΔRGB(2,2,2)antialiasing coverage residue on a shared outline
AntialiasCoverage19,7 → 27,160.05ΔRGB(-90,-74,-36)antialiasing coverage residue on a shared outline
AntialiasCoverage21,8 → 27,150.05ΔRGB(-90,-74,-36)antialiasing coverage residue on a shared outline
AntialiasCoverage26,8 → 28,150.01ΔRGB(43,36,18)antialiasing coverage residue on a shared outline
AntialiasCoverage1,69 → 2,700.003249ΔRGB(-76,-88,-102)antialiasing coverage residue on a shared outline
AntialiasCoverage1,79 → 2,790.001624ΔRGB(191,219,254)antialiasing coverage residue on a shared outline
AntialiasCoverage21,13 → 21,140.000812ΔRGB(18,14,7)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-gcpm-string-element-last.html
1<!doctype html>
2<html>
3<head>
4  <meta charset="utf-8">
5  <style>
6    @page {
7      size: 200px 150px;
8      margin: 24px 0 0 0;
9      @top-left {
10        content: string(section, last);
11        background: #1d4ed8;
12        color: #ffffff;
13      }
14      @top-right {
15        content: element(head, last);
16        background: #16a34a;
17        color: #ffffff;
18      }
19    }
20    html { font-family: ParitySans; line-height: 1.5; }
21    * { margin: 0; box-sizing: border-box; }
22    h2 {
23      position: running(head);
24      string-set: section content();
25      width: 200px;
26      height: 18px;
27      font-size: 12px;
28      line-height: 18px;
29      background: #ffd166;
30    }
31    .spacer { width: 200px; height: 42px; background: #e5e7eb; }
32    p { width: 200px; height: 60px; background: #bfdbfe; font-size: 12px; }
33  </style>
34</head>
35<body>
36  <h2>ONE</h2>
37  <div class="spacer"></div>
38  <h2>TWO</h2>
39  <p>body</p>
40</body>
41</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.36% · raw 0.37% (950 px) paged-string-set-attr-start · string-set-attr-start · 2 pagesPASS via CSS-scale observation: conserved sub-CSS coverageExtramissing 0.5%extra 0.5%ΔE 25.3
page 1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
page 2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate adds paint absent from reference (0.5%)
string-set with attr() feeds string(section,start) in the page header when the assigning heading starts page 1, and the entry value continues on page 2. Chromium does not implement GCPM string-set, so the Foundation-Chromium reference materializes the required ALPHA margin content while preserving the same pagination.
regions (231 total; showing 64 representatives)

Complete component census grouped by dominant raster class; representative details are bounded.

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
Missing7918369,0 → 122,1118total 0.3% · largest 0.02%
ColorErr9658469,0 → 122,1221total 0.8% · largest 0.03%
Extra5618369,2 → 122,1224total 0.3% · largest 0.03%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Extra82,12 → 89,120.03candidate adds paint absent from reference (0.03%)
AntialiasCoverage102,5 → 108,50.03ΔRGB(123,123,123)antialiasing coverage residue on a shared outline
AntialiasCoverage102,6 → 108,60.03ΔRGB(-91,-91,-91)antialiasing coverage residue on a shared outline
AntialiasCoverage72,9 → 77,90.03ΔRGB(-87,-87,-87)antialiasing coverage residue on a shared outline
AntialiasCoverage114,9 → 119,90.03ΔRGB(-87,-87,-87)antialiasing coverage residue on a shared outline
AntialiasCoverage73,7 → 77,80.03ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
AntialiasCoverage114,7 → 118,80.03ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
AntialiasCoverage84,10 → 89,110.03ΔRGB(215,215,215)antialiasing coverage residue on a shared outline
Missing84,10 → 89,100.02candidate lacks paint present in reference (0.02%)
Missing102,5 → 108,50.02candidate lacks paint present in reference (0.02%)
Extra102,6 → 108,60.02candidate adds paint absent from reference (0.02%)
Extra72,9 → 77,90.02candidate adds paint absent from reference (0.02%)
Extra114,9 → 119,90.02candidate adds paint absent from reference (0.02%)
AntialiasCoverage92,7 → 97,70.02ΔRGB(-167,-167,-167)antialiasing coverage residue on a shared outline
Missing91,0 → 96,00.02candidate lacks paint present in reference (0.02%)
AntialiasCoverage91,0 → 96,00.02ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
Missing73,7 → 76,70.02candidate lacks paint present in reference (0.02%)
Missing115,7 → 118,70.02candidate lacks paint present in reference (0.02%)
AntialiasCoverage92,1 → 95,20.02ΔRGB(-99,-99,-99)antialiasing coverage residue on a shared outline
AntialiasCoverage92,6 → 95,60.02ΔRGB(75,75,75)antialiasing coverage residue on a shared outline
Extra93,7 → 96,70.01candidate adds paint absent from reference (0.01%)
AntialiasCoverage74,0 → 76,10.01ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
AntialiasCoverage115,0 → 117,10.01ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
AntialiasCoverage97,1 → 98,30.01ΔRGB(86,86,86)antialiasing coverage residue on a shared outline
AntialiasCoverage73,4 → 74,60.01ΔRGB(-82,-82,-82)antialiasing coverage residue on a shared outline
AntialiasCoverage115,4 → 116,60.01ΔRGB(-82,-82,-82)antialiasing coverage residue on a shared outline
Missing93,6 → 95,60.01candidate lacks paint present in reference (0.01%)
Extra93,2 → 95,20.01candidate adds paint absent from reference (0.01%)
AntialiasCoverage97,3 → 97,40.01ΔRGB(7,7,7)antialiasing coverage residue on a shared outline
AntialiasCoverage97,5 → 98,60.01ΔRGB(-22,-22,-22)antialiasing coverage residue on a shared outline
AntialiasCoverage72,3 → 73,40.009642ΔRGB(67,67,67)antialiasing coverage residue on a shared outline
AntialiasCoverage114,3 → 115,40.009642ΔRGB(67,67,67)antialiasing coverage residue on a shared outline
AntialiasCoverage78,6 → 78,70.009642ΔRGB(65,65,65)antialiasing coverage residue on a shared outline
AntialiasCoverage119,6 → 120,70.009642ΔRGB(65,65,65)antialiasing coverage residue on a shared outline
AntialiasCoverage70,9 → 70,110.009642ΔRGB(63,63,63)antialiasing coverage residue on a shared outline
AntialiasCoverage111,9 → 112,110.009642ΔRGB(63,63,63)antialiasing coverage residue on a shared outline
Missing74,0 → 76,00.008264candidate lacks paint present in reference (0.008264%)
Missing108,0 → 109,00.008264candidate lacks paint present in reference (0.008264%)
Missing116,0 → 117,00.008264candidate lacks paint present in reference (0.008264%)
Extra69,12 → 71,120.008264candidate adds paint absent from reference (0.008264%)
Extra78,12 → 80,120.008264candidate adds paint absent from reference (0.008264%)
Extra91,12 → 92,120.008264candidate adds paint absent from reference (0.008264%)
Extra100,12 → 102,120.008264candidate adds paint absent from reference (0.008264%)
Extra108,12 → 109,120.008264candidate adds paint absent from reference (0.008264%)
Extra111,12 → 113,120.008264candidate adds paint absent from reference (0.008264%)
Extra120,12 → 122,120.008264candidate adds paint absent from reference (0.008264%)
AntialiasCoverage108,0 → 109,00.008264ΔRGB(139,139,139)antialiasing coverage residue on a shared outline
AntialiasCoverage76,1 → 76,20.008264ΔRGB(87,87,87)antialiasing coverage residue on a shared outline
AntialiasCoverage117,1 → 118,20.008264ΔRGB(87,87,87)antialiasing coverage residue on a shared outline
AntialiasCoverage75,2 → 75,20.008264ΔRGB(-74,-74,-74)antialiasing coverage residue on a shared outline
AntialiasCoverage116,2 → 116,20.008264ΔRGB(-74,-74,-74)antialiasing coverage residue on a shared outline
AntialiasCoverage75,3 → 76,40.008264ΔRGB(-79,-79,-79)antialiasing coverage residue on a shared outline
AntialiasCoverage117,3 → 117,40.008264ΔRGB(-79,-79,-79)antialiasing coverage residue on a shared outline
AntialiasCoverage99,3 → 99,40.008264ΔRGB(14,14,14)antialiasing coverage residue on a shared outline
AntialiasCoverage77,3 → 77,40.008264ΔRGB(93,93,93)antialiasing coverage residue on a shared outline
AntialiasCoverage118,3 → 119,40.008264ΔRGB(93,93,93)antialiasing coverage residue on a shared outline
AntialiasCoverage72,4 → 72,50.008264ΔRGB(88,88,88)antialiasing coverage residue on a shared outline
AntialiasCoverage114,4 → 114,50.008264ΔRGB(88,88,88)antialiasing coverage residue on a shared outline
AntialiasCoverage76,5 → 76,60.008264ΔRGB(-72,-72,-72)antialiasing coverage residue on a shared outline
AntialiasCoverage118,5 → 118,60.008264ΔRGB(-72,-72,-72)antialiasing coverage residue on a shared outline
AntialiasCoverage71,7 → 71,80.008264ΔRGB(93,93,93)antialiasing coverage residue on a shared outline
AntialiasCoverage113,7 → 113,80.008264ΔRGB(93,93,93)antialiasing coverage residue on a shared outline
AntialiasCoverage78,7 → 79,90.008264ΔRGB(88,88,88)antialiasing coverage residue on a shared outline
AntialiasCoverage120,7 → 120,90.008264ΔRGB(88,88,88)antialiasing coverage residue on a shared outline
source · cases/paged-media/paged-string-set-attr-start.html
1<!DOCTYPE html>
2<html><head><meta charset="utf-8"><title>string-set attr start margin header</title><style>
3@page{size:192px 136px;margin:24px 0 0 0;@top-center{content:string(section,start);font-weight:400}}
4html{font-family:ParitySans;line-height:1.5}
5*{margin:0;box-sizing:border-box}
6h2{string-set:section attr(data-title);height:20px;background:#ffd166;font-size:12px;font-weight:700}.body{height:100px;background:#bfdbfe;break-before:page}
7</style></head><body><h2 data-title="ALPHA">ignored text</h2><div class="body"></div></body></html>

table-fragmentation — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑