Brand library

One system, every frame.

Colours, fonts, grid, logo, components and tone of voice for fabiostaiano.it, the Lab (my experiments), the newsletter and social media. This is my brand library: the values are written in the tables. At the bottom there’s a blank kit to download and build your own.

First of all

Rules

Eight rules that never break.

  1. Dark onlySite, social and promo: one dark theme, no switcher. The system’s high contrast and forced colours are respected.
  2. One accentBlue or yellow, never both up front.
  3. Colour in the visualsNever in small text. Text and graphics never share a colour.
  4. Biggest gets the most contrastWhite headline, grey secondary text, smaller mono labels.
  5. The avatar signs, the photo introducesThe face of the brand is the avatar logo. A real photo appears only in the About section.
  6. Accessible by rule4.5:1 contrast, 44 px targets, reduced motion respected.
  7. Centred on the glyphsText in a tile is centred on the letterforms.
  8. Light and vector firstSVG for logo, icons and graphics. Raster only for photos and covers, WOFF2 fonts, no third-party scripts.
Foundations

Colour

Cool neutrals, one blue, colour only for visuals.

Brand blue
#2B2BEA
logo · newsletter · toast shadow

Dark theme · the only one

paper#0F1015page background
wash#1B1D25surfaces
line#2C2F39borders
muted#A0A4B0secondary text
ink#ECEDF2text and headings
link#8F8FFFlinks and focus

Visuals only · never for small text

yellow#FFC53Dtrophies, keyword
lilac#8F8FFFchips, illustrations
coral#FF7A66chips, illustrations
green#2DD4A7chips, illustrations
pink#FF6EB4glows, illustrations

Measured contrast

PairContrastUse
ink on paper16.25:1main text
ink on wash14.38:1text in cards and panels
muted on paper7.63:1secondary text and labels
muted on wash6.75:1labels in cards
link on paper6.82:1links and focus outline
white on blue7.97:1newsletter and logo tile
line2 on paper2.29:1only in drawings, never for a border you need to understand the page

Thresholds: 4.5:1 for text, 3:1 for large headings and for borders you need to understand the page. Calculated with the WCAG 2.1 formula on the values of the theme.

Foundations

Typography

Wide to shout, narrow to explain.

Anybody 900 · wdth 140Lab
Anybody 800 · wdth 100I rebuilt my website.
Instrument Sans 400I design digital products and teach how to design them with AI. Every method I try becomes a lesson.
Martian Mono 500Experiment 01 · fabiostaiano.it · 1/4

Scale

RoleTokenFont and weightSizeLine heightUse
Page titlefluidAnybody 800 · 900 on the homefluid, clamp in DESIGN.md0.86–0.95one per page, at the top
Section titlefluidAnybody 800fluid, clamp in DESIGN.md0.98opens each section
Card title--fs-cardAnybody 700 · wdth 9626 px1.1cards, roles, groups
Small heading--fs-title-sAnybody 70020 px1.2rules, entries, dialog titles
LeadfluidInstrument Sans 40016–22 px1.5under a heading, within 42 characters
Body--fs-textInstrument Sans 400 · 60018 px1.6running text, within 64 characters
Interface--fs-uiInstrument Sans 400 · 60016 px1.5buttons, fields, menus, cards
Note--fs-noteInstrument Sans 40014 px1.5captions, notes, footer
Label--fs-labelMartian Mono 500 · uppercase12 px1.5above headings, in tags, code
Sizes in drawingsMartian Mono 50010 px1only inside illustrations

All other text uses the six fixed sizes, with their token. Declared exceptions: the name in the bar (18 px, part of the logo), measures inside drawings (10 px), samples inside pages, the book block (with its own sizes) and the hidden games. No interface text below 12 px.

Foundations

Grid and spacing

One grid, multiples of 4.

Grid

  1. One container, one edge.1120 px at most, with 16-56 px on each side. The bar runs edge to edge, content and footer start from the same margin.
  2. Three breakpoints.560, 760 and 1100 px. A different value belongs to one component only and lives next to it.
  3. Space is counted.14-20 px between the cards of a grid. A section gets at least 48 px above and below.

Spacing · multiples of 4

--s-14
--s-28
--s-312
--s-416between the cards of a grid
--s-524
--s-632
--s-748above and below a section
--s-864
--s-996
--s-10128
Foundations

Shape and depth

Sharp corners, one shadow.

Radii

--r-ui0Buttons, fields, toasts and dialogs. The interface is square.
--r-pill999 pxTags and chips, the mono pill.
--r-tile20%Icon tiles: logo and trophies.
--r-window18 pxWindows and mockups, only in social graphics.

Shadows · just one, hard and blue

--shadow-hard6 px · blueToasts, the bar menu and cards on hover. Always in the brand blue, never the link blue.
--shadow-dialog10 px · blueDialogs. The same shadow, further away.
--shadow-softSoft · 50% blackOnly in social graphics and on the logo tiles.

Layers

z-index: 50BarAt the top, above the page.
z-index: 60Skip linkAbove the bar, when it takes focus.
z-index: 80ToastAbove everything else on the page.
showModal()DialogIn the browser's top layer, with no z-index.
Foundations

Motion

One gesture, one scene.

  1. Quick at the start, soft at the end.One curve for everything: it starts fast and settles gently, like a hand putting down a card.
  2. Three timings.0.2 s for borders and colours, 0.35 s for fades, 0.5 s for drawings. With reduced motion they stop.
  3. Only the drawing moves.On hover, on focus and, on touch, at mid-screen. The other cards fade to 0.4.
Interface

Components

Square in the interface, round in the visuals.

Buttons · radius 0Read the storySkip the story
Newsletter sectionFuori Frame
Trophy toast · hard blue shadow
Trophy unlockedFirst frame
Bar menu · hard blue shadow
Free for youFuori FrameToolsDesign system
LanguageIT · EN
Trophies · 20% tiles
???
Tag · mono pill
designAIcode

Button states

Read the storyRestFilled, sharp corners.
Read the storyHoverOpacity 0.86.
Read the storyFocus2 px --link outline, 3 px away.
DisabledOpacity 0.5 and a sentence that says why.

Button: anatomy and variants

Read the storyAnatomyInstrument Sans 600, 16 px. Padding 14 × 24 px, at least 44 px tall. 1.5 px border, radius 0.
Read the storyFilled--ink background, --paper text. One per block: the main action.
Skip the storyOutlineTransparent, --ink text, --muted border that turns --ink on hover. The alternative next to the filled one.
SubscribeOn blueIn the newsletter section the filled button turns white with blue text.
<button class="btn" type="button">Read the story</button>
<a class="btn ghost" href="#work">Skip the story</a>

Field: states

name@studio.comSubscribeRest1.5 px border, placeholder in solid --muted.
name@stuSubscribeFocus2 px --link outline, 2 px away.
name@studioSubscribe

Write a full email address, like name@studio.com.

Error3 px outline and a sentence below saying what to do. No red.
name@studio.comSubscribe

One moment…

WaitingThe button is disabled until the answer comes back.

You’re in.

DoneThe field gives way to the confirmation and the next step.

At least 44 px tall, like the button next to it; on phones both go full width. The label is tied to the field with for and id. An error sets aria-invalid="true" on the field and puts the sentence in a paragraph with role="status", so screen readers read it.

<form class="ff-form" novalidate>
  <label for="email">Your email</label>
  <input id="email" name="email" type="email" autocomplete="email" required aria-describedby="note">
  <button type="submit">Subscribe</button>
  <p id="note" role="status"></p>
</form>

The kit is on the design system page.

In body text--link colour, underlined.

ToolsDesign system

In the menu and footer--ink, weight 600; on hover --link, underlined 4 px below. 44 px tall hit area.

/Tools/Mockup 3D

BreadcrumbsMono 12 px uppercase in --muted; the last item is the page and is not a link.

Focus: 2 px --link outline, 2 px away, like every other element.

When to use what

Trophy unlockedFirst frameToastShort news that asks nothing. It never interrupts and never carries an error.
×DialogWhen you need to read or choose before moving on. It closes with × or Esc.
name@studioWrite a full email address.Message under the fieldForm errors and confirmations, where the eye already is.
404Back to the home page →404 pageWhen the address doesn’t exist: it says what happened and shows the way back.

Icons

Size16 px next to text, 20 px in tiles, 24 px on their own, on a 24 grid. 1.5 px stroke in currentColor.
Close× in a 44 px square, 1.5 px --line border. Its name goes in aria-label.
Read the guide →ArrowsCharacters (← →) next to the text, not icons.

The SVG always has aria-hidden="true". No external set: a few icons drawn here.

<button type="button" aria-label="Close">×</button>
<svg viewBox="0 0 24 24" width="24" height="24" fill="none"
     stroke="currentColor" stroke-width="1.5" aria-hidden="true">…</svg>

Bar and footer

Bar58 px tall (--top-h), edge to edge with --gutter at the sides, --paper background at 86% with blur, layer --z-bar. Logo 26×28 px and name in Anybody 700 18 px; mono 12 px breadcrumbs; 32 px menu with a 44 px area.
Footer56–96 px above, a --line rule; then the door row and a three-column grid (one on phones) opened by the strong --ink rule. Mono 12 px --muted headings, --ink 600 links 44 px tall, mono 14 px email with Copy.
Where they come fromOne function for every page: bar() and footer() in componenti.py, CSS in componenti.css. The home uses the same footer; its bar is the animated version, with the same measures.
import componenti as C
C.bar('en', crumbs=[('Tools', '/tools/'), ('Mockup 3D', None)])
C.footer('en')

Theme

Dark onlyOne theme on every page: no light mode, no automatic mode, no switcher in the menu.
First paintEvery page declares color-scheme dark and theme-color #0F1015: browser bar and native controls are dark from the start.
System preferencesOnly for people who turn them on. With “Increase contrast” secondary text and borders get stronger; with Windows high contrast the system picks the colours and the drawings on the stage stay as they are.
Pages to readNewsletter issues and the privacy notice sit in an article: the browser’s reader mode opens them in its own colours, light included.

Tools

Full screenNo footer: the bar at the top and the tool. Same tokens and same menu as the site.
CommandsThe “?” at the top left opens the commands; the last line is “Read the guide”.
GuideThe last drawer: what it does, how to use it, questions. How to fix a mistake lives only in the results.
DrawersOn a phone, one opens at a time.
Brand

Illustrations

One idea, one blue lead.

Yes and no

  1. Tools of the craft, not icons.A selection with handles says design. A light bulb says anything at all.
  2. People: the logo or a cursor.The avatar logo on a blue tile and grey cursors. Never colourful stick figures.
  3. One lead, in flat colour.One blue, the rest grey. No rainbows, gradients or soft shadows.

The eight rules

  1. 01Always on the stage.The drawing sits in a dark box with a dot grid every 12 px. A mono number in the top left corner when drawings come in a series.
  2. 02One idea, a few big objects.The drawing tells one thing with a few objects that fill the box. No scenes, no decoration around them.
  3. 03One blue lead, the rest grey.Blue goes to one object only, the one making the gesture. Everything else stays in the dark theme greys. A visual colour can replace the blue, never sit next to it.
  4. 04Tools of the craft, not icons.Draw with what a designer sees: real glyphs, dashed selections with handles, guides, Bézier curves, cursors, tiles, measurements. No stock icons such as light bulbs, gears, rockets or speech bubbles.
  5. 05People are the logo or a cursor.Fabio is the white avatar logo on a blue tile, or a cursor with his name. Everyone else is a grey cursor. Never stick figures or generic people.
  6. 06Solid shapes, sharp corners.Rectangles and circles in flat colour, no gradients, no shadows. Strokes only for guides, dashes and curves. Rounded corners only on tiles and chips.
  7. 07Inside, only measurements and names.Grey uppercase mono labels, like 44 PX, ×10 or 07 / 40, or one big glyph in Anybody. Never sentences: the drawing works in any language.
  8. 08The gesture tells the idea.On hover the lead makes the gesture of the idea, it grows, settles, nods or presses, and the rest fades or moves aside. One looping motion at most.
Brand

Tone of voice

Short, concrete, first person.

  1. 01I talk, to you.First person singular, and the reader is “you”. No corporate “we”, no “the user”.

    “Scroll and I’ll tell you how I got here.”

  2. 02Short sentences, one idea each.Headlines are a few words long and end with a full stop.

    “Tables.” “The method, live.”

  3. 03Two beats.The first sentence opens, the second one turns.

    “Tools change. The craft doesn’t.”

  4. 04Real things, not adjectives.Names, numbers, objects: spacer.gif, ten buttons, thirty times a second. If a sentence stands without an adjective, the adjective goes.

    “AI generates ten buttons in a few seconds. How many actually hold up?”

  5. 05Someone who tries, not someone who preaches.I tell what I tried and what held up, even when it didn’t work. AI generates, the designer decides. No promises, no stock enthusiasm.

    “AI generates and you decide.”

  6. 06One joke, then back to business.Self-irony about the craft and the past, never about the reader. One per block at most.

    “The client always wants a bigger logo.”

  7. 07Clear even when it’s boring.Privacy, confirmations and errors say what happens and what the reader does, without legalese.

    “Until you confirm, you get nothing.”

  8. 08The button says what happens.One verb, two words at most, addressed to the reader. Never “Click here” or “Submit”.

    Subscribe · Email me · Notify me · Download PNG

Like thisNot like this
Email meContact us
AI generates and you decide.AI is revolutionising design!
I’ve been teaching since 2016.15+ years of experience
Download PNGClick here
Until you confirm, you get nothing.The user will receive a confirmation email.

Words and punctuation

Channels

Social graphics

4:5, visual on top, text on the left.

fabiostaiano.it1/4

I rebuilt my website.
It only took me ten years.

Cover: a single keyword in yellow.

fabiostaiano.it2/4
??

Not your usual portfolio.

It’s my story to scroll through, with hidden trophies.

Inside slides: white headline on 2 lines, grey below.

A separate brand

learnfigmanow.com

Designing and Prototyping Interfaces with Figma

Third edition · Packt

Get the book
navy#192E5Fbackground
indigo#282179background
accent#DB3716buttons
text#2E2E2Etext
paper#F5F5F5background

Syne 800 and Open Sans, the characters from the cover. An identity of its own that never mixes with the site’s.

Files

Download the blank kit

Building this system took me a lot of work. The kit is the part that works for anyone, without my brand: the base rules already written, room for your choices and neutral tokens that work straight away. It's free, so you start from here, not from zero.

What it's for

With an AI assistantGive DESIGN.md to Claude, ChatGPT or Cursor with your website: it fills in the blanks, and from then on it designs and writes interfaces that follow your rules instead of making them up.
In Figmatokens.json becomes the file's variables, in light and dark. The rules are the base for your component specs.
In codetokens.css goes into the project: pages use the names, the theme changes the values.
With your teamOne file that says what to do and why. When someone asks “what colour is the button?”, the answer is there.

What's inside

DESIGN.mdEight base rules and the places to fill in. Five are the neutral rules of this page, without my brand; three are about method (focus, themes from the same tokens, a value used twice becomes a token).
tokens.css · tokens.jsonNeutrals in light and dark, a placeholder accent.

Licence CC BY 4.0: use it and change it as you like, at work and for clients too, crediting fabiostaiano.it. It covers the kit: the logo, the illustrations and the rest of my brand stay mine. The fonts I use are free on Google Fonts under the OFL licence, here is the text for each: Anybody · Instrument Sans · Martian Mono.

← fabiostaiano.it · Version of 20 October 2026