Surface mapping
Status: Accepted
The brand reaches the three surfaces very unequally. Designing as if the logo and the amber palette apply everywhere is the mistake this page exists to prevent.
The three surfaces, honestly
Section titled “The three surfaces, honestly”flowchart LR brand[brand tokens + marks] -->|full| web[Web UI] brand -->|mapped subset| tui[TUI] brand -->|name only| cli[CLI]| Web UI | TUI | CLI | |
|---|---|---|---|
| Logo (SVG) | ✅ full | ⚠️ ASCII mark only | ⚠️ ASCII mark, optional |
| Colour palette | ✅ all tokens | ⚠️ mapped to terminal capability | ❌ terminal default |
| Bricolage Grotesque | ✅ | ❌ terminal font, not ours | ❌ |
| Space / radius / shadow | ✅ | ❌ meaningless | ❌ |
| The voice (plain, warm, precise) | ✅ | ✅ | ✅ |
The last row is the point: what actually carries across all three isn’t the palette — it’s the plain-language voice. The visual brand is largely a web concern.
Web UI — the full brand
Section titled “Web UI — the full brand”The web UI wears everything: the SVG marks, the complete token palette via
@lemonfiber/brand (contract),
Bricolage Grotesque, the ink theme. This is the one surface the brand was designed
for, and the only one where “does it look on-brand?” is a meaningful question.
Everything in brand-rules applies here in full.
TUI — a mapped subset
Section titled “TUI — a mapped subset”A terminal is not a canvas. It offers a colour palette the terminal owns (16 / 256 / truecolour, and the user’s theme may override it), a font the user chose, and no concept of spacing units, radii, or shadows.
So the TUI takes a deliberate, small mapping, not the token set:
| Brand token | TUI mapping |
|---|---|
ink |
Default foreground |
paper |
Default background (often the terminal’s own) |
lemon |
The one accent — headings, the health-OK state |
fiber (amber) |
Active/attention — consistent with its signal role |
leaf, surfaces, type, space, radius, shadow |
Not mapped — no terminal equivalent |
Two constraints make this safe:
- Truecolour is not assumed. The mapping degrades to the 16-colour set, and
to no colour at all under
NO_COLOR— where G3’s symbols carry all state (G3-R1). Brand colour is enhancement, never the information. - The user’s terminal theme wins where it must. A user with a customised palette sees their colours; the TUI maps roles, not exact hexes, so it remains legible in any theme.
The mark, in the TUI, is an ASCII rendering — the patch-panel slice suggested in text, shown in the wizard header and nowhere that needs it to be precise. It is not the SVG and does not pretend to be.
CLI — name, not brand
Section titled “CLI — name, not brand”Piped or scripted output carries essentially no brand: it is plain text, often consumed by another program, and colour there is noise (G3-R7 forbids control sequences in redirected output).
The CLI’s brand is the word lemonfiber and the voice. An optional ASCII mark may
appear in interactive help; it never appears in machine output.
Why this asymmetry is stated, not hidden
Section titled “Why this asymmetry is stated, not hidden”A designer handed the brand assets will reasonably assume they apply to “the app.”
They apply to one third of it. Without this page, effort goes into terminal
colour schemes that a NO_COLOR user never sees, or an ASCII logo in JSON output
that breaks scripts — both plausible, both wrong.
Stating the mapping up front means each surface gets brand-appropriate effort: full on the web, restrained in the TUI, none in machine output.
Requirements
Section titled “Requirements”| ID | Requirement |
|---|---|
| DES-R9 | The web UI MUST render the full brand — SVG marks, complete palette, Bricolage Grotesque, ink theme. |
| DES-R10 | The TUI MUST map only a defined subset of tokens to terminal roles, and MUST NOT assume truecolour. |
| DES-R11 | TUI brand colour MUST degrade to the 16-colour set and to no colour under NO_COLOR, with state still conveyed by symbol. |
| DES-R12 | The TUI MUST map colour roles, not exact hex values, so a user’s terminal theme remains legible. |
| DES-R13 | The SVG marks MUST NOT be used in the TUI or CLI; an ASCII rendering MUST be used where a mark is shown. |
| DES-R14 | Machine-readable CLI output MUST carry no brand colour or logo. |
Related
Section titled “Related”- brand-rules.md — the constraints, which apply fully only to web
- accessibility.md — the contrast baseline for the web palette
- G2 Plain-language — the voice, which does carry across
- G3 Accessibility
This page lives in another repository Rendered from lemonfiber/spec at 1d10402, 2026-09-09. Read the source of this page