Skip to content
SloplessTry the picker

Base style · contemporary · balanced

Desktop OS

The website as a friendly operating system: a menu bar, labelled desktop icons on a warm sage wallpaper, content inside app windows with title bars, tabbed panels on a bright strip and raised bevel buttons.

Moods
playful, friendly, technical, warm, retro
Suits
saas, devtools, ai, education, gaming, portfolio
Type
Onest

Principles

  • The page is a desktop: a menu bar on top, labelled icons on the wallpaper, every content section inside an app window
  • Windows are flat surface panels with a 1 px rule, an 8 px radius and a solid darker bottom edge; nothing floats on blur or soft glow
  • Buttons are raised keys: amber primary and white secondary, each with a thick darker bottom edge that presses down on hover
  • Write and lay out like good docs: checklists, ruled tables, changelogs and mono metadata, dense but friendly, with a cheeky aside
  • One rounded grotesk at 400–700 for everything, a mono for paths and status lines; colour is the amber key and one tab strip

Hard rules

  • No floating cards on a soft gradient, no glassmorphism, no blurred drop shadows: depth is only the 1 px rule and the solid bottom edge.
  • No three equal feature cards in a row; features are a tabbed panel, a file-explorer list or a docs checklist.
  • No centred hero over the wallpaper; the hero message is flush left inside a window.
  • No window without a title bar, and no title bar without its mono title.
  • No stock photos of people; imagery is product screenshots in windows, pixel-art icons and one cheeky pixel or cartoon mascot.
  • No second bright colour beyond the amber key and the tab-strip `accent2`; status meters use the accent.

Full page preview with sample copy, rendered from the same tokens and layout the agent receives.

For coding agents

Rules and live patterns

Every pattern Desktop OS owns, drawn by the same renderer as the picker with the style's default tokens and sample copy. Each has an anchor (#<pattern id>). A design's own DESIGN.md and tokens.json stay the source of truth; this page shows what the patterns look like.

Do

  • Treat the page background (`bg`) as the desktop wallpaper: a flat warm sage (or the variant's desktop colour). Icons, section heads and a mascot may sit straight on it; everything else sits in windows.
  • Build every window the same way: `surface` fill, 1 px `border` rule, 8 px radius (`radius` token), no padding on the frame itself, then a title bar row (padding 8 × 16 px, 1 px rule under it) with the window title in the mono face on the left (`heading` colour) and a muted mono meta on the right, then the body padded 32–40 px.
  • Draw window controls on the right of every title bar: three 12 px squares or circles in `border` colour (minimise, maximise, close; a `×` glyph on the last), and give media windows (`frame: window`) the same bar.
  • Give windows and raised panels the bevel: a solid bottom edge 3–4 px deep in a darker shade of the panel's border (`box-shadow: 0 4px 0 0 <border-dark>`), no blur. Nested cards inside a window keep the rule and the edge but no second title bar.
  • Make buttons raised keys: primary = `accent` fill (amber) with `onAccent` text, secondary = `surface` fill with `heading` text and a 1 px rule; both 6–8 px radius with a 4 px darker bottom edge (`0 4px 0 0` in the fill darkened ~25 %). On hover move the button down 2 px and halve the edge; on active remove it. 140 ms.
  • Set the menu bar as one slim `surface` strip (40–48 px tall, 1 px rule, radius 8) across the grid: boxed logo, plain text menu links, a mono clock-style meta and a small primary key on the right.
  • Show desktop icons as a vertical column in grid column 1 of the hero (and as a 3 × 2 field in the icon-wallpaper hero): a 56–64 px pixel-art glyph over a short centred label (step −1, weight 600). Hide the column below 640 px.
  • Use one tabbed panel per page: a strip of tabs on an `accent2` frame (8 px padding round the pane), the active tab first as a raised `surface` chip with `heading` text, the others as plain text in `onAccent2`, then a `surface` pane inside. Tabs are real tabs (`role="tablist"`, arrow-key navigation).
  • Mark the two or three key phrases of a hero or section paragraph with a highlighter: a `color-mix(in srgb, var(--accent) 35%, transparent)` band behind the lower 60 % of the words (`background: linear-gradient(transparent 40%, <mark> 40%)`), never more than one mark per sentence.
  • Write dense, docs-like content: numbered checklists with mono `01` indices in `link`, ruled tables, changelog rows with mono date chips on `surfaceAlt`, mono paths in title bars (`~/home/readme.md`), and a short status bar under big windows (three mono readouts).
  • Headlines inside a hero window at step 6 (weight 700, tight, max 18–20 ch), a hero headline straight on the wallpaper at step 7; section titles at step 5; numbers at step 5–6 in weight 700. Body copy is generous (lead step 1, body 16–17 px, line height 1.55). Confident, not shouting: the window is the hero, not the type.
  • Keep the motion OS-like and quick: windows open by scaling from 0.98 with a 140 ms fade; button presses translate 2 px. Nothing loops. Respect `prefers-reduced-motion` by dropping both.
  • At 375 px: the icon column and title-bar metas hide, windows go full width with 20 px body padding, the tab strip scrolls sideways, button rows wrap, and every window keeps its title bar.

Don't

  • No floating cards on a soft gradient, no glassmorphism, no blurred drop shadows: depth is only the 1 px rule and the solid bottom edge.
  • No three equal feature cards in a row; features are a tabbed panel, a file-explorer list or a docs checklist.
  • No centred hero over the wallpaper; the hero message is flush left inside a window.
  • No window without a title bar, and no title bar without its mono title.
  • No stock photos of people; imagery is product screenshots in windows, pixel-art icons and one cheeky pixel or cartoon mascot.
  • No second bright colour beyond the amber key and the tab-strip `accent2`; status meters use the accent.
  • No thin weights (under 400), no all-caps paragraphs, no serif or display faces (the classic variant's pixel headline face is the one exception).
  • Don't copy any real OS or product brand: no real logos, wallpapers, mascots or system icons.

Heroes (4)

Desktop window stack

hero.desktop-window-stack · hero

Desktop, 1440 px
Phone, 390 px
Rule
The hero is a desktop: a column of labelled pixel icons in column 1 and one big app window across 2–12 with a title bar, the message, a setup checklist card and a status bar.
Slots
pages[5..6], caption, meta, eyebrow, headline, subhead, tagline, label, features[3..3], cta, cta2, stats[3..3]
Grid
icons 1-1 · window 2-12 · message 1-7 · setup 8-12
Notes
Icons sit straight on the wallpaper (bg), never in a panel. The window is the only surface; the setup card inside it is a nested panel with the bevel edge.

The default hero. Grid column 1 holds five or six desktop icons stacked straight on the wallpaper (pixel glyph 1:1 over a centred small label, 24 px apart). Columns 2–12 hold one app window: title bar (mono window title left, mono meta right), then a body padded 40 × 32 px split 1–7 / 8–12. Left: mono eyebrow in `link`, the headline at step 6 (700, tight, ≤20 ch), the lead (≤52 ch) and a muted line. Right: a nested setup card (surface panel with the bevel edge, 24 px padding) with a mono label in `link`, a three-row checklist (mono `01` index in `link` + the item at weight 600) and a primary + secondary key. Under the body a status bar row (1 px rule above) with three mono readouts (number in `link`, muted label). Phone: icons hidden, window full width, columns stack.

Desktop tabbed app

hero.desktop-tabbed-app · hero

Desktop, 1440 px
Phone, 390 px
Rule
Headline and subhead on the wallpaper, then a full-width app panel framed in accent2: a strip of tabs on the colour and a surface pane with a windowed screenshot beside a checklist.
Slots
eyebrow, headline, subhead, cta, cta2, features[3..3], heroImage, sectionLabel, title2, body, items[3..3]
Grid
headline 1-7 · subhead 8-12 · panel 1-12 · shot 1-7 · copy 8-12

The headline (step 7, ≤16 ch) with a mono eyebrow on 1–7 bottom-aligned with the lead and two keys on 8–12, straight on the wallpaper. Under them, across the grid, the tabbed panel: an `accent2` frame (8 px padding) with the raised active tab and three more tabs on the strip, and a surface pane (32 px padding) holding a 16:9 screenshot in a window frame on 1–7 and, on 8–12, an h2 at step 4, a paragraph and a ruled three-row checklist.

Desktop cascade windows

hero.desktop-cascade-windows · hero

Desktop, 1440 px
Phone, 390 px
Rule
Cascaded windows: the message window on 1–7 over two rows (with a status bar) sits on top of a windowed illustration on 6–12, with a small dialog window under the illustration on 8–12.
Slots
caption, meta, eyebrow, headline, subhead, cta, cta2, facts[3..3], heroImage, sectionLabel, body, stats[2..2], cta3
Grid
message 1-7 · art 6-12 · dialog 8-12
Notes
The message window overlaps the illustration window by two columns, like cascaded app windows; copy always paints above imagery.

Cascaded windows. The message window on 1–7 spans both rows and stretches to their height (title bar at the top; eyebrow, headline at step 6, lead, two keys; a status bar of three mono key / value readouts at the bottom) and paints over the left edge of a 16:9 illustration window on 6–12 in row 1, like an app opened on top of another. A small dialog window on 8–12 in row 2 (title bar with a mono title, a short line, two figures in a 2-up grid, a small secondary key) completes the stack. Copy always paints above imagery. Phone: message, illustration, dialog, in that order.

Desktop icon wallpaper

hero.desktop-icon-wallpaper · hero

Desktop, 1440 px
Phone, 390 px
Rule
A readme window on 1–7 with the headline, lead, checklist and buttons; on 8–12 a 3 × 2 field of labelled pixel icons straight on the wallpaper.
Slots
caption, meta, headline, subhead, facts[3..3], cta, cta2, features[6..6]
Grid
window 1-7 · icons 8-12

A readme window on 1–7 (title bar with a file name, then the headline at step 6, the lead, a three-row ruled fact list with mono keys in `link`, two keys) and on 8–12 a 3 × 2 field of desktop icons (pixel glyph + label) straight on the wallpaper, vertically centred against the window. Keep the icons three per row on phones.

Navigation (2)

Content blocks (13)

Desktop tab panel

features.desktop-tab-panel · features

Desktop, 1440 px
Phone, 390 px
Rule
Section head on the wallpaper, then one tabbed panel framed in accent2: four tabs on the colour strip over a surface pane with a ruled feature list beside a windowed screenshot.
Slots
title, body, sectionLabel, features[3..3], statement, items[3..4], cta, image
Grid
list 1-5 · shot 6-12

Section head on the wallpaper: h2 at step 5 (≤24 ch) on the left, a muted paragraph bottom-aligned on the right. Then the tabbed panel: `accent2` frame, the raised active tab (the section's label) and three more tabs on the strip, and a surface pane (32 px padding) with, on 1–5, an h3 statement, a ruled list of three or four items (title at 600, muted small line) and a primary key; on 6–12 a 16:9 screenshot in a window frame.

Desktop file explorer

list.desktop-file-explorer · list

Desktop, 1440 px
Phone, 390 px
Rule
A file-explorer window: title bar with a mono path, a toolbar row with the title and a button, a sidebar of places on 1–3 and the files as ruled rows (icon, name + line, mono meta) on 4–12, then a status bar.
Slots
caption, index, title, cta, sectionLabel, pages, items[5..7], hours, date
Grid
sidebar 1-3 · files 4-12

One file-explorer window: title bar with a mono path, a toolbar row (h2 at step 3 and a small secondary key, 1 px rule under), then a sidebar of places on 1–3 (muted mono label, plain links in a column; hidden on phones) and the files on 4–12 as ruled rows: a 40 px `accent2` square file icon, the name at 600 over a muted line, and a mono meta on the right. A status bar (mono hours and a date) closes the window.

Desktop system monitor

stats.desktop-system-monitor · stats

Desktop, 1440 px
Phone, 390 px
Rule
A system-monitor window: title, line and four raised readout tiles (mono label, big number, an 8 px accent meter bar, caption) in a 4-up grid.
Slots
sectionLabel, date, title, body, stats[4..4]

A system-monitor window: title bar with a mono title, then the h2 at step 5 (≤22 ch) with a muted line bottom-aligned on the right, and four raised readout tiles (surfaceAlt, bevel edge) in a 4-up grid (2-up on phones): mono label, the number at step 6 (700, tight), an 8 px accent meter bar, a small caption.

Desktop readme doc

content.desktop-readme-doc · content

Desktop, 1440 px
Phone, 390 px
Rule
Docs as a document window: a mono contents list on 1–3, and on 4–12 a window with the title, lead, body, a left-ruled note callout, a numbered checklist and a second paragraph.
Slots
sectionLabel, pages, caption, date, title, lead, body, label, note, features[3..4], body2
Grid
contents 1-3 · doc 4-12

Docs as a document. A mono "contents" label and numbered links on 1–3 (hidden on phones), and on 4–12 a window (title bar with a file path) holding the h2 at step 5, a lead, a paragraph (≤70 ch), a note callout (surfaceAlt, 1 px left rule, mono label in `link`, one paragraph), a numbered checklist (mono index, bold title, muted line) and a closing paragraph. Use the highlighter on two key phrases.

Desktop chat window

testimonial.desktop-chat-window · testimonial

Desktop, 1440 px
Phone, 390 px
Rule
Intro on 1–4; on 5–12 a messenger window where each quote is a chat bubble (surfaceAlt panel) beside a round accent2 avatar dot, name and mono role under the words.
Slots
sectionLabel, title, body, caption, email, quotes[3..3]
Grid
intro 1-4 · chat 5-12

Intro on 1–4 (mono label, h2 at step 5, muted paragraph). On 5–12 a messenger window: three chat rows, each a 40 px round `accent2` avatar dot beside a surfaceAlt bubble (the quote at body size, then the name at 700 and a mono role on one baseline).

Desktop pricing table

pricing.desktop-pricing-table · pricing

Desktop, 1440 px
Phone, 390 px
Rule
Section head, then a spreadsheet-like window: each plan a ruled row (name + mono tag in 1–3, price in 4–5, what is included in 6–9, a bevel button in 10–12) and a footer row with a note and a primary button.
Slots
sectionLabel, title, body, caption, index, plans[3..4], note, cta2
Grid
plan 1-3 · price 4-5 · detail 6-9 · action 10-12

Section head (mono label, h2 at step 5; muted line right). Then a spreadsheet window: each plan a ruled row on the 12-column grid — name (h3, 700) over a mono tag in `link` on 1–3, the price at step 5 on 4–5, what is included (muted) on 6–9, a secondary key on 10–12 — and a footer row with a small muted note and a small primary key. Never three equal plan cards.

Desktop changelog

blog.desktop-changelog · blog

Desktop, 1440 px
Phone, 390 px
Rule
Intro and a secondary button on 1–4; on 5–12 a changelog window listing releases as ruled rows: a mono date chip on surfaceAlt, then the title and a muted line.
Slots
sectionLabel, title, body, cta, caption, index, posts[4..6]
Grid
intro 1-4 · log 5-12

Intro on 1–4 (mono label, h2 at step 5, muted paragraph, secondary key). On 5–12 a changelog window: four to six ruled rows, each a mono date chip on surfaceAlt, then the title (h4, 700) over a muted line (≤70 ch).

Desktop help dialog

faq.desktop-help-dialog · faq

Desktop, 1440 px
Phone, 390 px
Rule
A help window: title, line and a secondary button on 1–4; questions with their answers in two top-ruled columns on 5–12. All answers visible.
Slots
sectionLabel, email, title, body, cta, faqs[4..6]
Grid
intro 1-4 · faqs 5-12

One help window: title bar, then the h2 at step 5, a muted paragraph and a secondary key on 1–4, and the questions on 5–12 in two top-ruled columns (one on phones): question as h4 at 700, answer as a muted small paragraph. All answers visible.

Desktop install dialog

cta.desktop-install-dialog · cta

Desktop, 1440 px
Phone, 390 px
Rule
An installer dialog window on 1–8 (headline, line, an 8 px accent progress bar with a mono status, two bevel buttons) beside a pixel-art mascot on 9–12.
Slots
caption, date, headline, body, note, cta, cta2, image
Grid
dialog 1-8 · mascot 9-12

An installer dialog window on 1–8 (title bar; h2 at step 6, ≤22 ch; a lead; an 8 px accent progress bar; a mono status line; primary and secondary keys) beside a 1:1 pixel-art mascot on 9–12, straight on the wallpaper.

Desktop tray icons

logos.desktop-tray-icons · logos

Desktop, 1440 px
Phone, 390 px
Rule
Intro on 1–4; on 5–12 the client names as raised surface chips (a small accent2 square icon and the name) in a four-column grid, two on phones.
Slots
sectionLabel, title, body, clients[8..12]
Grid
intro 1-4 · chips 5-12

Intro on 1–4 (mono label, h2 at step 4, small muted line). On 5–12 eight to twelve client names as raised surface chips (40 px `accent2` square icon + name at 600) in a four-column grid, two on phones. Names only, never real logos.

Desktop user accounts

team.desktop-user-accounts · team

Desktop, 1440 px
Phone, 390 px
Rule
Section head with a secondary button; people as user-account cards four per row: a pixel-art avatar, a top-ruled name and mono role.
Slots
sectionLabel, title, cta, team[4..8]

Section head (mono label, h2 at step 5) with a secondary key on the right. People as user-account cards four per row (two on phones): a raised surface card with a 1:1 pixel-art avatar, then a top-ruled footer with the name at 700 and a mono role.

Desktop mail compose

contact.desktop-mail-compose · contact

Desktop, 1440 px
Phone, 390 px
Rule
A new-message window on 1–8 with the title, a line and the name / email / message form; on 9–12 two raised info panels (email, phone + hours) above a pixel mascot.
Slots
caption, date, title, body, contact, sectionLabel, email, phone, hours, image
Grid
compose 1-8 · info 9-12

A new-message window on 1–8 (title bar, h2 at step 5, muted line, name / email / message form). On 9–12 two raised surface panels — a mono label over the email at h4, then the phone at 600 over the hours — above a 4:3 pixel mascot (hidden on phones).

Desktop screenshot windows

gallery.desktop-screenshot-windows · gallery

Desktop, 1440 px
Phone, 390 px
Rule
Screens as app windows: a large windowed screenshot on 1–7 over two rows, the label, title and caption on 8–12 above a second window, then two 16:9 windows side by side.
Slots
gallery1, sectionLabel, title, caption, gallery2, gallery3, gallery4
Grid
big 1-7 · copy 8-12 · second 8-12 · third 1-6 · fourth 7-12

Screens as app windows: a 4:3 screenshot window on 1–7 over two rows; on 8–12 a mono label, an h2 at step 5 and a muted caption above a 16:9 window; then two 16:9 windows side by side on 1–6 and 7–12. Every image has the window title bar.

Footers (2)

Desktop start menu

footer.desktop-start-menu · footer

Desktop, 1440 px
Phone, 390 px
Rule
A start-menu panel on 1–5 (wordmark, tagline, inline newsletter form), the sitemap as a plain column on 6–8 and a mono status line over the legal line on 9–12.
Slots
siteName, tagline, newsletter, sectionLabel, pages, meta, legal
Grid
menu 1-5 · links 6-8 · legal 9-12

A start-menu panel on 1–5 (surface, bevel edge: wordmark, muted tagline, inline newsletter form), a mono label over plain sitemap links on 6–8, and a mono status line in `link` over the muted legal line on 9–12.

Desktop taskbar footer

footer.desktop-taskbar-bottom · footer

Desktop, 1440 px
Phone, 390 px
Rule
The page ends on a taskbar: a bevel primary button and wordmark left, plain links in the middle, the mono legal line right, on one surface bar.
Slots
cta, siteName, pages, legal

The page ends on a taskbar: one surface strip with a small primary key and the wordmark left, plain links in the middle (hidden on phones) and the mono legal line right.