diff --git a/DESIGN.md b/DESIGN.md index 57a1816..583c5ae 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -1,40 +1,43 @@ # Theme constraints -The following general constraints are followed as palette options are mapped onto -concrete themes: +The following general constraints are followed as palette options are mapped +onto concrete themes: + Harshness levels have monotone differences of a single shade. -+ "Hard" themes anchor their background to the most extreme shade appropriate for the - scheme (i.e., lightest shade for "light," darkest shade for "dark"), ensuring the - palette's "monotone width" is fully spanned by the theme options. -+ App-specific monotone settings have differences of a single shade compared to the - system monotone settings. -+ Shade differences between corresponding background/foreground settings should be - constant (e.g., between `bg0` and `fg3`, `bg1` and `fg2`, etc) ++ "Hard" themes anchor their background to the most extreme shade appropriate + for the scheme (i.e., lightest shade for "light," darkest shade for "dark"), + ensuring the palette's "monotone width" is fully spanned by the theme + options. ++ App-specific monotone settings have differences of a single shade compared to + the system monotone settings. ++ 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 -around a single palette is 1) sufficiently _distinct_, 2) attains sufficient _breadth_ -under the palette, and 3) upholds _relative invariance_ under key properties (e.g., -lightness differences). +The primary goal of these constraints is to ensure each theme in a collection +defined around a single palette is 1) sufficiently _distinct_, 2) attains +sufficient _breadth_ under the palette, and 3) upholds _relative invariance_ +under key properties (e.g., lightness differences). ![How themes are created](images/theme_creation.png) ## Example -The following is a natural solution to these constraints, demonstrated on a general -example setting: a possible useful analogy is a sliding window that, on its own spans a -given theme's `bg0-fg0` settings, while globally sliding across all available values -in the palette. If associating integers `0-10` to indices in a list of monotone shades, and -`bg-fg` is the syntax used to indicate that theme's shade range, we might have the -following for dark mode themes across harshness levels: +The following is a natural solution to these constraints, demonstrated on a +general example setting: a possible useful analogy is a sliding window that, on +its own spans a given theme's `bg0-fg0` settings, while globally sliding across +all available values in the palette. If associating integers `0-10` to indices +in a list of monotone shades, and `bg-fg` is the syntax used to indicate that +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 (app) 1-8 ; 2-9 ; 3-10 ``` -There are sliding windows at both the system-app level *and* the harshness-level, in a -sense. Constraints are followed: +There are sliding windows at both the system-app level *and* the +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. + Monotones between system and app differ by a single shade. + Differences between bg/fg (value of 7) remains constant across all themes. @@ -64,45 +67,53 @@ App, light ``` # Accent contrast -Each group of biome monotones have nearly identical (WCAG 2) contrast ratios against -white/black for all lightness levels (ratios identical between biomes). These are -selected in a heavily constrained OKLCH context, and given the perceptual uniformity -attached to lightness, we can expect very similar contrast ratios for each accent under -a given biome lightness (e.g., the `l65` red tone will have the same ratio under the -grassland, tundra, and savanna monotones). +Each group of biome monotones have nearly identical (WCAG 2) contrast ratios +against white/black for all lightness levels (ratios identical between biomes). +These are selected in a heavily constrained OKLCH context, and given the +perceptual uniformity attached to lightness, we can expect very similar +contrast ratios for each accent under a given biome lightness (e.g., the `l65` +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 -at what lightness level all accent colors meet/exceed a particular contrast threshold. -Again, the ratios themselves are effectively constant across biome monotones, and thus -dependent entirely on the monotone lightness being used. This of course is determined -primarily by whether the theme is a light or dark one, and what level of harshness is -being used. The following are the relevant values for making a decision. We want to -ensure all accents can reach >4.5 WCAG 2 contrast ratio (the standard requirement for -small text on the web) against all biome monotones for each theme: +In terms of selecting accents for themes (by harshness and scheme), what +matters is at what lightness level all accent colors meet/exceed a particular +contrast threshold. Again, the ratios themselves are effectively constant +across biome monotones, and thus dependent entirely on the monotone lightness +being used. This of course is determined primarily by whether the theme is a +light or dark one, and what level of harshness is being used. The following are +the relevant values for making a decision. We want to ensure all accents can +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 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 l20 (harsh, dark) -> l65 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 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 BG l90 (harsh, dark) -> l45 is max 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 -terminal or nvim in the current theme definitions), the 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). +For the monotone boundaries (l15 and l95, neither of which are possible +backgrounds for terminal or nvim in the current theme definitions), the +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). diff --git a/THEMES.md b/THEMES.md index 2777463..b83bc41 100644 --- a/THEMES.md +++ b/THEMES.md @@ -1,10 +1,11 @@ # Themes -The currently available theme variants across biomes (`default`, `grassland`, `tundra`, -`savanna`), harshness (`hard`, `default`, `soft`), and scheme (`light`, `dark`) are shown -below, displaying a few lines from a Python file in Neovim. +The currently available theme variants across biomes (`default`, `grassland`, +`tundra`, `savanna`), harshness (`hard`, `default`, `soft`), and scheme +(`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 -repository root (with filenames `--.png`). +You can find the 24 raw screenshots for each theme in `images/theme_caps` under +the repository root (with filenames `--.png`). ## Default (gray) variants ![Default light and dark variants](images/biome_variants/default_variants.png) diff --git a/app-config/firefox/grassland-monobiome-dark.xpi b/app-config/firefox/pre-v1.0.0/grassland-monobiome-dark.xpi similarity index 100% rename from app-config/firefox/grassland-monobiome-dark.xpi rename to app-config/firefox/pre-v1.0.0/grassland-monobiome-dark.xpi diff --git a/app-config/firefox/grassland-monobiome-light.xpi b/app-config/firefox/pre-v1.0.0/grassland-monobiome-light.xpi similarity index 100% rename from app-config/firefox/grassland-monobiome-light.xpi rename to app-config/firefox/pre-v1.0.0/grassland-monobiome-light.xpi diff --git a/app-config/firefox/monobiome-dark.xpi b/app-config/firefox/pre-v1.0.0/monobiome-dark.xpi similarity index 100% rename from app-config/firefox/monobiome-dark.xpi rename to app-config/firefox/pre-v1.0.0/monobiome-dark.xpi diff --git a/app-config/firefox/monobiome-light.xpi b/app-config/firefox/pre-v1.0.0/monobiome-light.xpi similarity index 100% rename from app-config/firefox/monobiome-light.xpi rename to app-config/firefox/pre-v1.0.0/monobiome-light.xpi diff --git a/app-config/firefox/savanna-monobiome-dark.xpi b/app-config/firefox/pre-v1.0.0/savanna-monobiome-dark.xpi similarity index 100% rename from app-config/firefox/savanna-monobiome-dark.xpi rename to app-config/firefox/pre-v1.0.0/savanna-monobiome-dark.xpi diff --git a/app-config/firefox/savanna-monobiome-light.xpi b/app-config/firefox/pre-v1.0.0/savanna-monobiome-light.xpi similarity index 100% rename from app-config/firefox/savanna-monobiome-light.xpi rename to app-config/firefox/pre-v1.0.0/savanna-monobiome-light.xpi diff --git a/app-config/firefox/tundra-monobiome-dark.xpi b/app-config/firefox/pre-v1.0.0/tundra-monobiome-dark.xpi similarity index 100% rename from app-config/firefox/tundra-monobiome-dark.xpi rename to app-config/firefox/pre-v1.0.0/tundra-monobiome-dark.xpi diff --git a/app-config/firefox/tundra-monobiome-light.xpi b/app-config/firefox/pre-v1.0.0/tundra-monobiome-light.xpi similarity index 100% rename from app-config/firefox/tundra-monobiome-light.xpi rename to app-config/firefox/pre-v1.0.0/tundra-monobiome-light.xpi diff --git a/app-config/firefox/v1.0.2/monobiome-alpine-dark.xpi b/app-config/firefox/v1.0.2/monobiome-alpine-dark.xpi new file mode 100644 index 0000000..b8df1c9 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-alpine-dark.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-alpine-dark.zip b/app-config/firefox/v1.0.2/monobiome-alpine-dark.zip new file mode 100644 index 0000000..b8df1c9 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-alpine-dark.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-alpine-light.xpi b/app-config/firefox/v1.0.2/monobiome-alpine-light.xpi new file mode 100644 index 0000000..fd52d57 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-alpine-light.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-alpine-light.zip b/app-config/firefox/v1.0.2/monobiome-alpine-light.zip new file mode 100644 index 0000000..fd52d57 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-alpine-light.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-badlands-dark.xpi b/app-config/firefox/v1.0.2/monobiome-badlands-dark.xpi new file mode 100644 index 0000000..2a5ff54 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-badlands-dark.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-badlands-dark.zip b/app-config/firefox/v1.0.2/monobiome-badlands-dark.zip new file mode 100644 index 0000000..2a5ff54 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-badlands-dark.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-badlands-light.xpi b/app-config/firefox/v1.0.2/monobiome-badlands-light.xpi new file mode 100644 index 0000000..78b3fff Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-badlands-light.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-badlands-light.zip b/app-config/firefox/v1.0.2/monobiome-badlands-light.zip new file mode 100644 index 0000000..78b3fff Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-badlands-light.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-chaparral-dark.xpi b/app-config/firefox/v1.0.2/monobiome-chaparral-dark.xpi new file mode 100644 index 0000000..e2b7306 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-chaparral-dark.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-chaparral-dark.zip b/app-config/firefox/v1.0.2/monobiome-chaparral-dark.zip new file mode 100644 index 0000000..e2b7306 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-chaparral-dark.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-chaparral-light.xpi b/app-config/firefox/v1.0.2/monobiome-chaparral-light.xpi new file mode 100644 index 0000000..260e07e Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-chaparral-light.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-chaparral-light.zip b/app-config/firefox/v1.0.2/monobiome-chaparral-light.zip new file mode 100644 index 0000000..260e07e Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-chaparral-light.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-grassland-dark.xpi b/app-config/firefox/v1.0.2/monobiome-grassland-dark.xpi new file mode 100644 index 0000000..bf210ad Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-grassland-dark.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-grassland-dark.zip b/app-config/firefox/v1.0.2/monobiome-grassland-dark.zip new file mode 100644 index 0000000..bf210ad Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-grassland-dark.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-grassland-light.xpi b/app-config/firefox/v1.0.2/monobiome-grassland-light.xpi new file mode 100644 index 0000000..724e169 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-grassland-light.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-grassland-light.zip b/app-config/firefox/v1.0.2/monobiome-grassland-light.zip new file mode 100644 index 0000000..724e169 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-grassland-light.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-savanna-dark.xpi b/app-config/firefox/v1.0.2/monobiome-savanna-dark.xpi new file mode 100644 index 0000000..f0dd1d6 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-savanna-dark.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-savanna-dark.zip b/app-config/firefox/v1.0.2/monobiome-savanna-dark.zip new file mode 100644 index 0000000..f0dd1d6 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-savanna-dark.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-savanna-light.xpi b/app-config/firefox/v1.0.2/monobiome-savanna-light.xpi new file mode 100644 index 0000000..15047e2 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-savanna-light.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-savanna-light.zip b/app-config/firefox/v1.0.2/monobiome-savanna-light.zip new file mode 100644 index 0000000..15047e2 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-savanna-light.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-tundra-dark.xpi b/app-config/firefox/v1.0.2/monobiome-tundra-dark.xpi new file mode 100644 index 0000000..12e7ef0 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-tundra-dark.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-tundra-dark.zip b/app-config/firefox/v1.0.2/monobiome-tundra-dark.zip new file mode 100644 index 0000000..12e7ef0 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-tundra-dark.zip differ diff --git a/app-config/firefox/v1.0.2/monobiome-tundra-light.xpi b/app-config/firefox/v1.0.2/monobiome-tundra-light.xpi new file mode 100644 index 0000000..3220a71 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-tundra-light.xpi differ diff --git a/app-config/firefox/v1.0.2/monobiome-tundra-light.zip b/app-config/firefox/v1.0.2/monobiome-tundra-light.zip new file mode 100644 index 0000000..3220a71 Binary files /dev/null and b/app-config/firefox/v1.0.2/monobiome-tundra-light.zip differ