dadario.studio
Design system
Every token the site is built from, read straight out of the stylesheets on each build. Most come from the Figma export in tokens.css; the site’s own layer in global.css is marked global.css. Click any name or swatch to copy it, and switch the theme in the header to watch the semantic layer change.
What this means for your product
Every page of this site is built from this system. Colours, type, spacing and motion live in one place. They are exported from Figma and read into the code on every build.
A rebrand or a dark mode is a change to one file. Contrast is measured against WCAG in both themes; the tables below show the values. Your next hire starts with documentation.
- semantic colours
- 49
- ramp steps
- 154
- fluid type steps
- 10
- site tokens
- 30
Colour
Components use the semantic layer. Each name points at a ramp step per theme, so one class works in light and dark.
Semantic layer
Surfaces
ds-slate-50#eff4f8ds-slate-dark-950#0b1214ds-slate-100#dae7f0ds-slate-dark-900#151f22ds-slate-100#dae7f0ds-slate-dark-950#0b1214ds-slate-300#91b9ceblack#000000ds-slate-200#b3d0e1ds-slate-dark-800#263539rgb(20 29 33 / 0.8)rgb(0 0 0 / 0.7)Text
ds-slate-950#141d21ds-slate-dark-50#f1f8fads-slate-700#475d68ds-slate-dark-200#add9e5ds-slate-600#597381ds-slate-dark-300#91bdc9ds-slate-400#7fa3b6ds-slate-dark-500#64848cwhite#ffffffds-slate-dark-950#0b1214Lines & focus
ds-slate-200#b3d0e1ds-slate-dark-600#4e676eds-slate-300#91b9ceds-slate-dark-500#64848cds-slate-100#dae7f0ds-slate-dark-700#3b4f54ds-blue-600#3b83adds-blue-dark-200#64d1f8Brand
ds-indigo-700#3544dcds-indigo-dark-600#2844ffds-indigo-800#2633b1ds-indigo-dark-700#002bcfds-indigo-900#121a69ds-indigo-dark-800#001c95ds-indigo-100#e3e4fbds-indigo-dark-900#000e5fwhite#ffffffwhite#ffffffds-indigo-950#080e44ds-indigo-dark-300#a1a6ffds-indigo-300#abaef3ds-indigo-dark-200#bfc2ffprimary#3544dcds-indigo-dark-200#bfc2ffds-teal-200#71e8d6ds-teal-dark-200#8ce8d1ds-teal-300#66d3c3ds-teal-dark-300#80d5c0ds-teal-400#55b2a5ds-teal-dark-400#6bb3a1ds-teal-50#d2fcf4ds-teal-dark-900#0f211cds-slate-950#141d21ds-slate-dark-950#0b1214ds-blue-800#265a78ds-blue-dark-300#42b5dbds-blue-900#1c455dds-blue-dark-200#64d1f8ds-blue-100#d9eafbds-blue-dark-900#051e27white#ffffffds-slate-dark-950#0b1214primary#3544dcprimary-emphasis#a1a6ffStatus
ds-green-800#044f2dds-green-dark-300#00c160ds-green-900#003119ds-green-dark-200#00dd69ds-green-50#b1ffceds-green-dark-950#001307white#ffffffds-slate-dark-950#0b1214ds-orange-500#fd9d06ds-orange-dark-400#fe9656ds-orange-400#ffb067ds-orange-dark-300#ffb28eds-orange-100#ffede3ds-orange-dark-950#1e0e00ds-slate-950#141d21ds-slate-dark-950#0b1214ds-red-700#a80603ds-red-dark-300#fe8f99ds-red-800#740301ds-red-dark-200#ffb2bbds-red-900#480101ds-red-dark-100#ffe3e6ds-red-100#ffe1e1ds-red-dark-950#210003white#ffffffds-slate-dark-950#0b1214ds-blue-800#265a78ds-blue-dark-300#42b5dbds-blue-100#d9eafbds-blue-dark-900#051e27white#ffffffds-slate-dark-950#0b1214Contrast in use
The pairings the site relies on, measured against WCAG in both themes.
foregroundonbackgroundLight15.45:1AAADark17.60:1AAAforeground-mutedonbackgroundLight6.25:1AADark12.45:1AAAforeground-subtleonbackgroundLight4.52:1AADark9.30:1AAAaccentonbackgroundLight6.30:1AADark8.47:1AAAtertiaryonbackgroundLight6.73:1AADark7.98:1AAAprimaryonbackgroundPrimary is not used for text on background. Listed for completeness.Light6.30:1AADark3.03:1AA largeprimary-contrastonprimaryLight6.97:1AADark6.25:1AAsecondary-contrastonsecondaryLight11.58:1AAADark13.12:1AAAerror-contrastonerrorLight7.80:1AAADark8.64:1AAA
Contrast checker
Any two semantic colours, in both themes.
Light
Products founders trust
Small copy at the bottom of the type scale.
Dark
Products founders trust
Small copy at the bottom of the type scale.
Core ramps
Seven hues, each with a light and a dark ramp, reachable as bg-ds-indigo-700, text-ds-teal-200 and so on.
Marks a step the semantic layer points at. Hover or tap a step to read it.
slate
blue
indigo
teal
green
orange
red
Type
A fluid scale: each step grows with the viewport between two sizes, so headings need no responsive variants.
Scale
Every step interpolates between 375px and 1280px and holds outside that range.
12px
11 → 12
The five boxing wizards jump quickly.
14px
13 → 14
The five boxing wizards jump quickly.
16px
14 → 16
The five boxing wizards jump quickly.
18px
16 → 18
The five boxing wizards jump quickly.
20px
18 → 20
The five boxing wizards jump quickly.
24px
20 → 24
The five boxing wizards jump quickly.
30px
24 → 30
The five boxing wizards jump quickly.
36px
28 → 36
The five boxing wizards jump quickly.
60px
36 → 60
The five boxing wizards jump quickly.
96px
72 → 96
The five boxing wizards jump quickly.
Faces
Bricolage Grotesque opens sections, Quicksand carries everything else, JetBrains Mono sets code.
Aa
Bricolage Grotesque
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789
Aa
Quicksand
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789
Aa
JetBrains Mono
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789
Weight, line height and spacing
Pick a value from each scale to set the sample. The tinted band is the paragraph spacing; the site uses md.
Design and code from one hand.
Most projects lose quality at the handoff between design and development. Details get simplified and interactions get cut. One person owning both keeps them in the product.
The same holds for the data behind the interface. When one person handles both, the numbers on screen match the numbers in the product.
font-regular leading-normal tracking-normal space-y-(--paragraph-spacing-md)Space and layout
A 4px grid, a width scale of its own, and the sizes components are built to.
Spacing
Tailwind's spacing scale on a 4px base, so p-4 is 16px. These are the steps the Figma export names; values between them still work.
- 00px
- 14px
- 28px
- 2.510px
- 312px
- 416px
- 520px
- 624px
- 832px
- 1040px
- 1248px
- 1664px
- 2080px
- 2496px
- 32128px
Breakpoints
The dot is your window. Resize it to watch it cross them.
Your window: …
Widths
The max-w-ds-* scale. Namespaced because it differs from Tailwind's own steps.
- 320
- 384
- 480
- 560
- 640
- 768
- 1024
- 1280
- 1440
- 1600
- 1920
Layout
16px32px1280px720px- global.css
3.5rem, 4rem (md and up)
Component sizes
Heights for buttons and inputs, boxes for icons. Tailwind has no namespace for these, so components reach them through var().
button
input
icon
Borders
Shape
Corner radii and elevation. Mix them on the card.
- Radius
- 12px
- Shadow
- 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)
rounded-xl shadow-lgMotion
Figma carries no motion, so this layer is all the site's own: three curves, one duration scale, and a handful of small moves.
Easing
Tap a track to play one curve, or play all three at once. The duration applies to every curve.
Your system asks for reduced motion, so each puck waits out the duration and then jumps to the end.
cubic-bezier(0.32, 0.72, 0, 1)
cubic-bezier(0.4, 0, 0.2, 1)
linear(0, 0.0415 4%, 0.1447 8%, 0.282 12%, 0.4318 15%, 0.5784 19%, 0.7115 23%, 0.8249 27%, 0.916 31%, 0.9847 35%, 1.0329 38%, 1.0632 42%, 1.0789 46%, 1.0835 50%, 1.0801 54%, 1.0716 58%, 1.0601 62%, 1.0476 65%, 1.0354 69%, 1.0242 73%, 1.0147 77%, 1.0071 81%, 1.0013 85%, 0.9973 88%, 0.9947 92%, 0.9934 96%, 1)
Duration
- 150ms
- 250ms
- 400ms
- 650ms
- 900ms
- 1000ms
The language switcher runs one step down the scale: --dur-lang-fast is instant, --dur-lang-base is fast, --dur-lang-slow is base.
Distance and scale
The small moves the site repeats. Hover, press, focus or tap each one.
move-rise 1.5remComponents
The tokens put to work. These are the site's real components, not copies. The nav, language switch and theme toggle are live in the header.
Button
Four variants, three sizes, two shapes. Hover, press and tab through them; every state comes from the element itself.
Accordion
The FAQ's disclosure: native details and summary, with the height animated on --dur-base and ease-snappy.
What is a design token?
A named decision, such as a colour, a size or a duration, that code reads instead of a raw value. Change the token and every place that uses it follows.
Where do these come from?
Most come from the Figma variable export, generated into tokens.css. The rest are the site's own, written by hand in global.css, and are marked as such on this page.
Sweep link
The case study link. The label sweeps into the accent on hover or focus, and the arrow moves on when pressed.
Site layer
Everything global.css defines on top of the export, with its value per theme and breakpoint.
Colour
var(--ds-primary)darkvar(--ds-primary-emphasis)- dark
#506975 - dark
#35759c
Motion
cubic-bezier(0.32, 0.72, 0, 1)cubic-bezier(0.4, 0, 0.2, 1)linear(0, 0.0415 4%, 0.1447 8%, 0.282 12%, 0.4318 15%, 0.5784 19%, 0.7115 23%, 0.8249 27%, 0.916 31%, 0.9847 35%, 1.0329 38%, 1.0632 42%, 1.0789 46%, 1.0835 50%, 1.0801 54%, 1.0716 58%, 1.0601 62%, 1.0476 65%, 1.0354 69%, 1.0242 73%, 1.0147 77%, 1.0071 81%, 1.0013 85%, 0.9973 88%, 0.9947 92%, 0.9934 96%, 1)var(--dur-instant)var(--ease-gentle)150ms250ms400ms650ms900ms1000msvar(--dur-instant)var(--dur-fast)var(--dur-base)4px1.5rem0.981.04
Layout
3.5remmd and up4rem
Case study slider
0.150.550.28var(--color-ds-slate-950)darkvar(--color-ds-slate-dark-950)0.05
Hero halftone
var(--ds-accent)var(--ds-secondary-active)darkvar(--ds-secondary)0.82dark0.45
Utilities
Centred page shell whose gutter widens at md
Reading width for body copy
Typography for the legal pages and case study bodies
Chevron states for the accordion
The glow ahead of the mobile menu sheet
Oversized image layer that parallax moves inside
Darkens slider images away from the centre
Fades slider text away from the centre