Skip to content

Brand the masthead with Syne, the Font Lab wordmark face - #61

Merged
jmg698 merged 1 commit into
mainfrom
claude/font-lab-panel-branding-dqerr4
Jul 26, 2026
Merged

jmg698 merged 1 commit into
mainfrom
claude/font-lab-panel-branding-dqerr4

Conversation

@jmg698

@jmg698 jmg698 commented Jul 26, 2026

Copy link
Copy Markdown
Owner

What & why

Establishes Font Lab's visual identity on the panel by introducing the Syne 600 typeface as the brand voice — used for the masthead wordmark and the living Aa mark. This aligns the panel's identity with jack-mcgovern.com/fontlab, where Syne is the wordmark face.

The Aa badge shifts from a dark background with light text to a marker-yellow tile with ink letterforms — the same mark as the site. The badge remains "living" (its font-family updates to the current working display face), but when no display face is selected, it renders in italic Syne as the brand's own mark.

The FONT LAB wordmark is now set in Syne 600 instead of the previous styling.

Implementation details:

  • Syne is shipped as a ~4.8KB base64 woff2 subset (space, A–Z, a–z, ·, —) namespaced FL Brand
  • Injected alongside catalog faces as a document-level @font-face (shadow DOM @font-face is not reliably honored everywhere)
  • Zero network cost; system sans is the fallback if the face is blocked
  • The badge's data-brand attribute tracks whether a display face is active; when false, the mark wears its own italic Aa

The invariants

  • The human still makes the pick. No change to selection logic.
  • preview == ship. No change to shippability gates.
  • Reversible. Pure UI/branding change; no writes to user projects.
  • Scope unchanged. Panel-only cosmetic update; no scope expansion.

Tests

  • The fast gate passes locally: cd cli && npm install --omit=dev && node codegen-css-test.mjs && node panel-keys-test.mjs && node m3-test.mjs && node m4-test.mjs && node m5-test.mjs
  • Masthead renders correctly with marker-yellow badge and Syne wordmark
  • Badge font-family updates when display face changes; reverts to italic Syne when cleared

Notes for the reviewer

This is a pure branding/cosmetic change. The Syne subset is embedded as base64 to avoid network requests. The badge's dual behavior (living display face + fallback to brand mark) is controlled via the data-brand attribute, which is set in the render() function based on whether a display stack exists.

Documentation in PANEL-VISION.md has been updated to reflect the new color and type hierarchy.

https://claude.ai/code/session_0117WgiPcRHiZmFytEwSpWys

The panel is the surface most people see, and until now it looked like no
relative of jack-mcgovern.com/fontlab — an ink-gray badge and a mono wordmark
against the site's marker-yellow Aa tile set in Syne. Same product, two marks.

The masthead now wears the site's: the Aa tile in MARKER (#E7FF3B) with ink
letterforms, and FONT LAB in Syne 600. The badge stays the LIVING Aa — render()
still sets its face to the working display font, so the mark keeps doubling as
the display role's peripheral change signal, and it only wears its own italic
Aa (the site's exact mark) when there's no working stack to specimen.

Syne ships the way PANEL-VISION specs the serif upgrade: a 4.8KB base64 woff2
subset (space, A-Z, a-z, ·, —) namespaced `FL Brand`, injected alongside the
catalog faces — into the document, since @font-face in a shadow root isn't
honored everywhere. Zero network, so the mast is branded offline too.

Two spec amendments, so the doc stays honest: the mark is the one standing
exception to yellow-follows-the-page (identity, not attention, so it never goes
quiet), and it's the one sans on a surface that claimed zero — confined to the
wordmark, never doing UI work.

Verified in Chromium against the real template markup: expanded and collapsed,
both badge branches, no mast overflow with a truncating direction name and the
unsaved marker. The full offline gate suite passes; the example install's panel
gets the same masthead so demos show the brand.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117WgiPcRHiZmFytEwSpWys
@jmg698
jmg698 merged commit 5c42f47 into main Jul 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants