This page shows every token and every component in the file dist/levelwork.css, in every state, on black and on cream. It links that one file and nothing else. If something looks wrong here, it is wrong in the system.
The look is not new. It is what the current website and the current product pages do, written down once. Where pages disagreed, one variant was picked. Each such choice is listed in docs/decisions.md, so it can be overruled.
Websitetaken from the live siteProducttaken from the product pagesNewon no current page, drawn to match, needs a verdict
The button top right switches the whole page between black and cream. Components are also shown on both grounds side by side.
01Brand
The frame is the role as designed. The bar is the role as lived.
The bar starts inside the frame and breaks out on the right. The part that breaks out is the part nobody wrote down, and it is the only element in colour.
Every logo file on its ground
Eight SVG files ship in dist/logos/. The wordmark is converted to outlines, so no font is needed.
Lockup, colour levelwork-lockup.svg · for white, cream and other light groundsLockup, colour, dark ground levelwork-lockup-dark.svg · for black and other dark groundsLockup, one colour, black levelwork-lockup-mono-black.svg · pure black #000000, for one-colour printLockup, one colour, cream levelwork-lockup-mono-cream.svg · Cream #EDEAE2, not white
Mark, colour levelwork-mark.svgMark, dark ground levelwork-mark-dark.svgMark, black levelwork-mark-mono-black.svgMark, cream levelwork-mark-mono-cream.svg
The inline mark
In a header the mark is inline SVG with the class .mark. Frame and bar take the text colour and flip with the ground. The short bar is always the brand accent. Next to it the name is set as a mono label, not as the kit wordmark.
Levelwork.nav__brand › .mark · 26px
Constat by Levelwork.mark.mark--sm · 20px
Clear space
At least one mark height on all four sides, for the mark and for the lockup. The dashed line is that distance.
Mark 64px high, 64px of space around it.
Minimum size
On screen the mark is never smaller than 16px and the lockup never narrower than 120px. In print: 8 mm and 30 mm.
Mark · 16px
Lockup · 120px
Do not
Six ways to break the logo. Four of them need an inline style to do it. Apart from the lengths set on bars, those are the only inline styles on this page.
Do notrecolour it or any part of it.
Do notrotate it.
Do notstretch or compress it.
Do notadd a shadow, a glow, an outline or a gradient.
Do notput a light-ground file on a dark ground. It disappears.
Constat · Loop · Pricing
Do notset it below the minimum size or crowd its clear space.
02Colour
Black, cream and one orange. Everything else is a step between them.
Three brand colours come from the logo kit: Ink, Cream and Accent. The ramps below hold the values the pages already use around them. Each swatch prints the value the browser resolved, so the page cannot disagree with the stylesheet.
Ink ramp
Grounds, surfaces and lines on dark, text on cream. Utilities: bg-ink-700, text-ink-300, border-ink-600. Variables: var(--color-ink-700).
black
Dark ground
ink-900
Surface on dark, field ground
ink-800
Second surface on dark, bar tracks
ink-700 · Ink
Brand Ink. Text on cream, the mark
ink-600
Hairline on dark
ink-500
Field border on dark
ink-400
Secondary text on cream
ink-300
Muted text on cream
ink-200
Muted text on dark
ink-100
Secondary text on dark
Cream ramp
The light ground and its two surfaces. White is used for input fields on cream and nowhere else.
white
Field ground on cream
cream-100 · Cream
Brand Cream. Light ground, text on dark
cream-200
Surface on cream
cream-300
Second surface on cream, bar tracks
Accent ramp
The brand orange is 500. 400 and 600 are its hover and pressed steps. 600 and 700 exist because the brand orange on cream has a contrast of 2.77 to 1 and cannot carry text there.
accent-300
Reserve: accent text on a dark tint
accent-400
Hover of the primary button
accent-500 · Accent
Brand Accent. Button, bars, dots, the mark
accent-600
Pressed. Large accent text and focus ring on cream
accent-700
Small accent text on cream
accent-900
Resting underline of the mail link
Status colours
New
The current pages have no error colour. Orange means brand, action, selected, success and critical at once. These three pairs are proposed for errors, confirmations and warnings only. The 700 step is for cream, the 300 step for black.
danger-700
Error on cream
danger-300
Error on dark
success-700
Confirmation on cream
success-300
Confirmation on dark
warning-700
Warning on cream
warning-300
Warning on dark
Roles
Components never name a ramp step. They name a role, and the role points at a different step on each ground. Utilities: bg-surface, text-muted, border-line. Variables: var(--lw-surface).
ground
Page and band ground
surface
Raised cards, panels, the answer block
surface-2
Bar tracks, badges
field
Input ground
text
Running text, headlines
text-2
Secondary text
muted
Labels, captions, help
line
Hairlines, card borders
line-strong
Field and tag borders
accent
Fills: button, bar, dot
accent-strong
Large accent text, icons, accent borders
accent-text
Small accent text, links
accent-tint
Fill of accent boxes, 5 %
focus
Focus ring
danger
Errors
success
Confirmations
warning
Warnings
Text and ground pairs
Every pair the system offers for text, with the contrast ratio measured in this browser from the rendered colours. WCAG AA asks for 4.5 to 1 for text and 3 to 1 for large text (24px and up) and for graphic parts.
Text on ground
Text on surface
Text on surface-2
Text on field
Secondary text on ground
Secondary text on surface
Muted on ground
Muted on surface
Muted on surface-2
Muted on field (placeholder)
Accent text on ground
Accent text on surface
Accent text on accent tint
Accent strong on ground, large text only
Button label on accent
Button label on hover
Button label, pressed
Solid tag: ground on text
Danger on ground
Danger on surface
Success on ground
Success on surface
Warning on ground
Warning on surface
Not offered as text: the brand orange (accent) on cream, 2.77 to 1. On cream it fills buttons, bars and dots only. Hairlines and field borders are below 3 to 1 on both grounds by design of the look; see Open points.
03Typography
Two typefaces, two weights, no bold and no italic.
Space Grotesk carries headlines, figures, quotes and product text. Fragment Mono carries labels and, on the website, running text. Both are served from dist/fonts/. Emphasis is a change of colour, never of weight or slant, because neither file has a bold or an italic.
Space Grotesk
Aa
font-display · var(--font-display) · one variable file, weights 300 to 500 · in use: 300 and 400
Sizes are fluid: the token is a clamp, and the line under each sample prints what it resolves to at this window width. A heading tag has no size of its own. Pick the tag for the outline and the class for the look.
.displayWebsiteSpace Grotesk 400 · clamp(42px, 11vw, 124px) · line 0.98 · tracking 0.055em · the wordmark size, capitals typed
.h3WebsiteSpace Grotesk 400 · clamp(20px, 2.4vw, 27px) · line 1.18 · tracking -0.02em · sub headline
A deviation is not a verdict. It's a finding.
.h4ProductSpace Grotesk 400 · 16px · line 1.3 · card and finding headline
Coordination between sales and service has no owner on paper.
.claimWebsiteSpace Grotesk 400 · clamp(23px, 3.6vw, 42px) · line 1.14 · max 20ch · the sentence under the wordmark
A finding that changes nothing was just a well-written report.
.quoteWebsiteSpace Grotesk 300 · clamp(21px, 3.1vw, 34px) · line 1.26 · tracking -0.015em · max 24ch · quotation marks typed
“You cannot put an assessment in front of someone with forty years in the house and four months to go. You can only come with curiosity.”A managing director, in the first conversation
Text styles
.leadWebsiteFragment Mono 400 · 13.5px · line 1.72 · muted · max 64ch · the website lead: body text in muted, not larger
Two products, one arc. The first tells you where you actually stand. The second keeps that answer from going stale.
.lead-sansProductSpace Grotesk 300 · clamp(17px, 2.1vw, 22px) · line 1.42 · max 56ch · the larger lead of the product landing page
Two products, one arc. The first tells you where you actually stand. The second keeps that answer from going stale.
.bodyWebsiteFragment Mono 400 · 13.5px · line 1.72 · running text on the website
Org charts, role descriptions, job profiles. Written at one moment, then filed. Meanwhile the work moves. Someone quietly takes on the thing nobody else will.
.body.body--mutedWebsiteThe same in muted · most paragraphs on the website
Within two years the document and the work have little left in common. And every decision about people is still made from the document.
.body-sansProductSpace Grotesk 300 · 16px · line 1.5 · running text in the product, also the default of the body element
Think of last week. Which task took the most time that nobody would find in your job description?
.smallWebsiteFragment Mono 400 · 12px · line 1.5 · muted · form notes, help text, values
.scene-capWebsiteSpace Grotesk 300 · clamp(17px, 2.2vw, 25px) · line 1.25 · tracking -0.015em · max 26ch · the sentence next to a scroll-driven scene · one word may be marked with <b>
Wednesday. The calendar fills with work that is written down nowhere.
And the work the role exists for did not happen. Again.
get@levelwork.ai get@levelwork.ai .link-display · the mail link that closes a page, at rest and on hover · 21px on a phone, so it takes the small-text orange
Long documents such as the legal notice. Wrap the text in .prose and write plain tags.
Who is responsible for this site
This page explains which data the site processes when you visit it. The site sets no cookies and loads no fonts from a third party. Questions go to get@levelwork.ai.
What the contact form sends
Your name and your company, as you typed them.
Your e-mail address, so that we can answer.
The role you would start with.
Contact
get@levelwork.ai
Place
Konstanz, Germany
Icons
IBM Carbon glyphs, 32 by 32 view box, inline SVG, one colour. Five are in use: clock, arrow, group, chart, building.
.ico · 22px, accent
.ico.ico--muted
.ico.ico--sm · 14px
26 findings
.ico.ico--current · takes the colour of the text around it
04Spacing, radius, shadow, motion
Square, flat and unhurried.
Named spacing steps
The rhythm of a page. These are fluid and replace the fifteen different inline margins on the current website. The orange block is the step at this window width.
gutter clamp(20px, 5vw, 72px) · Page side padding
section clamp(64px, 10vw, 132px) · Top and bottom of a section
block clamp(34px, 5vw, 62px) · Headline to first block
break clamp(48px, 7vw, 90px) · Before a figure or a second block
stack 18px · Paragraph to paragraph
field 14px · Form field to form field
Numeric scale
Tailwind's scale, one unit is 4px. For gaps and padding between components: gap-4, mt-6, p-3.5.
1 · 4px
2 · 8px
3 · 12px
4 · 16px
5 · 20px
6 · 24px
8 · 32px
10 · 40px
12 · 48px
16 · 64px
20 · 80px
24 · 96px
Widths and breakpoints
Token
Value
Used for
max-w-page
1180px
.wrap, the page container
max-w-app
900px
.wrap--app, a report or a form page in the product
max-w-prose
74ch
.prose, legal text
max-w-lead
64ch
.lead
max-w-turn
60ch
.turn, one turn in the interview
max-w-form
520px
.form
sm:
560px and up
two-column details: four-field grid, marker rows
md:
860px and up
page layout: grids, the interview side panel
lg:
1180px and up
free for pages, no component uses it
Radius
Cards, boxes, pictures and tables are square. Only controls get 2px. Round is for dots.
rounded-none · 0 · cards, boxes, images
rounded-control · 2px · buttons, fields, chips
rounded-full · dots, the switch
Shadow
The look has no shadows. Depth is a hairline, a fill, or a picture under a gradient. One token exists for a box that stays put while content scrolls under it.
shadow-none · everything
shadow-sticky · .coverage--sticky only
Lines
.rule · 1px hairline between sections
.levelline · the one drawn orange line, fading at both ends
Motion
Two durations and one curve. Things change colour in 180ms. Things that enter or fill take 400ms on the curve cubic-bezier(.2,.8,.3,1). With reduced motion set in the system, all of it stops.
--animate-pop · 350ms · a card that was just captured
The drifting field
.glow · three blurred orange shapes behind a band, 26 to 33 seconds per pass
The drifting field on cream
.band--light › .glow · multiplies instead of screens, 20 % instead of 30 %
05Buttons and chips
One call to action. Black on orange, everywhere.
The website's button has a black label, the product's a white one. White on the brand orange is 3.3 to 1 and fails for an 12px label. The system takes the website's black, 6.31 to 1. The class works on <button> and on <a> alike.
Hover, focus and pressed are pinned here with the helper classes .is-hover, .is-focus and .is-active, so they can be compared without a pointer. Pages never use these classes. Hover, pressed and loading did not exist in the product; pressed and loading did not exist anywhere.
State
Primary
Secondary
Ghost
Destructive
Default
Hover
Focus
Pressed
Disabled
Loading
Disabled: the disabled attribute, or aria-disabled="true" on a link. Loading: aria-busy="true"; keep the label so the width holds.
Default
Hover
Focus
Pressed
Disabled
.btn.btn--text · hover and pressed are the same accent text; it has no fill that could go darker.
Copy the linka.btn.btn--ghost · aria-disabled="true"
A link has no disabled attribute. Set aria-disabled="true" and leave out the href, so the keyboard cannot reach it either.
Chips
Product
A button that stays pressed: role toggles, attribute pickers. Use aria-pressed. Selected is the accent with a black label. The product set it white.
.chip · aria-pressed="true" selects
.segmented › button[aria-pressed] · mode and language switch
Hover turns the label to the text colour. The focus ring sits inside the option, in the text colour, because the frame would clip a ring outside. Disabled is new.
Picker
Product
Choose one from a grid of named options. From the event demo, where a visitor picks the role to be interviewed in. Each cell is a button with aria-pressed.
.picker › button.picker__item › .picker__name + .picker__teaser · selected: aria-pressed="true" · hover is the accent tint
06Form fields
A label above, mono inside, and an error that says what is wrong.
Text field and text area come from the website's contact form. Select, checkbox, radio, switch, help and error text are new: today an error is written into the grey hint line and looks like help.
Not sent. The connection dropped. Your text is still here, send it again.
.form__note.form__note--error · the same line when sending failed, in place of the confirmation
Field states
Focus turns the border accent and doubles it to 2px. The website only changes the 1px border colour.
Text area states
Too short to work with. One full sentence is enough.
.textarea in the same six states as the text field, drawn at the height of .textarea--chat to keep the grid short.
Select states
Choose a size, so the offer fits.
.select has no read-only state, because the attribute does not exist for it. Show a fixed choice as a read-only text field.
Checkbox, radio, switch
New
Settings
.choice › .switch · input[role=switch]
Hover darkens the border to the text colour. Invalid turns it to the danger colour and needs an error line under the group, as for a field. The switch has no invalid state.
The surface colour as ground. The product's report card.
.card--raised
Accent
For the one thing on a screen that must be seen: a share link, a result that is ready.
.card--accent
Tags and badges
The pages had five looks for a small status marker. Two remain. A tag is an outline label on a thing. A badge is a filled marker for a count or a state.
Only the accent notice has a precedent, the product's info banner. The status versions are new. Each carries a title in words, so colour is never the only signal.
Note
Your answers are saved after every turn. You can close this window and come back.
How this conversation is used
Nothing you say here can be used to rate you. The result describes the role, not the person.
Sent
The invitation went to three people. You will see their answers here.
Link expires in two days
Two of five invited people have not answered yet.
Not saved
The connection dropped while sending. Your text is still in the box. Send it again.
The product shows these as a bare line of text, different on every page. One line inside a panel stays (.empty). A block that replaces content is new (.state).
Nothing captured yet.
.empty · one line in a panel or a cell
No interviews yet.
Start with one role. The first finding appears here about an hour after the conversation.
One appointment in a drawn week, from the scroll sequence on the Constat page. The sequence itself stays page code. The chip and its legend are system parts and work on cream too, which the website version did not.
How a deviation is drawn: the role as designed is an outline, the week as worked is a fill, what runs past the plan is orange, and what falls short of it is a dashed orange outline. From the second scroll sequence of the Constat page.
Bands of black and cream, one container, two grids.
Header
Two forms of one component. On the website it sits open on the hero. In the product it is a bar with a rule and a slot on the right. Neither is sticky and neither has a mobile menu; the links wrap.
The key badge of the interview header is a .tag in the .nav__meta slot. It says whose model key the conversation runs on. .tag--accent marks the customer's own key.
Footer
The website had four versions of the left side and the product had no legal links at all. One footer: mark and name as a link home, legal links and place on the right.
.footer › .footer__inner › .footer__brand + .footer__links (a, .footer__note) · second link shown in hover
Section header and two-tone headline
02The method
From assumption to evidence.
The role as it was designed. The week as it is actually worked.
The five steps of Loop in one row, each with a bar that shows how much of the gap is left. Five across from 860px, wrapping below. On the website the caption is the original German term of the step.
Who is behind it, at the foot of the home page. The label is the person's name on the website. This page prints the part each one plays, because it carries no names.
Method and delivery
Spent years inside other people's companies with the same brief under changing names: make this fit for what comes next. Every time, the work began the same way: by finding out what people actually do. Levelwork is that beginning, made repeatable.
Design and language
Shapes how Levelwork looks and reads. The brochure, the visual system, and the way a finding is laid out so that it can be understood before anyone explains it.
.person › .lbl.lbl--accent + .body.body--muted · two in a .grid-2.grid-2--top
Short hero and closing section
The hero without its height, for a page that opens with a headline and no wordmark, such as the legal pages. And the section that closes every page: a rule on top, a label, a headline and the mail link.
We take one role from your organization, capture the profile and the reality, and show you the difference. Then you decide whether the whole team should follow.
The page container is this column, 1180px. The product column is 900px.
You are filling six roles. Two of them are written down.
.wrap.wrap--app · 900px, centred, with the page gutter inside
Capture.
Compare.
Evidence.
.stack · 18px between children
Capture.
Compare.
Evidence.
.stack.stack--block · 34 to 62px, headline to first block
Capture.
Compare.
Evidence.
.stack.stack--break · 48 to 90px, before a figure or a second block
Hairline grid in two columns
Two cells side by side from 560px, one above the other below. On the Loop page this holds what exists today next to what is being built.
In use today
The cycle is delivered by hand inside client engagements: role profiles, structured interviews, development plans out of measured deltas, and follow-up through learning groups.
In development
The product version: the same cycle without a consultant in the room for every step, so that a company can keep its own picture current after we leave.
.hairgrid.hairgrid--2 › cells · .hairgrid alone fits as many 150px cells as there is room for
Helpers
Class
Does
.wrap · .wrap--app
Centred container, 1180px or 900px, with the page gutter
.band · .band--light · .band--dark
A full-width stripe that paints its ground and re-points every role colour inside
.theme-light · .theme-dark
The same switch for any box. On <html> use data-theme="light" or "dark"
.section · .section--cta
Top and bottom rhythm of a section; the closing section with a rule on top
.stack · .stack--block · .stack--break
Vertical gap between children: 18px, the block step, the break step
.cluster
A row that wraps, 12px gap: buttons, tags, chips
.hairgrid · .hairgrid--2
Cells divided by 1px lines with no gaps
11Images
Dark rooms, one band of orange, one person in focus.
Work is a blur of people, paper and motion, and somewhere in it one conversation is sharp. Pictures are cropped to a wide band, have square corners and are never shown at full strength. The three pictures here are small previews from the image library, so they are soft at this size.
Figure
The website shows a picture at 80 % so the ground comes through: darker on black, paler on cream. Both are shown. The modifier .fig--dark keeps the room dark on cream as well.
Present, and not identifiable.figure.fig › .fig__frame › img + figcaption.lbl
The picture is of the work, not the person.figure.fig.fig--dark · black behind the picture on any ground
Three levels. The level is printed as a word and also shown by the rail and the ground. The quote style is new: the product had none and set evidence in grey mono or in a slanted face the fonts do not have.
Critical · F-07
Coordination between sales and service has no owner on paper.
“Nobody asked me to, it just lands on my desk.”Interview passage 14:22 · observation, evidenced
If this person is away for two weeks, requests wait until someone notices. The work is real and it is in no role profile.
One stepName the task in the role profile and give it a share of the week.
Signal after 90 days: hand-overs on Monday take less than thirty minutes.
Needs a decision soon · F-11
Quotations are written by two people who do not know of each other.
Both describe the same task as theirs. Neither profile mentions it.
Worth watching · F-19
Onboarding of working students happens on Friday afternoons.
It works today. It depends on one person's free Fridays.
The list that closes a report: every comparison number with where it comes from.
Where the comparison numbers come from
63 % of current work falls outside people's core job descriptions.Deloitte, A skills-based model for work, 8 September 2022. 1,021 employees and 225 executives across ten countries. Open the source
One in two employees worldwide strongly agree that they know what is expected of them.Gallup Q12, item 1: knowing what is expected at work.
.sources › .lbl + ul.sources__list › li › .sources__claim + source text (+ .link)
Share link and invitation
Product
One block for two jobs: the link that brings a participant back to the same conversation, and the invitation to a second person. The product set the link bare on the tint in one and in a box in the other. The system takes the box.
After a click on Copy. The changed label is the only feedback today.
The invitation in its three states.
The half you cannot see
Everything above is your own account of your week. Ask one person who works closely with you which of these roles they actually see you filling, and the hypotheses turn into a picture.
1 · No link yet · .share.share--lg › .share__title + .share__text + .share__actions
The half you cannot see
Send this to your co-founder, or to whoever sits closest to your week. They see your roles without the percentages and mark what lands. Nothing else from this report is shown to them.
Come back to this page with the same email to see what came in.
2 · Link created · adds .code.code--box, two .btn.btn--ghost and a .small hint
The half you cannot see
Answered by two people. Everything above came from you. This part did not.
Seen by both of you
Customer escalations
Quotations
They see it, you never listed it
Go-to person for the new tool
You carry it, they did not name it
Team coordination
Seen by nobody yet
No entries.
Still open for more answers: https://levelwork.ai/m/c41t-8wzp
3 · Answers received · the same block around a .quad, with the open link as inline .code
Offer
Product
The paid step at the end of a report. The button leaves for an external checkout. What the page shows after payment, while it is pending or when it fails is not designed.
Go through this with us.
Sixty minutes on what this report actually found. We read your report before the session and come with questions about your roles, not with general advice.
€25060 minutes · one founder, one report
Which role to test first, and which blockade is real rather than habit.
What the inventory says about the next hire, before you write the job ad.
You get our first questions in writing beforehand. Reading them is half the value.
Without a checkout link the button opens a mail to us.
The fallback: same block, the button is a mail link
14Composed examples
Two screens, system classes only.
Neither example has a class of its own. The only style attribute is the value of the progress bar. The first is always black and the second always cream, whatever the page switch says, because that is where each one lives.
Marketing hero
The hero of the website, value for value, with one addition: the two buttons. The website hero has none. They are here to show the call to action in place and need a verdict.
You said the Monday hand-over is yours. Who asked you to take it on?
You
Nobody asked me to, it just lands on my desk. I have done it since the two teams were merged.
Levelwork
That is the third task today that is in no profile. Here is what I have noted. Tell me if it is wrong.
Critical · F-07
Coordination between sales and service has no owner on paper.
“Nobody asked me to, it just lands on my desk.”Interview passage 14:22 · observation, evidenced
One stepName the task in the role profile and give it a share of the week.
Levelwork
Saved after every turn.
15Open points
What this page cannot decide.
Every choice between two existing variants is in docs/decisions.md, one sentence each, numbered. These are the ones most visible on this page.
Decided for now, easy to overrule
Button label is black, as on the website. The product had white.
Orange text on cream is darker than the brand orange: accent-700 for small text, accent-600 for large figures and the focus ring. The brand orange itself fails contrast there.
Muted grey is one step stronger on both grounds than on the website, so that it passes on surfaces as well as on the bare ground.
The lead is not larger than body text, as on the website. A larger lead in the display face exists as .lead-sans.
Default ground is black. The product sets data-theme="light" on the page.
Pictures on cream turn pale. Shown as it is today; .fig--dark is the alternative.
Not designed yet
Tabs, modal or confirm dialog, toast, tooltip, pagination, avatar.
A sticky header and a mobile menu. Links wrap today.
Payment follow-up states: paid, pending, failed. The offer block ends at the button.
Feedback after copying a link, beyond the changed button label.
The two scroll-driven scenes of the Constat page as wholes: the week panel and the stage of bars. Their parts are here, the scenes stay page code.
The language bar above the chat and the row of meta chips of the event demo. A segmented control and tags would do both.
A table with row actions and sorting.
Field borders and hairlines are below 3 to 1 against their ground. A field is recognisable by its fill and label, but a stricter reading of the contrast rules would ask for a stronger border.
An italic or a second weight for emphasis. Neither font file has one.