dadario.studio
Design system
Jedes Token, aus dem die Website gebaut ist, wird bei jedem Build direkt aus den Stylesheets gelesen. Die meisten kommen aus dem Figma-Export in tokens.css; die eigene Ebene der Website in global.css ist mit global.css markiert. Jeder Name und jedes Farbfeld lässt sich per Klick kopieren. Schalte im Header das Theme um, und die semantische Ebene wechselt mit.
Was das für dein Produkt heißt
Jede Seite dieser Website ist aus diesem System gebaut. Farben, Typografie, Abstände und Motion liegen an einer Stelle. Sie werden aus Figma exportiert und bei jedem Build in den Code gelesen.
Ein Rebranding oder ein Dark Mode ist eine Änderung in einer Datei. Kontraste sind in beiden Themes gegen WCAG gemessen, die Tabellen unten zeigen die Werte. Wer als Nächstes ins Team kommt, startet mit Dokumentation.
- 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 wird nicht als Textfarbe auf Background verwendet. Der Vollständigkeit halber aufgeführt.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
Vogt Nyx: „Büß du ja zwölf Qirsch, Kämpe!“
14px
13 → 14
Vogt Nyx: „Büß du ja zwölf Qirsch, Kämpe!“
16px
14 → 16
Vogt Nyx: „Büß du ja zwölf Qirsch, Kämpe!“
18px
16 → 18
Vogt Nyx: „Büß du ja zwölf Qirsch, Kämpe!“
20px
18 → 20
Vogt Nyx: „Büß du ja zwölf Qirsch, Kämpe!“
24px
20 → 24
Vogt Nyx: „Büß du ja zwölf Qirsch, Kämpe!“
30px
24 → 30
Vogt Nyx: „Büß du ja zwölf Qirsch, Kämpe!“
36px
28 → 36
Vogt Nyx: „Büß du ja zwölf Qirsch, Kämpe!“
60px
36 → 60
Vogt Nyx: „Büß du ja zwölf Qirsch, Kämpe!“
96px
72 → 96
Vogt Nyx: „Büß du ja zwölf Qirsch, Kämpe!“
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