css: rework color scheme to use new color palette.
Add a new color palette and rework all site colors (both light mode and dark mode) to
use the new palette.
This ensures that colors are used consistently, from a carefully designed color palette,
instead of being chosen at random.
Before, colors in light mode were chosen on an ad-hoc basis, which resulted in a lot of
random colors and inconsistent design.
The new palette has 7 hues: red, orange, yellow, green, blue, azure (a lighter blue), and
purple. There's also a greyscale. Each hue has 10 shades of brightness, which (including
grey) gives us 80 total colors.
Colors are named like this:
var(--red-0); /* very light red */
var(--red-2); /* light red */
var(--red-5); /* medium red */
var(--red-7); /* dark red */
var(--red-9); /* very dark red */
var(--green-7); /* dark green */
var(--blue-5); /* medium blue */
var(--purple-3); /* light purple */
/* etc */
The color palette is designed to meet the following criteria:
* To have close equivalents to the main colors used in the old color scheme,
especially tag colors, so that changes to major colors are minimized.
* To produce a set of colors that can be used as as main text colors, as background
colors, and as accent colors, both in light mode and dark mode.
* To ensure that colors at the same brightness level have the same perceived brightness.
Green-4, blue-4, red-4, purple-4, etc should all have the same brightness and contrast
ratios. This way colors look balanced. This is actually a difficult problem, because human
color perception is non-linear, so you can't just scale brightness values linearly.
There's a color palette test page at https://danbooru.donmai/static/colors
Notable changes to colors in light mode:
* Username colors are the same as tag colors.
* Copyright tags are a deeper purple.
* Builders are a deeper purple (fixes #4626).
* Moderators are green.
* Gold users are orange.
* Parent borders are a darker green.
* Child borders are a darker orange.
* Unsaved notes have a thicker red border.
* Selected notes have a thicker blue (not green) border.
This commit is contained in:
46
app/logical/color_palette.rb
Normal file
46
app/logical/color_palette.rb
Normal file
@@ -0,0 +1,46 @@
|
||||
module ColorPalette
|
||||
module_function
|
||||
|
||||
HUES = {
|
||||
grey: 265,
|
||||
red: 12,
|
||||
orange: 37,
|
||||
yellow: 68,
|
||||
green: 130,
|
||||
azure: 242,
|
||||
blue: 257,
|
||||
purple: 282,
|
||||
}
|
||||
|
||||
SATURATIONS = {
|
||||
grey: [17.5]*10,
|
||||
red: [100, 80, 100, 100, 100, 90, 100, 90, 75, 50],
|
||||
yellow: [60, 60, 60, 100, 100, 100, 100, 100, 100, 90],
|
||||
green: [40, 40, 50, 90, 100, 100, 100, 100, 100, 100],
|
||||
purple: [100, 70, 90, 100, 100, 100, 100, 100, 80, 80],
|
||||
}
|
||||
|
||||
LIGHTNESSES = [
|
||||
97.0, # 0
|
||||
92.0, # 1
|
||||
84.0, # 2
|
||||
70.5, # 3
|
||||
61.0, # 4
|
||||
51.2, # 5
|
||||
40.0, # 6
|
||||
28.0, # 7
|
||||
19.0, # 8
|
||||
12.0, # 9
|
||||
]
|
||||
|
||||
def css_rules
|
||||
HUES.flat_map do |name, hue|
|
||||
LIGHTNESSES.each_with_index.map do |lightness, i|
|
||||
saturation = SATURATIONS.dig(name, i) || 100
|
||||
hex = Hsluv.hsluv_to_hex(hue, saturation, lightness)
|
||||
|
||||
"--#{name}-#{i}: #{hex}; /* hsluv(#{hue}, #{saturation}, #{lightness}) */"
|
||||
end
|
||||
end.join("\n")
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user