add new firefox themes

This commit is contained in:
smgr 2025-10-07 04:04:09 -07:00
parent 4e1ccfb018
commit c7f127b9fe
34 changed files with 76 additions and 64 deletions

129
DESIGN.md
View File

@ -1,40 +1,43 @@
# Theme constraints # Theme constraints
The following general constraints are followed as palette options are mapped onto The following general constraints are followed as palette options are mapped
concrete themes: onto concrete themes:
+ Harshness levels have monotone differences of a single shade. + Harshness levels have monotone differences of a single shade.
+ "Hard" themes anchor their background to the most extreme shade appropriate for the + "Hard" themes anchor their background to the most extreme shade appropriate
scheme (i.e., lightest shade for "light," darkest shade for "dark"), ensuring the for the scheme (i.e., lightest shade for "light," darkest shade for "dark"),
palette's "monotone width" is fully spanned by the theme options. ensuring the palette's "monotone width" is fully spanned by the theme
+ App-specific monotone settings have differences of a single shade compared to the options.
system monotone settings. + App-specific monotone settings have differences of a single shade compared to
+ Shade differences between corresponding background/foreground settings should be the system monotone settings.
constant (e.g., between `bg0` and `fg3`, `bg1` and `fg2`, etc) + Shade differences between corresponding background/foreground settings should
be constant (e.g., between `bg0` and `fg3`, `bg1` and `fg2`, etc)
The primary goal of these constraints is to ensure each theme in a collection defined The primary goal of these constraints is to ensure each theme in a collection
around a single palette is 1) sufficiently _distinct_, 2) attains sufficient _breadth_ defined around a single palette is 1) sufficiently _distinct_, 2) attains
under the palette, and 3) upholds _relative invariance_ under key properties (e.g., sufficient _breadth_ under the palette, and 3) upholds _relative invariance_
lightness differences). under key properties (e.g., lightness differences).
![How themes are created](images/theme_creation.png) ![How themes are created](images/theme_creation.png)
## Example ## Example
The following is a natural solution to these constraints, demonstrated on a general The following is a natural solution to these constraints, demonstrated on a
example setting: a possible useful analogy is a sliding window that, on its own spans a general example setting: a possible useful analogy is a sliding window that, on
given theme's `bg0-fg0` settings, while globally sliding across all available values its own spans a given theme's `bg0-fg0` settings, while globally sliding across
in the palette. If associating integers `0-10` to indices in a list of monotone shades, and all available values in the palette. If associating integers `0-10` to indices
`bg-fg` is the syntax used to indicate that theme's shade range, we might have the in a list of monotone shades, and `bg-fg` is the syntax used to indicate that
following for dark mode themes across harshness levels: theme's shade range, we might have the following for dark mode themes across
harshness levels:
``` ```
Dark (system) 0-7 ; 1-8 ; 2-9 Dark (system) 0-7 ; 1-8 ; 2-9
Dark (app) 1-8 ; 2-9 ; 3-10 Dark (app) 1-8 ; 2-9 ; 3-10
``` ```
There are sliding windows at both the system-app level *and* the harshness-level, in a There are sliding windows at both the system-app level *and* the
sense. Constraints are followed: harshness-level, in a sense. Constraints are followed:
+ Harshness levels, separated by semicolon, differ by a single shade from hard to soft. + Harshness levels, separated by semicolon, differ by a single shade from hard
to soft.
+ The hard theme anchors its background to the darkest available shade. + The hard theme anchors its background to the darkest available shade.
+ Monotones between system and app differ by a single shade. + Monotones between system and app differ by a single shade.
+ Differences between bg/fg (value of 7) remains constant across all themes. + Differences between bg/fg (value of 7) remains constant across all themes.
@ -64,45 +67,53 @@ App, light
``` ```
# Accent contrast # Accent contrast
Each group of biome monotones have nearly identical (WCAG 2) contrast ratios against Each group of biome monotones have nearly identical (WCAG 2) contrast ratios
white/black for all lightness levels (ratios identical between biomes). These are against white/black for all lightness levels (ratios identical between biomes).
selected in a heavily constrained OKLCH context, and given the perceptual uniformity These are selected in a heavily constrained OKLCH context, and given the
attached to lightness, we can expect very similar contrast ratios for each accent under perceptual uniformity attached to lightness, we can expect very similar
a given biome lightness (e.g., the `l65` red tone will have the same ratio under the contrast ratios for each accent under a given biome lightness (e.g., the `l65`
grassland, tundra, and savanna monotones). red tone will have the same ratio under the grassland, tundra, and savanna
monotones).
In terms of selecting accents for themes (by harshness and scheme), what matters is In terms of selecting accents for themes (by harshness and scheme), what
at what lightness level all accent colors meet/exceed a particular contrast threshold. matters is at what lightness level all accent colors meet/exceed a particular
Again, the ratios themselves are effectively constant across biome monotones, and thus contrast threshold. Again, the ratios themselves are effectively constant
dependent entirely on the monotone lightness being used. This of course is determined across biome monotones, and thus dependent entirely on the monotone lightness
primarily by whether the theme is a light or dark one, and what level of harshness is being used. This of course is determined primarily by whether the theme is a
being used. The following are the relevant values for making a decision. We want to light or dark one, and what level of harshness is being used. The following are
ensure all accents can reach >4.5 WCAG 2 contrast ratio (the standard requirement for the relevant values for making a decision. We want to ensure all accents can
small text on the web) against all biome monotones for each theme: reach >4.5 WCAG 2 contrast ratio (the standard requirement for small text on
the web) against all biome monotones for each theme:
+ For BG l20 (harsh, dark) -> l65 is min lightness where all accents have CR >=4.5 + For BG l20 (harsh, dark) -> l65 is min lightness where all accents have CR
+ For BG l25 (regular, dark) -> l65 is min lightness where all accents have CR >=4.5 >=4.5
+ For BG l30 (soft, dark) -> l70 is min lightness where all accents have CR >=4.5 + For BG l25 (regular, dark) -> l65 is min lightness where all accents have CR
>=4.5
+ For BG l30 (soft, dark) -> l70 is min lightness where all accents have CR
>=4.5
+ For BG l90 (harsh, dark) -> l45 is max lightness where all accents have CR >=4.5 + For BG l90 (harsh, dark) -> l45 is max lightness where all accents have CR
+ For BG l85 (regular, dark) -> l45 is min lightness where all accents have CR >=4.5 >=4.5
+ For BG l80 (soft, dark) -> l40 is min lightness where all accents have CR >=4.5 + For BG l85 (regular, dark) -> l45 is min lightness where all accents have CR
>=4.5
+ For BG l80 (soft, dark) -> l40 is min lightness where all accents have CR
>=4.5
For the monotone boundaries (l15 and l95, neither of which are possible backgrounds for For the monotone boundaries (l15 and l95, neither of which are possible
terminal or nvim in the current theme definitions), the relevant lightness levels are backgrounds for terminal or nvim in the current theme definitions), the
l60 and l50, respectively. relevant lightness levels are l60 and l50, respectively.
While not necessary, it feels intuitive for us to shift the accent colors up/down by the
relative change in monotones across harshness levels. This has led to the choice of l60
accents for the harsh-dark theme, l65 for regular-dark, and l70 for soft-dark. This
technically breaks the 4.5 ratio requirement, though, for the harsh theme, so you
ultimately need to pick one: either soften the contrast constraint, or allow different
harshness levels to use the same accent lightness. I think either is acceptable, but for
now I've gone with the former, loosening the contrast to a ratio of >4.0 with respect to
the background. This allows for the slightly tighter group of accent lightnesses:
l45-l50-l55 for light, l60-l65-l70 for dark. Note that the "center shade" of the l15-l95
shade group is l55, meaning these groups are very central (the light triplet could move
down by one shade step, but we want these accents to be as bright as we can get away
with; otherwise, they are extremely dull in the light modes, and we thus don't mind bias
toward a brighter lightness).
While not necessary, it feels intuitive for us to shift the accent colors
up/down by the relative change in monotones across harshness levels. This has
led to the choice of l60 accents for the harsh-dark theme, l65 for
regular-dark, and l70 for soft-dark. This technically breaks the 4.5 ratio
requirement, though, for the harsh theme, so you ultimately need to pick one:
either soften the contrast constraint, or allow different harshness levels to
use the same accent lightness. I think either is acceptable, but for now I've
gone with the former, loosening the contrast to a ratio of >4.0 with respect to
the background. This allows for the slightly tighter group of accent
lightnesses: l45-l50-l55 for light, l60-l65-l70 for dark. Note that the "center
shade" of the l15-l95 shade group is l55, meaning these groups are very central
(the light triplet could move down by one shade step, but we want these accents
to be as bright as we can get away with; otherwise, they are extremely dull in
the light modes, and we thus don't mind bias toward a brighter lightness).

View File

@ -1,10 +1,11 @@
# Themes # Themes
The currently available theme variants across biomes (`default`, `grassland`, `tundra`, The currently available theme variants across biomes (`default`, `grassland`,
`savanna`), harshness (`hard`, `default`, `soft`), and scheme (`light`, `dark`) are shown `tundra`, `savanna`), harshness (`hard`, `default`, `soft`), and scheme
below, displaying a few lines from a Python file in Neovim. (`light`, `dark`) are shown below, displaying a few lines from a Python file in
Neovim.
You can find the 24 raw screenshots for each theme in `images/theme_caps` under the You can find the 24 raw screenshots for each theme in `images/theme_caps` under
repository root (with filenames `<harshness>-<biome>-<scheme>.png`). the repository root (with filenames `<harshness>-<biome>-<scheme>.png`).
## Default (gray) variants ## Default (gray) variants
![Default light and dark variants](images/biome_variants/default_variants.png) ![Default light and dark variants](images/biome_variants/default_variants.png)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.