Polled by crate::app::App once per frame and reconciled against the
live theme. Level-triggered like fullscreen_intent: a steady value is
correct, since the App only re-themes when a field differs from what’s
applied, so a settings pane can return the same intent every open frame.
The person’s own finish over whichever theme is shown: the interface face
they read best, their accent, and how much of the theme’s translucency they
keep. All are roles the theme already has (PIN_TYPE, PIN_EMPHASIS,
PIN_MATERIAL); this layer only says the person would rather have them
their way than the theme’s, so no custom theme has to be written for a
face, a colour or a blur.
The surface a window’s content is drawn on, as the scene being drawn
sees it: its bounds and the radius of each of its corners, 0 where a
corner is square. A host that knows the shape it shows a window in puts
it on the window’s theme (Theme::surface); what runs along the
window’s edges (a scroll bar) keeps its ends out of a rounded corner.
What every surface role is made of (Finish per
crate::tokens::SurfaceRole), and the finish of selectors. A role a
document leaves out keeps its stock finish.
The motion of the shared UI: its curve, the character of its springs
(0 calm, 1 the stock snappy motion, 2 lively) and how long timed
transitions take. Reduced motion still replaces movement with a fade.
The window tile’s radius, from which every other radius derives
concentrically (crate::tokens::Radii::from_window_radius; 0 makes
every corner square), and how surfaces are outlined.
The weights of the three tiers the type roles are set in: body text
(body, caption, reading, code), labels (control labels and row titles)
and headings (display down to subheading).
What the host showing a window knows about where, and for whom, it is
shown: the temperature of the workspace the window is in and the colour
of the person sitting at it. The shell resolves both and hands them to
its own chrome and, over the shell-ui channel, to every app window
(crate::floating_surface::FloatingSurfaceHostMessage::Appearance). A
window nobody told stays neutral and wears the default colour.
The most a document’s text grows in a wide pane: body text from 14 px to
21 px, about what the same page reads at on a laptop held at arm’s length
against a desktop display across the desk.
Which theme the mode and schedule in settings show, and with the
person’s density over it. None when the appearance section names no
theme, or names one this build does not admit (an unknown preset, a
missing custom document, another schema).
The neutral temperature a workspace takes from its wallpaper (RGBA8
pixels): the image’s dominant hue, or None for a wallpaper with none
(a grey photograph, a missing file), which leaves the material neutral.
Only the hue is taken — the material never gains chroma from a
wallpaper.