Design System
The tokens, type, icons and components this site is built from. Rendered live from the same stylesheet the site uses — if it looks right here, it is right in production.
Logo
BvLogic = Birdview Logic. The mark is a colourful orb carrying a white B. It is used as artwork — never redrawn, recoloured or reconstructed.
Mark
Sizes 64 / 128 / 256 px. Header uses 64 at 32 px for crispness on 2× displays.
Lockup
Mark + wordmark, 9 px gap. "Logic" is upright and violet — not italic.
Wordmark spec
- font
- Plus Jakarta Sans
- weight
- 700
- size
- 21px
- tracking
- -0.03em
- accent
- #7c3aed (light) · #b794f6 (dark)
The lockup on dark
On light: ink wordmark, accent #7c3aed.
On dark: white wordmark, accent #b794f6.
The mark itself is unchanged — it carries its own colour and reads on both.
Rules
Do
- Use the supplied artwork at 32 px or larger
- Keep clear space of at least the mark's height on every side
- Swap only the wordmark colour between light and dark
- Use
mark-64.pngfor UI,mark-256.pngfor print or social
Don't
- Never redraw or reconstruct the mark. A simplified "B" is not the logo
- Never italicise "Logic" — it is upright
- Never recolour, outline, rotate or add effects to the orb
- Never place the mark on a busy photograph without a solid backing
- Never render the wordmark in a font other than Plus Jakarta Sans 700
Two earlier marks were rejected and must never appear: an
abstract node-cluster mark, and a plain swirl that read as a
"D". Files for both still exist in the v1 asset folder (logo.svg,
logo-dark.svg, mark.svg) and are excluded from the build. If you are
picking assets by filename, take them from src/assets/img/mark-*.png only.
Files
| File | Size | Use |
|---|---|---|
| mark-64.png | 64 px | Header, UI at 32 px on 2× displays |
| mark-128.png | 128 px | Cards, medium placements |
| mark-256.png | 256 px | Print, social, structured data |
| apple-touch-icon.png | 180 px | iOS home screen |
| favicon.ico | 16/32/48 | Browser tab, older browsers |
| og-image.png | 1200×630 | Link previews |
Colour
Brand violet, a cool neutral ramp tuned for long-form reading, and four semantic pairs. Every foreground/background combination in use meets WCAG AA.
Brand
Neutral
Semantic
Information the reader needs but that changes nothing.
A recommendation worth following.
Something that will cost you if ignored.
Data loss, outage, or a decision that is hard to reverse.
Typography
Plus Jakarta Sans for display, Inter for body — self-hosted, latin subset, no third-party request. Scale is a 1.200 minor third on a 16 px base. Body line-height is 1.7 and measure is capped at ~72 characters, because most of this site is long-form reading.
| Token | Size | Used for | Sample |
|---|---|---|---|
--t-4xl | 3rem / 48px | Hero | Ag |
--t-3xl | 2.25rem / 36px | h1 | Ag |
--t-2xl | 1.875rem / 30px | h2 | Ag |
--t-xl | 1.5rem / 24px | h3 | Ag |
--t-lg | 1.25rem / 20px | h4 | Ag |
--t-md | 1.125rem / 18px | Lede | Ag |
--t-base | 1rem / 16px | Body | Ag |
--t-sm | 0.875rem / 14px | Secondary | Ag |
--t-xs | 0.75rem / 12px | Meta | Ag |
Icons
One SVG sprite, referenced with <use>. 24×24 grid, 2 px
stroke, round caps, currentColor so they inherit text colour and are correct in
both themes automatically. Never unicode glyphs — those render differently on
every platform and cannot be weight-matched to the type.
Components
Buttons
Badges
The last two matter: a section that is not finished says so rather than pretending to be live.
Card
Form controls
Hint text sits below the control.
Theme & dark mode
Both themes are authored separately, not generated by inverting the light palette — inverted palettes produce muddy greys and blown-out accents. Dark mode is triggered by the OS setting and overridable by the toggle in the header; the explicit choice always wins, in both directions, and persists locally.
Resolution order
data-themeon the root element — the visitor's explicit choiceprefers-color-scheme— the operating system- Light
Applied tokens
- --bg
- page background
- --fg
- primary text
- --fg-muted
- secondary text
- --border
- separators
- --accent
- links and primary action
Use the control in the header to switch — this page re-renders in the other theme with no reload.
Accessibility rules
- Visible focus ring on every interactive element (never
outline:nonewithout a replacement) - Exactly one
<h1>per page — enforced by the build verifier - Every image carries an
altattribute — also enforced by the verifier - Icons are
aria-hidden; the accessible name lives on the control prefers-reduced-motiondisables the brand bar animation and smooth scrolling- Wide content (tables, code) scrolls inside its own container — the page never scrolls sideways