Themes

By Steph21
Scroll to open

A Small Feature, Documented at Its Actual Size

This page is shorter than the others because the feature is smaller than the others. There are three themes. They are colour variables in one stylesheet, picked in settings, stored against your account. That is genuinely all of it, and padding it out would make this slate less useful, not more.

Themes

3

Files holding every theme

1

Themes reachable from the slate page toggle

2

Purchasable themes in the shop

0

Changelog entries mentioning themes

0

Pearl Midnight Wireframe

Pearl is white on near-black text and is the default. Midnight is the dark one. Wireframe is black with a lime accent, switches the type to monospace, and flattens all eight text sizes to a single value. Wireframe is a novelty and it is implemented like one: the flattening is a blunt override rather than a designed scale, which is fine for what it is and would not survive being taken seriously.

css
[data-theme='MIDNIGHT'] {
  --background-colour: #171717;
  --text-colour: #c9c9c9;
  --accent-colour: #8a8a8a;
  --image-brightness: 0.8;
}

No Token System

No Tailwind, no theme JSON, no generated palette. Three blocks of CSS custom properties in one file, plus a handful of SVG filter recipes so icons invert correctly. Adding a fourth theme means writing a block and adding a fourth button by hand, because the picker is three hardcoded buttons rather than a loop over a list. For three themes that is the right amount of machinery. At six it would not be.

Stored Twice, on Purpose

The choice is a column on a preferences row, so it follows your account across devices. It is also mirrored into local storage, and a small script in the document head reads that before the first paint and sets the attribute. Without it every dark-mode user gets a white flash on every page load. When you sign in, the server value overwrites the local one. Two sources of truth with a clear winner, which is the only version of that pattern worth having.

The Toggle Only Knows Two

The sun and moon button on a slate page is a straight flip between Pearl and Midnight. It decides by asking whether the current theme is Midnight, so if you are on Wireframe the answer is no and one tap sends you to Midnight. From there the button can never bring you back. Wireframe exists only in settings, and the toggle was written before there were three.

There Is Also No System Preference

Nothing reads the operating system's dark mode. A first-time visitor whose machine is set to dark gets Pearl. That is one media query and it has not been added.

Themes Are a Reader Setting

This is the important limit. A theme belongs to whoever is looking, not to whoever made the page. Nothing on a slate or a chip carries a theme, and there is no per-slate override or stub for one. If you write a slate and someone reads it in Wireframe, they read it in Wireframe. Creator-controlled theming would be a different feature and it has not been started.

The Shop Item Type That Sells Nothing

The shop's item types include Theme. Counting across every migration: twenty chip type items, seven packs, three wizards, two feature unlocks, two storage boosts, and zero themes. The constant appears exactly once in the backend, in its own declaration. No code branches on it, nothing links owning a theme to being allowed to select one, and all three themes are free to everyone. An administrator could create one and a buyer would receive nothing, because nothing redeems it. It sits in the enum next to Badge, which is unwired in exactly the same way.

Themes have never appeared in the changelog. The work is in the commit log across about two years, in short bursts, and was never announced. That is a fair reflection of its size.

"

Three colour schemes and a preference row. Written down at that size on purpose.

"