Design
llms.txt

Desktop

Wallpaper & glass

The wallpaper behind the whole shell, and the glass every surface over it is made of: toned by the wallpaper, just opaque enough to read, opaque in performance mode.

The wallpaper sits behind the whole shell: the sidebar, the windows and the desktop. Every surface over it is glass made from the theme's own ground (background, card, popover, sidebar) and toned by the wallpaper, so a desktop on Lagoon reads cool and one on Ember warm, in light and dark mode. Each member picks their own; two members of one workspace see different desktops.

Desktop Settings on its Wallpaper tab: Match wallpaper on, and the nine pictures with Lagoon ticked

Presets#

The pictures are layered CSS gradients: no download, nothing to decode, crisp at any size. Each one with a colour of its own names a theme colour and says whether it is dark artwork (core/wallpapers.ts).

DynamicSunrise → Lagoon → Dusk → Aurora
Wallpaper Theme colour Artwork Notes
Max (default) None The app's own ground Draws nothing: the shell's background and theme show through. Every new desktop starts here
Dynamic The current preset's Follows the hour Sunrise from 05:00, Lagoon from 09:00, Dusk from 17:00, Aurora from 21:00, by the local hour
Aurora #8b5cf6 Dark Green, violet and sky glows over deep navy
Sunrise #f97316 Light Peach, pink and orange
Lagoon #0891b2 Dark Teal and blue over a deep sea
Dusk #db2777 Dark Orange, pink and violet over indigo
Graphite #64748b Dark Slate on near-black
Mint #10b981 Light Mint and sky on white
Ember #ea580c Dark Orange and rust over near-black

Colours and your own picture#

  • Colours: eight swatches (#0f172a, #1e3a8a, #312e81, #4c1d95, #7c2d12, #14532d, #e2e8f0, #fde68a) and Custom, the browser's colour picker. A solid colour is its own theme colour. One drag across the picker is one undo step.
  • Your own picture: an https:// address of an image, without spaces or quotes. Anything else is refused with "Use an https:// address that opens an image, without spaces or quotes." The browser loads it from its address each time with referrerpolicy="no-referrer"; it is never uploaded. While it is the wallpaper, the Wallpaper tab shows it, ticked, above the address field.
  • A picture that does not load leaves a plain dark ground (#111827), never the browser's broken-image icon, and the picker says why: "This picture can't be loaded, so the desktop shows a plain dark background."
  • Choosing the wallpaper already showing is not an edit, so there is nothing to undo.

Match wallpaper#

Match wallpaper (themeFromWallpaper, on by default; in Desktop Settings, Settings › Appearance › Colors and the + panel) makes the wallpaper's colour the app's theme colour: it paints the accent and tints windows, menus and the sidebar. Dynamic uses the current preset's colour; a solid colour is its own; Max's own ground and pictures have none, so the member's accent stays. Turning it off, or picking an accent, brings the member's own accent back unchanged.

The row's caption says what happens: "Lagoon sets the accent and tints windows, menus and the sidebar.", "Your picture has no color of its own, so your accent color is used." or "Max keeps your own accent color, whatever the wallpaper."

Whatever the switch, the accent is shaded to read on the glass: its lightness steps, hue and saturation kept, until accent text reads at 4.5:1 on every colour the glass can show (deeper in light mode, lighter in dark).

Label ink#

Desktop labels (icon names, and Add widget under the widget bar) switch between white and dark ink by the wallpaper behind them:

  • Presets say it: Aurora, Lagoon, Dusk, Graphite and Ember are dark artwork and take white labels; Sunrise and Mint take dark ones.
  • A solid colour takes white labels only below a relative luminance of 0.2, where white and near-black read equally well. Bright greens, cyans and oranges get dark labels.
  • A picture is unknown: its labels get light text and a shadow.
  • Max's own ground follows the theme.
  • Where the wallpaper is not behind them (a phone's home screen, which is a page on the window's own ground, and the widget drawer on hover, a glass panel of its own), labels and Add widget use the theme's ink.

Relative luminance is WCAG's: 0.2126 R + 0.7152 G + 0.0722 B over the linearised channels.

Glass#

Three families, all made from the theme's ground and the wallpaper's colours:

Family Where With full effects In performance mode
.theme-glass Chrome: the sidebar, the shell bar, widgets, the desktop controls The ground at --glass-chrome-alpha (never under 80%), blur(32px) saturate(180%), a sheen from the top (22% white; 4% in dark mode) Opaque: the ground mixed with the wallpaper's tone
.window-glass Page grounds: the main window and every floating window's body Never see-through: the ground at --glass-window-alpha (86% by default) mixed with the wallpaper's tone into an opaque colour, with a 1px top rim The same
.sos-glass* Title bars, menus, popovers, tiles A translucent tint at the same opacity, blur with saturate(180%), a 1px inner top highlight and a soft multi-layer shadow Opaque, toned by the wallpaper

The .sos-glass* presets, named in code (ui/motion/glass.ts) so the look changes in one place:

Preset Class Ground Blur Used for
glassPanel sos-glass background 24px Sidebars, panels, widget grounds
glassChrome sos-glass-strong card 30px Floating windows' title bars and frames
glassMenu sos-glass-menu popover 32px Right-click menus, popovers, the + panel
glassTile sos-glass-tile background 16px Small tiles and chips
  • Menus are the reference. The theme's ground at 80% reads clearly in both modes over any wallpaper and lets at most a fifth of its colour through, so no glass is more transparent. A surface goes more opaque when its muted text needs it, against every wallpaper colour as it is and as the frost saturates it: chrome keeps 4.5:1, page grounds 6:1. A wallpaper that fights the mode, such as a pastel one in dark mode, gets nearly solid glass.
  • The tone (--glass-tone) is the wallpaper's average colour. A picture lends none: page grounds over one are the theme's plain ground.
  • Desktop icon tiles get the highlight and shadow only, never a blur: a desktop holds many of them.
  • Finder's and Settings' sidebars inside a window are a 4% shade of the window's glass, with no blur of their own.
  • sos-grain adds a faint noise so large frosted areas never band.
  • Without a wallpaper (Max's own ground, or before the desktop first loads) nothing is published and the defaults hold: chrome 80%, windows 86%, no tone, the accent unchanged.

How opaque the glass gets per wallpaper:

Wallpaper Tone Light: chrome / window Dark: chrome / window
Aurora #244a6e 80% / 91% 80% / 80%
Sunrise #fbba9d 80% / 80% 84% / 89%
Lagoon #176381 80% / 90% 80% / 82%
Dusk #883e6e 80% / 90% 80% / 81%
Graphite #262f3d 80% / 91% 80% / 80%
Mint #c6f1ee 80% / 80% 85% / 90%
Ember #7e3713 80% / 91% 80% / 80%
A picture — 81% / 91% 86% / 90%

Performance mode#

Performance mode is the default (Settings › Appearance › Visual effects, also in Desktop Settings › Appearance); Full effects brings the blur and movement back.

  • No element has a backdrop-filter: one rule removes them all. In Chromium on macOS a single one makes the browser composite the whole window every frame.
  • Glass becomes an opaque ground mixed with the wallpaper's tone, so it keeps the wallpaper's colour without showing what lies behind. The same happens where the browser has no backdrop-filter and under prefers-reduced-transparency.
  • Movement becomes fades (see Motion).
  • Nothing on the desktop needs the blur to be readable, so nothing changes but the look.

Guidelines#

Use the presets and the glass classes as they are: .theme-glass for chrome, .window-glass under any page, the glass* presets for title bars, menus and tiles.

Behaviour: the wallpaper is per member and per workspace, saved with the desktop. The glass follows it live: pick another wallpaper and the sidebar, windows and menus take its tone at once.

Don't put text straight on the wallpaper without the label rule, make glass more transparent than a menu's 80%, add a glass recipe of your own, blur desktop icons, or depend on the frost for contrast.