Design System

The Solid Billa system

The shared language behind the blog — colour, type, spacing and components in one place. It exists to keep every page unmistakably Solid Billa: dark and calm, one bold yellow, a single clean type pairing, and a tight set of reusable tokens.

Foundations

Principles

01

One accent, no exceptions

The yellow carries every bit of emphasis. If something needs to stand out, it goes yellow — never a new colour.

02

Two typefaces, one scale

Sora for headings, Inter for everything else, sized only from the scale below. No one-off font sizes in components.

03

Dark, calm, confident

Three slates for depth, generous space, soft body text. Let the cat and the yellow be the loud parts.

04

Tokens first

Reach for a token before a raw value. New value? Add it to the system here, do not scatter it.

Colour

A four-group palette

Surfaces for depth, two text levels, one accent, two line weights. That is the whole system — no stray hues.

Surfaces

Three dark slates, never more. Depth comes from these, not from new hues.

Background --color-bg #2a323f The page
Surface --color-surface #1e252f Header, cards, panels
Surface alt --color-surface-alt #232b37 Layered sections, inputs

Text

Two levels do the work. Body copy is primary at 85% so long reads feel softer.

Primary --color-text #f4f4f5 Headings + key copy
Secondary --color-text-muted #9ca3af Meta, captions, muted
Body --color-text-body 85% primary Long-form reading

Accent — the one brand colour

The yellow does ALL the emphasis: links, focus, primary actions, highlights. There is no second accent.

Yellow --color-accent #fcd34d Links, focus, CTAs, highlights
Yellow / hover --color-accent-hover #f59e0b Hover + pressed
On accent --color-on-accent #1a1a1a Text on yellow

Lines

Border --color-border 8% white Dividers, card edges
Border / strong --color-border-strong 15% white Inputs, emphasis
Typography

Sora × Inter

Sora gives headlines a clean, confident geometry; Inter keeps body copy effortless to read. One scale, eight steps — pick from it, never around it.

Display · Headings Sora AaBbCc · 123 · &?!
Text · Body & UI Inter AaBbCc · 123 · &?!
Display --text-4xl Sora · 800
The Solid Billa
Heading 1 --text-3xl Sora · 700
Notes on better design
Heading 2 --text-2xl Sora · 700
Hierarchy you can feel
Heading 3 --text-xl Sora · 600
Why pairing matters
Body large --text-lg Inter · 400
A lead paragraph opens a post with a calm, readable voice.
Body --text-base Inter · 400
The default reading size. Good type gets out of the way and carries the reader to the end.
Small --text-sm Inter · 400
Jun 14, 2026 · 5 min read
Caption --text-xs Inter · 600 · uppercase
Design
Layout

Spacing & radius

A 4px-based spacing scale and three corner radii keep rhythm and shape consistent across the site.

Spacing

--space-1 4px
--space-2 8px
--space-3 12px
--space-4 16px
--space-6 24px
--space-8 32px
--space-12 48px
--space-16 64px

Radius

--radius-sm 2px
--radius-md 3px
--radius-lg 5px
--radius-full pill
Components

Building blocks

The canonical pieces, built only from the tokens above.

Buttons

One primary (yellow) per view. Secondary for the alternative, ghost for low-priority.

Search bar

Icon sits inside the field; the focus ring is the accent. Mirrors the header search.

Text field & textarea

Inset background, strong border, accent on focus. Same recipe for both.

Select

Native select, restyled with a custom chevron. Use for short option lists.

Toggle

For instant on/off settings. On = accent track, knob slides right.

Checkbox

Multi-select / opt-in. Checked = accent box with a dark tick.

Radio

Exactly one from a set. Same colour language as the checkbox.

Tags
#design #ux #ai

Topic labels — sharp, low-contrast, never the loudest thing on a card.

Badges
New Draft 12

Tiny status markers. Accent for "new", muted/outline for neutral counts.

Avatar
SG UX

The one place we keep full roundness. Image, or initials as a fallback.

Progress

Reading progress, uploads. Accent fill on a faint track.

Tooltip
Hover me

A few words of hint on hover / focus. Never essential information.

Breadcrumb

Locate the reader in deep pages. The current page is text, not a link.

Pagination

Current page = accent. For long archives and tag lists.

Tabs

Switch views in place. The active tab carries an accent underline.

Callouts
NoteA neutral callout for asides, tips and context.
Heads upAn accent callout for the one thing that really matters.

Two only — neutral and accent. No red / green; the system has one colour.

Accordion
What is The Solid Billa?
A design blog by a UI/UX designer, vibe-coded with AI — dark, yellow, and opinionated.
Is it free to read?
Always. No paywall, no ads, no tracking.

Built on native <details> — works without JavaScript. Use for FAQs and long lists.

Blockquote
Good type gets out of the way. It carries a reader from the first line to the last without friction. — The type review

Accent left-rule for pull-quotes inside posts. Keep them short and punchy.

Card
Design

A reusable post card

Jun 14, 2026 · 5 min read

Surface + hairline border, sharp corners, image on top. The workhorse of the homepage.

Table
TokenValueUse
--space-416pxDefault gap
--radius-md3pxButtons, inputs
--text-base1remBody copy

Quiet rows, accent-free headers, hairline dividers. For specs and comparisons.

Rich content

Blog formatting

Every element a post can use — headings, lists, quotes, code, images, tables, callouts — styled once here, ready to roll into the article prose.

This is a lead paragraph — a little larger and softer, it sets up the piece and pulls the reader in.

A section heading

Body copy in Inter at a comfortable measure and line-height. You can bold a phrase, emphasise another, drop an inline link in the brand yellow, or mark a bit of inline code — all without breaking the rhythm of the read.

  • An unordered list with a sharp accent marker
  • Each item kept tight and readable
  • Best for non-sequential points

A sub-heading

  1. Ordered when sequence matters
  2. Numbers carry the accent colour
  3. Steps, rankings, recipes

A blockquote for a line worth pausing on — accent rule on the left, set in the heading face.

astro
// fetch a post and its reading time
const post = await getEntry('posts', slug);
const minutes = readingTime(post.body);

Inline snippets like npm run dev sit in the body, and you can press K to search.

Images run wide with a muted, centred caption underneath.
ToolWhat I use it for
FigmaDesign + prototyping
ClaudeBuilding the site
NoteA callout for tips and asides inside a post — neutral surface, accent rule.

And a closing paragraph after the divider, wrapping the piece up.