Xenopic

Brand Assets

Xenopic Brand

Official logos, colors, and guidelines for designers, journalists, and partners. Use these assets when referencing or featuring Xenopic.

Logomark

The Mark

The Xenopic mark on light, dark, and brand-colored backgrounds. Always use the version with sufficient contrast for its background.

Light background

Dark background

Primary navy

Dark navy

Clear space

All brand files include 10% clear space on each side — the logo mark fills 80% of the canvas. Never place other elements within this exclusion zone. When placing in a context with implicit clear space (e.g. a navigation bar with padding), the built-in margin is sufficient.

10%Canvas (100%)Mark (80%)Clear space: 10%each side

Wordmark

Logo + Wordmark

Use the horizontal lockup as the primary combined identity. The mark alone is preferred in compact contexts (nav bars, favicons, app icons).

Xenopic markXenopic
Xenopic markXenopic

Primary lockup

Mark on the left, name on the right. Baseline of the text aligns to optical center of the mark. Minimum width: 120px rendered.

Mark-only

Use the mark alone below 64px where the wordmark would become illegible. Always keep a 10% clear space buffer around the mark's canvas.

Assets

Downloads

All files use 10% built-in clear space (mark fills 80% of canvas). SVG is vector and scales to any size. PNG files include a transparent background.

SVG — Vector (scalable)

Mark (universal)
Mark black
Mark white
Wordmark black
Wordmark white

PNG — Mark, black (for light backgrounds)

Sizes

PNG — Mark, white (for dark backgrounds)

Sizes

PNG — Wordmark

Black
White

Colors

Brand Palette

All colors are defined in OKLCH — a perceptually uniform color space where equal numeric steps look equally different. Hue 232° (cool blue-gray) runs through the entire neutral scale.

Background

97.7% 0.009 232

#f3f5f9

Surface

100% 0 0

#ffffff

Foreground

20.6% 0.020 232

#272f3c

Primary

24% 0.032 232

#1e2d40

Muted

54.2% 0.011 232

#697487

Border

92.2% 0.009 232

#dde3ec

Dark BG

18% 0.028 232

#162030

Dark Surface

23.5% 0.025 232

#1e2c3d

Dark FG

96.6% 0.007 232

#f0f3f8

Success

53% 0.155 147

#1e8c56

Error

56% 0.185 27

#d43a1f

Warning

74% 0.170 65

#c78a00

Usage: Always reference colors using CSS custom properties (e.g. var(--color-primary)), never hardcode hex or OKLCH values directly. The system adapts to light and dark modes automatically.

Typography

Type System

Two typefaces. One for structure, one for readability. Never use other typefaces in Xenopic brand materials.

Display & Headings

Open Runde

Soft, rounded, confident. Use for headlines, product names, marketing copy, and the brand wordmark. Weights: Regular (400), Medium (500), Semibold (600), Bold (700).

Bold — Aa Bb Cc 0123

Semibold — Aa Bb Cc

Medium — Aa Bb Cc 0123

Regular — Aa Bb Cc 0123

Body & UI

Inter

Precise, neutral, legible at any size. Use for body text, labels, captions, code, and all UI at 16px and below. Weights: Regular (400), Medium (500), Semibold (600), Bold (700).

Bold — Aa Bb Cc 0123

Semibold — Aa Bb Cc

Medium — Aa Bb Cc 0123

Regular — Aa Bb Cc 0123

Type scale (18px base, 1.25 Major Third ratio)

text-5xl~61pxXenopic
text-4xl~49pxDynamic banners
text-3xl~39pxYour profile, alive
text-2xl~31pxAuto-updating X banner widgets
text-xl~25pxTurn your header into a live dashboard
text-lg~20pxAuto-updating widgets that earn while you create
text-base18pxYour Twitter banner, reimagined. Set once, runs forever.

Mark

Anatomy & Symbolism

Every element of the Xenopic mark is intentional. The logo is constructed from three distinct components, each with a specific meaning.

01Squircle frame
02X mark
03Publisher's seal

01

The Squircle Frame

A ring, not a filled shape — a window into something. The continuous-curvature corners use the same mathematical technique as Apple's iOS icons: curvature builds gradually from zero rather than snapping to a circular arc. The result is imperceptibly smoother, but that extra care compounds into a sense of quality you feel before you can name it. The ring structure signals openness: Xenopic is a channel, not a container.

02

The X Mark

The platform mark, set inside the window. Bold strokes, unambiguous identity. It anchors Xenopic to the specific creative ecosystem it serves — the X (Twitter) creator network. The X is not drawn with uniform width; its varying stroke weight gives it the same dynamic character as a handwritten signature: decisive but human.

03

The Publisher's Seal

A small squircle nested in the top-right corner of the frame — the traditional position for a quality mark, a registration badge, a seal of authentication. It represents the publisher: the creator who earns by making their banner a canvas for sponsorships. It is also the widget — the smallest unit of content, the thing that earns. Subtle but structurally load-bearing: remove it and the mark loses its second story.

Name

Why "Xenopic"

Xeno (Greek: xenos — foreign, from outside) + Pic (picture). Foreign data — Stripe revenue, GitHub commits, follower counts — transplanted into an image on your profile. A xenograft for your banner: tissue from a different platform, living natively where people look first.

Philosophy

Design Principles

Five beliefs that shape every product decision. Not aspirational — these are constraints. If a choice violates a principle, it doesn't ship.

01

Precision is kindness

Every pixel that is exactly right saves the viewer a moment of cognitive work. We optimize for zero friction between seeing and understanding. Sloppy alignment is a tax on the reader.

02

Motion reveals structure

Animation exists to show relationships — what belongs together, what leads to what. A transition that makes spatial sense costs nothing; one that surprises costs trust. Springs, not tweens: physics-based motion matches physical intuition.

03

Restraint is a feature

Remove things until removing more would lose meaning. White space is not empty — it is breathing room for ideas. Every element on screen is an implicit promise that it matters. Break that promise and you erode trust.

04

System over style

Beautiful products are not designed element by element. They are born from coherent systems: tokens, not values; patterns, not one-offs; components, not pages. Consistency scales. Style decisions do not.

05

Earn every curve

The squircle's continuous-curvature corners take more effort to get right than a CSS border-radius. The wordmark uses a real display typeface rather than a system font. These choices are invisible to most users — but they compound into a sense of quality that's felt before it's named.

Guidelines

Do's and Don'ts

These rules protect the integrity of the mark. When in doubt, ask — don't improvise.

Do

Use on solid backgrounds

Place the mark on backgrounds with sufficient contrast. Light mark on dark, dark mark on light.

Do

Maintain clear space

Always preserve the built-in 10% margin. In contexts with existing padding, no additional space is needed.

Do
xenopic-mark.svg

Use provided SVG files

The brand SVG uses G2 continuous-curvature corners. Never recreate the logo from scratch — always start from the provided files.

Don't

Don't stretch or distort

The mark is square. Never scale it non-uniformly. A wide or tall logo is not a Xenopic logo.

Don't

Don't add effects

No drop shadows, glows, gradients, or outlines on the mark. The logo speaks for itself.

Don't

Don't use on low-contrast backgrounds

A 3:1 contrast ratio is the minimum. Never use the dark mark on a dark background or vice versa.

Source

Logo Generation

The Xenopic mark is generated programmatically using the figma-squircle algorithm (s=0.6) for continuous-curvature corners. The script below produces the canonical SVG path data.

gen-logo.mjsNode.js — requires figma-squircle
import { getSvgPath } from 'figma-squircle';

function translate(path, tx, ty) {
  return path.replace(/([ML])\s+([\d.-]+)\s+([\d.-]+)/g,
    (_, cmd, x, y) => `${cmd} ${+x + tx} ${+y + ty}`);
}

const sq = (w, h, r, tx, ty) =>
  translate(getSvgPath({ width: w, height: h,
    cornerRadius: r, cornerSmoothing: 0.6 }), tx, ty);

// Outer ring (frame) + inner void (evenodd = ring)
const ring  = sq(67.2, 67.2, 12.7, 16.4, 16.4);
const inner = sq(61.6, 61.6,  9.9, 19.2, 19.2);

// Small squircle (publisher's seal)
const seal  = sq(13.7, 13.7,  3.7, 62.3, 22.6);
const sealInner = sq(9.9, 9.9, 1.8, 64.2, 24.5);

// X mark (scaled into center)
const xMark = 'M178.57 127.15 290.27 0h-26.46l-97.03 ' +
  '110.38L89.34 0H0l117.13 166.93L0 300.25h26.46l' +
  '102.4-116.59 81.8 116.59h89.34M36.01 19.54H76.66' +
  'l187.13 262.13h-40.66';

// viewBox "8 8 84 84" → 10% clear space, 80% logo fill
console.log(`<svg viewBox="8 8 84 84">
  <g fill="currentColor">
    <path fill-rule="evenodd" d="${ring} ${inner}"/>
    <path fill-rule="evenodd" d="${seal} ${sealInner}"/>
  </g>
  <g fill="currentColor" transform="translate(35,40) scale(0.1)">
    <path d="${xMark}"/>
  </g>
</svg>`);