tables — 100.00% verified visual parity

← all categories · PASS 98 · FAIL 0 · REFERENCE-DISPUTED 1 · 99 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.

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

REFERENCE-DISPUTED 3731 px · above-floor 1.14% · raw 1.14% max-page diff tables-colspan-max-clamp · colspan-max-clamp · REFERENCE DISPUTEDExtraextra 1.0%ΔE 45.3
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: candidate adds paint absent from reference (1.0%)
A cell declares colspan=1001 before a normal cell; browsers clamp overly large colspan values to the HTML maximum rather than creating an unbounded grid. Catches wrong implementations where a renderer that accepts the raw integer creates a huge table width or drops later cells, while ordinary small colspan tests pass.
reference dispute: HTML clamps the first cell to 1000 columns, then forms a 1001st track for the following cell. CSS Tables fixed layout preserves every column and distributes unspecified-track width equally; Ironpress keeps that subpixel trailing cell, while Chromium gives it an 8px minimum and Firefox does not. The Chromium PDF is a compatibility canary, not a normative pixel oracle.
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
Extra1756180,1 → 182,41756total 1.0% · largest 1.0%
ColorErr12975170,2 → 178,402975total 4.0% · largest 4.0% · max ΔE 45.3

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
ColorValue170,2 → 178,404.0ΔE 45.3 ΔRGB(213,40,53)fill recolour ΔRGB(+213,+40,+53) (ΔE 45.3)
Extra180,1 → 182,411.0candidate adds paint absent from reference (1.0%)
source · cases/tables/tables-colspan-max-clamp.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-colspan-max-clamp</title>
6<style>
7@page{size:280px 120px;margin:0}
8html{font-family:ParitySans;line-height:1.5}
9*{margin:0;box-sizing:border-box}
10html,body{background:#ffffff}
11body{padding:18px}table{table-layout:fixed;width:180px;border-collapse:separate;border-spacing:0}td{height:42px;border:2px solid #111}.span{background:#e63946}.last{background:#2a9d8f}
12</style>
13</head>
14<body>
15<table><tr><td class="span" colspan="1001"></td><td class="last"></td></tr></table>
16</body>
17</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.25% · raw 0.25% (825 px) tables-colspan-max-clamp-borderless · colspan-max-clamp-fixed-distribution · oracle: weasyprintPASS via CSS-scale observation: sub-CSS shared-outline coverageMissingmissing 0.8%ΔE 38.1
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%)
A borderless 180px fixed-layout table puts colspan=1001 before one ordinary cell. HTML clamps the span to 1000 and fixed layout divides unspecified tracks without an intrinsic minimum, leaving the final cell subpixel-wide; catches a renderer that invents a visible minimum for that 1001st track.
regions (3 total; showing 3 representatives)

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

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr22620,0 → 180,42131total 0.4% · largest 0.2%
Missing15630,42 → 180,42563total 0.8% · largest 0.8%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing0,42 → 180,420.8candidate lacks paint present in reference (0.8%)
AntialiasCoverage0,0 → 0,420.2ΔRGB(-8,-69,-64)antialiasing coverage residue on a shared outline
ColorValue180,0 → 180,420.2ΔRGB(188,-100,-73)fill recolour ΔRGB(+188,-100,-73) (ΔE 0)
source · cases/tables/tables-colspan-max-clamp-borderless.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-colspan-max-clamp-borderless</title>
6<style>
7@page{size:280px 120px;margin:0}
8html{font-family:ParitySans;line-height:1.5}
9*{margin:0;box-sizing:border-box}
10html,body{background:#ffffff}
11body{padding:18px}
12table{table-layout:fixed;width:180px;border-collapse:separate;border-spacing:0}
13td{height:42px;border:0}
14.span{background:#e63946}
15.last{background:#2a9d8f}
16</style>
17</head>
18<body>
19<table><tr><td class="span" colspan="1001"></td><td class="last"></td></tr></table>
20</body>
21</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.009244% · raw 0.009956% (28 px) tables-border-attribute · borderPASS via CSS-scale observation: sub-CSS shared-outline coverageMissingmissing 0.02%ΔE 1.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 lacks paint present in reference (0.02%)
A table uses border=4 without CSS borders, so browser presentational hints draw visible table/cell borders. Catches wrong implementations where a CSS-only renderer ignores the attribute and paints only the cell backgrounds.
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
ColorErr8136,6 → 142,564total 0.02% · largest 0.005119% · max ΔE 1.2
Missing3156,6 → 141,5611total 0.02% · largest 0.01%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing138,56 → 141,560.01candidate lacks paint present in reference (0.01%)
AntialiasCoverage69,50 → 70,500.005119ΔE 1.2 ΔRGB(6,6,6)antialiasing coverage residue on a shared outline
AntialiasCoverage135,50 → 136,500.003839ΔE 1.2 ΔRGB(6,6,6)antialiasing coverage residue on a shared outline
Missing6,6 → 7,60.002559candidate lacks paint present in reference (0.002559%)
Missing72,6 → 73,60.002559candidate lacks paint present in reference (0.002559%)
AntialiasCoverage6,6 → 6,60.001280ΔRGB(11,11,11)antialiasing coverage residue on a shared outline
AntialiasCoverage7,6 → 7,60.001280ΔRGB(2,2,2)antialiasing coverage residue on a shared outline
AntialiasCoverage72,6 → 72,60.001280ΔRGB(11,11,11)antialiasing coverage residue on a shared outline
AntialiasCoverage73,6 → 73,60.001280ΔRGB(5,5,5)antialiasing coverage residue on a shared outline
AntialiasCoverage138,56 → 138,560.001280ΔRGB(9,9,9)antialiasing coverage residue on a shared outline
AntialiasCoverage142,56 → 142,560.001280ΔRGB(8,8,8)antialiasing coverage residue on a shared outline
source · cases/tables/tables-border-attribute.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-border-attribute</title>
6<style>
7@page{size:240px 120px;margin:0}
8html{font-family:ParitySans;line-height:1.5}
9*{margin:0;box-sizing:border-box}
10html,body{background:#ffffff}
11body{padding:18px}td{width:64px;height:44px;background:#f1faee}.a{background:#e63946}.b{background:#2a9d8f}
12</style>
13</head>
14<body>
15<table border="4"><tr><td class="a"></td><td class="b"></td></tr></table>
16</body>
17</html>
PASS exact match tables-cellpadding-attribute · cellpadding
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A legacy table uses cellpadding=16 with no CSS padding; an inner marker should be inset from the cell border. Catches wrong implementations where a CSS-only implementation ignores cellpadding and places the marker against the border.
PASS exact match tables-cellspacing-attribute · cellspacing
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A legacy table uses cellspacing=14 with no CSS border-spacing and a dark table background. Catches wrong implementations where a CSS-only implementation renders adjacent cells without the dark spacing gutters.

anonymous-table-fixup — 100.00% verified visual parity PASS 4 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match tables-anonymous-cell-in-row · non-cell-row-child
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A CSS table-row contains one explicit table-cell and one plain div; the div should be wrapped in an anonymous table-cell and appear as the second cell. Catches wrong implementations where a renderer filters row children to explicit table-cell boxes and silently drops the green div.
PASS exact match tables-anonymous-row-group-child · non-row-row-group-child
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A CSS table-row-group contains a plain div before a real table-row; the div should become an anonymous row with one cell. Catches wrong implementations where a renderer that only collects explicit table-row children from row groups drops the blue anonymous row.
PASS exact match tables-anonymous-table-cell-siblings · orphan-table-cell-siblings
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Two inline siblings are display:table-cell without an explicit table or row; fixup creates an anonymous table and row. Catches wrong implementations where a renderer without fixup treats them as normal inline/block boxes and never applies table-cell equal-row layout.
PASS exact match tables-whitespace-row-fixup · whitespace-between-rows
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Whitespace text appears between two display:table-row boxes inside a CSS display table. Catches wrong implementations where a naive fixup implementation wraps whitespace into an anonymous row/cell and creates an extra blank band.

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

PASS exact match tables-colgroup-background · column-group-background
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A colgroup with span=2 has a blue background under two transparent columns and a third column remains yellow table background. Catches wrong implementations where a renderer that ignores colgroup backgrounds shows all three columns as yellow or only applies widths.
PASS exact match tables-column-background · column-background
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Two col elements provide red and green backgrounds while all cells are transparent. Catches wrong implementations where a width-only col implementation passes col sizing tests but leaves transparent cells showing the table background.
PASS exact match tables-row-group-background · row-group-background
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A tbody has a blue background, cells are transparent, and the table background is yellow. Catches wrong implementations where a renderer that only falls back to direct row backgrounds shows yellow table background through the cells instead of the tbody layer.
PASS exact match tables-row-over-column-background · row-over-column
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A red column background and a green row background overlap under transparent cells; row layer should paint above column layer. Catches wrong implementations where a renderer that implements only columns or paints layers in the wrong order shows red where the row should be green.

border-collapse — 100.00% verified visual parity PASS 11 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.29% · raw 0.29% (828 px) tables-border-style-conflict · style-conflictPASS via CSS-scale observation: one-sided sub-CSS outline coverageAntialiasCoverageextra 0.02%ΔE 9.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 antialiasing coverage residue on a shared outline
Collapsed-border conflict where equal-width double beats solid on the shared edge; catches renderers that overpaint the later solid edge.
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
ColorErr480278,0 → 90,64201total 0.8% · largest 0.2%
Extra22678,64 → 90,6413total 0.02% · largest 0.01%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage78,0 → 78,640.2ΔRGB(-29,-14,9)antialiasing coverage residue on a shared outline
AntialiasCoverage86,0 → 86,640.2ΔRGB(-14,-11,-7)antialiasing coverage residue on a shared outline
AntialiasCoverage82,0 → 82,640.2ΔRGB(-80,-38,27)antialiasing coverage residue on a shared outline
AntialiasCoverage90,0 → 90,640.2ΔRGB(-40,-30,-18)antialiasing coverage residue on a shared outline
Extra78,64 → 82,640.01candidate adds paint absent from reference (0.01%)
Extra86,64 → 90,640.01candidate adds paint absent from reference (0.01%)
source · cases/tables/tables-border-style-conflict.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-border-style-conflict</title>
6<style>
7  @page { size: 240px 120px; margin: 0; }
8  html { font-family: ParitySans; line-height: 1.5; }
9  * { margin: 0; box-sizing: border-box; }
10  html, body { background: #ffffff; }
11  body { padding: 18px; }
12  table { border-collapse: collapse; }
13  td { width: 84px; height: 64px; padding: 0; border: 0; }
14  .a { background: #ffe066; border-right: 12px double #1f77b4; }
15  .b { background: #8ecae6; border-left: 12px solid #d7263d; }
16</style>
17</head>
18<body>
19  <table>
20    <tr><td class="a"></td><td class="b"></td></tr>
21  </table>
22</body>
23</html>
PASS exact match tables-border-collapse · collapse
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
border-collapse:collapse merges adjacent 4px cell borders into shared single edges.
PASS exact match tables-border-hidden-conflict · hidden-conflict
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Collapsed-border conflict where a hidden right border must suppress the neighboring solid left border; catches engines that parse hidden as none or paint both cell edges.
PASS exact match tables-border-separate · separate
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
border-collapse:separate with zero spacing keeps each cell's 4px border doubled at shared edges.
PASS exact match tables-border-width-conflict · width-conflict
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Collapsed-border conflict where the wider blue shared border wins over a narrower red neighbor; catches DOM-order overpainting instead of width precedence.
PASS exact match tables-collapse-cell-over-row · cell-over-row-origin
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A row and its cells declare equal-width collapsed top borders with different colors, so cell-origin precedence should choose the blue cell border. Catches wrong implementations where a renderer without origin precedence paints the red row border or paints both.
PASS exact match tables-collapse-directional-tie · directional-tie-break
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Equal-width equal-style borders of different colors meet at a collapsed shared vertical edge; the directional tie-break determines the winner. Catches wrong implementations where a renderer that uses DOM paint order can pass width/style conflict tests but choose the opposite color in exact ties.
PASS exact match tables-collapse-none-loses · none-loses-to-solid
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
The left cell's right border is none and the right cell's left border is a thick red solid border on the same collapsed edge. Catches wrong implementations where a renderer that treats none as an instruction to erase the shared edge or paints only the first cell edge will omit the red border.
PASS exact match tables-collapse-origin-groups · row-row-group-column-origin-conflicts
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Collapsed borders from rows, row groups, columns, and column groups participate at their grid edges with width, style, and origin precedence instead of being ignored or painted as independent boxes.
PASS exact match tables-collapse-outer-table-border · outer-table-border-conflict
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
The table has a thick red collapsed border while the outer cells have thinner blue borders on the same outer grid edges. Catches wrong implementations where an implementation that paints the table border box independently or samples only cell borders shows the wrong outer color/thickness.
PASS exact match tables-collapse-span-origin-conflicts · rowspan-colspan-origin-harmonization
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A spanning cell harmonizes collapsed row and column origin borders across every contiguous track covered by its side.

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

PASS exact match tables-border-spacing · uniform-12px
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
border-collapse:separate with 12px border-spacing exposes the table background between cells.
PASS exact match tables-border-spacing-two-value · two-value
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
border-spacing:24px 6px applies distinct horizontal and vertical gaps between cells.
PASS exact match tables-border-spacing-zero · zero
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
border-spacing:0 in separate mode makes cells touch with their own (non-merged) borders.
PASS exact match tables-collapse-ignores-spacing · ignored-when-collapsed
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A collapsed-border table ignores a large border-spacing value; catches combined-case engines that apply spacing despite border-collapse:collapse.

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

PASS exact match tables-caption · caption-side-top
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A top-side caption renders as a full-width banner above the table body.
PASS exact match tables-caption-min-width · caption-min-width-auto-layout
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A shrink-to-fit auto table has tiny cells but a wide nowrap caption that should expand the table wrapper to the caption minimum width. Catches wrong implementations where a renderer that sizes the table only from cell columns wraps or overflows the caption above a too-narrow two-cell table.
PASS exact match tables-caption-side-bottom · caption-side-bottom
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
caption-side:bottom renders the caption banner below the table body instead of above.
PASS exact match tables-caption-side-on-caption · caption-side-on-caption
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
The table has no caption-side declaration, but the caption element itself sets caption-side:bottom. Catches wrong implementations where a renderer that only reads caption-side from the table style will place this caption above, while table-level bottom fixtures still pass.
PASS exact match tables-multiple-captions · multiple-caption-boxes
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Two CSS table-caption boxes on the same CSS table use distinct colors and should both participate in the table wrapper before the rows. Catches wrong implementations where an implementation that stores only the first caption passes single-caption fixtures but drops the second caption entirely.

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

PASS exact match tables-cell-padding · padding-20px
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
20px cell padding insets a filled inner box from the cell border on all sides.

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

PASS exact match tables-colspan · colspan-2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A header cell with colspan=2 spans two fixed columns above a normal three-cell row.

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

PASS exact match tables-colgroup-span-fixed · col-span-fixed
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Fixed table layout applies a col span=2 width to two equal columns before a wider third column; catches engines that ignore col span width assignment.
PASS exact match tables-colgroup-span-width · colgroup-span-width
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A childless colgroup span=2 with width:50px should create two 50px columns followed by a 100px column. Catches wrong implementations where a renderer that supports only col child widths passes existing colgroup tests but ignores bare colgroup spans.
PASS exact match tables-width-percent-columns · percent
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Fixed-layout columns at 25%/50%/25% of a 400px table resolve to proportional widths.

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

PASS exact match tables-direction-rtl-columns · rtl-column-order
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A direction:rtl table has red first cell and green second cell; the first column should be visually on the right. Catches wrong implementations where a left-to-right cell placer shows red on the left even though text bidi support may work elsewhere.

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

PASS visually equivalent · no rejecting defect · thresholded evidence 0.09% · raw 0.09% (318 px) tables-inline-table-inline-flow · inline-table-inline-flowPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 46.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
Text before and after an inline-table should remain on the same line while the inline-table internally lays out two cells side by side. Catches wrong implementations where a renderer that treats inline-table as inline text or block flow will either drop the table grid or force the trailing text to a new line.
regions (3 total; showing 3 representatives)

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

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr331815,4 → 103,38106total 0.6% · largest 0.2%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage15,4 → 15,380.2ΔRGB(-213,-40,-53)antialiasing coverage residue on a shared outline
AntialiasCoverage57,4 → 57,380.2ΔRGB(213,40,53)antialiasing coverage residue on a shared outline
AntialiasCoverage103,4 → 103,380.2ΔRGB(25,140,126)antialiasing coverage residue on a shared outline
source · cases/tables/tables-inline-table-inline-flow.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-inline-table-inline-flow</title>
6<style>
7@page{size:304px 120px;margin:0}
8html{font-family:ParitySans;line-height:1.5}
9*{margin:0;box-sizing:border-box}
10html,body{background:#ffffff}
11body{padding:18px;background:#fff;font-size:20px}.it{display:inline-table;border-collapse:separate;border-spacing:4px;background:#111;vertical-align:middle}.r{display:table-row}.c{display:table-cell;width:42px;height:34px}.a{background:#e63946}.b{background:#2a9d8f}.txt{background:#ffbe0b;color:#111}
12</style>
13</head>
14<body>
15<span class="txt">L</span><span class="it"><span class="r"><span class="c a"></span><span class="c b"></span></span></span><span class="txt">R</span>
16</body>
17</html>
PASS exact match tables-css-display-table · css-table-roles
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
display:table/table-row/table-cell on divs lays out side-by-side cells with separated spacing; catches tag-only table layout that stacks CSS table boxes.
PASS exact match tables-css-row-groups-reorder · css-row-group-reorder
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A div-based CSS table declares footer before body and header last; table display semantics put the header first and footer last. Catches wrong implementations where a renderer that only supports table-row/table-cell or follows DOM block order will show red footer first or stack all divs.
PASS exact match tables-css-table-caption · css-table-caption
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A non-caption div inside a CSS table is made display:table-caption and should become a full-width caption above the row grid. Catches wrong implementations where a renderer that only recognizes the HTML caption tag ignores the div caption or lays it as a normal block inside the table.
PASS exact match tables-css-table-columns-fixed · css-table-column-widths
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A CSS display table uses non-col elements as table-column boxes to make a narrow red column and wide green column. Catches wrong implementations where a renderer without CSS table-column support sizes both cells equally or treats the column divs as visible blocks.

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

PASS exact match tables-empty-cells-collapse-ignored · ignored-in-collapse
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A collapsed-border table sets empty-cells:hide on an empty red cell next to a filled green cell. Catches wrong implementations where a renderer that applies empty-cells in collapsed mode suppresses the empty cell background/border, even though existing separated-mode hide tests pass.
PASS exact match tables-empty-cells-hidden-content · visibility-hidden
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
empty-cells:hide treats visibility:hidden cell content as no visible content and removes an all-empty row; catches DOM-presence emptiness tests.
PASS exact match tables-empty-cells-hide · hide
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
empty-cells:hide suppresses borders and backgrounds of cells with no content in a separated table.
PASS exact match tables-empty-cells-whitespace · whitespace-and-empty
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
empty-cells:hide treats whitespace-only and fully-empty cells as empty; only the cell with real text paints.

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

PASS exact match tables-row-height-minimum · row-min-height
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A tr declares height:80px while its cells contain only a 20px marker. Catches wrong implementations where a renderer that derives row height only from cell content paints a short row, while ordinary cell-height tests still pass.

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

PASS exact match tables-rowspan · rowspan-2
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A first-column cell with rowspan=2 spans both rows while later columns stay single-row.
PASS exact match tables-rowspan-extra-columns · extra-columns-from-occupancy
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
The first row has a rowspan in column one plus one normal cell; the second row has two new cells, so the grid needs three columns. Catches wrong implementations where a renderer that determines column count from authored cells per row caps the table at two columns and drops or overlays the second-row trailing cell.
PASS exact match tables-rowspan-height-distribution · height-distribution
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A cell with rowspan=2 and height:100px spans two otherwise short rows. Catches wrong implementations where a renderer that computes each row height from only non-spanning cells lets the tall spanning cell overflow beyond the two-row table area.
PASS exact match tables-rowspan-stagger · stagger-shift
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A rowspan=2 first-column cell shifts later rows' cells into the remaining columns.
PASS exact match tables-rowspan-thead-clipped · row-group-boundary-clip
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A thead cell has rowspan=3 but the thead has one row; it must not occupy the first tbody column. Catches wrong implementations where a global rowspan occupancy implementation makes the first tbody row start in column two, even though positive-rowspan tests inside a group pass.
PASS exact match tables-rowspan-zero · rowspan-zero
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
rowspan=0 spans the remaining rows in the row group; catches implementations that clamp zero to one and shift later rows left.

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

PASS exact match tables-colspan-rowspan · colspan-rowspan-combined
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A single cell with both colspan=2 and rowspan=2 occupies a 2x2 block; surrounding cells flow around it.

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

PASS exact match tables-basic-grid · basic-grid
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
2x3 collapsed-border table of fixed 120x60px cells forming a basic grid.

table-cell-children — 100.00% verified visual parity PASS 10 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.01% · raw 0.01% (24 px) tables-cell-img-width-auto-intrinsic · img-width-auto-intrinsicPASS via CSS-scale observation: one-sided sub-CSS outline coverageExtraextra 0.004765%ΔE 3.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.004765%)
An img with explicit width and height:auto inside a table cell uses intrinsic aspect-ratio sizing and contributes the correct row height.
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
ColorErr222212,12 → 32,321total 0.05% · largest 0.002230%
Extra2223,23 → 32,321total 0.004459% · largest 0.002230%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Extra32,23 → 32,230.002230candidate adds paint absent from reference (0.002230%)
Extra23,32 → 23,320.002230candidate adds paint absent from reference (0.002230%)
AntialiasCoverage21,12 → 21,120.002230ΔRGB(-12,-8,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage23,12 → 23,120.002230ΔRGB(-14,-9,-5)antialiasing coverage residue on a shared outline
AntialiasCoverage19,13 → 19,130.002230ΔRGB(19,12,6)antialiasing coverage residue on a shared outline
AntialiasCoverage25,13 → 25,130.002230ΔRGB(18,12,7)antialiasing coverage residue on a shared outline
AntialiasCoverage15,15 → 15,150.002230ΔRGB(14,8,5)antialiasing coverage residue on a shared outline
AntialiasCoverage29,15 → 29,150.002230ΔRGB(6,4,2)antialiasing coverage residue on a shared outline
AntialiasCoverage15,15 → 15,150.002230ΔRGB(14,8,5)antialiasing coverage residue on a shared outline
AntialiasCoverage29,15 → 29,150.002230ΔRGB(19,13,7)antialiasing coverage residue on a shared outline
AntialiasCoverage13,19 → 13,190.002230ΔRGB(19,12,6)antialiasing coverage residue on a shared outline
AntialiasCoverage31,19 → 31,190.002230ΔRGB(14,8,5)antialiasing coverage residue on a shared outline
AntialiasCoverage12,21 → 12,210.002230ΔRGB(-12,-8,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage32,21 → 32,210.002230ΔRGB(-19,-13,-7)antialiasing coverage residue on a shared outline
AntialiasCoverage12,23 → 12,230.002230ΔRGB(-14,-9,-5)antialiasing coverage residue on a shared outline
AntialiasCoverage13,25 → 13,250.002230ΔRGB(18,12,7)antialiasing coverage residue on a shared outline
AntialiasCoverage31,25 → 31,250.002230ΔRGB(10,7,3)antialiasing coverage residue on a shared outline
AntialiasCoverage15,29 → 15,290.002230ΔRGB(6,4,2)antialiasing coverage residue on a shared outline
AntialiasCoverage29,29 → 29,290.002230ΔRGB(15,10,5)antialiasing coverage residue on a shared outline
AntialiasCoverage15,29 → 15,290.002230ΔRGB(19,13,7)antialiasing coverage residue on a shared outline
AntialiasCoverage29,29 → 29,290.002230ΔRGB(15,10,5)antialiasing coverage residue on a shared outline
AntialiasCoverage19,31 → 19,310.002230ΔRGB(14,8,5)antialiasing coverage residue on a shared outline
AntialiasCoverage25,31 → 25,310.002230ΔRGB(10,7,3)antialiasing coverage residue on a shared outline
AntialiasCoverage21,32 → 21,320.002230ΔRGB(-19,-13,-7)antialiasing coverage residue on a shared outline
source · cases/tables/tables-cell-img-width-auto-intrinsic.html
1<!doctype html>
2<html>
3<head>
4<meta charset="utf-8">
5<style>
6@page{size:152px 112px;margin:0}
7html{font-family:ParitySans;line-height:1.5}
8*{margin:0;box-sizing:border-box}
9html,body{background:#fff}
10body{padding:12px}
11table{border-collapse:collapse;width:104px}
12td{border:2px solid #222;padding:6px;vertical-align:top;background:#f1f5f9}
13img{display:block;width:56px;height:auto}
14.sentinel{width:16px;height:10px;background:#00a651}
15</style>
16</head>
17<body>
18<table><tr>
19<td><img alt="" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='40' viewBox='0 0 80 40'%3E%3Crect width='80' height='40' fill='%231f6fb2'/%3E%3Ccircle cx='20' cy='20' r='14' fill='%23fff'/%3E%3Crect x='42' y='8' width='26' height='24' fill='%23ed8936'/%3E%3C/svg%3E"></td>
20<td><div class="sentinel"></div></td>
21</tr></table>
22</body>
23</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.01% · raw 0.01% (16 px) tables-cell-inline-svg-child · inline-svg-childPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 5.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 antialiasing coverage residue on a shared outline
An inline SVG child paints in normal flow and should also paint when nested directly inside a table cell; catches table-cell child render traversal dropping SVG layout elements.
regions (16 total; showing 16 representatives)

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

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr161613,13 → 29,811total 0.03% · largest 0.001701%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage19,13 → 19,130.001701ΔRGB(13,6,-12)antialiasing coverage residue on a shared outline
AntialiasCoverage23,13 → 23,130.001701ΔRGB(14,6,-14)antialiasing coverage residue on a shared outline
AntialiasCoverage13,19 → 13,190.001701ΔRGB(13,6,-12)antialiasing coverage residue on a shared outline
AntialiasCoverage29,19 → 29,190.001701ΔRGB(16,7,-16)antialiasing coverage residue on a shared outline
AntialiasCoverage13,23 → 13,230.001701ΔRGB(14,6,-14)antialiasing coverage residue on a shared outline
AntialiasCoverage29,23 → 29,230.001701ΔRGB(17,8,-17)antialiasing coverage residue on a shared outline
AntialiasCoverage19,29 → 19,290.001701ΔRGB(16,7,-16)antialiasing coverage residue on a shared outline
AntialiasCoverage23,29 → 23,290.001701ΔRGB(17,8,-17)antialiasing coverage residue on a shared outline
AntialiasCoverage19,65 → 19,650.001701ΔRGB(20,9,-19)antialiasing coverage residue on a shared outline
AntialiasCoverage23,65 → 23,650.001701ΔRGB(20,9,-19)antialiasing coverage residue on a shared outline
AntialiasCoverage13,71 → 13,710.001701ΔRGB(14,7,-14)antialiasing coverage residue on a shared outline
AntialiasCoverage29,71 → 29,710.001701ΔRGB(20,9,-18)antialiasing coverage residue on a shared outline
AntialiasCoverage13,75 → 13,750.001701ΔRGB(11,5,-11)antialiasing coverage residue on a shared outline
AntialiasCoverage29,75 → 29,750.001701ΔRGB(17,7,-15)antialiasing coverage residue on a shared outline
AntialiasCoverage19,81 → 19,810.001701ΔRGB(7,3,-6)antialiasing coverage residue on a shared outline
AntialiasCoverage23,81 → 23,810.001701ΔRGB(9,4,-9)antialiasing coverage residue on a shared outline
source · cases/tables/tables-cell-inline-svg-child.html
1<!doctype html>
2<html>
3<head>
4<meta charset="utf-8">
5<style>
6@page{size:120px 128px;margin:0}
7html{font-family:ParitySans;line-height:1.5}
8*{margin:0;box-sizing:border-box}
9html,body{background:#fff}
10body{padding:12px}
11.control{width:64px;height:42px;border:2px solid #222;background:#f1f5f9;padding:5px;margin-bottom:10px}
12table{border-collapse:collapse;width:64px;height:42px}
13td{border:2px solid #222;background:#f1f5f9;padding:5px;vertical-align:top}
14svg{display:block;width:28px;height:28px}
15</style>
16</head>
17<body>
18<div class="control"><svg viewBox="0 0 28 28"><rect width="28" height="28" fill="#1769ff"/><circle cx="14" cy="14" r="8" fill="#ffd21f"/></svg></div>
19<table><tr><td><svg viewBox="0 0 28 28"><rect width="28" height="28" fill="#1769ff"/><circle cx="14" cy="14" r="8" fill="#ffd21f"/></svg></td></tr></table>
20</body>
21</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.005333% · raw 0.005333% (12 px) tables-cell-deep-img-descendant · deep-img-descendantPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 3.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 antialiasing coverage residue on a shared outline
A table cell containing nested block wrappers around an img lays out and paints the deep replaced descendant without flattening it away.
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
ColorErr121235,24 → 45,341total 0.02% · largest 0.001597%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage37,24 → 37,240.001597ΔRGB(-10,-7,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage43,24 → 43,240.001597ΔRGB(-10,-7,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage36,25 → 36,250.001597ΔRGB(-12,-8,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage44,25 → 44,250.001597ΔRGB(-12,-8,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage35,28 → 35,280.001597ΔRGB(18,12,7)antialiasing coverage residue on a shared outline
AntialiasCoverage45,28 → 45,280.001597ΔRGB(18,12,7)antialiasing coverage residue on a shared outline
AntialiasCoverage35,30 → 35,300.001597ΔRGB(15,10,5)antialiasing coverage residue on a shared outline
AntialiasCoverage45,30 → 45,300.001597ΔRGB(15,10,5)antialiasing coverage residue on a shared outline
AntialiasCoverage36,33 → 36,330.001597ΔRGB(-15,-10,-5)antialiasing coverage residue on a shared outline
AntialiasCoverage44,33 → 44,330.001597ΔRGB(-15,-10,-5)antialiasing coverage residue on a shared outline
AntialiasCoverage37,34 → 37,340.001597ΔRGB(-14,-9,-5)antialiasing coverage residue on a shared outline
AntialiasCoverage43,34 → 43,340.001597ΔRGB(-14,-9,-5)antialiasing coverage residue on a shared outline
source · cases/tables/tables-cell-deep-img-descendant.html
1<!doctype html>
2<html>
3<head>
4<meta charset="utf-8">
5<style>
6@page{size:160px 144px;margin:0}
7html{font-family:ParitySans;line-height:1.5}
8*{margin:0;box-sizing:border-box}
9html,body{background:#fff}
10body{padding:12px}
11table{border-collapse:collapse;table-layout:fixed;width:110px}
12td{border:2px solid #222;padding:5px;vertical-align:top;background:#f8fafc}
13.outer{border:2px solid #94a3b8;padding:4px;background:#e0f2fe}
14.inner{border:2px solid #d61f69;padding:3px;background:#fff}
15img{display:block;width:44px;height:auto}
16</style>
17</head>
18<body>
19<table><tr><td><div class="outer"><div class="inner"><img alt="" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='40' viewBox='0 0 80 40'%3E%3Crect width='80' height='40' fill='%2300a651'/%3E%3Crect x='8' y='8' width='64' height='24' fill='%23fff'/%3E%3Ccircle cx='40' cy='20' r='10' fill='%231f6fb2'/%3E%3C/svg%3E"></div></div></td></tr></table>
20</body>
21</html>
PASS exact match tables-cell-absolute-descendant · absolute-descendant
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
An absolutely positioned descendant paints inside a normal positioned block and should also paint when that block is nested directly inside a table cell.
PASS exact match tables-cell-box-shadow-child · box-shadow-child
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A box-shadow block paints in normal flow and should also paint when nested directly inside a table cell; catches the table-cell nested renderer dropping shadow decoration.
PASS exact match tables-cell-generated-before-child · generated-before-child
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A block ::before generated child paints in normal flow and should also paint when its originating element is nested directly inside a table cell.
PASS exact match tables-cell-gradient-child · gradient-block-child
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A linear-gradient block paints in normal flow and should also paint when nested directly inside a table cell; catches the table-cell nested renderer dropping gradient backgrounds.
PASS exact match tables-cell-nested-table-child · nested-table-child
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A nested table paints in normal flow and should also paint when nested directly inside a table cell; catches table-cell traversal dropping nested table rows.
PASS exact match tables-cell-nested-table-row-height · nested-table-row-height
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A fixed-width single-column outer table expands its row for a nested collapsed table, without relying on the intentionally under-specified automatic column-width distribution.
PASS exact match tables-cell-tall-img-sibling-content · tall-img-sibling-content
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A tall aspect-ratio image with max-height in one table cell must size the row without dropping nested-table and SVG-img content in the sibling cell.

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

PASS visually equivalent · no rejecting defect · thresholded evidence 0.07% · raw 0.07% (520 px) tables-multipage-caption · caption-once-across-pages · 2 pagesPASS via CSS-scale observation: conserved sub-CSS coverageAntialiasCoveragemissing 0.02%extra 0.02%ΔE 41.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: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
A captioned table spanning two pages: the caption is part of the table wrapper box and appears ONCE (page 1 only) while the <thead> repeats at each page top. The multi-page harness asserts the page COUNT (2) and diffs both pages; a caption wrongly repeated on page 2 would fail.
regions (73 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
ColorErr3329054,55 → 266,6533total 0.04% · largest 0.004400%
Extra1811554,55 → 264,6531total 0.02% · largest 0.004133%
Missing2211555,55 → 265,6531total 0.02% · largest 0.004133%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage54,55 → 54,650.004400ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage62,55 → 62,650.004400ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage258,55 → 259,650.004400ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
Missing62,55 → 62,650.004133candidate lacks paint present in reference (0.004133%)
Extra54,55 → 54,650.004133candidate adds paint absent from reference (0.004133%)
Extra259,55 → 259,650.004133candidate adds paint absent from reference (0.004133%)
Missing55,60 → 55,650.002133candidate lacks paint present in reference (0.002133%)
Extra61,60 → 61,650.002133candidate adds paint absent from reference (0.002133%)
AntialiasCoverage56,60 → 56,650.002133ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,60 → 60,650.002133ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage264,61 → 266,640.002133ΔRGB(137,122,102)antialiasing coverage residue on a shared outline
AntialiasCoverage55,55 → 56,590.002000ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,55 → 61,590.002000ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
Missing55,55 → 55,590.001733candidate lacks paint present in reference (0.001733%)
Missing260,60 → 260,640.001733candidate lacks paint present in reference (0.001733%)
Extra61,55 → 61,590.001733candidate adds paint absent from reference (0.001733%)
AntialiasCoverage260,60 → 260,640.001733ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage264,59 → 265,600.001600ΔRGB(85,77,63)antialiasing coverage residue on a shared outline
Missing260,56 → 260,590.001467candidate lacks paint present in reference (0.001467%)
AntialiasCoverage260,56 → 260,590.001467ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage265,56 → 265,590.001200ΔRGB(101,90,75)antialiasing coverage residue on a shared outline
Missing265,61 → 265,630.001067candidate lacks paint present in reference (0.001067%)
AntialiasCoverage262,55 → 264,550.001067ΔRGB(21,19,15)antialiasing coverage residue on a shared outline
AntialiasCoverage262,58 → 263,590.000933ΔRGB(-31,-27,-23)antialiasing coverage residue on a shared outline
Missing265,56 → 265,580.000800candidate lacks paint present in reference (0.000800%)
AntialiasCoverage263,64 → 264,650.000800ΔRGB(43,39,32)antialiasing coverage residue on a shared outline
Extra264,61 → 264,620.000667candidate adds paint absent from reference (0.000667%)
AntialiasCoverage263,56 → 263,570.000667ΔRGB(-46,-41,-34)antialiasing coverage residue on a shared outline
AntialiasCoverage264,61 → 264,620.000667ΔRGB(-161,-144,-119)antialiasing coverage residue on a shared outline
AntialiasCoverage263,63 → 264,630.000667ΔRGB(-61,-54,-45)antialiasing coverage residue on a shared outline
AntialiasCoverage263,60 → 264,610.000533ΔRGB(-33,-30,-25)antialiasing coverage residue on a shared outline
AntialiasCoverage262,64 → 263,640.000533ΔRGB(-11,-10,-8)antialiasing coverage residue on a shared outline
Extra264,57 → 264,580.000400candidate adds paint absent from reference (0.000400%)
AntialiasCoverage264,55 → 264,550.000400ΔRGB(30,26,22)antialiasing coverage residue on a shared outline
AntialiasCoverage262,56 → 262,560.000400ΔRGB(-15,-13,-11)antialiasing coverage residue on a shared outline
AntialiasCoverage264,57 → 264,580.000400ΔRGB(-191,-171,-142)antialiasing coverage residue on a shared outline
AntialiasCoverage262,60 → 262,600.000400ΔRGB(-11,-10,-8)antialiasing coverage residue on a shared outline
Missing265,56 → 265,560.000267candidate lacks paint present in reference (0.000267%)
Missing265,58 → 265,590.000267candidate lacks paint present in reference (0.000267%)
Extra264,56 → 264,570.000267candidate adds paint absent from reference (0.000267%)
Extra264,58 → 264,580.000267candidate adds paint absent from reference (0.000267%)
Extra264,60 → 264,610.000267candidate adds paint absent from reference (0.000267%)
Extra264,63 → 264,630.000267candidate adds paint absent from reference (0.000267%)
AntialiasCoverage265,56 → 265,560.000267ΔRGB(185,165,137)antialiasing coverage residue on a shared outline
AntialiasCoverage262,59 → 262,590.000267ΔRGB(-5,-5,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage263,60 → 263,600.000267ΔRGB(-31,-28,-23)antialiasing coverage residue on a shared outline
Missing264,55 → 264,550.000133candidate lacks paint present in reference (0.000133%)
Missing264,55 → 264,550.000133candidate lacks paint present in reference (0.000133%)
Missing264,59 → 264,590.000133candidate lacks paint present in reference (0.000133%)
Missing263,59 → 263,590.000133candidate lacks paint present in reference (0.000133%)
Missing264,60 → 264,600.000133candidate lacks paint present in reference (0.000133%)
Missing264,60 → 264,600.000133candidate lacks paint present in reference (0.000133%)
Missing265,60 → 265,600.000133candidate lacks paint present in reference (0.000133%)
Missing265,60 → 265,600.000133candidate lacks paint present in reference (0.000133%)
Missing265,63 → 265,630.000133candidate lacks paint present in reference (0.000133%)
Missing265,64 → 265,640.000133candidate lacks paint present in reference (0.000133%)
Missing264,64 → 264,640.000133candidate lacks paint present in reference (0.000133%)
Missing264,64 → 264,640.000133candidate lacks paint present in reference (0.000133%)
Missing262,65 → 262,650.000133candidate lacks paint present in reference (0.000133%)
Extra263,56 → 263,560.000133candidate adds paint absent from reference (0.000133%)
Extra263,56 → 263,560.000133candidate adds paint absent from reference (0.000133%)
Extra263,59 → 263,590.000133candidate adds paint absent from reference (0.000133%)
Extra262,59 → 262,590.000133candidate adds paint absent from reference (0.000133%)
Extra263,60 → 263,600.000133candidate adds paint absent from reference (0.000133%)
source · cases/tables/tables-multipage-caption.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-multipage-caption</title>
6<style>
7  /* A captioned table spanning two pages. The caption is part of the table
8     WRAPPER box and appears ONCE (on page 1), while the <thead> repeats at the
9     top of each page. The 240px page content box holds caption 40 + header 40 +
10     four 40px body rows on page 1 (40+40+160=240); page 2 repeats only the
11     header (no caption) above the remaining body rows. Seven body rows span two
12     pages (4 then 3). The multi-page harness asserts the page COUNT (2) and
13     diffs both pages, so a caption wrongly repeated on page 2 is caught. */
14  @page { size: 320px 240px; margin: 0; }
15  html { font-family: ParitySans; font-size: 14px; line-height: 1.5; }
16  * { margin: 0; padding: 0; box-sizing: border-box; }
17  html, body { background: #ffffff; }
18  table { border-collapse: collapse; table-layout: fixed; width: 320px; }
19  caption {
20    caption-side: top;
21    height: 40px;
22    line-height: 40px;
23    font-size: 18px;
24    text-align: center;
25    color: #ffffff;
26    background: #5f0f40;
27  }
28  td { width: 160px; height: 40px; text-align: center; vertical-align: middle; }
29  thead td { background: #1d3557; color: #ffffff; }
30  tbody td { background: #f1faee; color: #1d3557; }
31</style>
32</head>
33<body>
34  <table>
35    <caption>LEDGER</caption>
36    <thead>
37      <tr><td>HEAD A</td><td>HEAD B</td></tr>
38    </thead>
39    <tbody>
40      <tr><td>R1</td><td>r1</td></tr>
41      <tr><td>R2</td><td>r2</td></tr>
42      <tr><td>R3</td><td>r3</td></tr>
43      <tr><td>R4</td><td>r4</td></tr>
44      <tr><td>R5</td><td>r5</td></tr>
45      <tr><td>R6</td><td>r6</td></tr>
46      <tr><td>R7</td><td>r7</td></tr>
47    </tbody>
48  </table>
49</body>
50</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.07% · raw 0.07% (520 px) tables-multipage-tfoot-before-tbody · tfoot-before-tbody · 2 pagesPASS via CSS-scale observation: conserved sub-CSS coverageAntialiasCoveragemissing 0.02%extra 0.02%ΔE 41.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: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
Same multi-page thead+tfoot table but with <tfoot> written BEFORE <tbody> in source. CSS 2.1 §17 mandates section render order thead->tbody->tfoot regardless of DOM order, so Chrome paints the footer at the bottom (its reference is byte-identical to tables-multipage-tfoot-repeat). Pins the section-order reorder; the pre-fix DOM-order behavior would paint the footer band directly under the header.
regions (73 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
ColorErr3329054,15 → 266,2533total 0.04% · largest 0.004400%
Extra1811554,15 → 264,2531total 0.02% · largest 0.004133%
Missing2211555,15 → 265,2531total 0.02% · largest 0.004133%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage54,15 → 54,250.004400ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage62,15 → 62,250.004400ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage258,15 → 259,250.004400ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
Missing62,15 → 62,250.004133candidate lacks paint present in reference (0.004133%)
Extra54,15 → 54,250.004133candidate adds paint absent from reference (0.004133%)
Extra259,15 → 259,250.004133candidate adds paint absent from reference (0.004133%)
Missing55,20 → 55,250.002133candidate lacks paint present in reference (0.002133%)
Extra61,20 → 61,250.002133candidate adds paint absent from reference (0.002133%)
AntialiasCoverage56,20 → 56,250.002133ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,20 → 60,250.002133ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage264,21 → 266,240.002133ΔRGB(137,122,102)antialiasing coverage residue on a shared outline
AntialiasCoverage55,15 → 56,190.002000ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,15 → 61,190.002000ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
Missing55,15 → 55,190.001733candidate lacks paint present in reference (0.001733%)
Missing260,20 → 260,240.001733candidate lacks paint present in reference (0.001733%)
Extra61,15 → 61,190.001733candidate adds paint absent from reference (0.001733%)
AntialiasCoverage260,20 → 260,240.001733ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage264,19 → 265,200.001600ΔRGB(85,77,63)antialiasing coverage residue on a shared outline
Missing260,16 → 260,190.001467candidate lacks paint present in reference (0.001467%)
AntialiasCoverage260,16 → 260,190.001467ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage265,16 → 265,190.001200ΔRGB(101,90,75)antialiasing coverage residue on a shared outline
Missing265,21 → 265,230.001067candidate lacks paint present in reference (0.001067%)
AntialiasCoverage262,15 → 264,150.001067ΔRGB(21,19,15)antialiasing coverage residue on a shared outline
AntialiasCoverage262,18 → 263,190.000933ΔRGB(-31,-27,-23)antialiasing coverage residue on a shared outline
Missing265,16 → 265,180.000800candidate lacks paint present in reference (0.000800%)
AntialiasCoverage263,24 → 264,250.000800ΔRGB(43,39,32)antialiasing coverage residue on a shared outline
Extra264,21 → 264,220.000667candidate adds paint absent from reference (0.000667%)
AntialiasCoverage263,16 → 263,170.000667ΔRGB(-46,-41,-34)antialiasing coverage residue on a shared outline
AntialiasCoverage264,21 → 264,220.000667ΔRGB(-161,-144,-119)antialiasing coverage residue on a shared outline
AntialiasCoverage263,23 → 264,230.000667ΔRGB(-61,-54,-45)antialiasing coverage residue on a shared outline
AntialiasCoverage263,20 → 264,210.000533ΔRGB(-33,-30,-25)antialiasing coverage residue on a shared outline
AntialiasCoverage262,24 → 263,240.000533ΔRGB(-11,-10,-8)antialiasing coverage residue on a shared outline
Extra264,17 → 264,180.000400candidate adds paint absent from reference (0.000400%)
AntialiasCoverage264,15 → 264,150.000400ΔRGB(30,26,22)antialiasing coverage residue on a shared outline
AntialiasCoverage262,16 → 262,160.000400ΔRGB(-15,-13,-11)antialiasing coverage residue on a shared outline
AntialiasCoverage264,17 → 264,180.000400ΔRGB(-191,-171,-142)antialiasing coverage residue on a shared outline
AntialiasCoverage262,20 → 262,200.000400ΔRGB(-11,-10,-8)antialiasing coverage residue on a shared outline
Missing265,16 → 265,160.000267candidate lacks paint present in reference (0.000267%)
Missing265,18 → 265,190.000267candidate lacks paint present in reference (0.000267%)
Extra264,16 → 264,170.000267candidate adds paint absent from reference (0.000267%)
Extra264,18 → 264,180.000267candidate adds paint absent from reference (0.000267%)
Extra264,20 → 264,210.000267candidate adds paint absent from reference (0.000267%)
Extra264,23 → 264,230.000267candidate adds paint absent from reference (0.000267%)
AntialiasCoverage265,16 → 265,160.000267ΔRGB(185,165,137)antialiasing coverage residue on a shared outline
AntialiasCoverage262,19 → 262,190.000267ΔRGB(-5,-5,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage263,20 → 263,200.000267ΔRGB(-31,-28,-23)antialiasing coverage residue on a shared outline
Missing264,15 → 264,150.000133candidate lacks paint present in reference (0.000133%)
Missing264,15 → 264,150.000133candidate lacks paint present in reference (0.000133%)
Missing264,19 → 264,190.000133candidate lacks paint present in reference (0.000133%)
Missing263,19 → 263,190.000133candidate lacks paint present in reference (0.000133%)
Missing264,20 → 264,200.000133candidate lacks paint present in reference (0.000133%)
Missing264,20 → 264,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,20 → 265,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,20 → 265,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,23 → 265,230.000133candidate lacks paint present in reference (0.000133%)
Missing265,24 → 265,240.000133candidate lacks paint present in reference (0.000133%)
Missing264,24 → 264,240.000133candidate lacks paint present in reference (0.000133%)
Missing264,24 → 264,240.000133candidate lacks paint present in reference (0.000133%)
Missing262,25 → 262,250.000133candidate lacks paint present in reference (0.000133%)
Extra263,16 → 263,160.000133candidate adds paint absent from reference (0.000133%)
Extra263,16 → 263,160.000133candidate adds paint absent from reference (0.000133%)
Extra263,19 → 263,190.000133candidate adds paint absent from reference (0.000133%)
Extra262,19 → 262,190.000133candidate adds paint absent from reference (0.000133%)
Extra263,20 → 263,200.000133candidate adds paint absent from reference (0.000133%)
source · cases/tables/tables-multipage-tfoot-before-tbody.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-multipage-tfoot-before-tbody</title>
6<style>
7  /* Same multi-page thead+tfoot table, but the <tfoot> is written BEFORE the
8     <tbody> in source. Per CSS 2.1 §17 the table sections always render in the
9     order thead -> tbody -> tfoot regardless of DOM order, so Chrome paints the
10     footer at the BOTTOM (not above the body). This pins the section-order
11     reorder: the pre-fix behavior (rows collected in DOM order) would paint the
12     footer band directly under the header. Geometry matches
13     tables-multipage-tfoot-repeat: page COUNT 2, header at each top, footer at
14     each bottom. */
15  @page { size: 320px 240px; margin: 0; }
16  html { font-family: ParitySans; font-size: 14px; line-height: 1.5; }
17  * { margin: 0; padding: 0; box-sizing: border-box; }
18  html, body { background: #ffffff; }
19  table { border-collapse: collapse; table-layout: fixed; width: 320px; }
20  td { width: 160px; height: 40px; text-align: center; vertical-align: middle; }
21  thead td { background: #1d3557; color: #ffffff; }
22  tbody td { background: #f1faee; color: #1d3557; }
23  tfoot td { background: #e63946; color: #ffffff; }
24</style>
25</head>
26<body>
27  <table>
28    <thead>
29      <tr><td>HEAD A</td><td>HEAD B</td></tr>
30    </thead>
31    <tfoot>
32      <tr><td>FOOT A</td><td>FOOT B</td></tr>
33    </tfoot>
34    <tbody>
35      <tr><td>R1</td><td>r1</td></tr>
36      <tr><td>R2</td><td>r2</td></tr>
37      <tr><td>R3</td><td>r3</td></tr>
38      <tr><td>R4</td><td>r4</td></tr>
39      <tr><td>R5</td><td>r5</td></tr>
40      <tr><td>R6</td><td>r6</td></tr>
41      <tr><td>R7</td><td>r7</td></tr>
42    </tbody>
43  </table>
44</body>
45</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.07% · raw 0.07% (520 px) tables-multipage-tfoot-repeat · tfoot-repeat · 2 pagesPASS via CSS-scale observation: conserved sub-CSS coverageAntialiasCoveragemissing 0.02%extra 0.02%ΔE 41.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: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
A long table with both <thead> and <tfoot> spanning pages: Chrome repeats the thead as a running header at the top and the tfoot as a running footer directly after the last body row at the bottom of every spanned page, reserving the footer height so body rows never collide with it. 320x240 page, 40px header+footer leave four 40px body rows per page; seven rows span TWO pages. Fails before the tfoot-repeat fix (footer shown once).
regions (73 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
ColorErr3329054,15 → 266,2533total 0.04% · largest 0.004400%
Extra1811554,15 → 264,2531total 0.02% · largest 0.004133%
Missing2211555,15 → 265,2531total 0.02% · largest 0.004133%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage54,15 → 54,250.004400ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage62,15 → 62,250.004400ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage258,15 → 259,250.004400ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
Missing62,15 → 62,250.004133candidate lacks paint present in reference (0.004133%)
Extra54,15 → 54,250.004133candidate adds paint absent from reference (0.004133%)
Extra259,15 → 259,250.004133candidate adds paint absent from reference (0.004133%)
Missing55,20 → 55,250.002133candidate lacks paint present in reference (0.002133%)
Extra61,20 → 61,250.002133candidate adds paint absent from reference (0.002133%)
AntialiasCoverage56,20 → 56,250.002133ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,20 → 60,250.002133ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage264,21 → 266,240.002133ΔRGB(137,122,102)antialiasing coverage residue on a shared outline
AntialiasCoverage55,15 → 56,190.002000ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,15 → 61,190.002000ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
Missing55,15 → 55,190.001733candidate lacks paint present in reference (0.001733%)
Missing260,20 → 260,240.001733candidate lacks paint present in reference (0.001733%)
Extra61,15 → 61,190.001733candidate adds paint absent from reference (0.001733%)
AntialiasCoverage260,20 → 260,240.001733ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage264,19 → 265,200.001600ΔRGB(85,77,63)antialiasing coverage residue on a shared outline
Missing260,16 → 260,190.001467candidate lacks paint present in reference (0.001467%)
AntialiasCoverage260,16 → 260,190.001467ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage265,16 → 265,190.001200ΔRGB(101,90,75)antialiasing coverage residue on a shared outline
Missing265,21 → 265,230.001067candidate lacks paint present in reference (0.001067%)
AntialiasCoverage262,15 → 264,150.001067ΔRGB(21,19,15)antialiasing coverage residue on a shared outline
AntialiasCoverage262,18 → 263,190.000933ΔRGB(-31,-27,-23)antialiasing coverage residue on a shared outline
Missing265,16 → 265,180.000800candidate lacks paint present in reference (0.000800%)
AntialiasCoverage263,24 → 264,250.000800ΔRGB(43,39,32)antialiasing coverage residue on a shared outline
Extra264,21 → 264,220.000667candidate adds paint absent from reference (0.000667%)
AntialiasCoverage263,16 → 263,170.000667ΔRGB(-46,-41,-34)antialiasing coverage residue on a shared outline
AntialiasCoverage264,21 → 264,220.000667ΔRGB(-161,-144,-119)antialiasing coverage residue on a shared outline
AntialiasCoverage263,23 → 264,230.000667ΔRGB(-61,-54,-45)antialiasing coverage residue on a shared outline
AntialiasCoverage263,20 → 264,210.000533ΔRGB(-33,-30,-25)antialiasing coverage residue on a shared outline
AntialiasCoverage262,24 → 263,240.000533ΔRGB(-11,-10,-8)antialiasing coverage residue on a shared outline
Extra264,17 → 264,180.000400candidate adds paint absent from reference (0.000400%)
AntialiasCoverage264,15 → 264,150.000400ΔRGB(30,26,22)antialiasing coverage residue on a shared outline
AntialiasCoverage262,16 → 262,160.000400ΔRGB(-15,-13,-11)antialiasing coverage residue on a shared outline
AntialiasCoverage264,17 → 264,180.000400ΔRGB(-191,-171,-142)antialiasing coverage residue on a shared outline
AntialiasCoverage262,20 → 262,200.000400ΔRGB(-11,-10,-8)antialiasing coverage residue on a shared outline
Missing265,16 → 265,160.000267candidate lacks paint present in reference (0.000267%)
Missing265,18 → 265,190.000267candidate lacks paint present in reference (0.000267%)
Extra264,16 → 264,170.000267candidate adds paint absent from reference (0.000267%)
Extra264,18 → 264,180.000267candidate adds paint absent from reference (0.000267%)
Extra264,20 → 264,210.000267candidate adds paint absent from reference (0.000267%)
Extra264,23 → 264,230.000267candidate adds paint absent from reference (0.000267%)
AntialiasCoverage265,16 → 265,160.000267ΔRGB(185,165,137)antialiasing coverage residue on a shared outline
AntialiasCoverage262,19 → 262,190.000267ΔRGB(-5,-5,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage263,20 → 263,200.000267ΔRGB(-31,-28,-23)antialiasing coverage residue on a shared outline
Missing264,15 → 264,150.000133candidate lacks paint present in reference (0.000133%)
Missing264,15 → 264,150.000133candidate lacks paint present in reference (0.000133%)
Missing264,19 → 264,190.000133candidate lacks paint present in reference (0.000133%)
Missing263,19 → 263,190.000133candidate lacks paint present in reference (0.000133%)
Missing264,20 → 264,200.000133candidate lacks paint present in reference (0.000133%)
Missing264,20 → 264,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,20 → 265,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,20 → 265,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,23 → 265,230.000133candidate lacks paint present in reference (0.000133%)
Missing265,24 → 265,240.000133candidate lacks paint present in reference (0.000133%)
Missing264,24 → 264,240.000133candidate lacks paint present in reference (0.000133%)
Missing264,24 → 264,240.000133candidate lacks paint present in reference (0.000133%)
Missing262,25 → 262,250.000133candidate lacks paint present in reference (0.000133%)
Extra263,16 → 263,160.000133candidate adds paint absent from reference (0.000133%)
Extra263,16 → 263,160.000133candidate adds paint absent from reference (0.000133%)
Extra263,19 → 263,190.000133candidate adds paint absent from reference (0.000133%)
Extra262,19 → 262,190.000133candidate adds paint absent from reference (0.000133%)
Extra263,20 → 263,200.000133candidate adds paint absent from reference (0.000133%)
source · cases/tables/tables-multipage-tfoot-repeat.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-multipage-tfoot-repeat</title>
6<style>
7  /* A table with BOTH a <thead> and a <tfoot> spanning pages. Chrome (modern
8     LayoutNG) repeats the thead as a running header at the top and the tfoot as
9     a running footer at the bottom of every page the table spans, with body
10     rows flowing between them. The 240px page content box holds a 40px header +
11     40px footer, leaving 160px = four 40px body rows per page; seven body rows
12     span TWO pages (page 1: rows 1-4, page 2: rows 5-7). The harness asserts the
13     page COUNT (2) and diffs every page, so a tfoot shown only once (the
14     pre-fix behavior) fails. */
15  @page { size: 320px 240px; margin: 0; }
16  html { font-family: ParitySans; font-size: 14px; line-height: 1.5; }
17  * { margin: 0; padding: 0; box-sizing: border-box; }
18  html, body { background: #ffffff; }
19  table { border-collapse: collapse; table-layout: fixed; width: 320px; }
20  td { width: 160px; height: 40px; text-align: center; vertical-align: middle; }
21  thead td { background: #1d3557; color: #ffffff; }
22  tbody td { background: #f1faee; color: #1d3557; }
23  tfoot td { background: #e63946; color: #ffffff; }
24</style>
25</head>
26<body>
27  <table>
28    <thead>
29      <tr><td>HEAD A</td><td>HEAD B</td></tr>
30    </thead>
31    <tbody>
32      <tr><td>R1</td><td>r1</td></tr>
33      <tr><td>R2</td><td>r2</td></tr>
34      <tr><td>R3</td><td>r3</td></tr>
35      <tr><td>R4</td><td>r4</td></tr>
36      <tr><td>R5</td><td>r5</td></tr>
37      <tr><td>R6</td><td>r6</td></tr>
38      <tr><td>R7</td><td>r7</td></tr>
39    </tbody>
40    <tfoot>
41      <tr><td>FOOT A</td><td>FOOT B</td></tr>
42    </tfoot>
43  </table>
44</body>
45</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.07% · raw 0.07% (520 px) tables-multipage-thead-repeat · thead-repeat · 2 pagesPASS via CSS-scale observation: conserved sub-CSS coverageAntialiasCoveragemissing 0.02%extra 0.02%ΔE 41.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: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
A long table whose <thead> repeats at the top of every page it spans (CSS 2.1 §17.2.1; Chrome --print-to-pdf via LayoutNG). 320x240 page: a 40px header plus eight 40px body rows span TWO pages with the header re-emitted at each page top. The multi-page harness asserts the page COUNT (2) and diffs every page, so a missing or mis-placed repeated header fails.
regions (73 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
ColorErr3329054,15 → 266,2533total 0.04% · largest 0.004400%
Extra1811554,15 → 264,2531total 0.02% · largest 0.004133%
Missing2211555,15 → 265,2531total 0.02% · largest 0.004133%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage54,15 → 54,250.004400ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage62,15 → 62,250.004400ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage258,15 → 259,250.004400ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
Missing62,15 → 62,250.004133candidate lacks paint present in reference (0.004133%)
Extra54,15 → 54,250.004133candidate adds paint absent from reference (0.004133%)
Extra259,15 → 259,250.004133candidate adds paint absent from reference (0.004133%)
Missing55,20 → 55,250.002133candidate lacks paint present in reference (0.002133%)
Extra61,20 → 61,250.002133candidate adds paint absent from reference (0.002133%)
AntialiasCoverage56,20 → 56,250.002133ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,20 → 60,250.002133ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage264,21 → 266,240.002133ΔRGB(137,122,102)antialiasing coverage residue on a shared outline
AntialiasCoverage55,15 → 56,190.002000ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,15 → 61,190.002000ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
Missing55,15 → 55,190.001733candidate lacks paint present in reference (0.001733%)
Missing260,20 → 260,240.001733candidate lacks paint present in reference (0.001733%)
Extra61,15 → 61,190.001733candidate adds paint absent from reference (0.001733%)
AntialiasCoverage260,20 → 260,240.001733ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage264,19 → 265,200.001600ΔRGB(85,77,63)antialiasing coverage residue on a shared outline
Missing260,16 → 260,190.001467candidate lacks paint present in reference (0.001467%)
AntialiasCoverage260,16 → 260,190.001467ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage265,16 → 265,190.001200ΔRGB(101,90,75)antialiasing coverage residue on a shared outline
Missing265,21 → 265,230.001067candidate lacks paint present in reference (0.001067%)
AntialiasCoverage262,15 → 264,150.001067ΔRGB(21,19,15)antialiasing coverage residue on a shared outline
AntialiasCoverage262,18 → 263,190.000933ΔRGB(-31,-27,-23)antialiasing coverage residue on a shared outline
Missing265,16 → 265,180.000800candidate lacks paint present in reference (0.000800%)
AntialiasCoverage263,24 → 264,250.000800ΔRGB(43,39,32)antialiasing coverage residue on a shared outline
Extra264,21 → 264,220.000667candidate adds paint absent from reference (0.000667%)
AntialiasCoverage263,16 → 263,170.000667ΔRGB(-46,-41,-34)antialiasing coverage residue on a shared outline
AntialiasCoverage264,21 → 264,220.000667ΔRGB(-161,-144,-119)antialiasing coverage residue on a shared outline
AntialiasCoverage263,23 → 264,230.000667ΔRGB(-61,-54,-45)antialiasing coverage residue on a shared outline
AntialiasCoverage263,20 → 264,210.000533ΔRGB(-33,-30,-25)antialiasing coverage residue on a shared outline
AntialiasCoverage262,24 → 263,240.000533ΔRGB(-11,-10,-8)antialiasing coverage residue on a shared outline
Extra264,17 → 264,180.000400candidate adds paint absent from reference (0.000400%)
AntialiasCoverage264,15 → 264,150.000400ΔRGB(30,26,22)antialiasing coverage residue on a shared outline
AntialiasCoverage262,16 → 262,160.000400ΔRGB(-15,-13,-11)antialiasing coverage residue on a shared outline
AntialiasCoverage264,17 → 264,180.000400ΔRGB(-191,-171,-142)antialiasing coverage residue on a shared outline
AntialiasCoverage262,20 → 262,200.000400ΔRGB(-11,-10,-8)antialiasing coverage residue on a shared outline
Missing265,16 → 265,160.000267candidate lacks paint present in reference (0.000267%)
Missing265,18 → 265,190.000267candidate lacks paint present in reference (0.000267%)
Extra264,16 → 264,170.000267candidate adds paint absent from reference (0.000267%)
Extra264,18 → 264,180.000267candidate adds paint absent from reference (0.000267%)
Extra264,20 → 264,210.000267candidate adds paint absent from reference (0.000267%)
Extra264,23 → 264,230.000267candidate adds paint absent from reference (0.000267%)
AntialiasCoverage265,16 → 265,160.000267ΔRGB(185,165,137)antialiasing coverage residue on a shared outline
AntialiasCoverage262,19 → 262,190.000267ΔRGB(-5,-5,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage263,20 → 263,200.000267ΔRGB(-31,-28,-23)antialiasing coverage residue on a shared outline
Missing264,15 → 264,150.000133candidate lacks paint present in reference (0.000133%)
Missing264,15 → 264,150.000133candidate lacks paint present in reference (0.000133%)
Missing264,19 → 264,190.000133candidate lacks paint present in reference (0.000133%)
Missing263,19 → 263,190.000133candidate lacks paint present in reference (0.000133%)
Missing264,20 → 264,200.000133candidate lacks paint present in reference (0.000133%)
Missing264,20 → 264,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,20 → 265,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,20 → 265,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,23 → 265,230.000133candidate lacks paint present in reference (0.000133%)
Missing265,24 → 265,240.000133candidate lacks paint present in reference (0.000133%)
Missing264,24 → 264,240.000133candidate lacks paint present in reference (0.000133%)
Missing264,24 → 264,240.000133candidate lacks paint present in reference (0.000133%)
Missing262,25 → 262,250.000133candidate lacks paint present in reference (0.000133%)
Extra263,16 → 263,160.000133candidate adds paint absent from reference (0.000133%)
Extra263,16 → 263,160.000133candidate adds paint absent from reference (0.000133%)
Extra263,19 → 263,190.000133candidate adds paint absent from reference (0.000133%)
Extra262,19 → 262,190.000133candidate adds paint absent from reference (0.000133%)
Extra263,20 → 263,200.000133candidate adds paint absent from reference (0.000133%)
source · cases/tables/tables-multipage-thead-repeat.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-multipage-thead-repeat</title>
6<style>
7  /* A table whose <thead> must REPEAT at the top of every page it spans
8     (CSS 2.1 §17.2.1, the universal print convention Chrome --print-to-pdf
9     realizes via LayoutNG table fragmentation). The 240px page content box
10     holds a 40px header plus five 40px body rows (40 + 5*40 = 240); with the
11     header re-emitted at each page top, eight body rows span TWO pages. The
12     multi-page harness asserts the page COUNT (2) and diffs every page, so a
13     missing or mis-placed repeated header fails. */
14  @page { size: 320px 240px; margin: 0; }
15  html { font-family: ParitySans; font-size: 14px; line-height: 1.5; }
16  * { margin: 0; padding: 0; box-sizing: border-box; }
17  html, body { background: #ffffff; }
18  table { border-collapse: collapse; table-layout: fixed; width: 320px; }
19  td { width: 160px; height: 40px; text-align: center; vertical-align: middle; }
20  thead td { background: #1d3557; color: #ffffff; }
21  tbody td { background: #f1faee; color: #1d3557; }
22</style>
23</head>
24<body>
25  <table>
26    <thead>
27      <tr><td>HEAD A</td><td>HEAD B</td></tr>
28    </thead>
29    <tbody>
30      <tr><td>R1</td><td>r1</td></tr>
31      <tr><td>R2</td><td>r2</td></tr>
32      <tr><td>R3</td><td>r3</td></tr>
33      <tr><td>R4</td><td>r4</td></tr>
34      <tr><td>R5</td><td>r5</td></tr>
35      <tr><td>R6</td><td>r6</td></tr>
36      <tr><td>R7</td><td>r7</td></tr>
37      <tr><td>R8</td><td>r8</td></tr>
38    </tbody>
39  </table>
40</body>
41</html>
PASS visually equivalent · no rejecting defect · thresholded evidence 0.07% · raw 0.07% (520 px) tables-multipage-three-page · thead-tfoot-three-pages · 3 pagesPASS via CSS-scale observation: conserved sub-CSS coverageAntialiasCoveragemissing 0.02%extra 0.02%ΔE 41.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
page 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 thead+tfoot table spanning THREE pages: with header (40px) and footer (40px) reserved per page, four body rows fit per page, so eleven body rows span three pages (4+4+3) with header repeated at every top and footer at every bottom. The multi-page harness asserts the page COUNT (3) and diffs all three pages.
regions (73 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
ColorErr3329054,15 → 266,2533total 0.04% · largest 0.004400%
Extra1811554,15 → 264,2531total 0.02% · largest 0.004133%
Missing2211555,15 → 265,2531total 0.02% · largest 0.004133%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage54,15 → 54,250.004400ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage62,15 → 62,250.004400ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage258,15 → 259,250.004400ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
Missing62,15 → 62,250.004133candidate lacks paint present in reference (0.004133%)
Extra54,15 → 54,250.004133candidate adds paint absent from reference (0.004133%)
Extra259,15 → 259,250.004133candidate adds paint absent from reference (0.004133%)
Missing55,20 → 55,250.002133candidate lacks paint present in reference (0.002133%)
Extra61,20 → 61,250.002133candidate adds paint absent from reference (0.002133%)
AntialiasCoverage56,20 → 56,250.002133ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,20 → 60,250.002133ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
AntialiasCoverage264,21 → 266,240.002133ΔRGB(137,122,102)antialiasing coverage residue on a shared outline
AntialiasCoverage55,15 → 56,190.002000ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage60,15 → 61,190.002000ΔRGB(-163,-145,-121)antialiasing coverage residue on a shared outline
Missing55,15 → 55,190.001733candidate lacks paint present in reference (0.001733%)
Missing260,20 → 260,240.001733candidate lacks paint present in reference (0.001733%)
Extra61,15 → 61,190.001733candidate adds paint absent from reference (0.001733%)
AntialiasCoverage260,20 → 260,240.001733ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage264,19 → 265,200.001600ΔRGB(85,77,63)antialiasing coverage residue on a shared outline
Missing260,16 → 260,190.001467candidate lacks paint present in reference (0.001467%)
AntialiasCoverage260,16 → 260,190.001467ΔRGB(138,123,102)antialiasing coverage residue on a shared outline
AntialiasCoverage265,16 → 265,190.001200ΔRGB(101,90,75)antialiasing coverage residue on a shared outline
Missing265,21 → 265,230.001067candidate lacks paint present in reference (0.001067%)
AntialiasCoverage262,15 → 264,150.001067ΔRGB(21,19,15)antialiasing coverage residue on a shared outline
AntialiasCoverage262,18 → 263,190.000933ΔRGB(-31,-27,-23)antialiasing coverage residue on a shared outline
Missing265,16 → 265,180.000800candidate lacks paint present in reference (0.000800%)
AntialiasCoverage263,24 → 264,250.000800ΔRGB(43,39,32)antialiasing coverage residue on a shared outline
Extra264,21 → 264,220.000667candidate adds paint absent from reference (0.000667%)
AntialiasCoverage263,16 → 263,170.000667ΔRGB(-46,-41,-34)antialiasing coverage residue on a shared outline
AntialiasCoverage264,21 → 264,220.000667ΔRGB(-161,-144,-119)antialiasing coverage residue on a shared outline
AntialiasCoverage263,23 → 264,230.000667ΔRGB(-61,-54,-45)antialiasing coverage residue on a shared outline
AntialiasCoverage263,20 → 264,210.000533ΔRGB(-33,-30,-25)antialiasing coverage residue on a shared outline
AntialiasCoverage262,24 → 263,240.000533ΔRGB(-11,-10,-8)antialiasing coverage residue on a shared outline
Extra264,17 → 264,180.000400candidate adds paint absent from reference (0.000400%)
AntialiasCoverage264,15 → 264,150.000400ΔRGB(30,26,22)antialiasing coverage residue on a shared outline
AntialiasCoverage262,16 → 262,160.000400ΔRGB(-15,-13,-11)antialiasing coverage residue on a shared outline
AntialiasCoverage264,17 → 264,180.000400ΔRGB(-191,-171,-142)antialiasing coverage residue on a shared outline
AntialiasCoverage262,20 → 262,200.000400ΔRGB(-11,-10,-8)antialiasing coverage residue on a shared outline
Missing265,16 → 265,160.000267candidate lacks paint present in reference (0.000267%)
Missing265,18 → 265,190.000267candidate lacks paint present in reference (0.000267%)
Extra264,16 → 264,170.000267candidate adds paint absent from reference (0.000267%)
Extra264,18 → 264,180.000267candidate adds paint absent from reference (0.000267%)
Extra264,20 → 264,210.000267candidate adds paint absent from reference (0.000267%)
Extra264,23 → 264,230.000267candidate adds paint absent from reference (0.000267%)
AntialiasCoverage265,16 → 265,160.000267ΔRGB(185,165,137)antialiasing coverage residue on a shared outline
AntialiasCoverage262,19 → 262,190.000267ΔRGB(-5,-5,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage263,20 → 263,200.000267ΔRGB(-31,-28,-23)antialiasing coverage residue on a shared outline
Missing264,15 → 264,150.000133candidate lacks paint present in reference (0.000133%)
Missing264,15 → 264,150.000133candidate lacks paint present in reference (0.000133%)
Missing264,19 → 264,190.000133candidate lacks paint present in reference (0.000133%)
Missing263,19 → 263,190.000133candidate lacks paint present in reference (0.000133%)
Missing264,20 → 264,200.000133candidate lacks paint present in reference (0.000133%)
Missing264,20 → 264,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,20 → 265,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,20 → 265,200.000133candidate lacks paint present in reference (0.000133%)
Missing265,23 → 265,230.000133candidate lacks paint present in reference (0.000133%)
Missing265,24 → 265,240.000133candidate lacks paint present in reference (0.000133%)
Missing264,24 → 264,240.000133candidate lacks paint present in reference (0.000133%)
Missing264,24 → 264,240.000133candidate lacks paint present in reference (0.000133%)
Missing262,25 → 262,250.000133candidate lacks paint present in reference (0.000133%)
Extra263,16 → 263,160.000133candidate adds paint absent from reference (0.000133%)
Extra263,16 → 263,160.000133candidate adds paint absent from reference (0.000133%)
Extra263,19 → 263,190.000133candidate adds paint absent from reference (0.000133%)
Extra262,19 → 262,190.000133candidate adds paint absent from reference (0.000133%)
Extra263,20 → 263,200.000133candidate adds paint absent from reference (0.000133%)
source · cases/tables/tables-multipage-three-page.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-multipage-three-page</title>
6<style>
7  /* A thead+tfoot table spanning THREE pages. The 240px page content box
8     reserves 40px for the repeated header and 40px for the repeated footer,
9     leaving 160px = four 40px body rows per page. Eleven body rows therefore
10     span three pages (4 + 4 + 3), with the header repeated at every page top and
11     the footer at every page bottom. The multi-page harness asserts the page
12     COUNT (3) and diffs all three pages, so a header/footer that fails to repeat
13     on the third page is caught. */
14  @page { size: 320px 240px; margin: 0; }
15  html { font-family: ParitySans; font-size: 14px; line-height: 1.5; }
16  * { margin: 0; padding: 0; box-sizing: border-box; }
17  html, body { background: #ffffff; }
18  table { border-collapse: collapse; table-layout: fixed; width: 320px; }
19  td { width: 160px; height: 40px; text-align: center; vertical-align: middle; }
20  thead td { background: #1d3557; color: #ffffff; }
21  tbody td { background: #f1faee; color: #1d3557; }
22  tfoot td { background: #e63946; color: #ffffff; }
23</style>
24</head>
25<body>
26  <table>
27    <thead>
28      <tr><td>HEAD A</td><td>HEAD B</td></tr>
29    </thead>
30    <tbody>
31      <tr><td>R1</td><td>r1</td></tr>
32      <tr><td>R2</td><td>r2</td></tr>
33      <tr><td>R3</td><td>r3</td></tr>
34      <tr><td>R4</td><td>r4</td></tr>
35      <tr><td>R5</td><td>r5</td></tr>
36      <tr><td>R6</td><td>r6</td></tr>
37      <tr><td>R7</td><td>r7</td></tr>
38      <tr><td>R8</td><td>r8</td></tr>
39      <tr><td>R9</td><td>r9</td></tr>
40      <tr><td>R10</td><td>r10</td></tr>
41      <tr><td>R11</td><td>r11</td></tr>
42    </tbody>
43    <tfoot>
44      <tr><td>FOOT A</td><td>FOOT B</td></tr>
45    </tfoot>
46  </table>
47</body>
48</html>
PASS exact match tables-break-before-row · break-before-row · 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
The second table row declares break-before:page on a short page and should begin page two. Catches wrong implementations where a paginator that only honors breaks on block elements inside cells keeps both rows on page one.
PASS exact match tables-break-inside-avoid-tbody · tbody-break-inside-avoid · 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 tbody with two rows has break-inside:avoid and fits on a fresh page but not in the remaining space after a header row. Catches wrong implementations where a row-only paginator splits the tbody after its first row even though moving the group would preserve it.
PASS exact match tables-second-header-group-not-repeat · second-header-group-normal · 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 CSS display table owns two table-header-group boxes; only the first is a header, the second is a normal row group. The first group explicitly avoids internal breaks and is shorter than one quarter of the 160px page, so CSS Tables requires its dark row to repeat on page 2 while the blue second group must not repeat. Catches tag-specific header handling and implementations that repeat every declared header group.

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

PASS exact match tables-table-height-minimum · table-min-height
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A table declares height:120px but contains a single short row and has a visible table background. Catches wrong implementations where a renderer that ignores table height paints the table background only around the short row.

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

PASS visually equivalent · no rejecting defect · thresholded evidence 0.79% · raw 0.81% (1561 px) tables-layout-auto-styled-run-shaping · auto-styled-run-shapingPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 22.7
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 same-font word split at a colored inline style boundary retains continuous browser shaping and contributes that shaped width to a shrink-to-fit auto table.
regions (20 total; showing 20 representatives)

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

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr20156149,12 → 111,24155total 3.4% · largest 0.3%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage79,15 → 87,240.3ΔRGB(0,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage60,15 → 67,230.2ΔRGB(-6,-18,-20)antialiasing coverage residue on a shared outline
AntialiasCoverage100,15 → 107,230.2ΔRGB(-6,-18,-20)antialiasing coverage residue on a shared outline
AntialiasCoverage81,16 → 86,220.2ΔRGB(0,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage51,16 → 55,230.2ΔRGB(0,2,2)antialiasing coverage residue on a shared outline
AntialiasCoverage91,16 → 96,230.2ΔRGB(0,2,2)antialiasing coverage residue on a shared outline
AntialiasCoverage51,15 → 57,230.2ΔRGB(-26,-81,-89)antialiasing coverage residue on a shared outline
AntialiasCoverage91,15 → 97,230.2ΔRGB(-26,-81,-89)antialiasing coverage residue on a shared outline
AntialiasCoverage59,18 → 65,240.2ΔRGB(10,32,35)antialiasing coverage residue on a shared outline
AntialiasCoverage99,18 → 105,240.2ΔRGB(10,32,35)antialiasing coverage residue on a shared outline
AntialiasCoverage109,12 → 110,230.2ΔRGB(41,131,144)antialiasing coverage residue on a shared outline
AntialiasCoverage111,12 → 111,230.2ΔRGB(-12,-38,-42)antialiasing coverage residue on a shared outline
AntialiasCoverage60,19 → 65,220.1ΔRGB(-1,-4,-5)antialiasing coverage residue on a shared outline
AntialiasCoverage100,19 → 105,220.1ΔRGB(-1,-4,-5)antialiasing coverage residue on a shared outline
AntialiasCoverage49,15 → 49,230.1ΔRGB(27,84,92)antialiasing coverage residue on a shared outline
AntialiasCoverage75,15 → 76,230.1ΔRGB(17,52,58)antialiasing coverage residue on a shared outline
AntialiasCoverage77,15 → 77,230.1ΔRGB(-12,-38,-42)antialiasing coverage residue on a shared outline
AntialiasCoverage90,15 → 90,230.1ΔRGB(27,84,92)antialiasing coverage residue on a shared outline
AntialiasCoverage75,12 → 76,130.03ΔRGB(29,93,103)antialiasing coverage residue on a shared outline
AntialiasCoverage77,12 → 77,130.03ΔRGB(-12,-38,-42)antialiasing coverage residue on a shared outline
source · cases/tables/tables-layout-auto-styled-run-shaping.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>tables-layout-auto-styled-run-shaping</title>
6<style>
7  @page { size: 224px 88px; margin: 0; }
8  * { box-sizing: border-box; margin: 0; }
9  html, body { background: #ffffff; }
10  body {
11    padding: 14px;
12    color: #17202a;
13    font: 16px/20px ParitySans;
14  }
15  table {
16    width: auto;
17    table-layout: auto;
18    border-collapse: separate;
19    border-spacing: 0;
20  }
21  td {
22    padding: 7px 9px;
23    border: 2px solid transparent;
24    background: #eaf2f8;
25    white-space: normal;
26  }
27  .suffix { color: #b03a2e; }
28</style>
29</head>
30<body>
31  <table>
32    <tr><td>inter<span class="suffix">national</span></td></tr>
33  </table>
34</body>
35</html>
PASS exact match tables-auto-colspan-distribution · auto-colspan-distribution
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Auto table layout distributes a colspan width contribution over unequal existing column baselines; catches naive even-split spanning-cell sizing.
PASS exact match tables-fixed-colspan-width-split · fixed-first-row-colspan-width
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A fixed table has no colgroup; the first row's colspan=2 cell has width:120px and the third cell has width:60px. Catches wrong implementations where a renderer that ignores first-row colspan widths can pass colgroup-based fixed layout but produce equal or content-based columns here.
PASS exact match tables-fixed-overflow-clip · fixed-overflow-clip
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
table-layout:fixed clips nowrap overflow:hidden text inside its fixed-width cell; catches width-only fixed layout that lets text spill into the next cell.
PASS exact match tables-fixed-unspecified-columns-ignore-font-size · fixed-unspecified-track-distribution
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Unspecified fixed-layout columns divide the remaining width equally regardless of the cells' font sizes.
PASS exact match tables-layout-auto · auto
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
table-layout:auto sizes columns to the widest cell intrinsic width (50/100/160px cells).
PASS exact match tables-layout-auto-overflow · auto-content-exceeds-width
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
table-layout:auto grows past its declared width when nowrap content needs more (aspirational: ironpress currently clamps to the declared width).
PASS exact match tables-layout-auto-text-exact-fit · auto-text-exact-fit
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A text-only shrink-to-fit auto table keeps multi-run max-content on one line at its exact intrinsic width, including a styled suffix and an unspaced word split across styled runs.
PASS exact match tables-layout-fixed · fixed
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
table-layout:fixed honors explicit colgroup col widths (60/120/180px) for column sizing.
PASS exact match tables-layout-fixed-remainder · fixed-remainder-distribution
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
table-layout:fixed distributes surplus width proportionally (40/80/120 over 360px -> 60/120/180).

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

PASS exact match tables-thead-tbody-tfoot · thead-tbody-tfoot
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
thead, tbody and tfoot row groups render in document order with distinct section backgrounds.

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

PASS exact match tables-cell-text-align · left-center-right
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Short monospace text aligned left, center and right within three equal cells.

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

PASS exact match tables-th-default · ua-center-bold
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
th cells get the authenticated parity baseline's explicit center/bold styles; td cells stay left/normal.
PASS exact match tables-th-header · header-default
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
th header cells retain centered, middle-aligned cell layout against td data cells; faux bold is suppressed because its exact outline is UA-defined.

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

PASS exact match tables-cell-vertical-align · top-middle-bottom
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A 24px marker box aligns to top, middle and bottom within tall 120px cells.
PASS exact match tables-vertical-align-baseline · baseline-uniform
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
vertical-align:baseline aligns same-size cell text on a shared row baseline.
PASS exact match tables-vertical-align-baseline-sizes · baseline-mixed-sizes
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
vertical-align:baseline aligns cells with differing font sizes on one common baseline (taller cells shift shorter text down).
PASS exact match tables-vertical-align-text-bottom · text-bottom-fallback
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
vertical-align:text-bottom does not apply to table cells and should use baseline behavior; catches engines that treat it as bottom alignment.

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

PASS exact match tables-visibility-collapse-cell · cell
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
One cell in a two-cell row is visibility:collapse; its grid slot remains but its red paint and text disappear. Catches wrong implementations where a renderer that ignores cell visibility paints the red cell, while a renderer that removes the slot shifts the green cell left.
PASS exact match tables-visibility-collapse-colgroup · column-group
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A two-column colgroup is collapsed, leaving only the trailing green column visible. Catches wrong implementations where a renderer that ignores colgroup collapse renders the blue and red grouped columns as normal.
PASS exact match tables-visibility-collapse-column · column
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
The middle col is visibility:collapse in a three-column fixed table. Catches wrong implementations where a renderer without column collapse leaves the red middle column visible and keeps the full three-column width.
PASS exact match tables-visibility-collapse-row · row
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
The middle row is visibility:collapse in a separated table with vertical border-spacing. Catches wrong implementations where a renderer that hides content but leaves the row height or both adjacent spacings would still pass ordinary visibility:hidden tests.
PASS exact match tables-visibility-collapse-row-group · row-group
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
The tbody is visibility:collapse and should remove all body rows while leaving the footer row directly below the header. Catches wrong implementations where a row-only collapse implementation ignores section visibility and still renders the red tbody rows.