Hardau - Designer Notes

Optional reading. Useful if you are setting Hardau in HTML/CSS or
editing the font source. If you only want to install Hardau and type
with it, you can skip this file.


Shared-stroke geometry

Adjacent uppercase letters share a column: the right border of one
letter occupies the same vertical strip as the left border of the next.
Advances are set so each pair lands in the same column automatically at
letter-spacing: 0. Adding positive letter-spacing breaks this by
inserting a gap between shared columns; the borders appear doubled.

Note: keep letter-spacing: 0 (or rely on the default). Negative tracking
is possible and reads well, but push it far enough and borders merge
into thick blobs.


Right-side ink overshoot

Every uppercase glyph paints one border width past its advance. In a
text run, the next letter's left bar covers this overshoot, so the
overlap is invisible. At the end of a line, or when letter-spacing is
nonzero, the overshoot shows as a thin painted sliver past the bounding
box.

In browsers, the default CSS cursor (I-beam) sits at the advance
boundary, not the ink edge. The try-it page corrects this with canvas
measureText (actualBoundingBoxRight minus width), but a generic text
editor will place the cursor one border inside the visible right edge
of each letter.


Period advance

The period's right bar center sits at x = 4 minus sw/2 (grid units).
Advance equals the inner face of the right bar, so the next letter's
left bar overlaps the same column. Same shared-stroke geometry as all
letter pairs.

At all three weights the period is narrower than a capital letter but
wider than a geometric dot would suggest. The period participates in
the shared-stroke grid.


Space variants

Gap (default): a blank advance equal to the grid's standard word-space
width. No glyph is drawn.

Bordered: spaces render as U+2423 (OPEN BOX). The font includes a
dedicated glyph at U+2423: a filled rectangle the height of a capital
letter, with a weight-matched border. Width matches the gap space
advance so reflowing between modes does not shift text. In other
applications (anywhere the font is set) you can use the glyph directly
by typing or pasting the open-box character. The try-it page handles
bordered as a render-only mode: it maps U+0020 to U+2423 on display and
normalizes any pasted open-box back to a regular space, so URLs always
contain plain U+0020.


Line-height

The font's ascender metric covers the full cap-height including border
overshoot. A line-height of 1.1 leaves a small gap between lines. At
1.0 or below, the top border of one line touches or overlaps the bottom
border of the line above. Whether that reads as deliberate density or
as a bug depends on context.


Descenders

Hardau has no descenders in the current character set. Lowercase
letters, if added later, would need a descender zone in the grid. The
current UPM and ascender/descender metrics assume all-caps.


Weight and stroke width

Three weights (Light, Regular, Bold) correspond to stroke widths of 1,
2, and 3 grid units at UPM = 1000, SCALE = 60, GRID_WIDTH = 8.
Intermediate weights between these three are not available as
variable-font axes; use CSS font-weight to select among the three.


Variants

Hardau ships in five visual variants, each available across all three
weights.

  Hardau                   Outline. The clean reference shape.
  Hardau-Filled            Solid fill. Every interior closed.
  Hardau-Handdrawn         Outline with a hand-drawn edge wobble.
  Hardau-Handdrawn-Filled  Solid fill with a hand-drawn outer edge.
  Hardau-Jitter            Outline with per-glyph random offsets.

Trial bundle ships Hardau outline only; the full bundle contains all
five variants in three weights each.


Known rendering differences across environments

Non-breaking space (U+00A0) has a zero advance in macOS Safari. Use a
regular space or U+2423 for visible spacing.

Cursor placement: text editors that use system glyph-advance metrics
for cursor positioning will land the cursor one border inside the right
ink edge. This affects the visual appearance but not text selection or
copy-paste.

Canvas measureText overshoot: actualBoundingBoxRight exceeds width by
one border's worth of pixels. Code that computes selection rectangles
or caret bounds from canvas metrics needs to account for this.
