brand sheet
v1.0 · 2026-05
a research platform for graph-based
computational narratology
github.com/derekmerck/storytangl
StoryTangl
A research platform for graph-based computational narratology.
Turn the G over and read the rest.

§1 Wordmark canonical · do not redraw

The wordmark is "StoryTangl" set in the body font, with a capital G turned 180°, narrowed, and dropped onto the baseline so it reads as the lowercase g it stands in for. The turn is the mark; everything else is typography. It is the same letter the project inverts elsewhere — U+2141 ⅁, a turned capital G — here dressed as a g, and the trick holds at every size from favicon to billboard.

The inversion exists on the page in CSS, in the terminal as Unicode U+2141 ⅁, and in SVG as a transform on the glyph. The mark survives medium-shift; the transform doesn't matter.

Canonical · Newsreader 600

canonical wordmark
StoryTangl
font: Newsreader 600 · --st-wm-g-sy: 1.00 · --st-wm-g-sx: 0.85 · --st-wm-g-ty: -2% · --st-wm-g-margin: -0.065em

Variants · per context

Different surfaces use different fonts in the underlying type stack. The g transform is re-tuned per font so the lip lands on the baseline and the new descender matches the depth of neighboring descenders. The three tunings below are the only sanctioned variants — they are the canonical defaults exposed in the Tweaks → voice sliders (scale y / scale x / shift y / margin).

Newsreader · prose / docs
StoryTangl
sy 1.00 · sx 0.85 · ty −2% · mg −.065em
use in: README banner · RTD title · social card · paper-form prose · the wireframe doc
JetBrains Mono · code / CLI
StoryTangl
sy 1.00 · sx 1.00 · ty −16% · mg 0em
use in: CLI splash · log banners · terminal headers · prompts where the wordmark appears verbatim
Inter Tight · web chrome
StoryTangl
sy 1.00 · sx 0.75 · ty −17% · mg −.10em
use in: web app navbar · admin chrome · any context already typeset in Inter Tight

Sizes — keep the ratios; no minimum height

The wordmark scales freely; the transform is unitless. The turned G remains legible at small sizes because the inversion is the legibility. Below 16px the wordmark drops to the glyph-only form (see §2).

StoryTangl
StoryTangl
StoryTangl
StoryTangl
StoryTangl
StoryTangl

§2 Glyph standalone mark · favicon · social card

The glyph is the wordmark's turned G alone, set bold in the wordmark font and centered. Use it when the wordmark is too wide (favicons, app icons, social-card watermark, small UI chrome). Square and round are equally canonical — use whichever fits the surface: square reads as structural in dense UI and documents; round suits app icons, avatars, and circular host surfaces. Either is fine as a default. Reach for the framed (outline) treatment only on transparent or busy backgrounds where a fill would fight.

primary
ink on paper-knockout
inverted
paper on ink-knockout
blue-pencil
for moments of emphasis
framed
for narrow chrome lines
round
app icons · circular avatars
round · inverted
light-on-dark contexts
burnt accent
single brand pop · sparingly
mono · ASCII fallback
U+2141 · terminal · text-only

§3 Lockups one mark + descriptor · never both marks

A lockup pairs one mark with a descriptor — never two marks. The glyph is the wordmark's turned G, so setting them together just says the same thing twice. Use the wordmark when there's room to read it, the glyph when there isn't. The optional descriptor sits behind a 1px ink-3 rule at a 0.18em gap.

wordmark + descriptor
StoryTangl interactive
narrative engine
glyph + descriptor · compact
interactive
narrative engine
StoryTangl
DOone mark, standing alone · the wordmark already carries the glyph
StoryTangl
DON'Tglyph + wordmark together · the turned G, twice over

§4 Type stack three families · three roles · never mixed

Three families. Each family belongs to one role. No fourth family. If a context needs typographic emphasis, reach for weight or size, never an additional family. The wordmark sets in the prose family by default and falls back per §1 when context demands.

prose · titles · wordmark
Newsreader
Aa Gg
The bridge is out — you'll want the long way.
A finger-post points east toward the river and west toward the mill.
weights · 400 / 500 / 600 / 700
use · prose · titles · wordmark · narrative copy
engine output · cli · code
JetBrains Mono
Aa Gg
{ uid: "g-scene", fragment_type: "group" }
$ tangl-cli
⅁> play coronate_the_regent
weights · 400 / 500 / 600 / 700
use · engine output · cli · code · fragment data
ui chrome · small labels
Inter Tight
Aa Gg
World  ·  Inspect  ·  History
Ledger · Step 14 · Cursor active
weights · 400 / 500 / 600 / 700
use · navbar · buttons · tags · table headers

§5 Palette engineering-notebook · closed set

The palette is small and closed. Paper, ink, blue-pencil, burnt accent, plus three severity tokens that round-trip with KvRow.emphasis in the widget vocabulary. Do not add hues; if a new severity surfaces, propose an addition in USAGE.md. The dark mode is a literal photographic negative; it is not a second palette.

surface · structure
--st-paper
primary surface
#f6f3ea
--st-paper-2
banded · hover
#eee8d6
--st-paper-3
margins · inactive
#e3dcc4
--st-rule
hairline rules
#c9c2ad
--st-rule-strong
structural borders
#8a8472
ink · text
--st-ink
primary · wordmark
#1a1a1a
--st-ink-2
body prose
#3b3a36
--st-ink-3
metadata · secondary
#6b6a64
--st-ink-4
tertiary · disabled
#93918a
accents
--st-blue
blue-pencil · links · brand mark
#2a4e87
--st-burnt
single warm pop · sparingly
#b2542a
severity · round-trip with KvRow.emphasis
--st-ok
✓   passed · no issue
#3e7f57
--st-warn
!    flagged for review
#a8762a
--st-bad
!!   failed · criminal
#a8362a

§6 Applications what the brand looks like in the wild

README banner

Source lives at brand/assets/README-banner.svg. Reference it in README.md above the title only after the tagline is settled.

StoryTangl
A research platform for graph-based computational narratology.
Fabula, navigation, journal — written once, projected three ways.
github.com/derekmerck/storytangl · MIT
v38 · ⅁

CLI splash

What tangl-cli prints on launch. Source lives at brand/assets/cli-splash.txt; the deployment copy is apps/cli/src/tangl/cli/assets/splash.txt.

StoryTangl v3.8
────────────────────────────────────────────────────────────
a research platform for graph-based computational narratology
type help for commands · play <world> to begin · ^d to exit

GitHub social card · 1280×640

The image GitHub uses when the repo is shared on Mastodon, Bluesky, X, Slack. Source lives at brand/assets/social-card.svg and is copied to .github/social-card.svg; rasterize outside the repo before configuring GitHub's social preview.

StoryTangl
A research platform for graph-based computational narratology. Fabula, navigation, journal — written once, projected three ways.
github.com/derekmerck/storytangl · MIT · v38

RTD docs header strip

Docs-facing brand tokens ship via docs/src/_static/storytangl-palette.css, docs/src/_static/storytangl-type.css, and docs/src/_static/favicon.svg.

StoryTangl
v3.8 · github

Favicons

All sizes derive from brand/assets/glyph.svg. The 16×16 case drops the round mask and uses the glyph alone to preserve readability.

192 × 192 · apple-touch
96 × 96
48 × 48
32 × 32
16 × 16 · no mask

§7 Do · Don't opinionated · short list · enforce in PRs

StoryTangl
DOturned capital G · narrowed and dropped so it reads as the g it replaces
StoryTangl
DON'Tan actual turned lowercase g · the mark is a turned capital G — it only reads as a g
StoryTangl
DOwordmark in the body font · part of the typesetting
StoryTanGl
DON'Tdecorative or display fonts · the wordmark is editorial, not whimsical
StoryTangl
DOmonochrome ink-on-paper · the mark holds without color
StoryTangl
DON'Tcorrect mark, wrong surface · gradient background · color-pop · saas-startup styling
StoryTangl
DOgenerous clear-space · at least 0.6em of air on every side
StoryTangl
DON'Tthe frame jammed against the mark · the turned G and the ascenders have nowhere to breathe

In running prose, just type StoryTangl — or the character where a turned mark is wanted. The constructed mark belongs to the wordmark and glyph, not every mention: this is a research project, and the name has to stay typeable.

§8 Voice & tone how the project writes about itself

voice

Cynical, wry, technically precise. The writer is a research engineer with a PhD, dry humor, and no patience for marketing copy. Prose makes claims it can back up. Jokes are dry; metaphors are accurate; superlatives are rare and earned. When the project is honest about being a research platform, the writing says so without apology.

Lineage: the README, ARCHITECTURE.md, and AGENTS.md set the canonical voice. New copy lives at the intersection of those three documents. Anything that sounds like a SaaS landing page belongs somewhere else.

tone register
YES"the engine's real job is untangling"
YES"~37 architectural iterations"
YES"useful for development, not a production MVP"
YES"AI agents occasionally suggest things that are actually good"
NO"revolutionize interactive storytelling"
NO"the world's first…"
NO"unlock the full potential of…"
NOemoji 🎉 in headlines

§9 Lineage the flip predates the name · a footnote

The 180° flip is older than this engine — it carried over from an earlier worldbuilding project, applied there to a different letter. What matters here isn't the ancestry but the operation: StoryTangl means what its glyph means — a thing turned over, read differently from the other side.

The fuller provenance is recorded in USAGE.md §10. Treat it as a footnote, not a feature; don't build the brand around it.

§10 Assets · index canonical sources · deployment copies

pathpurposenote
brand/StoryTangl-Brand-Sheet.htmlthis document — canonical referencereview-only; not a production artifact
brand/USAGE.mddo / don't · sizing rules · what an LLM agent must never doopinionated; enforce in PRs
brand/assets/palette.csscolor tokens (light + ink-mode):root + [data-st-mode="ink"]
brand/assets/type.csstype stack (Newsreader / Mono / Inter Tight)Google Fonts import
brand/assets/wordmark.svgcanonical wordmark · Newsreader 600live text · Newsreader with Georgia/serif fallback · width-locked via textLength
brand/assets/glyph.svgstandalone glyph · ink-on-papersquare; live text + serif fallback; clip-path-friendly
brand/assets/glyph-round.svground-masked glyph · for faviconsused at 16/32/48/96/192 px
brand/assets/favicon.svgbrowser tab icon · 32×32 sourcecopied to apps/web/public/favicon.svg and docs/src/_static/favicon.svg
brand/assets/social-card.svgGitHub social card source · 1280×640copied to .github/social-card.svg; rasterize outside the repo for GitHub preview
brand/assets/README-banner.svgREADME hero source · 1280×360available but not wired into README until the tagline settles
brand/assets/cli-splash.txtterminal launch banner · ANSIcopied to apps/cli/src/tangl/cli/assets/splash.txt
apps/web/src/styles/storytangl-palette.cssweb palette deployment copyfrom brand/assets/palette.css
apps/web/src/styles/storytangl-type.cssweb type deployment copyfrom brand/assets/type.css
docs/src/_static/storytangl-palette.cssdocs palette deployment copyfrom brand/assets/palette.css
docs/src/_static/storytangl-type.cssdocs type deployment copyfrom brand/assets/type.css
The brand is intentionally small. Root brand/ files are the source package; app, docs, and GitHub copies are deployment surfaces. If you genuinely need a new target, add the rule here first; then deploy.
StoryTangl brand sheet v1.0 · 2026-05 · supersedes nothing · all values closed unless re-opened in USAGE.md
Tweaks
Surface · mode
Wordmark · voice
Posture · rhythm
G · fine tuning
Segmented controls rewrite a whole gestalt. The sliders tune the flipped-g for the active voice only — each font needs its own geometry — and persist per voice. §1 variants and the sizing scale stay locked as reference.