Brand atom workshop · placement round 4 (root-cause)

Wordmark dot placement — round 4

Two issues called out in round 3 + their fixes, then a 9-variant comparison with em-based vertical shifts and three dot sizes (0.20em, 0.21em, 0.22em).

Why the rev-3 dot looks misaligned

Optical overshoot. The rev-3 dot's mathematical bottom sits exactly on the baseline. But your eye reads round shapes by visible mass-center, not by their geometric bottom point. A circle whose lowest point touches the baseline appears to float because its mass is concentrated above the baseline. Every well-designed typeface compensates for this by making round letters (O, o, p, q, and especially the period glyph itself) extend slightly below the baseline. Our CSS dot has no built-in overshoot — we have to add it manually with a small downward translate.

Why the px shifts mismatched across sizes: translateY(3px) is always 3 hard pixels — at SM 22px that's 13.6% of the font-size, at HERO 96px only 3.1%. Same numeric value, completely different proportional shift. Fix: use em-based shifts. translateY(0.025em) is the same proportional offset at every size, so the dot sits at the same visual relationship to "ecreal" whether the wordmark is 22px or 96px.

All round-4 variants below use em-based translates. "≈ 1 down" = translateY(0.025em); "≈ 2 down" = translateY(0.050em). Clay baseline ruler in each specimen marks where "ecreal" sits.

CURRENT · REV-3 LOCKED
As deployed on vecreal.com — note the optical-float problem
size  0.20em
margin-left  calc(0.04em + 2px)
vertical  margin-bottom 0.005em
translate  none
SM 22px
ecreal
LG 48px
ecreal
HERO 96px
ecreal

Batch 0.20em · rev-3 size with em-based descent

Three placements at the locked 0.20em dot size

D1 · 0.20em · 1+1
1px closer + ≈ 1 down (0.025em)
size  0.20em
margin-left  calc(0.04em + 1px)
translate-Y  0.025em
SM 22px
ecreal
LG 48px
ecreal
HERO 96px
ecreal
D2 · 0.20em · 0+1
0px closer (rev-3 horizontal) + ≈ 1 down
size  0.20em
margin-left  calc(0.04em + 2px)  (rev-3)
translate-Y  0.025em
SM 22px
ecreal
LG 48px
ecreal
HERO 96px
ecreal
D3 · 0.20em · 0+2
0px closer (rev-3 horizontal) + ≈ 2 down
size  0.20em
margin-left  calc(0.04em + 2px)  (rev-3)
translate-Y  0.050em
SM 22px
ecreal
LG 48px
ecreal
HERO 96px
ecreal

Batch 0.21em · slightly bumped dot

Three placements at 0.21em

D4 · 0.21em · 0+0
Position as is (rev-3 horizontal, no translate)
size  0.21em
margin-left  calc(0.04em + 2px)
translate-Y  none
SM 22px
ecreal
LG 48px
ecreal
HERO 96px
ecreal
D5 · 0.21em · 0+1
As is + ≈ 1 down
size  0.21em
margin-left  calc(0.04em + 2px)
translate-Y  0.025em
SM 22px
ecreal
LG 48px
ecreal
HERO 96px
ecreal
D6 · 0.21em · 0+2
As is + ≈ 2 down
size  0.21em
margin-left  calc(0.04em + 2px)
translate-Y  0.050em
SM 22px
ecreal
LG 48px
ecreal
HERO 96px
ecreal

Batch 0.22em · max-bumped dot

Three placements at 0.22em (same size as pre-rev-3 amendment)

D7 · 0.22em · 0+0
Position as is (rev-3 horizontal, no translate)
size  0.22em
margin-left  calc(0.04em + 2px)
translate-Y  none
SM 22px
ecreal
LG 48px
ecreal
HERO 96px
ecreal
D8 · 0.22em · 0+1
As is + ≈ 1 down
size  0.22em
margin-left  calc(0.04em + 2px)
translate-Y  0.025em
SM 22px
ecreal
LG 48px
ecreal
HERO 96px
ecreal
D9 · 0.22em · 0+2
As is + ≈ 2 down
size  0.22em
margin-left  calc(0.04em + 2px)
translate-Y  0.050em
SM 22px
ecreal
LG 48px
ecreal
HERO 96px
ecreal

Spec deltas at a glance

VARIANT DOT SIZE MARGIN-LEFT TRANSLATE-Y
Current · rev-30.20emcalc(0.04em + 2px)
D10.20emcalc(0.04em + 1px)0.025em
D20.20emcalc(0.04em + 2px)0.025em
D30.20emcalc(0.04em + 2px)0.050em
D40.21emcalc(0.04em + 2px)
D50.21emcalc(0.04em + 2px)0.025em
D60.21emcalc(0.04em + 2px)0.050em
D70.22emcalc(0.04em + 2px)
D80.22emcalc(0.04em + 2px)0.025em
D90.22emcalc(0.04em + 2px)0.050em
Reply with your pick — "D1" through "D9", or "Current". I'll lock the choice, regenerate wordmark.svg dot geometry (cy + r if size changes), update all consumers, and push.