Skip to main content

max / audiofiles

theme: consume the shared intent layer (theme-common 0.6.0) theme.rs parses + resolves via theme_common::resolve and reads each egui field from the intent tokens (rgb()); the local color math (BT.601 contrast, sRGB lerp) is gone — contrast_color/lerp_color now wrap theme_common's OKLab blend and WCAG contrast, so the derivation choices stay here but the math is shared. Accent fields read the categorical ramp (all six stay distinct). The 28 bundled themes are migrated to the intent schema; [spacing] and classification_color stay app-local. Tests updated for the intent schema + perceptual math.
Co-Authored-By
Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-06-13 01:37 UTC
Signed with PGP, not checked
Commit: abbaa6684d5cba5584689c5002d921bb4221f162
Parent: a620402
30 files changed, +845 insertions, -555 deletions
M Cargo.lock +1 -1
@@ -5045,7 +5045,7 @@
5045 5045
5046 5046 [[package]]
5047 5047 name = "theme-common"
5048 - version = "0.4.0"
5048 + version = "0.6.0"
5049 5049 dependencies = [
5050 5050 "serde",
5051 5051 "toml",
@@ -7,24 +7,33 @@
7 7 name = "audiofiles"
8 8 variant = "light"
9 9
10 - [background]
11 - primary = "#CCDAD1" # Ash Grey — main canvas
12 - secondary = "#B4C5BB" # mid sage — headers / secondary panels
13 - tertiary = "#9CAEA9" # Ash Grey deep — selected / inset
14 - surface = "#DAE3DC" # lighter sage — raised cards/rows
10 + [surface]
11 + page = "#CCDAD1"
12 + raised = "#DAE3DC"
13 + sunken = "#9CAEA9"
14 + overlay = "#B4C5BB"
15 15
16 - [foreground]
17 - primary = "#38302E" # Deep Mocha — body text
18 - secondary = "#6F6866" # Dim Grey
19 - muted = "#788585" # Grey Olive — hints / disabled
16 + [content]
17 + primary = "#38302E"
18 + secondary = "#6F6866"
19 + muted = "#788585"
20 20
21 - [accent]
22 - red = "#B05F4E" # muted terracotta
23 - green = "#6F8A5C" # muted olive
24 - blue = "#5E7C8E" # muted slate
25 - yellow = "#C19A53" # muted ochre
26 - purple = "#836A80" # muted mauve
27 - cyan = "#5F8C82" # muted teal
21 + [action]
22 + primary = "#5E7C8E"
28 23
29 - [border]
30 - default = "#9CAEA9"
24 + [status]
25 + danger = "#B05F4E"
26 + success = "#6F8A5C"
27 + warning = "#C19A53"
28 + info = "#5F8C82"
29 +
30 + [line]
31 + border = "#9CAEA9"
32 +
33 + [category]
34 + one = "#B05F4E"
35 + two = "#6F8A5C"
36 + three = "#5E7C8E"
37 + four = "#C19A53"
38 + five = "#836A80"
39 + six = "#5F8C82"
@@ -5,24 +5,33 @@
5 5 name = "Ayu Light"
6 6 variant = "light"
7 7
8 - [background]
9 - primary = "#e7eaed"
10 - secondary = "#dde1e5"
11 - tertiary = "#d0d4d8"
12 - surface = "#f2f4f6"
8 + [surface]
9 + page = "#e7eaed"
10 + raised = "#f2f4f6"
11 + sunken = "#d0d4d8"
12 + overlay = "#dde1e5"
13 13
14 - [foreground]
15 - primary = "#5c6166"
14 + [content]
15 + primary = "#5c6166"
16 16 secondary = "#6b7580"
17 - muted = "#8b9199"
17 + muted = "#8b9199"
18 18
19 - [accent]
20 - red = "#f07171"
21 - green = "#86b300"
22 - blue = "#399ee6"
23 - yellow = "#ffaa33"
24 - purple = "#a37acc"
25 - cyan = "#55b4d4"
19 + [action]
20 + primary = "#399ee6"
26 21
27 - [border]
28 - default = "#828c9a"
22 + [status]
23 + danger = "#f07171"
24 + success = "#86b300"
25 + warning = "#ffaa33"
26 + info = "#55b4d4"
27 +
28 + [line]
29 + border = "#828c9a"
30 +
31 + [category]
32 + one = "#f07171"
33 + two = "#86b300"
34 + three = "#399ee6"
35 + four = "#ffaa33"
36 + five = "#a37acc"
37 + six = "#55b4d4"
@@ -5,24 +5,33 @@
5 5 name = "Ayu Mirage"
6 6 variant = "dark"
7 7
8 - [background]
9 - primary = "#1f2430"
10 - secondary = "#191e29"
11 - tertiary = "#272d38"
12 - surface = "#242936"
8 + [surface]
9 + page = "#1f2430"
10 + raised = "#242936"
11 + sunken = "#272d38"
12 + overlay = "#191e29"
13 13
14 - [foreground]
15 - primary = "#cccac2"
14 + [content]
15 + primary = "#cccac2"
16 16 secondary = "#b8b4aa"
17 - muted = "#707a8c"
17 + muted = "#707a8c"
18 18
19 - [accent]
20 - red = "#f28779"
21 - green = "#bae67e"
22 - blue = "#5ccfe6"
23 - yellow = "#ffd580"
24 - purple = "#d4bfff"
25 - cyan = "#95e6cb"
19 + [action]
20 + primary = "#5ccfe6"
26 21
27 - [border]
28 - default = "#33415e"
22 + [status]
23 + danger = "#f28779"
24 + success = "#bae67e"
25 + warning = "#ffd580"
26 + info = "#95e6cb"
27 +
28 + [line]
29 + border = "#33415e"
30 +
31 + [category]
32 + one = "#f28779"
33 + two = "#bae67e"
34 + three = "#5ccfe6"
35 + four = "#ffd580"
36 + five = "#d4bfff"
37 + six = "#95e6cb"
@@ -5,24 +5,33 @@
5 5 name = "Carbonfox"
6 6 variant = "dark"
7 7
8 - [background]
9 - primary = "#161616"
10 - secondary = "#101010"
11 - tertiary = "#1e1e1e"
12 - surface = "#252525"
8 + [surface]
9 + page = "#161616"
10 + raised = "#252525"
11 + sunken = "#1e1e1e"
12 + overlay = "#101010"
13 13
14 - [foreground]
15 - primary = "#f2f4f8"
14 + [content]
15 + primary = "#f2f4f8"
16 16 secondary = "#dde1e6"
17 - muted = "#878d96"
17 + muted = "#878d96"
18 18
19 - [accent]
20 - red = "#ee5396"
21 - green = "#25be6a"
22 - blue = "#78a9ff"
23 - yellow = "#08bdba"
24 - purple = "#be95ff"
25 - cyan = "#33b1ff"
19 + [action]
20 + primary = "#78a9ff"
26 21
27 - [border]
28 - default = "#393939"
22 + [status]
23 + danger = "#ee5396"
24 + success = "#25be6a"
25 + warning = "#08bdba"
26 + info = "#33b1ff"
27 +
28 + [line]
29 + border = "#393939"
30 +
31 + [category]
32 + one = "#ee5396"
33 + two = "#25be6a"
34 + three = "#78a9ff"
35 + four = "#08bdba"
36 + five = "#be95ff"
37 + six = "#33b1ff"
@@ -5,24 +5,33 @@
5 5 name = "Catppuccin Frappé"
6 6 variant = "dark"
7 7
8 - [background]
9 - primary = "#303446"
10 - secondary = "#292c3c"
11 - tertiary = "#414559"
12 - surface = "#232634"
8 + [surface]
9 + page = "#303446"
10 + raised = "#232634"
11 + sunken = "#414559"
12 + overlay = "#292c3c"
13 13
14 - [foreground]
15 - primary = "#c6d0f5"
14 + [content]
15 + primary = "#c6d0f5"
16 16 secondary = "#b5bfe2"
17 - muted = "#a5adce"
17 + muted = "#a5adce"
18 18
19 - [accent]
20 - red = "#e78284"
21 - green = "#a6d189"
22 - blue = "#8caaee"
23 - yellow = "#e5c890"
24 - purple = "#ca9ee6"
25 - cyan = "#81c8be"
19 + [action]
20 + primary = "#8caaee"
26 21
27 - [border]
28 - default = "#626880"
22 + [status]
23 + danger = "#e78284"
24 + success = "#a6d189"
25 + warning = "#e5c890"
26 + info = "#81c8be"
27 +
28 + [line]
29 + border = "#626880"
30 +
31 + [category]
32 + one = "#e78284"
33 + two = "#a6d189"
34 + three = "#8caaee"
35 + four = "#e5c890"
36 + five = "#ca9ee6"
37 + six = "#81c8be"
@@ -5,24 +5,33 @@
5 5 name = "Catppuccin Latte"
6 6 variant = "light"
7 7
8 - [background]
9 - primary = "#e6e9ef"
10 - secondary = "#dce0e8"
11 - tertiary = "#ccd0da"
12 - surface = "#eff1f5"
8 + [surface]
9 + page = "#e6e9ef"
10 + raised = "#eff1f5"
11 + sunken = "#ccd0da"
12 + overlay = "#dce0e8"
13 13
14 - [foreground]
15 - primary = "#4c4f69"
14 + [content]
15 + primary = "#4c4f69"
16 16 secondary = "#5c5f77"
17 - muted = "#6c6f82"
17 + muted = "#6c6f82"
18 18
19 - [accent]
20 - red = "#d20f39"
21 - green = "#40a02b"
22 - blue = "#1e66f5"
23 - yellow = "#df8e1d"
24 - purple = "#8839ef"
25 - cyan = "#04a5e5"
19 + [action]
20 + primary = "#1e66f5"
26 21
27 - [border]
28 - default = "#bcc0cc"
22 + [status]
23 + danger = "#d20f39"
24 + success = "#40a02b"
25 + warning = "#df8e1d"
26 + info = "#04a5e5"
27 +
28 + [line]
29 + border = "#bcc0cc"
30 +
31 + [category]
32 + one = "#d20f39"
33 + two = "#40a02b"
34 + three = "#1e66f5"
35 + four = "#df8e1d"
36 + five = "#8839ef"
37 + six = "#04a5e5"
@@ -5,24 +5,33 @@
5 5 name = "Catppuccin Macchiato"
6 6 variant = "dark"
7 7
8 - [background]
9 - primary = "#24273a"
10 - secondary = "#1e2030"
11 - tertiary = "#363a4f"
12 - surface = "#181926"
8 + [surface]
9 + page = "#24273a"
10 + raised = "#181926"
11 + sunken = "#363a4f"
12 + overlay = "#1e2030"
13 13
14 - [foreground]
15 - primary = "#cad3f5"
14 + [content]
15 + primary = "#cad3f5"
16 16 secondary = "#b8c0e0"
17 - muted = "#a5adcb"
17 + muted = "#a5adcb"
18 18
19 - [accent]
20 - red = "#ed8796"
21 - green = "#a6da95"
22 - blue = "#8aadf4"
23 - yellow = "#eed49f"
24 - purple = "#c6a0f6"
25 - cyan = "#8bd5ca"
19 + [action]
20 + primary = "#8aadf4"
26 21
27 - [border]
28 - default = "#5b6078"
22 + [status]
23 + danger = "#ed8796"
24 + success = "#a6da95"
25 + warning = "#eed49f"
26 + info = "#8bd5ca"
27 +
28 + [line]
29 + border = "#5b6078"
30 +
31 + [category]
32 + one = "#ed8796"
33 + two = "#a6da95"
34 + three = "#8aadf4"
35 + four = "#eed49f"
36 + five = "#c6a0f6"
37 + six = "#8bd5ca"
@@ -5,24 +5,33 @@
5 5 name = "Catppuccin Mocha"
6 6 variant = "dark"
7 7
8 - [background]
9 - primary = "#181825"
10 - secondary = "#11111b"
11 - tertiary = "#313244"
12 - surface = "#1e1e2e"
8 + [surface]
9 + page = "#181825"
10 + raised = "#1e1e2e"
11 + sunken = "#313244"
12 + overlay = "#11111b"
13 13
14 - [foreground]
15 - primary = "#cdd6f4"
14 + [content]
15 + primary = "#cdd6f4"
16 16 secondary = "#bac2de"
17 - muted = "#9399b2"
17 + muted = "#9399b2"
18 18
19 - [accent]
20 - red = "#f38ba8"
21 - green = "#a6e3a1"
22 - blue = "#89b4fa"
23 - yellow = "#f9e2af"
24 - purple = "#cba6f7"
25 - cyan = "#89dceb"
19 + [action]
20 + primary = "#89b4fa"
26 21
27 - [border]
28 - default = "#45475a"
22 + [status]
23 + danger = "#f38ba8"
24 + success = "#a6e3a1"
25 + warning = "#f9e2af"
26 + info = "#89dceb"
27 +
28 + [line]
29 + border = "#45475a"
30 +
31 + [category]
32 + one = "#f38ba8"
33 + two = "#a6e3a1"
34 + three = "#89b4fa"
35 + four = "#f9e2af"
36 + five = "#cba6f7"
37 + six = "#89dceb"
@@ -5,24 +5,33 @@
5 5 name = "Dawnfox"
6 6 variant = "light"
7 7
8 - [background]
9 - primary = "#faf4ed"
10 - secondary = "#ebe5df"
11 - tertiary = "#ebe0df"
12 - surface = "#f5efe8"
8 + [surface]
9 + page = "#faf4ed"
10 + raised = "#f5efe8"
11 + sunken = "#ebe0df"
12 + overlay = "#ebe5df"
13 13
14 - [foreground]
15 - primary = "#575279"
14 + [content]
15 + primary = "#575279"
16 16 secondary = "#625c87"
17 - muted = "#a8a3b3"
17 + muted = "#a8a3b3"
18 18
19 - [accent]
20 - red = "#b4637a"
21 - green = "#618774"
22 - blue = "#286983"
23 - yellow = "#ea9d34"
24 - purple = "#907aa9"
25 - cyan = "#56949f"
19 + [action]
20 + primary = "#286983"
26 21
27 - [border]
28 - default = "#bdbfc9"
22 + [status]
23 + danger = "#b4637a"
24 + success = "#618774"
25 + warning = "#ea9d34"
26 + info = "#56949f"
27 +
28 + [line]
29 + border = "#bdbfc9"
30 +
31 + [category]
32 + one = "#b4637a"
33 + two = "#618774"
34 + three = "#286983"
35 + four = "#ea9d34"
36 + five = "#907aa9"
37 + six = "#56949f"
@@ -5,24 +5,33 @@
5 5 name = "Dracula"
6 6 variant = "dark"
7 7
8 - [background]
9 - primary = "#222430"
10 - secondary = "#191A21"
11 - tertiary = "#44475a"
12 - surface = "#282A36"
8 + [surface]
9 + page = "#222430"
10 + raised = "#282A36"
11 + sunken = "#44475a"
12 + overlay = "#191A21"
13 13
14 - [foreground]
15 - primary = "#f8f8f2"
14 + [content]
15 + primary = "#f8f8f2"
16 16 secondary = "#f8f8f2"
17 - muted = "#6272A4"
17 + muted = "#6272A4"
18 18
19 - [accent]
20 - red = "#ff5555"
21 - green = "#50fa7b"
22 - blue = "#8be9fd"
23 - yellow = "#f1fa8c"
24 - purple = "#BD93F9"
25 - cyan = "#8be9fd"
19 + [action]
20 + primary = "#8be9fd"
26 21
27 - [border]
28 - default = "#44475a"
22 + [status]
23 + danger = "#ff5555"
24 + success = "#50fa7b"
25 + warning = "#f1fa8c"
26 + info = "#8be9fd"
27 +
28 + [line]
29 + border = "#44475a"
30 +
31 + [category]
32 + one = "#ff5555"
33 + two = "#50fa7b"
34 + three = "#8be9fd"
35 + four = "#f1fa8c"
36 + five = "#BD93F9"
37 + six = "#8be9fd"
@@ -5,24 +5,33 @@
5 5 name = "Everforest"
6 6 variant = "dark"
7 7
8 - [background]
9 - primary = "#2d353b"
10 - secondary = "#272e33"
11 - tertiary = "#3d484d"
12 - surface = "#343f44"
8 + [surface]
9 + page = "#2d353b"
10 + raised = "#343f44"
11 + sunken = "#3d484d"
12 + overlay = "#272e33"
13 13
14 - [foreground]
15 - primary = "#d3c6aa"
14 + [content]
15 + primary = "#d3c6aa"
16 16 secondary = "#9da9a0"
17 - muted = "#7a8478"
17 + muted = "#7a8478"
18 18
19 - [accent]
20 - red = "#e67e80"
21 - green = "#a7c080"
22 - blue = "#7fbbb3"
23 - yellow = "#dbbc7f"
24 - purple = "#d699b6"
25 - cyan = "#83c092"
19 + [action]
20 + primary = "#7fbbb3"
26 21
27 - [border]
28 - default = "#3d484d"
22 + [status]
23 + danger = "#e67e80"
24 + success = "#a7c080"
25 + warning = "#dbbc7f"
26 + info = "#83c092"
27 +
28 + [line]
29 + border = "#3d484d"
30 +
31 + [category]
32 + one = "#e67e80"
33 + two = "#a7c080"
34 + three = "#7fbbb3"
35 + four = "#dbbc7f"
36 + five = "#d699b6"
37 + six = "#83c092"
@@ -5,24 +5,33 @@
5 5 name = "Flatwhite"
6 6 variant = "light"
7 7
8 - [background]
9 - primary = "#f1ece4"
10 - secondary = "#e4ddd2"
11 - tertiary = "#dcd3c6"
12 - surface = "#f7f3ee"
8 + [surface]
9 + page = "#f1ece4"
10 + raised = "#f7f3ee"
11 + sunken = "#dcd3c6"
12 + overlay = "#e4ddd2"
13 13
14 - [foreground]
15 - primary = "#605a52"
14 + [content]
15 + primary = "#605a52"
16 16 secondary = "#786d5e"
17 - muted = "#9a8b78"
17 + muted = "#9a8b78"
18 18
19 - [accent]
20 - red = "#ff1414"
21 - green = "#2db448"
22 - blue = "#4c5361"
23 - yellow = "#f2a60d"
24 - purple = "#614c61"
25 - cyan = "#465953"
19 + [action]
20 + primary = "#4c5361"
26 21
27 - [border]
28 - default = "#93836c"
22 + [status]
23 + danger = "#ff1414"
24 + success = "#2db448"
25 + warning = "#f2a60d"
26 + info = "#465953"
27 +
28 + [line]
29 + border = "#93836c"
30 +
31 + [category]
32 + one = "#ff1414"
33 + two = "#2db448"
34 + three = "#4c5361"
35 + four = "#f2a60d"
36 + five = "#614c61"
37 + six = "#465953"
@@ -5,24 +5,33 @@
5 5 name = "Gruvbox Dark"
6 6 variant = "dark"
7 7
8 - [background]
9 - primary = "#282828"
10 - secondary = "#1d2021"
11 - tertiary = "#504945"
12 - surface = "#3c3836"
8 + [surface]
9 + page = "#282828"
10 + raised = "#3c3836"
11 + sunken = "#504945"
12 + overlay = "#1d2021"
13 13
14 - [foreground]
15 - primary = "#ebdbb2"
14 + [content]
15 + primary = "#ebdbb2"
16 16 secondary = "#d5c4a1"
17 - muted = "#a89984"
17 + muted = "#a89984"
18 18
19 - [accent]
20 - red = "#fb4934"
21 - green = "#b8bb26"
22 - blue = "#83a598"
23 - yellow = "#fabd2f"
24 - purple = "#d3869b"
25 - cyan = "#8ec07c"
19 + [action]
20 + primary = "#83a598"
26 21
27 - [border]
28 - default = "#504945"
22 + [status]
23 + danger = "#fb4934"
24 + success = "#b8bb26"
25 + warning = "#fabd2f"
26 + info = "#8ec07c"
27 +
28 + [line]
29 + border = "#504945"
30 +
31 + [category]
32 + one = "#fb4934"
33 + two = "#b8bb26"
34 + three = "#83a598"
35 + four = "#fabd2f"
36 + five = "#d3869b"
37 + six = "#8ec07c"
@@ -5,24 +5,33 @@
5 5 name = "Gruvbox Light"
6 6 variant = "light"
7 7
8 - [background]
9 - primary = "#fbf1c7"
10 - secondary = "#f2e5bc"
11 - tertiary = "#d5c4a1"
12 - surface = "#f9f5d7"
8 + [surface]
9 + page = "#fbf1c7"
10 + raised = "#f9f5d7"
11 + sunken = "#d5c4a1"
12 + overlay = "#f2e5bc"
13 13
14 - [foreground]
15 - primary = "#3c3836"
14 + [content]
15 + primary = "#3c3836"
16 16 secondary = "#504945"
17 - muted = "#7c6f64"
17 + muted = "#7c6f64"
18 18
19 - [accent]
20 - red = "#9d0006"
21 - green = "#79740e"
22 - blue = "#076678"
23 - yellow = "#b57614"
24 - purple = "#8f3f71"
25 - cyan = "#427b58"
19 + [action]
20 + primary = "#076678"
26 21
27 - [border]
28 - default = "#d5c4a1"
22 + [status]
23 + danger = "#9d0006"
24 + success = "#79740e"
25 + warning = "#b57614"
26 + info = "#427b58"
27 +
28 + [line]
29 + border = "#d5c4a1"
30 +
31 + [category]
32 + one = "#9d0006"
33 + two = "#79740e"
34 + three = "#076678"
35 + four = "#b57614"
36 + five = "#8f3f71"
37 + six = "#427b58"