Themes
Settings → Appearance, or /settings/appearance directly.

Three controls, all of which apply the moment you choose them. There is no Save button, because the window itself is the preview.
Theme
Eight themes ship with the app: snowpea-dark (the default), snowpea-light, midnight, nord, gruvbox, solarized-dark, solarized-light and high-contrast. System follows your desktop's light or dark preference instead of pinning one.
The choice is written to the core's global settings, so it follows you to another machine sharing the same SNOWPEA_HOME. It is also cached locally, so the next launch paints the right theme on the first frame rather than flashing the default.
The status bar names the theme that is actually painted, which is the quickest way to tell an explicit choice from what System resolved to.
Density
comfortable or compact. Density changes row heights and paddings across every table and list — the admin screens are where it makes the most difference.
Text size
small, medium or large, applied as the root font size so everything scales together rather than only the prose.
For theme authors
A theme is a token set: every colour in the app comes from a CSS custom property, and the build fails if a component hard-codes a colour literal. Contrast is checked against the token pairs, so a new theme that fails readability fails the test suite rather than shipping.