# PI ThemeStudio — Theme Brief for AI Assistants

For PI ThemeStudio v1.0.0 (a PixInsight module by Deep Sky Colors). Brief revision 2026-09-19i.

---

## For the person using this file

1. Give this whole file to an AI assistant, then describe the theme you want
   ("a dark theme in deep ocean blues with coral accents", "a light, warm paper look").
2. The assistant answers with a **theme folder**: a few text files. Create a folder with
   the name it gives (for example `glacier-night`), and save each file into it under the
   path it gives.
3. In PixInsight, open PI ThemeStudio, click **Import** (below the theme list), and
   choose the `theme.txt` inside the folder you saved.
4. Select the theme: the preview shows it before anything is applied. Tools > **Preview
   Files** lists any problem or warning; paste those back to the assistant to fix.
5. **Apply** when you like it. At the next start PixInsight asks you to keep it; saying
   nothing reverts it. **PixInsight Default** always takes you back to PixInsight's look.

A theme made by an assistant is that assistant's work. PI ThemeStudio only checks and
applies it.

---

## For the AI assistant

You are writing a theme for PI ThemeStudio, which restyles the PixInsight interface
(an astronomical image processing application built on Qt). A theme changes
**appearance only**: colors, frames, tabs, fonts, icons and wallpapers. It cannot run
code and cannot change how PixInsight works.

PI ThemeStudio does not use a finished style sheet. At apply time it reads PixInsight's
own style sheet (`core-standard.qss`) and **rewrites every color in it according to the
rules in your `palette.txt`**. So a theme is a short list of rules, not a style sheet.
Never write Qt style sheet (QSS) code.

### What to deliver

A **theme folder**, never a `.pitheme` package (those carry checksums you cannot compute
reliably):

```
glacier-night/theme.txt          required
glacier-night/palette.txt        required
glacier-night/wallpapers/*.svg   optional, 1 to 4 files
glacier-night/skins/*.svg        optional, 1 to 3 skin tiles
```

Give every file as its own code block, with the file's path on its own line just
before the block (as in the example below).

- The folder name is the theme's **id**: lowercase letters, digits and hyphens only,
  for example `glacier-night`. It must not be a reserved id (below).
- Text files are UTF-8, plain ASCII where possible.
- Do not deliver icon files or anything binary (PNG, JPEG, ...): you cannot produce them
  reliably. Wallpapers and skins are SVG, which is text.

### theme.txt

These seven lines (key, spaces, `|`, value), in this order:

```
format      | 1
name        | <the theme's name, Title Case, not reserved>
author      | <the user's name, or "AI assistant" if you do not know it>
category    | <one of the categories below, or a short new one>
version     | 1.0
description | <one line, a few words about the look>
stylesheet  | palette.txt
```

After them, optionally, `setting` lines that write a PixInsight appearance setting
directly. Use only these, and only when the look asks for it (glass, glow, depth):

```
setting     | MainWindow/TranslucentWindows | true
setting     | MainWindow/ActiveWindowOpacity | 92
setting     | MainWindow/InactiveWindowOpacity | 80
```

Opacities are percentages; 85-95 active and 75-88 inactive keep text readable.

Rules:
- No other keys: in theme.txt, as in palette.txt, an unknown key is an error. Never
  write `origin`, `pack` or `licensed-to`: PI ThemeStudio writes those itself.
- `category` groups the theme in the theme list. Any short text works (`&` is fine);
  the shipped categories are:
  Astronomy & Space; Celebrations & Holidays; Classic & Neutral; Fantasy & Legend;
  Food & Drink; Materials & Craft; Nature & Elements; Pop Culture & Entertainment.

### palette.txt — syntax

- One rule per line: `key | value` or `key | value | value | ...`. Spaces around `|` are
  free; aligning the bars is customary.
- **Comments are whole lines starting with `#`**, anywhere, as many as you like. A
  comment at the end of a rule line is NOT removed and breaks that rule: put
  explanations on the line above.
- Blank lines are fine. Keys are lowercase.
- Colors: `#RGB`, `#RRGGBB`, `#AARRGGBB`, `rgb( r, g, b )`, `rgba( r, g, b, a )` with
  `a` in 0-255 or a percentage (`90%`), or a CSS color name. Hex is case-insensitive.

### How a color is decided

For every color in PixInsight's style sheet, the **first** matching rule wins:

1. `override | <selector text> | <property, or *> | <color>` — only in rules whose
   selector contains that text as a whole name (case-sensitive). `#WSWTitle` reaches
   both window title rules; `#WSWTitle[active="true"]` only the active one. `QMenu`
   reaches every menu rule (`QMenu::item:disabled` too) but not `QMenuBar`. The property
   is the one to change (`color`, `background`, `selection-color`, ...), or `*` for all.
   **Overrides are tried in the order written**: put a narrower one (`QMenu::item:disabled`)
   before a broader one (`QMenu`).
2. `map | <role> | <PixInsight color> | <new color>` — that exact color value, wherever
   it appears in that role. The color is compared by value, so `#5664AF`,
   `#5664af` and `rgb( 86, 100, 175 )` are the same. Any color of PixInsight's style
   sheet can be mapped; a map that matches nothing is simply ignored.
3. `mode`, then `max-lightness` and `monochrome` — the general transform (below).
4. Otherwise the color stays as PixInsight has it.

A color claimed by `override` or `map` is used **exactly as you wrote it**: the mode,
`monochrome` and `chroma` do not touch it. Roles for `map`: `fg` (text: `color`,
`selection-color`), `bg` (any background), `border` (borders, outlines), `other`, `any`
(all of them). A mapped color without its own alpha keeps the alpha of the color it
replaces.

### The general transform

| Key | Values | Meaning |
|---|---|---|
| `mode` | `darken`, `invert-lightness`, `none` | `darken`: a background or border lighter than the threshold, and text darker than it, has its lightness inverted by `invert-range`, hue kept; what PixInsight already draws dark stays as it is. This makes a light interface dark. `invert-lightness`: EVERY color's lightness is remapped by `invert-range` (despite the name, the range decides whether the result is light or dark). `none`: only `map`, `override` and the finish below change anything. |
| `darken-threshold` | 0-100 (default 50) | The lightness (L*) `darken` pivots on. |
| `invert-range` | `<A> \| <B>` (default `10 \| 92`) | New lightness = A + (B - A) x (1 - L/100), L being the old L* (0-100). So white becomes A and black becomes B, linearly. Dark theme with `darken`: `8 \| 95`. Light theme with `invert-lightness`: `96 \| 30` (white stays near white, black becomes a mid tone). |
| `chroma` | 0-2 (default 1) | Scales the saturation the transform keeps; 0.5 mutes, 1.5 intensifies. Only matters WITHOUT `monochrome` (monochrome sets the saturation itself). |
| `max-lightness` | 0-100 | Scales down the lightness of every color not claimed by map/override, so white reaches this value (dim night themes). |
| `monochrome` | `<color>` or `none` | Every color not claimed by map/override takes this color's hue AND saturation, keeping its own lightness (toned down near black and white so nothing clips). Grays become tinted. Pick a clear, mid-lightness color for a strong tint, a grayer one for a subtle tint. `none` is the same as leaving it out. |
| `images` | `swap-dark-light` or `none` | Switch PixInsight's small arrow images to their light versions: use `swap-dark-light` when the controls end up dark (any `darken` theme, or a dark `invert-lightness` theme); `none` for light themes. |

**Recipes.**
- Dark: `mode | darken`, `invert-range | 8 | 95`, `images | swap-dark-light`, optional
  `monochrome` with the theme's hue, and the `map` lines below.
- Light, tinted: `mode | invert-lightness`, `invert-range | 96 | 25` (the second value is
  what black text becomes: 20-30, lower is crisper), `monochrome | <a grayish,
  mid-lightness color of the theme's hue>`, `images | none`, and the `map` lines below.
- To control a surface exactly rather than through the transform, map it (see the
  surfaces in the table).

### PixInsight's colors, and the text on them

| PixInsight color | What it paints | Text on it | Map it? |
|---|---|---|---|
| `#5664AF` | active window title bar and its border | white (window title) | always |
| `#6E6E6E` | inactive title bar; also scroll bars, selector trays | `#D0D0D0` inactive title; none elsewhere | always |
| `#D0D0D0` (fg) | inactive window title text | — | always |
| `#404040` | main window and workspace background | none | always |
| `#707070` | combo box popups, pressed menu bar items | white | always |
| `rgba( 100, 100, 100, 90% )` | menu popups | white | always, keep the alpha |
| `#87B3FF` (border) | THE ACCENT: hovered/focused frames, the selected-tab underline, tab pane lines, with `frames \| theme` | — | always: it is how you set the accent |
| `#FFC68C`, `#FFAE5B` (bg) | selected rows in lists and trees (an orange gradient, top to bottom) | black | recommended: map both, in the accent's family |
| `#5A99F0` (bg) | text selection in editors | white | recommended |
| `#C7D4E9` (bg) | hovered buttons, combo boxes and tabs | the panel text | recommended |
| `#0050A0` (fg) | group box titles | — | recommended (or `group-title-color`) |
| `#DFDFE1` | process windows and dialogs: the main panel surface | black | optional: sets the panel color exactly |
| `#F0F0F0` | tool bars and the menu bar | black | optional |
| `#FFFFFF` | paper (lists, edits) and the selected tab | black | optional |
| `#E0E0E0` | selected items in menus and combo popups; unselected tabs; scroll bar handles | black on the selected items | recommended in dark themes: it is the menu highlight. One color for all three, so keep it apart from the popup and the `#6E6E6E` scroll trough |
| `#F0F5FF` | alternate list rows | black | optional |

**What the text becomes.** The "Text on it" column is PixInsight's. The transform
changes text too: with `darken`, black text comes out light (it is darker than the
threshold) and white text stays white; with `invert-lightness`, all text follows
`invert-range`. So in a dark theme every background above must stay dark enough for
light text, and in a light theme light enough for dark text, unless you set the text.

**Text must stay readable (4.5:1 or more against its background).** To set it:

```
# Menus made light (narrower rules first):
override | QMenu::item:disabled | color | <mid gray>
override | QMenu | color | <dark>
# Combo box popups made light:
override | QComboBox QAbstractItemView | color | <dark>
# A pressed menu bar item made light:
override | QMenuBar::item:pressed | color | <dark>
# Selected rows made light in a dark theme (lists, trees, view lists):
override | QTreeView::item:selected | color | <dark>
override | QAbstractItemView::item:selected | color | <dark>
```

In a light theme it is often simplest to keep menus and popups dark; in a dark theme,
to keep selections a deep shade of the accent.

**Title bars.** `map | bg | #5664AF` also colors the active window's border strips
(PixInsight paints them as background). `#6E6E6E` is shared with scroll bars and trays;
to color only the inactive title bar, use
`override | #WSWTitleBar[active="false"] | background | <color>`.

**Window titles.** The active title text is white and the inactive one `#D0D0D0`. If
your title bars are light, give the titles a dark color with
`override | #WSWTitle | color | <dark color>` (one line covers both; use
`#WSWTitle[active="true"]` and `#WSWTitle[active="false"]` for two colors). The override
wins over the `#D0D0D0` map for titles; keep the map anyway (it covers nothing else
but costs nothing). Below 3:1, PI ThemeStudio changes the title color itself and
reports a warning.

**`icon-background`** is the color icons are judged against: give the panel color as
the theme ends up (your `#DFDFE1` map if you set one; for `darken` with
`invert-range 8 | 95`, the panels come out near lightness 18, about `#2B2B2B` before
tinting).

### Every other key

Leave a key out to keep PixInsight's own look for it; the values listed are the only
ones accepted.

| Key | Values | What it does |
|---|---|---|
| `surface` | `flat`, `raised`, `glossy` | `raised`: a soft vertical gradient on buttons, tabs, headers and handles; `glossy`: a brighter highlight at the top. |
| `surface-strength` | 0-100 (default 40) | How deep that gradient is. |
| `surface-scope` | `controls`, `all` | `all` puts the gradient on panels, dialogs, menus and bars too. |
| `corner-radius` | 0-12 | Rounded corners on buttons, fields and frames. |
| `frames` | `pixinsight`, `theme` | `theme` replaces PixInsight's framed-image borders with drawn ones; hover, focus and selection take the accent. |
| `frame-width` | 1, 2, 3 | Width of those frames. |
| `frame-color` | `auto` or a color | `auto`: the button color moved 20 lightness away, so it reads on light and dark. |
| `group-frame` | `pixinsight`, `line`, `groove`, `ridge`, `none` | The frame of titled group boxes. Groove and ridge want width 2+. |
| `group-width` | 1, 2, 3 | Leave out to follow `frame-width`. |
| `group-color` | `auto` or a color | As `frame-color`. |
| `group-radius` | 0-12 | Leave out to follow `corner-radius`. |
| `group-title-color` | `auto` or a color | Group box titles; wins over a `#0050A0` map. |
| `group-title-weight` | `keep`, `bold`, `normal` | |
| `tab-corners` | 0-12 | Rounded top corners of tabs. |
| `tab-padding` | 2-16 | Space inside a tab. |
| `tab-selected` | `default`, `bold`, `underline`, `raised` | `underline` uses the accent. |
| `tab-pane` | `default`, `none`, `line` | The frame of the page under the tabs; `line` uses the accent. |
| `font` | a font family | Leave out unless asked. If used, pick one installed nearly everywhere (Segoe UI, Arial, Verdana, Georgia, Consolas, DejaVu Sans); a missing font falls back to PixInsight's. |
| `font-size` | 5-32 (points) | Every size scales with it. Leave out unless asked; 9-11 is sensible. |
| `font-weight` | `normal`, `bold`, or 100-900 | Leave out unless asked. |
| `icons` | `auto`, `all`, `none` | `auto` recolors the icons that would get lost against your panels (with a clearly colored `monochrome`, or `max-lightness`, the others are tinted too, lightness kept); `all` recolors every icon; `none` leaves them. Use `auto`. |
| `icon-background` | a color | See above. |
| `icon-threshold` | 0-1 (default 0.30) | How much of an icon may get lost before `auto` recolors it. Leave at 0.30. |
| `icon-sources` | `core`, `core+used`, `core+compat` | Use `core+used`. |
| `icon-style` | `none`, `plate`, `outline`, `duotone`, `bevel`, `strong-bevel` | A design element on every icon: a plate behind it, an outline around it, one color across it (duotone), bevelled edges. |
| `icon-style-color` | `auto` or a color | Usually the accent. |
| `icon-style-2` | the same list, never the same as `icon-style` | An optional second style. |
| `icon-style-2-color` | `auto` or a color | |
| `icon` | `<pattern> \| keep` | Protects icons from recoloring. Always keep PixInsight's own application icon, as in the example. |
| `skin` | `panels`, `dialogs` or `titlebars` `\| @theme/skins/<file>.svg` | An SVG tile repeated behind that surface, in place of its flat color. See *Skins*. |
| `wallpapers` | `generate`, `none` | For the slots you give no `wallpaper` line: `generate` recolors PixInsight's own wallpapers through your rules; `none` leaves PixInsight's own as they are. |
| `wallpaper` | `<1-10> \| @theme/wallpapers/<file>.svg` | Your own wallpaper in that slot. |
| `use-wallpapers` | `yes`, `no` | Whether PixInsight shows wallpapers at all. With your own wallpapers write `yes`; if the user wants none shown, write `no` and leave out `wallpapers` and `wallpaper`. |
| `transparency` | `auto`, `none` | `auto` recolors the checkerboard behind transparent image areas to suit the theme. Use `auto`. |
| `transparency-colors` | `<color> \| <color>` | The checkerboard's two colors, if you want them exactly. |
| `drop-shadow` | `auto`, `none`, a color | PixInsight's soft shadow all around each window. `auto` suits the theme (75% black on dark themes; PixInsight's 50% black, through your rules, on light ones). A color with alpha gives a halo: a bright one reads as a glow. |
| `drop-shadow-radius` | 0-64 | How far it reaches (PixInsight's default is 30). |
| `docs` | `none` | Always `none` (anything else needs administrator rights). |
| `image-area` | `keep`, `theme` | `keep` (recommended): the image canvas, previews and console stay as PixInsight draws them. |
| `module-panels` | `theme`, `own` | Use `theme`. |
| `title-contrast` | `auto`, `keep` | Leave out. |
| `hue-shift` | -180 to 180 | Leave out: it turns the hue of every color, chosen ones included, for a user adjusting a finished theme in the Theme Editor. Choose the colors you mean instead. |

`mode`, `darken-threshold`, `invert-range`, `chroma`, `max-lightness`, `monochrome` and
`images` are described in *The general transform*; `map` and `override` in *How a color
is decided*. Do not use `image` (it takes resource paths inside PixInsight) or
`icon-size`.

### Wallpapers (optional)

SVG files in `wallpapers/`, each with `viewBox="0 0 2560 1440"` and no width or height.
PixInsight renders them with Qt, which supports SVG Tiny 1.2 only:

- **Every SVG starts with exactly** `<svg xmlns="http://www.w3.org/2000/svg"`. Write the
  address in full, `http://www.w3.org/2000/svg`: with any other (`http://w3.org`, say),
  or none, a wallpaper draws nothing, and PI ThemeStudio rejects the theme.

- **Use:** `rect`, `circle`, `ellipse`, `line`, `polyline`, `polygon`, `path`, `g`;
  `linearGradient` and `radialGradient` (in `defs`); `fill`, `stroke`, `stroke-width`,
  `opacity`, `fill-opacity`, `stop-opacity`; gradient fills on shapes and strokes.
- **Do not use:** `mask`, `clipPath`, `filter` (no blur), `pattern`, `text`, `image`,
  `use` of external files, `<style>` or CSS classes, scripts, animation.
- Build effects from layers instead: a glow is a radial gradient fading to
  `stop-opacity="0"`; stripes on a sun are bars in the sky color drawn over it.

Name them `<id>-1.svg` to `<id>-4.svg` (or fewer) and cycle the ones you give over the
ten slots, as in the example (with two: 1, 2, 1, 2, ...). Shapes may run past the edges;
they are cut at the frame. Keep them calm and fairly dark (or fairly light, in a light
theme): windows sit on top of them all day. Deliver every file you name.

### Skins (optional)

A skin is an SVG tile repeated behind a surface PixInsight paints with a flat color:

```
skin | panels | @theme/skins/<file>.svg
skin | dialogs | @theme/skins/<file>.svg
skin | titlebars | @theme/skins/<file>.svg
```

`panels` is process windows and tool windows; `dialogs` is modal dialogs and message
boxes (without their own skin they take the panels one); `titlebars` is every window's
title bar.

- **Give the SVG an explicit `width` and `height`** in pixels, with a matching `viewBox`:
  that is the tile's size, for example `width="64" height="64" viewBox="0 0 64 64"`.
- **The tile repeats in both directions**, and restarts in every panel. Make it seamless at
  its edges and quiet: fine noise, a faint weave, subtle stripes. A bold motif turns into
  noise.
- **It replaces the surface color**, and the text sits on it: keep it close to the color
  the theme gives that surface, so text still reads (4.5:1).
- **A title bar is about 34 px tall** and shows the top of the tile: make title bar tiles
  at least 36 px tall (64 x 36, say) so the tile never repeats inside the bar, and keep the
  window title readable across rows 8-24.
- The same SVG rules as wallpapers apply. Put the files in `skins/` and deliver every file
  you name.

### Reserved: do not use these names

PixInsight Default; 3D Dark; 3D Light; Andromeda; Arcane Library; Arctic; Autumn Maple;
Big Bad Billy; Blood Moon; Blue Sky; Borealis; Chalkboard; Champagne Toast; Christmas
Eve; Citrus Grove; Copper; Coral Reef; Crystal; Deep Sea; Desert Storm;
Drive-In Theater; Easter Pastel; Electrocity; Forest; Glassy Dark; Glassy Light;
Goodbye Kitty; Gotham Knight; Halloween Night; High Contrast Dark; Honeycomb; Jazz
Lounge; Jungle Canopy; Jupiter Storm; Koi Pond; Matcha Latte; Matrix; MegaGlass Dark;
MegaGlass Light; Metropolis Night; Milky Way; Minimalist; Monsoon; Mount Olympus;
Nebula; New Year's Midnight; Noir Detective; Nordic Cabin; Origami Fold; Peacock Plume;
Pharaoh's Tomb; Pixie Dust; PixInsight Dark; PixInsight Light; Porcelain & Indigo;
Punk Rock; Red Observatory; Red Wine; Retro Arcade; Rock Arena; Saturn's Rings;
Seashell Cove; Silver Screen; Smooth; Space Truckin; Stained Glass; Steampunk Airship;
Sunset; Sweet William; Tarantula Web; Terminal; The Pleiades; Toxic Avenger; USA;
Valentine's Heart; Venetian Carnival; Viking Raid; Vinyl Groove; Void Black; Volcanic;
Webb Infrared.

### Reserved: do not use these ids

pixinsight-default; 3d-dark; 3d-light; andromeda; arcane-library; arctic; autumn-maple;
big-bad-billy; blood-moon; blue-sky; borealis; chalkboard; champagne-toast; christmas-eve;
citrus-grove; copper; coral-reef; crystal; deep-sea; desert-storm;
drive-in-theater; easter-pastel; electrocity; forest; glassy-dark; glassy-light;
goodbye-kitty; gotham-knight; halloween-night; high-contrast-dark; honeycomb; jazz-lounge;
jungle-canopy; jupiter-storm; koi-pond; matcha-latte; matrix; megaglass-dark;
megaglass-light; metropolis-night; milky-way; minimalist; monsoon; mount-olympus; nebula;
new-years-midnight; noir-detective; nordic-cabin; origami-fold; peacock-plume;
pharaohs-tomb; pixie-dust; pixinsight-dark; pixinsight-light; porcelain-indigo; punk-rock;
red-observatory; red-wine; retro-arcade; rock-arena; saturns-rings; seashell-cove;
silver-screen; smooth-light; space-truckin; stained-glass; steampunk-airship; sunset;
sweet-william; tarantula-web; terminal; the-pleiades; toxic-avenger; usa;
valentines-heart; venetian-carnival; viking-raid; vinyl-groove; void-black; volcanic;
webb-infrared.

### A complete example

A dark theme in glacier blues with a cold cyan accent, translucent windows, and four
wallpapers (one shown here; a real answer gives all four).

glacier-night/theme.txt

```
format      | 1
name        | Glacier Night
author      | AI assistant
category    | Nature & Elements
version     | 1.0
description | Deep glacier blues with a cold cyan accent
stylesheet  | palette.txt
setting     | MainWindow/TranslucentWindows | true
setting     | MainWindow/ActiveWindowOpacity | 92
setting     | MainWindow/InactiveWindowOpacity | 82
```

glacier-night/palette.txt

```
# Glacier Night - deep glacier blues with a cold cyan accent

mode             | darken
darken-threshold | 50
invert-range     | 8 | 95
chroma           | 1.0
monochrome       | #3FA7D6
images           | swap-dark-light

# Colors no mode reaches well: title bars, trays, popups, the ground.
map | bg | #5664AF | #1F4E6E
map | bg | #6E6E6E | #13222E
map | bg | #707070 | #172C3A
map | bg | #404040 | #0A141B
map | bg | rgba( 100, 100, 100, 90% ) | rgba( 16, 30, 40, 90% )
map | fg | #D0D0D0 | #CDE7F2

# The accent: focus, hover, the selected tab, tab panes.
map | border | #87B3FF | #5CD0F0
# Selected rows (a gradient, top to bottom) and text selection, in the accent's family.
map | bg | #FFC68C | #2E7FA3
map | bg | #FFAE5B | #226A8A
map | bg | #5A99F0 | #2B8FB8
# Hovered buttons and tabs.
map | bg | #C7D4E9 | #1C4A63

surface          | flat
corner-radius    | 6

frames           | theme
frame-width      | 1
frame-color      | auto

group-frame      | line
group-width      | 1
group-color      | auto
group-title-color | #7FD3F0

tab-corners      | 6
tab-padding      | 6
tab-selected     | underline
tab-pane         | line

icons            | auto
icon-background  | #13222E
icon-threshold   | 0.30
icon-sources     | core+used
icon-style       | duotone
icon-style-color | #5CD0F0

# The application icon keeps its own colors.
icon | pixinsight-icon*.png | keep
icon | pixinsight-bundle-icon*.png | keep

# Four wallpapers over the ten slots PixInsight offers.
wallpapers       | none
wallpaper        | 1 | @theme/wallpapers/glacier-night-1.svg
wallpaper        | 2 | @theme/wallpapers/glacier-night-2.svg
wallpaper        | 3 | @theme/wallpapers/glacier-night-3.svg
wallpaper        | 4 | @theme/wallpapers/glacier-night-4.svg
wallpaper        | 5 | @theme/wallpapers/glacier-night-1.svg
wallpaper        | 6 | @theme/wallpapers/glacier-night-2.svg
wallpaper        | 7 | @theme/wallpapers/glacier-night-3.svg
wallpaper        | 8 | @theme/wallpapers/glacier-night-4.svg
wallpaper        | 9 | @theme/wallpapers/glacier-night-1.svg
wallpaper        | 10 | @theme/wallpapers/glacier-night-2.svg
use-wallpapers   | yes

transparency       | auto
drop-shadow        | auto
drop-shadow-radius | 30
docs               | none
image-area         | keep
module-panels      | theme
```

glacier-night/wallpapers/glacier-night-1.svg

```
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2560 1440">
  <defs>
    <linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#071019"/>
      <stop offset="1" stop-color="#0F2533"/>
    </linearGradient>
    <radialGradient id="glow" cx="0.7" cy="0.3" r="0.6">
      <stop offset="0" stop-color="#1F4E6E" stop-opacity="0.55"/>
      <stop offset="1" stop-color="#1F4E6E" stop-opacity="0"/>
    </radialGradient>
  </defs>
  <rect width="2560" height="1440" fill="url(#sky)"/>
  <rect width="2560" height="1440" fill="url(#glow)"/>
  <path d="M0 1140 L520 820 L880 1010 L1330 700 L1840 980 L2560 760 L2560 1440 L0 1440 Z" fill="#0B1C27"/>
  <path d="M0 1260 L640 1010 L1120 1180 L1720 930 L2560 1160 L2560 1440 L0 1440 Z" fill="#081620"/>
</svg>
```

### Before you answer: checklist

- [ ] The folder name is a new id (lowercase, digits, hyphens), not in the reserved ids;
      the `name` is not in the reserved names.
- [ ] `theme.txt` has the seven lines, `format | 1`, `stylesheet | palette.txt`, and only
      the three allowed `setting` ids if any.
- [ ] Every `palette.txt` line is a key from this brief with an accepted value (for the
      numeric keys, inside their range: there is no "-1" or "0" meaning "default";
      leave the key out instead); no comment at the end of a line.
- [ ] The "always" colors of the table are mapped: `#5664AF`, `#6E6E6E`, `#D0D0D0`,
      `#404040`, `#707070`, the 90% popup color; and the accent `#87B3FF`.
- [ ] Text reads on every background you changed (4.5:1): window titles, menus and
      popups, selections.
- [ ] `docs | none`; no `image` or `icon-size`.
- [ ] Every skin is an SVG in `skins/` with an explicit `width`, `height` and `viewBox`.
- [ ] Every SVG's root element declares `xmlns="http://www.w3.org/2000/svg"`, written in
      full.
- [ ] Every `@theme/` file you name is delivered, at exactly that path; SVGs use only the
      allowed elements.
- [ ] Each file is its own code block, with its path on the line just before it.
