fonts-advanced — 100.00% verified visual parity

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

@font-face font-style descriptor — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-face-style-descriptor · font-face-style-descriptor
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A shared @font-face family maps normal to ParitySans and italic to ParitySerif; font-style:italic selects the italic descriptor source. Catches: Ignoring font-style descriptors passes a single-face @font-face test but cannot match style-specific faces.

@font-face font-weight descriptor — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-face-weight-descriptor · font-face-weight-descriptor
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Two @font-face rules share a family name but map normal to ParitySerif and bold to ParitySans; font-weight:bold must select the bold descriptor face. Catches: A parser that ignores descriptors registers one family/source and passes simple custom-font fixtures but chooses the wrong face for bold text.

@font-face size-adjust descriptor — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-face-size-adjust · font-face-size-adjust
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
An @font-face alias applies size-adjust:150% to ParitySans, making it visibly larger than a normal ParitySans row at the same CSS font-size. Catches: An @font-face parser that extracts only family/src passes basic custom-source tests but ignores metric override descriptors.

@font-face src:local() — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-face-local-src · font-face-local-src
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
An @font-face rule aliases local ParitySerif and then uses that alias for a line of text. Catches: A url-only @font-face extractor passes relative URL fixtures but ignores local() sources.

@font-face unicode-range — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-face-unicode-range · font-face-unicode-range
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Two @font-face rules share a family; uppercase A comes from ParitySerif and uppercase B from ParitySans via unicode-range. Catches: A font registry that ignores unicode-range passes ordinary fallback tests but renders all glyphs from one face.

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

PASS exact match fonts-advanced-font-shorthand · font-shorthand
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A single font shorthand declaration sets italic bold 28px/36px ParitySerif in one declaration. Catches: Parsing only longhands passes separate font-size/weight/style/family tests but drops the shorthand entirely.

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

PASS exact match fonts-advanced-font-face-custom-src · custom-src
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
An @font-face rule registering a second custom family ('ParityCustom') from the bundled ParitySerif TTF via src: url(), exercising the @font-face declaration and family-matching mechanism.

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

PASS exact match fonts-advanced-font-feature-settings-ligatures · ligatures-off
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Text with font-feature-settings: "liga" 0 to disable standard ligatures before shaping.

font-kerning:none — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-kerning-none · font-kerning-none
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
The AVAV pair is rendered with and without kerning so the no-kerning row is visibly wider/looser. Catches: Always using the shaper defaults passes normal text tests but cannot disable kern feature application.

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

PASS visually equivalent · no rejecting defect · thresholded evidence 0.31% · raw 0.40% (2379 px) fonts-advanced-font-size-ch · chPASS via CSS-scale observation: sub-CSS shared-colour coverageAntialiasCoverageΔE 7.1
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: visually accepted coverage phase; raw antialiasing coverage residue on a shared outline
font-size: 5ch sized relative to the parent ParityMono face's '0' advance.
regions (173 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
ColorErr173237916,17 → 224,64763total 0.8% · largest 0.3%

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
AntialiasCoverage162,29 → 188,640.3ΔRGB(2,2,1)antialiasing coverage residue on a shared outline
AntialiasCoverage54,17 → 60,350.03ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage199,17 → 205,350.03ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage79,39 → 79,630.03ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage224,39 → 224,630.03ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage74,40 → 74,630.02ΔRGB(3,3,3)antialiasing coverage residue on a shared outline
AntialiasCoverage219,40 → 219,630.02ΔRGB(3,3,3)antialiasing coverage residue on a shared outline
AntialiasCoverage127,19 → 149,190.02ΔRGB(-3,-3,-3)antialiasing coverage residue on a shared outline
AntialiasCoverage59,43 → 59,630.02ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage204,43 → 204,630.02ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage132,24 → 149,240.02ΔRGB(3,2,2)antialiasing coverage residue on a shared outline
AntialiasCoverage63,29 → 75,310.02ΔRGB(-2,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage208,29 → 220,310.02ΔRGB(-2,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage139,39 → 145,440.01ΔRGB(3,3,2)antialiasing coverage residue on a shared outline
AntialiasCoverage28,23 → 36,250.01ΔRGB(3,2,2)antialiasing coverage residue on a shared outline
AntialiasCoverage22,36 → 22,460.01ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage31,18 → 38,190.008450ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage147,37 → 150,410.008450ΔRGB(-2,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage43,20 → 43,270.008112ΔRGB(-3,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage36,23 → 41,250.008112ΔRGB(3,2,2)antialiasing coverage residue on a shared outline
AntialiasCoverage43,55 → 43,610.008112ΔRGB(-3,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage150,41 → 152,470.007774ΔRGB(-3,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage130,39 → 135,400.006422ΔRGB(3,2,2)antialiasing coverage residue on a shared outline
AntialiasCoverage147,58 → 149,600.005408ΔRGB(-2,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage20,23 → 21,260.005070ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage78,35 → 79,390.005070ΔRGB(-3,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage223,35 → 224,390.005070ΔRGB(-3,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage150,54 → 151,570.005070ΔRGB(-3,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage146,47 → 146,510.004732ΔRGB(3,3,2)antialiasing coverage residue on a shared outline
AntialiasCoverage145,51 → 146,540.004732ΔRGB(2,2,1)antialiasing coverage residue on a shared outline
AntialiasCoverage135,39 → 139,390.004394ΔRGB(3,2,2)antialiasing coverage residue on a shared outline
AntialiasCoverage26,19 → 29,200.003718ΔRGB(-3,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage38,19 → 41,200.003718ΔRGB(-2,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage60,37 → 61,390.003718ΔRGB(-2,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage205,37 → 206,390.003718ΔRGB(-2,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage152,47 → 152,500.003380ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage23,31 → 23,340.003042ΔRGB(-2,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage145,36 → 146,360.003042ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage23,48 → 23,510.003042ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage25,55 → 27,560.003042ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage22,21 → 24,220.002704ΔRGB(-1,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage26,25 → 27,260.002704ΔRGB(1,1,1)antialiasing coverage residue on a shared outline
AntialiasCoverage24,20 → 25,210.002366ΔRGB(-2,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage22,34 → 22,360.002366ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage60,41 → 60,430.002366ΔRGB(-3,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage204,41 → 204,430.002366ΔRGB(-3,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage22,46 → 22,480.002366ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage152,51 → 152,520.002366ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage24,53 → 25,550.002366ΔRGB(-2,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage41,20 → 43,200.002028ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage24,29 → 24,300.002028ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage76,32 → 77,330.002028ΔRGB(-2,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage221,32 → 222,330.002028ΔRGB(-2,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage77,34 → 78,350.002028ΔRGB(-2,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage222,34 → 223,350.002028ΔRGB(-2,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage24,52 → 24,530.002028ΔRGB(-2,-2,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage29,19 → 30,190.001690ΔRGB(-3,-3,-2)antialiasing coverage residue on a shared outline
AntialiasCoverage19,26 → 19,270.001690ΔRGB(-1,-2,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage18,27 → 19,280.001690ΔRGB(-2,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage73,38 → 73,400.001690ΔRGB(3,3,2)antialiasing coverage residue on a shared outline
AntialiasCoverage218,38 → 218,400.001690ΔRGB(3,3,2)antialiasing coverage residue on a shared outline
AntialiasCoverage42,26 → 42,260.001352ΔRGB(2,2,2)antialiasing coverage residue on a shared outline
AntialiasCoverage24,28 → 25,280.001352ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
AntialiasCoverage62,31 → 63,310.001352ΔRGB(-1,-1,-1)antialiasing coverage residue on a shared outline
source · cases/fonts-advanced/fonts-advanced-font-size-ch.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>font-size ch unit</title>
6<style>
7  @page { size: 480px 128px; margin: 0; }
8  html { font-family: ParitySans; line-height: 1.5; }
9  * { margin: 0; box-sizing: border-box; }
10  html, body { background: #ffffff; }
11  .region {
12    width: 360px;
13    margin: 20px;
14    padding: 10px;
15    border: 2px solid #000000;
16    background: #ffd6a5;
17    font-family: ParityMono;
18    font-size: 20px;
19  }
20  .t {
21    font-family: ParityMono;
22    font-size: 5ch;
23    line-height: 1;
24    color: #432818;
25  }
26</style>
27</head>
28<body>
29  <div class="region">
30    <div class="t">Ch 5ch</div>
31  </div>
32</body>
33</html>
PASS exact match fonts-advanced-font-size-em · em
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
font-size: 2em resolved against the parent region's 16px font-size for a 32px effective size.
PASS exact match fonts-advanced-font-size-ex · ex
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
font-size: 4ex resolves against the parent ParitySans face's used x-height; Fontations measures 11px at the 20px parent size, yielding 44px.
PASS exact match fonts-advanced-font-size-percent · percent
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
font-size: 150% resolved against the parent region's 20px font-size for a 30px effective size.
PASS exact match fonts-advanced-font-size-rem · rem
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
font-size: 2rem resolved against the root 16px font-size (32px), independent of the local 10px font-size.

font-size-adjust:0.8 — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-size-adjust · font-size-adjust
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Two same-size lines compare default font sizing with font-size-adjust:0.8, which changes used font size to match the requested aspect value. Catches: A font-size-only implementation passes px/em/rem fixtures but ignores x-height adjustment.

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

PASS exact match fonts-advanced-font-stretch-condensed · condensed
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Two @font-face rules share a family but map normal and condensed stretch descriptors to visibly different bundled faces; both variants must select the matching face.

font-style:oblique 20deg — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-style-oblique-angle · font-style-oblique-angle
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A word uses font-style:oblique 20deg and visibly shears to the authored angle while a normal reference remains upright. The standards-derived reference materializes CSS Fonts 4's required specified-angle geometric fallback because Chromium computes the value but prints the regular-only face upright. Catches: Recognizing only the bare oblique keyword passes simple oblique tests but drops angle syntax.

font-synthesis:none — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS visually equivalent · no rejecting defect · thresholded evidence 0.000401% · raw 0.000401% (2 px) fonts-advanced-font-synthesis-none · font-synthesis-nonePASS via raw same-coordinate visibility policyColorValueΔE 1.6
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
why: fill recolour ΔRGB(-1,-4,-4) (ΔE 1.6)
A local @font-face exposes only a regular face; font-weight:bold with font-synthesis:none must remain regular instead of fake-bolding. Catches: A renderer that always synthesizes missing bold/italic passes bold fallback tests but violates explicit synthesis suppression.
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
ColorErr2247,61 → 162,761total 0.001479% · largest 0.000740% · max ΔE 1.6

Representative region details (worst-first)

classbbox (CSS px)area%magnitudereason
ColorValue47,61 → 47,610.000740ΔE 1.6 ΔRGB(-1,-4,-4)fill recolour ΔRGB(-1,-4,-4) (ΔE 1.6)
AntialiasCoverage162,76 → 162,760.000740ΔRGB(-3,-18,-17)antialiasing coverage residue on a shared outline
source · cases/fonts-advanced/fonts-advanced-font-synthesis-none.html
1<!DOCTYPE html><html><head><meta charset='utf-8'><style>@page{size:336px 152px;margin:0}html{font-family:ParitySans;line-height:1.5}*{margin:0;box-sizing:border-box}@font-face{font-family:OnlyRegular;src:url('../../fonts/ParitySans.ttf') format('truetype');font-weight:400}body{padding:12px;background:#fff;font-size:36px}.a{font-family:OnlyRegular;font-weight:bold;font-synthesis:none;color:#111}.b{font-family:OnlyRegular;font-weight:bold;color:#d7263d}</style></head><body><div class='a'>No faux</div><div class='b'>Faux bold</div></body></html>

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

PASS exact match fonts-advanced-font-variant-small-caps · small-caps
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Mixed-case text rendered with font-variant: small-caps so lowercase letters become synthesized small uppercase forms.

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

PASS exact match fonts-advanced-small-caps-synthesis · small-caps-synthesis
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
font-variant-caps:small-caps synthesizes smaller uppercase forms for lowercase letters; catches implementations that ignore font variant caps.

font-variant-ligatures:no-common-ligatures — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-variant-ligatures-none · font-variant-ligatures-none
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
A serif line disables common ligatures through the high-level font-variant-ligatures property. Catches: Supporting only low-level font-feature-settings passes a liga-off fixture but ignores the high-level variant property.

font-weight:600 — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-weight-600 · font-weight-600
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
With only a regular bundled face available, font-weight:600 should synthesize a visibly heavier weight than 400. Catches implementations that collapse only 700+ to bold.

font-weight:bolder/lighter — 100.00% verified visual parity PASS 1 · FAIL 0 · REFERENCE-DISPUTED 0all categories ↑

PASS exact match fonts-advanced-font-weight-relative · font-weight-relative
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Nested spans use bolder and lighter relative to a 600-weight parent, producing visibly different weights. Catches: A normal/bold-only parser treats bolder/lighter as normal and passes absolute weight fixtures.

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

PASS exact match fonts-advanced-text-transform-capitalize · capitalize
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Lowercase words rendered with text-transform: capitalize so the first letter of each word is uppercased.
PASS exact match fonts-advanced-text-transform-lowercase · lowercase
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Uppercase source text rendered with text-transform: lowercase so every glyph is lowercased before shaping.
PASS exact match fonts-advanced-text-transform-uppercase · uppercase
Chrome ref
Chrome ref
ironpress
ironpress
full-page >1.0%/channel diff
full-page >1.0%/channel diff
Lowercase source text rendered with text-transform: uppercase so every glyph is uppercased before shaping.