Three concepts, four iterations on the winner, six shipped variants, and the size and
palette tests each had to survive. Everything below is hand-authored SVG with no rasters and no
external references.
1 · Three concepts
Drawn cold, rendered side by side at 96px and at 24px, and judged on the small one.
Selected
A · Soundbow
The bell in founder's section-profile with the soundbow knocked out, and struck arcs leaving it.
Object and event in one form. Wrong proportions and too many arcs in this first draft — but it is
the only concept that still says bell at 24px, so it earned the iteration.
Rejected
B · Struck
No bell at all — only the event. A clapper strike and four arcs radiating from it. The most
elegant of the three at 96px and completely gone at 24px, where the arcs collapse into a filled
quarter-disc. A theme icon that only works large is not a theme icon.
Rejected
C · Canon
The crown seen from above: six canons — the cast loops a bell hangs from — as an interlocking
rosette. Holds at 24px because the forms are fat. But shown cold it reads as a gear, a flower, or
a wellness logo, and wellness is the one thing this theme must never be mistaken for.
2 · Four passes on A
Each pass fixed exactly one thing that failed the previous size test. Shown at 96px
above and 24px below, because the 24px row is what decided every one of these.
A1
Fault: mouth only 16u wide against a 29u height — reads as a hand bell or a
lampshade. Three arcs at weight 1.6 smear together below 40px.
A2
Fixed: mouth opened to 32u — the real 1 : 0.8 ratio of a tower bell.
Two arcs, not three. Fault: the 1.8u soundbow band fills in solid at 24px.
A3
Fixed: soundbow opened to 2.6u; one arc at weight 3.4 so the sound is a single
confident stroke, not a signal-bar. Fault: the hairline canon on top vanishes,
and the mark now leans right.
Final
A4
Fixed: canon rebuilt fat — a 4.6u dome with a 2.1u arch cut through it, so it
survives as a bump-with-a-notch. Bell shifted 3u left to optically centre against the arc's mass. Also: the two-stop ramp used in A1–A3 put its midpoint through the bell's
centre of mass, and the midpoint of bronze and verdigris is khaki — compare the cells to the left,
which read olive. Retuned to three stops holding bronze to 58%, so the body stays warm metal and
only the right flank and the arc weather. Which is how a bell greens: on the weather side.
3 · The six shipped variants
1 · Primary lockup
Horizontal. This exact artwork is what THEME.json ships as its logo
data URL.
2 · Stacked lockup
Narrow chrome. The bell returns to true centre (nothing to balance) and the arc pulls in from
r21 to r19. The broken rule with one cast bead is the block family's separator, in miniature.
3 · Icon mark
Alone. Size test in section 4.
4 · Monochrome
All currentColor. One file serves light and dark because
--c-ink-950 already flips. Inert in a data URL — hence variant 1 for the theme file.
5 · Reversed
Driven by --c-on-brand, not by a fixed cream. On the three dark palettes
brand is the lighter of the pair, so a cream reverse would sit at about
1.3 : 1. The token already solves this — worst measured case 6.25 : 1.
6 · Favicon
A redraw, not a reduction. Arc gone, canon gone, left-shift gone, bell squatter, and the whole
thing reversed out of its own tile so it never depends on the browser's tab colour.
4 · Size test
The brief's bar is 24px for the icon mark and 32px for the favicon. Both rows are
rendered at true pixel size below — the dashed rule is the bounding box, not part of the mark.
Icon mark
96
64
48
32
24 ← bar
16
Favicon
64
32 ← bar
16
mark @32 (why not)
5 · Legibility across all six palettes
The shipped mark is a data URL and a data URL cannot read page CSS, so it has to be
palette-neutral by construction. Both gradient stops are mid-tone on purpose: bronze
#B0752C measures 3.62 : 1 on the lightest palette background and
4.90 : 1 on the darkest; verdigris #3E8C79 measures 3.76 and 4.72. Every
cell below is the identical file.
Light · Foundry Bronze
Light · Verdigris
Light · Tower Slate
Dark · Foundry Bronze
Dark · Verdigris
Dark · Tower Slate
And reversed, on each palette's brand fill
L · Bronze · 6.25:1
L · Verdigris · 6.65:1
L · Slate · 8.55:1
D · Bronze · 7.48:1
D · Verdigris · 8.44:1
D · Slate · 7.61:1
Why a gradient rather than currentColor. The FastSites editor ships a
theme logo as logo: 'data:image/svg+xml;utf8,…'. A data URL is a separate document: it
cannot inherit color from the page, cannot read a CSS custom property, and cannot load
the theme's Google fonts. Anything palette-reactive is therefore off the table for the shipped mark.
The two options left are a single palette-neutral colour or a self-sufficient gradient. A single
colour that clears 3 : 1 on both a near-white and a near-black background has to live in
a narrow mid-tone band, and every mid-tone this theme could use is either the bronze or the
verdigris. So the gradient is not decoration — it is the two admissible colours, used together,
and it happens to say exactly the right thing: new casting on one end, forty years of weather on
the other.
The currentColor variants (monochrome, reversed) are for inline use in the page
chrome, where CSS can reach them. That distinction is recorded in
PORTING.md so nobody later swaps one for the other and quietly breaks the picker.