text-advanced — 100.00% verified visual parity

← all categories · PASS 47 · FAIL 0 · REFERENCE-DISPUTED 2 · 49 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.

text-combine-upright:digits 2 — 0.00% verified visual parity PASS 0 · FAIL 0 · REFERENCE-DISPUTED 2all categories ↑

REFERENCE-DISPUTED 801 px · above-floor 0.16% · raw 0.17% max-page diff text-advanced-text-combine-upright-digits · text-combine-upright-digits · REFERENCE DISPUTEDColorValueΔE 26.6
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: fill recolour ΔRGB(+1,+6,+5) (ΔE 26.6)
A vertical date combines two-digit numbers horizontally inside a single vertical character slot. Chromium does not implement the Level-4 digits value, so the oracle uses text-combine-upright:all, which is semantically equivalent for this isolated two-ASCII-digit run. Catches: A vertical-writing implementation can pass plain vertical text while rendering each digit as a separate stacked glyph.
reference dispute: CSS Writing Modes 4 sections 9.1.2 and 9.1.3 require the composition's combined advance to fit within a measured 1em square and explicitly permit geometric compression. Ironpress follows that rule: each 24px two-digit composition occupies 18pt in the PDF. Chromium's LayoutTextCombine::DesiredWidth deliberately allows an undecorated composition 1.1em, with a source comment acknowledging that the margin is not specified; the locked PDF correspondingly uses a 19.8pt advance and outlines 10% wider than the standards-compliant candidate. Its surrounding CJK placement remains useful evidence, but its combined-glyph width is a compatibility canary rather than a normative appearance oracle.
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
ColorErr1280161,35 → 83,77412total 0.4% · largest 0.2%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
ColorValue73,38 → 83,560.2ΔRGB(2,8,6)fill recolour ΔRGB(+2,+8,+6) (ΔE 0)
AntialiasCoverage61,38 → 65,540.07ΔRGB(21,109,85)antialiasing coverage residue on a shared outline
AntialiasCoverage67,38 → 67,540.05ΔRGB(-6,-35,-27)antialiasing coverage residue on a shared outline
AntialiasCoverage68,71 → 80,710.02ΔRGB(-76,-74,-67)antialiasing coverage residue on a shared outline
ColorValue82,54 → 83,560.01ΔRGB(31,159,124)fill recolour ΔRGB(+31,+159,+124) (ΔE 0)
AntialiasCoverage66,77 → 73,770.01ΔRGB(-58,-56,-51)antialiasing coverage residue on a shared outline
AntialiasCoverage75,77 → 82,770.01ΔRGB(-58,-56,-51)antialiasing coverage residue on a shared outline
AntialiasCoverage61,54 → 62,560.01ΔRGB(39,205,160)antialiasing coverage residue on a shared outline
AntialiasCoverage73,35 → 75,350.003404ΔRGB(32,32,29)antialiasing coverage residue on a shared outline
AntialiasCoverage70,54 → 70,560.003404ΔRGB(8,42,33)antialiasing coverage residue on a shared outline
AntialiasCoverage73,60 → 75,600.003404ΔRGB(32,32,29)antialiasing coverage residue on a shared outline
AntialiasCoverage68,64 → 68,640.000486ΔRGB(-16,-16,-14)antialiasing coverage residue on a shared outline
source · cases/text-advanced/text-advanced-text-combine-upright-digits.html
1<!DOCTYPE html><html><head><meta charset='utf-8'><style>@page{size:192px 256px;margin:0}html{font-family:ParitySans;line-height:1.5}*{margin:0;box-sizing:border-box}body{padding:12px;background:#fff}.v{writing-mode:vertical-rl;text-orientation:upright;width:100px;height:210px;border:4px solid #111;background:#fff8e1;font-size:24px;line-height:32px;padding:8px}.d{text-combine-upright:digits 2;color:#d7263d}</style></head><body><div class='v'>第<span class='d'>12</span>章</div></body></html>
REFERENCE-DISPUTED 701 px · above-floor 0.14% · raw 0.15% max-page diff text-advanced-text-combine-upright-center · text-combine-upright-square-centering · REFERENCE DISPUTEDColorValueΔE 27.7
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: fill recolour ΔRGB(+5,+28,+22) (ΔE 27.7)
A two-digit upright composition is a horizontal one-em square centered vertically and horizontally in the parent text-over/text-under space. Chromium lacks the Level-4 digits value, so its authenticated reference uses semantically equivalent text-combine-upright:all for this isolated ASCII run.
reference dispute: CSS Writing Modes 4 sections 9.1.2 and 9.1.3 require the composition's combined advance to fit within a measured 1em square and explicitly permit geometric compression. Ironpress follows that rule: the 24px composition occupies 18pt in the PDF. Chromium's LayoutTextCombine::DesiredWidth deliberately allows an undecorated composition 1.1em, with a source comment acknowledging that the margin is not specified; the locked PDF correspondingly uses a 19.8pt advance and outlines 10% wider than the standards-compliant candidate. Its placement remains useful evidence, but its glyph width is a compatibility canary rather than a normative appearance oracle.
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
ColorErr670161,14 → 83,32412total 0.3% · largest 0.2%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
ColorValue73,14 → 83,320.2ΔRGB(2,8,6)fill recolour ΔRGB(+2,+8,+6) (ΔE 0)
AntialiasCoverage61,14 → 65,300.07ΔRGB(21,109,85)antialiasing coverage residue on a shared outline
AntialiasCoverage67,14 → 67,300.05ΔRGB(-6,-35,-27)antialiasing coverage residue on a shared outline
ColorValue82,30 → 83,320.01ΔRGB(31,159,124)fill recolour ΔRGB(+31,+159,+124) (ΔE 0)
AntialiasCoverage61,30 → 62,320.01ΔRGB(39,205,160)antialiasing coverage residue on a shared outline
AntialiasCoverage70,30 → 70,320.003404ΔRGB(8,42,33)antialiasing coverage residue on a shared outline
source · cases/text-advanced/text-advanced-text-combine-upright-center.html
1<!doctype html><html><head><meta charset="utf-8"><style>
2@page{size:192px 256px;margin:0}
3html{font-family:ParitySans;line-height:1.5}
4*{margin:0;box-sizing:border-box}
5body{padding:12px;background:#fff}
6.v{writing-mode:vertical-rl;text-orientation:upright;width:100px;height:210px;border:4px solid #111;background:#fff8e1;font-size:24px;line-height:32px;padding:8px}
7.d{text-combine-upright:digits 2;color:#d7263d}
8</style></head><body><div class="v"><span class="d">12</span></div></body></html>

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

PASS exact match text-advanced-dir-auto · dir-auto
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Two boxes use dir=auto; the Hebrew-first row aligns right while the Latin-first row aligns left. Catches: Supporting only explicit ltr/rtl dir values passes fixed-direction fixtures but treats auto as the inherited/default direction.

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

PASS exact match text-advanced-direction-ltr · ltr
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
direction:ltr is the explicit left-to-right baseline counterpart to direction:rtl; inline content flows left-to-right and left-aligns (css-writing-modes-4 §2.1).
PASS exact match text-advanced-direction-rtl · rtl
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
direction:rtl right-aligns inline content and applies Unicode bidi visual run ordering.

direction:rtl basic inline paragraph — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match text-advanced-direction-rtl-mixed-bidi · direction-rtl-mixed-bidi
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
An RTL block containing Hebrew followed by Latin starts from the right edge and orders the mixed text by the Unicode bidi algorithm. Catches: A left-to-right-only renderer passes Latin fixtures and even text-align:right tests but paints mixed RTL text in logical order.

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

PASS exact match text-advanced-hyphens-auto · auto
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
hyphens:auto inserts soft hyphens at language-aware break points; aspirational, no CSS hyphens support in ironpress.
PASS exact match text-advanced-hyphens-manual-soft-hyphen · manual-soft-hyphen
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
hyphens:manual honors a soft hyphen break and paints a hyphen at the line end; catches wrappers that only break at spaces or overflow points.

hyphens:none with U+00AD — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match text-advanced-hyphens-none-soft-hyphen · hyphens-none-soft-hyphen
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A narrow word contains a soft hyphen but hyphens:none forbids breaking at it. Catches: Supporting only manual soft-hyphen breaks passes manual hyphenation tests while violating the none value.

line-break:anywhere — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match text-advanced-line-break-anywhere · line-break-anywhere
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A no-space punctuation-heavy run fits a very narrow column only when line-break:anywhere creates breaks around punctuation. Catches: Ignoring line-break passes overflow-wrap and word-break tests but leaves this string overflowing as a single line.

line-break:strict — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.07% · raw 0.07% (468 px) text-advanced-line-break-strict-cjk-punctuation · line-break-strict-cjk-punctuationPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 16.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 narrow Japanese phrase uses strict line breaking so closing punctuation stays with the preceding ideograph rather than starting a line. Catches: Treating all line-break values as auto passes Latin wrapping fixtures but misplaces CJK punctuation at line starts/ends.
regions (65 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
ColorErr654685,4 → 73,17240total 0.3% · largest 0.02%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage24,44 → 24,570.02ΔRGB(57,52,54)antialiasing coverage residue on a shared outline
AntialiasCoverage60,86 → 69,860.02ΔRGB(32,29,30)antialiasing coverage residue on a shared outline
AntialiasCoverage41,6 → 48,70.02ΔRGB(76,68,70)antialiasing coverage residue on a shared outline
AntialiasCoverage41,11 → 48,110.01ΔRGB(57,52,54)antialiasing coverage residue on a shared outline
AntialiasCoverage28,6 → 35,60.01ΔRGB(76,68,70)antialiasing coverage residue on a shared outline
AntialiasCoverage13,51 → 16,540.01ΔRGB(42,38,40)antialiasing coverage residue on a shared outline
AntialiasCoverage60,67 → 66,670.01ΔRGB(76,68,70)antialiasing coverage residue on a shared outline
AntialiasCoverage20,35 → 21,380.009855ΔRGB(87,79,82)antialiasing coverage residue on a shared outline
AntialiasCoverage6,106 → 12,1060.009855ΔRGB(32,29,30)antialiasing coverage residue on a shared outline
AntialiasCoverage6,110 → 12,1100.009855ΔRGB(32,29,30)antialiasing coverage residue on a shared outline
AntialiasCoverage18,54 → 22,540.006957ΔRGB(32,29,30)antialiasing coverage residue on a shared outline
AntialiasCoverage45,135 → 49,1350.006957ΔRGB(-76,-68,-70)antialiasing coverage residue on a shared outline
AntialiasCoverage13,46 → 13,490.006377ΔRGB(76,68,70)antialiasing coverage residue on a shared outline
AntialiasCoverage27,135 → 30,1350.006377ΔRGB(-76,-68,-70)antialiasing coverage residue on a shared outline
AntialiasCoverage45,139 → 48,1390.006377ΔRGB(87,79,82)antialiasing coverage residue on a shared outline
AntialiasCoverage21,40 → 21,430.005797ΔRGB(87,79,82)antialiasing coverage residue on a shared outline
AntialiasCoverage28,139 → 30,1390.005797ΔRGB(87,79,82)antialiasing coverage residue on a shared outline
AntialiasCoverage32,135 → 35,1350.005217ΔRGB(-76,-68,-70)antialiasing coverage residue on a shared outline
AntialiasCoverage36,135 → 39,1350.005217ΔRGB(-76,-68,-70)antialiasing coverage residue on a shared outline
AntialiasCoverage41,135 → 43,1350.005217ΔRGB(-76,-68,-70)antialiasing coverage residue on a shared outline
AntialiasCoverage32,139 → 35,1390.005217ΔRGB(87,79,82)antialiasing coverage residue on a shared outline
AntialiasCoverage36,139 → 39,1390.005217ΔRGB(87,79,82)antialiasing coverage residue on a shared outline
AntialiasCoverage41,139 → 43,1390.005217ΔRGB(87,79,82)antialiasing coverage residue on a shared outline
AntialiasCoverage66,6 → 68,60.004638ΔRGB(87,79,82)antialiasing coverage residue on a shared outline
AntialiasCoverage42,96 → 44,960.004638ΔRGB(87,79,82)antialiasing coverage residue on a shared outline
AntialiasCoverage37,13 → 39,130.004058ΔRGB(76,68,70)antialiasing coverage residue on a shared outline
AntialiasCoverage13,35 → 15,350.004058ΔRGB(32,29,30)antialiasing coverage residue on a shared outline
AntialiasCoverage39,4 → 41,40.003478ΔRGB(32,29,30)antialiasing coverage residue on a shared outline
AntialiasCoverage58,87 → 59,870.003478ΔRGB(32,29,30)antialiasing coverage residue on a shared outline
AntialiasCoverage48,127 → 48,1290.003478ΔRGB(57,52,54)antialiasing coverage residue on a shared outline
AntialiasCoverage28,8 → 28,100.002899ΔRGB(-87,-79,-82)antialiasing coverage residue on a shared outline
AntialiasCoverage44,18 → 44,190.002899ΔRGB(-57,-52,-54)antialiasing coverage residue on a shared outline
AntialiasCoverage44,20 → 44,210.002319ΔRGB(-57,-52,-54)antialiasing coverage residue on a shared outline
AntialiasCoverage13,56 → 13,570.002319ΔRGB(76,68,70)antialiasing coverage residue on a shared outline
AntialiasCoverage10,134 → 10,1350.002319ΔRGB(18,16,16)antialiasing coverage residue on a shared outline
AntialiasCoverage68,7 → 68,70.000580ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage68,8 → 68,80.000580ΔRGB(22,20,20)antialiasing coverage residue on a shared outline
AntialiasCoverage29,13 → 29,130.000580ΔRGB(-18,-16,-17)antialiasing coverage residue on a shared outline
AntialiasCoverage30,14 → 30,140.000580ΔRGB(-20,-19,-20)antialiasing coverage residue on a shared outline
AntialiasCoverage73,22 → 73,220.000580ΔRGB(11,10,10)antialiasing coverage residue on a shared outline
AntialiasCoverage69,39 → 69,390.000580ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage63,56 → 63,560.000580ΔRGB(20,19,20)antialiasing coverage residue on a shared outline
AntialiasCoverage61,65 → 61,650.000580ΔRGB(10,9,9)antialiasing coverage residue on a shared outline
AntialiasCoverage68,68 → 68,680.000580ΔRGB(13,12,12)antialiasing coverage residue on a shared outline
AntialiasCoverage44,97 → 44,970.000580ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage44,98 → 44,980.000580ΔRGB(22,20,20)antialiasing coverage residue on a shared outline
AntialiasCoverage63,98 → 63,980.000580ΔRGB(18,16,16)antialiasing coverage residue on a shared outline
AntialiasCoverage54,98 → 54,980.000580ΔRGB(-15,-14,-14)antialiasing coverage residue on a shared outline
AntialiasCoverage63,107 → 63,1070.000580ΔRGB(20,19,20)antialiasing coverage residue on a shared outline
AntialiasCoverage64,109 → 64,1090.000580ΔRGB(10,9,9)antialiasing coverage residue on a shared outline
AntialiasCoverage49,112 → 49,1120.000580ΔRGB(11,10,10)antialiasing coverage residue on a shared outline
AntialiasCoverage64,112 → 64,1120.000580ΔRGB(18,16,16)antialiasing coverage residue on a shared outline
AntialiasCoverage32,124 → 32,1240.000580ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage9,126 → 9,1260.000580ΔRGB(10,9,9)antialiasing coverage residue on a shared outline
AntialiasCoverage25,129 → 25,1290.000580ΔRGB(11,10,10)antialiasing coverage residue on a shared outline
AntialiasCoverage20,131 → 20,1310.000580ΔRGB(-14,-12,-13)antialiasing coverage residue on a shared outline
AntialiasCoverage10,134 → 10,1340.000580ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage36,142 → 36,1420.000580ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage5,146 → 5,1460.000580ΔRGB(-4,-4,-4)antialiasing coverage residue on a shared outline
AntialiasCoverage6,146 → 6,1460.000580ΔRGB(15,14,15)antialiasing coverage residue on a shared outline
AntialiasCoverage5,158 → 5,1580.000580ΔRGB(15,14,14)antialiasing coverage residue on a shared outline
AntialiasCoverage20,159 → 20,1590.000580ΔRGB(13,12,12)antialiasing coverage residue on a shared outline
AntialiasCoverage13,168 → 13,1680.000580ΔRGB(18,16,17)antialiasing coverage residue on a shared outline
AntialiasCoverage24,171 → 24,1710.000580ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
source · cases/text-advanced/text-advanced-line-break-strict-cjk-punctuation.html
1<!DOCTYPE html><html><head><meta charset='utf-8'><style>@page{size:240px 272px;margin:0}html{font-family:ParitySans;line-height:1.5}*{margin:0;box-sizing:border-box}body{padding:10px;background:#fff}.box{width:96px;font-size:24px;line-height:30px;line-break:strict;background:#fce4ec;border:2px solid #ad1457}</style></head><body><div class='box'>吾輩は猫である。名前はまだ無い。</div></body></html>

mixed-script Unicode bidi visual order — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match text-advanced-mixed-script-bidi · mixed-script-bidi
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A left-to-right paragraph contains a Hebrew segment between Latin words and should reorder the RTL segment visually without reversing Latin text. Catches: A run-order-only renderer passes pure LTR and pure RTL tests but leaves mixed scripts in source order.

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

PASS exact match text-advanced-overflow-wrap-anywhere · anywhere
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
overflow-wrap:anywhere breaks an over-long word only as a last resort, keeping the preceding whole word alone on its line before breaking the long word at the box edge (css-text-3 §5.2).
PASS exact match text-advanced-overflow-wrap-break-word · break-word
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
overflow-wrap:break-word breaks an over-long word so it does not overflow the narrow fixed-width box.

overflow-wrap:anywhere min-content contribution — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.03% · raw 0.03% (327 px) text-advanced-overflow-wrap-anywhere-min-content · overflow-wrap-anywhere-min-contentPASS via CSS-scale observation: stable same-coordinate outline phaseMissingmissing 0.2%extra 0.1%
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw candidate lacks paint present in reference (0.2%)
Two inline-blocks with the same long word compare anywhere against break-word; anywhere can shrink much narrower. Catches: Mapping anywhere and break-word to the same visual breaker passes simple wrapping tests but misses intrinsic sizing differences.
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
Missing121833,222 → 33,257218total 0.04% · largest 0.04%
Extra1109131,222 → 131,257109total 0.02% · largest 0.02%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
Missing33,222 → 33,2570.04candidate lacks paint present in reference (0.04%)
Extra131,222 → 131,2570.02candidate adds paint absent from reference (0.02%)
source · cases/text-advanced/text-advanced-overflow-wrap-anywhere-min-content.html
1<!DOCTYPE html><html><head><meta charset='utf-8'><style>@page{size:304px 344px;margin:0}html{font-family:ParitySans;line-height:1.5}*{margin:0;box-sizing:border-box}body{padding:10px;background:#fff;font-size:18px}.wrap{width:190px;border:2px solid #222;background:#fff}.ib{display:inline-block;width:min-content;margin:4px;padding:4px;color:#fff}.any{overflow-wrap:anywhere;background:#2e7d32}.bw{overflow-wrap:break-word;background:#c62828}</style></head><body><div class='wrap'><span class='ib any'>Supercalif</span><span class='ib bw'>Supercalif</span></div></body></html>

soft wrap after U+002D hyphen-minus — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match text-advanced-hyphen-minus-wrap · hyphen-minus-wrap
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A narrow box wraps pseudo-element after the hyphen and keeps the hyphen at the end of the first line. Catches: A wrapper that only breaks at spaces passes existing normal wrapping tests but overflows or arbitrarily splits hyphenated words.

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

PASS exact match text-advanced-tab-size · eight
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
tab-size:8 with white-space:pre aligns tab stops at eight character widths; aspirational, no tab-size support in ironpress.
PASS exact match text-advanced-tab-size-four · number-four-pre
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
tab-size:4 with white-space:pre aligns the tabbed B with the four-column text row; catches default-width or collapsed tab handling.

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

PASS exact match text-advanced-text-align-end-rtl · end-rtl
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
text-align:end in an RTL block aligns the short run to the physical left edge; catches treating end as left/right independent of direction.

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

PASS exact match text-advanced-text-align-last-center · text-align-last-center
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A justified paragraph has a short final line that should be centered by text-align-last:center. Catches: A justify-only renderer passes multiline justify tests while leaving the last line left-aligned.

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

PASS exact match text-advanced-text-align-match-parent · text-align-match-parent
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A child inherits a parent's logical end alignment and resolves it against the parent's RTL direction. Catches: Treating match-parent as left passes current physical alignment tests but loses inherited logical resolution.

text-align:start with direction:rtl — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match text-advanced-text-align-start-rtl · text-align-start-rtl
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
An RTL block with text-align:start places a short Latin run against the physical right edge. Catches: A parser that treats unknown text-align as left passes left/right/center fixtures but flips logical alignment.

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

PASS exact match text-advanced-text-indent · length
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
text-indent:40px indents only the first line of a wrapped paragraph while later lines start at the content edge.

text-orientation:upright — 100.00% verified visual parity PASS 2 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.02% · raw 0.02% (100 px) text-advanced-upright-cjk-central-baseline · upright-cjk-central-baselinePASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 12.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
Upright CJK glyphs in vertical writing use vertical font metrics on the central dominant baseline. Catches a renderer that passes upright Latin stacking but positions vertical-script outlines from horizontal ascent/descent metrics.
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
ColorErr610066,35 → 82,5339total 0.05% · largest 0.02%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage68,47 → 80,470.02ΔRGB(-70,-47,-52)antialiasing coverage residue on a shared outline
AntialiasCoverage66,53 → 73,530.01ΔRGB(-53,-36,-40)antialiasing coverage residue on a shared outline
AntialiasCoverage75,53 → 82,530.01ΔRGB(-53,-36,-40)antialiasing coverage residue on a shared outline
AntialiasCoverage73,35 → 75,350.003404ΔRGB(30,20,22)antialiasing coverage residue on a shared outline
AntialiasCoverage73,36 → 75,360.003404ΔRGB(30,20,22)antialiasing coverage residue on a shared outline
AntialiasCoverage68,40 → 68,400.000486ΔRGB(-14,-10,-11)antialiasing coverage residue on a shared outline
source · cases/text-advanced/text-advanced-upright-cjk-central-baseline.html
1<!doctype html><html><head><meta charset="utf-8"><style>
2@page{size:192px 256px;margin:0}
3html{font-family:ParitySans;line-height:1.5}
4*{margin:0;box-sizing:border-box}
5body{padding:12px;background:#fff}
6.v{writing-mode:vertical-rl;text-orientation:upright;width:100px;height:210px;border:4px solid #111;background:#fff8e1;font-size:24px;line-height:32px;padding:8px;color:#145a32}
7</style></head><body><div class="v">第章</div></body></html>
PASS exact match text-advanced-text-orientation-upright · text-orientation-upright
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A vertical-rl box with text-orientation:upright stacks upright Latin letters instead of rotating the word sideways. Catches: A hard-coded vertical-rl mixed orientation passes default vertical text tests but cannot honor upright orientation.

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

PASS visually equivalent · no rejecting defect · thresholded evidence 0.06% · raw 0.06% (133 px) text-advanced-text-overflow-ellipsis · ellipsisPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 47.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
text-overflow:ellipsis on an overflow:hidden nowrap fixed-width box renders a trailing ellipsis where text is clipped.
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
ColorErr6133114,23 → 128,2528total 0.3% · largest 0.05%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage121,23 → 122,250.05ΔRGB(172,196,219)antialiasing coverage residue on a shared outline
AntialiasCoverage127,23 → 128,250.05ΔRGB(172,196,219)antialiasing coverage residue on a shared outline
AntialiasCoverage116,23 → 116,250.04ΔRGB(61,69,77)antialiasing coverage residue on a shared outline
AntialiasCoverage120,23 → 120,250.04ΔRGB(-172,-196,-219)antialiasing coverage residue on a shared outline
AntialiasCoverage125,23 → 126,250.04ΔRGB(-172,-196,-219)antialiasing coverage residue on a shared outline
AntialiasCoverage114,23 → 114,250.03ΔRGB(-83,-95,-107)antialiasing coverage residue on a shared outline
source · cases/text-advanced/text-advanced-text-overflow-ellipsis.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<style>
6  @page { size: 272px 88px; margin: 0; }
7  html { font-family: ParitySans; line-height: 1.5; }
8  * { margin: 0; box-sizing: border-box; }
9  html, body { background: #ffffff; }
10  .box {
11    width: 140px;
12    margin: 24px;
13    padding: 6px;
14    border: 2px solid #1a1a1a;
15    background: #fbf0e7;
16    font-family: ParitySans;
17    font-size: 18px;
18    line-height: 22px;
19    color: #4d2a0a;
20    white-space: nowrap;
21    overflow: hidden;
22    text-overflow: ellipsis;
23  }
24</style>
25</head>
26<body>
27  <div class="box">truncated overflowing line</div>
28</body>
29</html>
PASS exact match text-advanced-text-overflow-clip · clip
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
text-overflow:clip on an overflow:hidden nowrap fixed-width box hard-clips overflowing text with no ellipsis.
PASS exact match text-advanced-text-overflow-string · string
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
text-overflow:">" truncates overflowing text with a custom string instead of an ellipsis; aspirational, ironpress does not yet parse the <string> form (css-ui-4 §6.2).

text-overflow:ellipsis with direction:rtl — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.22% · raw 0.22% (628 px) text-advanced-text-overflow-rtl-ellipsis · text-overflow-rtl-ellipsisPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 33.6
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
An RTL nowrap overflow box should place the ellipsis at the left inline end when content overflows toward that side. Catches: A left-to-right truncator appends ellipsis to the string and passes LTR ellipsis fixtures while painting it on the wrong physical edge for RTL.
regions (10 total; showing 10 representatives)

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

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr1062812,9 → 93,25150total 1.1% · largest 0.3%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage84,9 → 93,250.3ΔRGB(-47,-44,-41)antialiasing coverage residue on a shared outline
AntialiasCoverage83,17 → 91,250.2ΔRGB(18,18,16)antialiasing coverage residue on a shared outline
AntialiasCoverage83,9 → 90,150.2ΔRGB(9,8,8)antialiasing coverage residue on a shared outline
AntialiasCoverage80,9 → 81,250.2ΔRGB(68,65,60)antialiasing coverage residue on a shared outline
ColorValue12,22 → 13,250.06ΔRGB(136,130,120)fill recolour ΔRGB(+136,+130,+120) (ΔE 0)
AntialiasCoverage15,22 → 15,250.05ΔRGB(-239,-227,-209)antialiasing coverage residue on a shared outline
AntialiasCoverage20,22 → 20,250.05ΔRGB(87,82,76)antialiasing coverage residue on a shared outline
AntialiasCoverage22,22 → 22,250.05ΔRGB(-112,-107,-99)antialiasing coverage residue on a shared outline
AntialiasCoverage27,22 → 27,250.03ΔRGB(84,81,74)antialiasing coverage residue on a shared outline
AntialiasCoverage29,22 → 29,250.03ΔRGB(-43,-40,-37)antialiasing coverage residue on a shared outline
source · cases/text-advanced/text-advanced-text-overflow-rtl-ellipsis.html
1<!DOCTYPE html><html><head><meta charset='utf-8'><style>@page{size:280px 104px;margin:0}html{font-family:ParitySans;line-height:1.5}*{margin:0;box-sizing:border-box}body{padding:12px;background:#fff}.box{width:160px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;direction:rtl;font-size:22px;line-height:32px;background:#fff3e0;border:2px solid #e65100}</style></head><body><div class='box'>ABCDEFGHIJKLMNO</div></body></html>

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

PASS exact match text-advanced-text-shadow-offset · text-shadow-offset
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A word has a non-blurred red shadow offset down and right behind black foreground glyphs. Catches: A renderer that ignores text-shadow passes ordinary text color/layout fixtures but lacks the second offset glyph silhouette.

text-wrap-mode:nowrap — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match text-advanced-text-wrap-mode-nowrap · text-wrap-mode-nowrap
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A long phrase with text-wrap-mode:nowrap overflows a fixed-width box even though white-space is otherwise normal. The reference constrains root overflow to the physical page, preventing headless Chrome's nonstandard shrink-to-fit print artifact.

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

PASS exact match text-advanced-text-wrap-balance · text-wrap-balance
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A heading constrained to two lines should balance line lengths instead of leaving a very short final line. Catches: A normal greedy wrapper passes ordinary wrapping fixtures but produces an obviously ragged title.

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

PASS exact match text-advanced-text-wrap-pretty · text-wrap-pretty
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A paragraph width that would strand one short word uses pretty wrapping to improve the final line. Catches: A greedy-only wrapper passes normal wrapping but leaves a single-word last line when pretty should rebalance.

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

PASS exact match text-advanced-unicode-bidi-override · bidi-override
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
unicode-bidi:bidi-override with direction:rtl forces the inline content into right-to-left visual order.

unicode-bidi:plaintext — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.07% · raw 0.07% (305 px) text-advanced-unicode-bidi-plaintext · unicode-bidi-plaintextPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 27.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 pre-line block has one English line and one Hebrew line; plaintext chooses base direction separately for each line. Catches: A paragraph-level bidi implementation passes single-paragraph tests but gives both lines the same base direction.
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
ColorErr2305166,40 → 176,57293total 0.2% · largest 0.2%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage166,40 → 176,570.2ΔRGB(1,1,1)antialiasing coverage residue on a shared outline
AntialiasCoverage176,55 → 176,570.007204ΔRGB(-31,-33,-34)antialiasing coverage residue on a shared outline
source · cases/text-advanced/text-advanced-unicode-bidi-plaintext.html
1<!DOCTYPE html><html><head><meta charset='utf-8'><style>@page{size:320px 144px;margin:0}html{font-family:ParitySans;line-height:1.5}*{margin:0;box-sizing:border-box}body{padding:12px;background:#fff}.box{width:250px;font-size:22px;line-height:32px;white-space:pre-line;unicode-bidi:plaintext;background:#e3f2fd;border:2px solid #0d47a1}</style></head><body><div class='box'>ABC 123
2שלום 123</div></body></html>

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

PASS exact match text-advanced-white-space-break-spaces · break-spaces
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
white-space:break-spaces preserves spaces and forced segment breaks while still soft-wrapping; preserved trailing spaces occupy width at the line end and cannot hang (css-text-3 §3).
PASS exact match text-advanced-white-space-normal · normal
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
white-space:normal collapses runs of spaces and newlines into single soft-wrappable spaces.
PASS exact match text-advanced-white-space-nowrap · nowrap
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
white-space:nowrap forces a single line that is clipped by overflow:hidden in a narrow box.
PASS exact match text-advanced-white-space-pre · pre
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
white-space:pre preserves runs of spaces and explicit newlines in monospace text with no wrapping.
PASS exact match text-advanced-white-space-pre-line · pre-line
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
white-space:pre-line collapses spaces but preserves explicit newlines, wrapping at the box edge.
PASS exact match text-advanced-white-space-pre-wrap · pre-wrap
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
white-space:pre-wrap preserves spaces while still soft-wrapping at the box edge.

white-space-collapse:preserve — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match text-advanced-white-space-collapse-preserve · white-space-collapse-preserve
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A normal wrapping line uses the longhand white-space-collapse:preserve so three spaces between A and B stay visible. Catches: Only recognizing white-space:pre/pre-wrap passes shorthand fixtures while collapsing spaces when the new longhand is used.

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

PASS exact match text-advanced-word-break-break-all · break-all
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
word-break:break-all breaks the line at any glyph boundary; aspirational, not implemented in ironpress.
PASS exact match text-advanced-word-break-keep-all · keep-all
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
word-break:keep-all forbids breaking within words; for spaced Latin text it wraps only at the inter-word spaces (css-text-3 §5.1).

word-break:keep-all with CJK text — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.12% · raw 0.12% (390 px) text-advanced-word-break-keep-all-cjk · word-break-keep-all-cjkPASS via CSS-scale observation: stable same-coordinate outline phaseAntialiasCoveragemissing 0.1%extra 0.1%ΔE 10.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
A narrow CJK phrase with keep-all should avoid ordinary CJK line breaks and overflow/clamp as one unbroken run. Catches: Leaving keep-all as normal passes Latin keep-all smoke tests because spaced Latin text wraps the same either way.
regions (41 total; showing 41 representatives)

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

Complete dominant-class aggregates

classregionspixelsunion bbox (CSS px)largest pxmaximum magnitude
ColorErr363015,4 → 169,2742total 0.5% · largest 0.07%
Missing448147,5 → 165,2724total 0.08% · largest 0.04%
Extra141101,14 → 101,2741total 0.06% · largest 0.06%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage5,13 → 5,270.07ΔRGB(-30,-29,-26)antialiasing coverage residue on a shared outline
Extra101,14 → 101,270.06candidate adds paint absent from reference (0.06%)
AntialiasCoverage69,5 → 73,110.05ΔRGB(30,29,26)antialiasing coverage residue on a shared outline
AntialiasCoverage41,16 → 41,240.04ΔRGB(-54,-51,-48)antialiasing coverage residue on a shared outline
AntialiasCoverage137,16 → 137,240.04ΔRGB(-54,-54,-54)antialiasing coverage residue on a shared outline
AntialiasCoverage69,12 → 69,200.04ΔRGB(30,29,26)antialiasing coverage residue on a shared outline
Missing165,13 → 165,200.04candidate lacks paint present in reference (0.04%)
Missing165,5 → 165,100.03candidate lacks paint present in reference (0.03%)
AntialiasCoverage56,11 → 61,110.02ΔRGB(54,51,48)antialiasing coverage residue on a shared outline
AntialiasCoverage63,11 → 67,110.02ΔRGB(54,51,48)antialiasing coverage residue on a shared outline
AntialiasCoverage152,11 → 157,110.02ΔRGB(54,54,54)antialiasing coverage residue on a shared outline
AntialiasCoverage159,11 → 163,110.02ΔRGB(54,54,54)antialiasing coverage residue on a shared outline
AntialiasCoverage51,11 → 54,110.02ΔRGB(54,51,48)antialiasing coverage residue on a shared outline
AntialiasCoverage165,11 → 169,110.02ΔRGB(54,54,54)antialiasing coverage residue on a shared outline
AntialiasCoverage41,11 → 42,140.02ΔRGB(-54,-51,-48)antialiasing coverage residue on a shared outline
AntialiasCoverage137,11 → 138,140.02ΔRGB(-54,-54,-54)antialiasing coverage residue on a shared outline
AntialiasCoverage147,11 → 150,110.02ΔRGB(54,54,54)antialiasing coverage residue on a shared outline
AntialiasCoverage54,27 → 56,270.01ΔRGB(30,29,26)antialiasing coverage residue on a shared outline
Missing151,27 → 152,270.009387candidate lacks paint present in reference (0.009387%)
AntialiasCoverage36,23 → 36,230.003129ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage132,23 → 132,230.003129ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage28,26 → 28,270.003129ΔRGB(-12,-11,-11)antialiasing coverage residue on a shared outline
AntialiasCoverage124,26 → 124,270.003129ΔRGB(-12,-12,-12)antialiasing coverage residue on a shared outline
Missing147,11 → 147,110.001565candidate lacks paint present in reference (0.001565%)
AntialiasCoverage30,4 → 30,40.001565ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage126,4 → 126,40.001565ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
AntialiasCoverage15,5 → 15,50.001565ΔRGB(14,13,11)antialiasing coverage residue on a shared outline
AntialiasCoverage111,5 → 111,50.001565ΔRGB(14,14,14)antialiasing coverage residue on a shared outline
AntialiasCoverage24,9 → 24,90.001565ΔRGB(20,18,17)antialiasing coverage residue on a shared outline
AntialiasCoverage120,9 → 120,90.001565ΔRGB(20,20,20)antialiasing coverage residue on a shared outline
AntialiasCoverage165,12 → 165,120.001565ΔRGB(40,40,40)antialiasing coverage residue on a shared outline
ColorValue101,13 → 101,130.001565ΔRGB(-66,-66,-66)fill recolour ΔRGB(-66,-66,-66) (ΔE 0)
AntialiasCoverage9,14 → 9,140.001565ΔRGB(-12,-11,-11)antialiasing coverage residue on a shared outline
AntialiasCoverage105,14 → 105,140.001565ΔRGB(-12,-12,-12)antialiasing coverage residue on a shared outline
AntialiasCoverage13,25 → 13,250.001565ΔRGB(-10,-10,-8)antialiasing coverage residue on a shared outline
AntialiasCoverage37,25 → 37,250.001565ΔRGB(-10,-10,-8)antialiasing coverage residue on a shared outline
AntialiasCoverage109,25 → 109,250.001565ΔRGB(-10,-10,-10)antialiasing coverage residue on a shared outline
AntialiasCoverage133,25 → 133,250.001565ΔRGB(-10,-10,-10)antialiasing coverage residue on a shared outline
AntialiasCoverage28,27 → 28,270.001565ΔRGB(-9,-9,-9)antialiasing coverage residue on a shared outline
AntialiasCoverage124,27 → 124,270.001565ΔRGB(-9,-9,-9)antialiasing coverage residue on a shared outline
AntialiasCoverage150,27 → 150,270.001565ΔRGB(4,4,4)antialiasing coverage residue on a shared outline
source · cases/text-advanced/text-advanced-word-break-keep-all-cjk.html
1<!DOCTYPE html><html><head><meta charset='utf-8'><style>@page{size:224px 152px;margin:0}html{font-family:ParitySans;line-height:1.5}*{margin:0;box-sizing:border-box}body{padding:10px;background:#fff}.box{width:78px;font-size:24px;line-height:30px;word-break:keep-all;overflow-wrap:normal;background:#fff3e0;border:2px solid #e65100;color:#111}</style></head><body><div class='box'>你好世界你好世界</div></body></html>

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

PASS exact match text-advanced-writing-mode-vertical-rl · vertical-rl
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
writing-mode:vertical-rl lays out glyphs top-to-bottom in a right-to-left column; aspirational, no writing-mode support in ironpress.
PASS exact match text-advanced-writing-mode-vertical-rl-columns · vertical-rl-columns
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
writing-mode:vertical-rl lays Latin inline text sideways from the top of the right column; catches horizontal fallback rendering.

writing-mode:sideways-rl — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match text-advanced-writing-mode-sideways-rl · writing-mode-sideways-rl
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A sideways-rl block rotates Latin text as a sideways vertical line instead of horizontal text. Catches: Supporting only horizontal-tb and vertical-rl passes current fixtures while ignoring sideways modes.

writing-mode:vertical-lr — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match text-advanced-writing-mode-vertical-lr · writing-mode-vertical-lr
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A vertical-lr block should set text vertically with columns progressing left-to-right. Catches: A vertical-rl-only implementation passes its one vertical fixture but falls back to horizontal for vertical-lr.