featheredge
Three concepts, three passes, one mark.
The brief for this identity was a mark that is not a brush and not a roller. All three starting concepts came from the trade's own vocabulary instead. Every pass below is kept, in order, including the two that were killed — the reasoning is the point of the sheet.
Pass 1 — three concepts
A · the feather. A solid field whose edge dissolves — a repair sanded until you cannot find where it stops. B · the lap. Two roller passes overlapping; meet them wet and there is no mark. C · the arris. A chip with its corner turned back to show the coats underneath.
Verdict. A read as a barcode — the gap between the block and the first sliver split it into two objects. B was three vertical bands, generic, and a blob at 24px; killed here. C had much the strongest silhouette, the chamfer surviving 24px intact, but its layers idea was invisible so it said nothing at all.
Pass 2 — close the gap, and test the merge
C had the silhouette and A had the idea, so pass 2 merged them and fixed A's taper.
Verdict. A2 was still a barcode — uniform-height bars are a comb whatever you do to the spacing. C2's two rules turned it into a document icon, which is the wrong meaning entirely; killed. D was right structurally: chamfer legible at 16px, dissolve legible from 40px. But all three shared one defect — bars of equal height and equal opacity read as a fence. A feathered edge loses height and density as it goes.
Pass 3 — the dissolve, and two controls
D2 ramps opacity and insets each sliver vertically, so the dissolve is lens-shaped. D3 and D4 exist to test two assumptions rather than to be chosen.
Verdict. D2 wins and both controls earned their place. D3 proves the chamfer is load-bearing — without it the mark is a plain rounded rectangle with a dissolve, and reads as nothing. D4 proves discrete slivers beat a true gradient: at 40px and below the fade reads as a rendering artefact and the icon simply looks out of focus.
The suite
Six variants, all hand-authored SVG. Every gradient is userSpaceOnUse, because a bounding-box gradient is degenerate on a zero-area shape and the element is then not rendered at all — which would silently delete the baseline rule. Gradient ids are namespaced featheredge-<variant>-g so several variants inlined into this one page cannot collide.
1 · Primary lockup
2 · Stacked
3 · Icon, at size
4 · Monochrome
5 · Reversed, on a brand field
6 · Favicon — a redraw, not a reduction
At 32px seven slivers do not resolve, so the favicon carries three chunkier ones and drops the baseline rule. Shrinking the mark instead would have produced a smudge.
At its smallest real usage, on its real background
An icon that needs interior detail fails first, and it fails where it matters most — inside the primary button. Testing on a white sheet hides this completely.
Palette neutrality
A theme logo ships as a data URL and cannot read page CSS — currentColor works inline in these pages but not once inlined into the theme file. So the mark carries a self-sufficient gradient instead, and the stops were solved rather than picked: both sit inside the 0.118–0.300 relative-luminance band, which is what it takes to clear 3:1 against a near-white and a near-black ground at once.
One trap this trade name walks straight into
A bare & is invalid XML, and an SVG loaded through <img src> is dropped in its entirety — no console error worth reading, no partial render, just a broken-image glyph. The firm is called Barrowden & Rowe, so five of these six variants carry one in their aria-label. Every one is escaped at source, and the generator asserts it with a regex and then parses each file with an XML parser before accepting it. The parse is the real check; the regex only catches the case you thought of.