summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-29 10:19:00 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:16 -0300
commitc41d23f454721e8f926edc8c61b9d76a9d38d0e0 (patch)
treea6219acb137b9f6e42c2de425a92e04bbf65d110
parent5252204c1dedd31f5cfc09d7f3fdc4038d379b8c (diff)
downloadpardes-c41d23f454721e8f926edc8c61b9d76a9d38d0e0.tar.gz
pardes-c41d23f454721e8f926edc8c61b9d76a9d38d0e0.zip
Dracula, as close to the original as pardes draws: dracula, dracula_soft, alucard
Every colour is the original's own, cited file:line in each theme file. Sources: official palette (Dracula, Alucard); https://github.com/dracula/dracula-theme; ~/05-genizah/dracula-theme; 1e04a4b768302fa2de37d09cc7b8087eabcd3ed8 official VS Code port: roles, UI, ANSI, Soft transform; https://github.com/dracula/visual-studio-code; ~/05-genizah/dracula-visual-studio-code; a08a206f2c8420ba3c05f0e8d01d43b2f933fdf8 Chrome moved to meet pardes's floors (text, syntax, ANSI untouched): dracula: focused tag ground #282a36 -> #41434d: 1.11:1 off the unfocused #21222c, pardes needs 1.5:1 on a dark page dracula: unfocused tag text #6272a4 -> #7b89b3: 3.36:1 on #21222c, tag text needs 4.5:1 to be read and run dracula_soft: focused tag ground #282a36 -> #454751: 1.05:1 off the unfocused #272727, pardes needs 1.5:1 on a dark page dracula_soft: unfocused tag text #7b7f8b -> #8b8e99: 3.74:1 on #272727, tag text needs 4.5:1 to be read and run alucard: unfocused tag text #6c664b -> #5d5841: 3.75:1 on #cfcfde, tag text needs 4.5:1 to be read and run
-rw-r--r--docs/themes.md1
-rw-r--r--src/colors.zig4
-rw-r--r--src/themes/alucard.zig76
-rw-r--r--src/themes/dracula.zig79
-rw-r--r--src/themes/dracula_soft.zig79
5 files changed, 239 insertions, 0 deletions
diff --git a/docs/themes.md b/docs/themes.md
index 0ef6b4f8..5ff07ae2 100644
--- a/docs/themes.md
+++ b/docs/themes.md
@@ -106,6 +106,7 @@ are never adjusted.
| --- | --- | --- |
| Visual Studio Code | `dark_plus` | VS Code 1.130.0 `extensions/theme-defaults/themes/dark_plus.json` and `dark_vs.json`; [microsoft/vscode](https://github.com/microsoft/vscode) 1.130.0 |
| Solarized | `solarized_dark`, `solarized_light` | [altercation/solarized](https://github.com/altercation/solarized); `~/05-genizah/solarized/vim-colors-solarized/colors/solarized.vim` |
+| Dracula | `dracula`, `dracula_soft`, `alucard` | [dracula/dracula-theme](https://github.com/dracula/dracula-theme); [dracula/visual-studio-code](https://github.com/dracula/visual-studio-code) |
## Make a theme your own
diff --git a/src/colors.zig b/src/colors.zig
index 488da162..40a48c1c 100644
--- a/src/colors.zig
+++ b/src/colors.zig
@@ -329,6 +329,9 @@ const curated = struct {
pub const dark_plus = @import("themes/dark_plus.zig");
pub const solarized_dark = @import("themes/solarized_dark.zig");
pub const solarized_light = @import("themes/solarized_light.zig");
+ pub const dracula = @import("themes/dracula.zig");
+ pub const dracula_soft = @import("themes/dracula_soft.zig");
+ pub const alucard = @import("themes/alucard.zig");
// The legacy pair last.
pub const helix = @import("themes/helix.zig");
pub const dark = @import("themes/dark.zig");
@@ -393,6 +396,7 @@ const theme_groups = [_]ThemeGroup{
.{ .title = "Pardes themes", .first = "orchard" },
.{ .title = "Visual Studio Code", .first = "dark_plus" },
.{ .title = "Solarized", .first = "solarized_dark" },
+ .{ .title = "Dracula", .first = "dracula" },
.{ .title = "Legacy themes", .first = "helix" },
};
diff --git a/src/themes/alucard.zig b/src/themes/alucard.zig
new file mode 100644
index 00000000..1b5695cc
--- /dev/null
+++ b/src/themes/alucard.zig
@@ -0,0 +1,76 @@
+//! Alucard (Dracula light): Dracula, as close to the original as pardes can draw it.
+//! Every value is the original's own, cited on its line (path:line key); the
+//! chrome pardes needs and the original lacks is derived from its palette.
+//! Sources:
+//! official palette (Dracula, Alucard); url https://github.com/dracula/dracula-theme; genizah ~/05-genizah/dracula-theme; commit 1e04a4b768302fa2de37d09cc7b8087eabcd3ed8
+//! official VS Code port: roles, UI, ANSI, Soft transform; url https://github.com/dracula/visual-studio-code; genizah ~/05-genizah/dracula-visual-studio-code; commit a08a206f2c8420ba3c05f0e8d01d43b2f933fdf8
+//! Tags: the tab (focused = the active tab, unfocused = the inactive one).
+//! Adjusted to meet pardes's floors (chrome only; text, syntax and ANSI are untouched):
+//! - unfocused tag text #6c664b -> #5d5841: 3.75:1 on #cfcfde, tag text needs 4.5:1 to be read and run
+//! Upstream notes: The README gives Alucard only as a palette; roles follow
+//! dracula.yml, UI surfaces it lacks are derived.
+pub const theme = .{
+ .name = "alucard",
+ // ~/05-genizah/dracula-theme/README.md:34 Alucard Background; role as dracula.yml editor.background *BG
+ .bg = .{ 0xff, 0xfb, 0xeb },
+ // ~/05-genizah/dracula-theme/README.md:37 Alucard Foreground; role as dracula.yml editor.foreground *FG
+ .fg = .{ 0x1f, 0x1f, 0x1f },
+ // ~/05-genizah/dracula-theme/README.md:36 Alucard Selection; role as dracula.yml editor.selectionBackground *SELECTION
+ .sel_bg = .{ 0xcf, 0xcf, 0xde },
+ // the original keeps text colours over its selection; its text colour
+ .sel_fg = .{ 0x1f, 0x1f, 0x1f },
+ // ~/05-genizah/dracula-theme/README.md:36 Alucard Selection; role as dracula.yml tab.inactiveBackground (*BGDark: Alucard has no BG variants; Selection derived)
+ .tag_bg = .{ 0xcf, 0xcf, 0xde },
+ // ~/05-genizah/dracula-theme/README.md:38 Alucard Comment; role as dracula.yml tab.inactiveForeground *COMMENT #6c664b, adjusted
+ .tag_fg = .{ 0x5d, 0x58, 0x41 },
+ // ~/05-genizah/dracula-theme/README.md:34 Alucard Background; role as dracula.yml tab.activeBackground *BG
+ .tag_active_bg = .{ 0xff, 0xfb, 0xeb },
+ // ~/05-genizah/dracula-theme/README.md:37 Alucard Foreground; role as dracula.yml tab.activeForeground *FG
+ .tag_active_fg = .{ 0x1f, 0x1f, 0x1f },
+ // the focused grip: ~/05-genizah/dracula-theme/README.md:42 Alucard Pink; role as dracula.yml tab.activeBorderTop *PINK
+ .box = .{ 0xa3, 0x14, 0x4d },
+ // derived: the grip at rest, the accent #a3144d faded toward the unfocused tag #cfcfde as far as 1.6:1 off it (0.30 of the way)
+ .box_dim = .{ 0xc2, 0x97, 0xb3 },
+ // an unsaved grip: the original's warning colour, ~/05-genizah/dracula-theme/README.md:39 Alucard Cyan; role as dracula.yml editorWarning.foreground *CYAN
+ .box_dirty = .{ 0x03, 0x6a, 0x96 },
+ // derived: the column grip, the original's type colour, ~/05-genizah/dracula-theme/README.md:39 Alucard Cyan; role as dracula.yml *CYAN
+ .column_box = .{ 0x03, 0x6a, 0x96 },
+ // ~/05-genizah/dracula-theme/README.md:42 Alucard Pink; role as dracula.yml Keywords *PINK
+ .kw = .{ 0xa3, 0x14, 0x4d },
+ // ~/05-genizah/dracula-theme/README.md:45 Alucard Yellow; role as dracula.yml Strings *YELLOW
+ .str = .{ 0x84, 0x6e, 0x15 },
+ // ~/05-genizah/dracula-theme/README.md:43 Alucard Purple; role as dracula.yml Constants *PURPLE
+ .num = .{ 0x64, 0x4a, 0xc9 },
+ // ~/05-genizah/dracula-theme/README.md:38 Alucard Comment; role as dracula.yml Comments *COMMENT
+ .comment = .{ 0x6c, 0x66, 0x4b },
+ // ~/05-genizah/dracula-theme/README.md:38 Alucard Comment; role as dracula.yml editorLineNumber.foreground *COMMENT
+ .lineno = .{ 0x6c, 0x66, 0x4b },
+ // derived: none in the original; the page
+ .scroll_track = .{ 0xff, 0xfb, 0xeb },
+ // derived: none in the original; line numbers, ~/05-genizah/dracula-theme/README.md:38 Alucard Comment; role as dracula.yml editorLineNumber.foreground *COMMENT
+ .scroll_thumb = .{ 0x6c, 0x66, 0x4b },
+ // ~/05-genizah/dracula-theme/README.md:43 Alucard Purple; role as dracula.yml editorGroup.border *PURPLE
+ .border = .{ 0x64, 0x4a, 0xc9 },
+ // ~/05-genizah/dracula-theme/README.md:44 Alucard Red; role as dracula.yml editorError.foreground *RED
+ .diagnostic_error = .{ 0xcb, 0x3a, 0x2a },
+ // ~/05-genizah/dracula-theme/README.md:39 Alucard Cyan; role as dracula.yml editorWarning.foreground *CYAN
+ .diagnostic_warning = .{ 0x03, 0x6a, 0x96 },
+ .palette = .{
+ .{ 0x1f, 0x1f, 0x1f }, // 0: ~/05-genizah/dracula-theme/README.md:37 Alucard Foreground (ANSI 0 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0xcb, 0x3a, 0x2a }, // 1: ~/05-genizah/dracula-theme/README.md:44 Alucard Red (ANSI 1 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0x14, 0x71, 0x0a }, // 2: ~/05-genizah/dracula-theme/README.md:40 Alucard Green (ANSI 2 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0x84, 0x6e, 0x15 }, // 3: ~/05-genizah/dracula-theme/README.md:45 Alucard Yellow (ANSI 3 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0x64, 0x4a, 0xc9 }, // 4: ~/05-genizah/dracula-theme/README.md:43 Alucard Purple (ANSI 4 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0xa3, 0x14, 0x4d }, // 5: ~/05-genizah/dracula-theme/README.md:42 Alucard Pink (ANSI 5 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0x03, 0x6a, 0x96 }, // 6: ~/05-genizah/dracula-theme/README.md:39 Alucard Cyan (ANSI 6 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0xcf, 0xcf, 0xde }, // 7: ~/05-genizah/dracula-theme/README.md:36 Alucard Selection (ANSI 7 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0x6c, 0x66, 0x4b }, // 8: ~/05-genizah/dracula-theme/README.md:38 Alucard Comment (ANSI 8 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0xcb, 0x3a, 0x2a }, // 9: ~/05-genizah/dracula-theme/README.md:44 Alucard Red (ANSI 9 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0x14, 0x71, 0x0a }, // 10: ~/05-genizah/dracula-theme/README.md:40 Alucard Green (ANSI 10 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0x84, 0x6e, 0x15 }, // 11: ~/05-genizah/dracula-theme/README.md:45 Alucard Yellow (ANSI 11 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0x64, 0x4a, 0xc9 }, // 12: ~/05-genizah/dracula-theme/README.md:43 Alucard Purple (ANSI 12 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0xa3, 0x14, 0x4d }, // 13: ~/05-genizah/dracula-theme/README.md:42 Alucard Pink (ANSI 13 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0x03, 0x6a, 0x96 }, // 14: ~/05-genizah/dracula-theme/README.md:39 Alucard Cyan (ANSI 14 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ .{ 0xff, 0xfb, 0xeb }, // 15: ~/05-genizah/dracula-theme/README.md:34 Alucard Background (ANSI 15 derived: Dracula's ansi order with Alucard colours, dark ink as black)
+ },
+};
diff --git a/src/themes/dracula.zig b/src/themes/dracula.zig
new file mode 100644
index 00000000..16c6ba43
--- /dev/null
+++ b/src/themes/dracula.zig
@@ -0,0 +1,79 @@
+//! Dracula: Dracula, as close to the original as pardes can draw it.
+//! Every value is the original's own, cited on its line (path:line key); the
+//! chrome pardes needs and the original lacks is derived from its palette.
+//! Sources:
+//! official palette (Dracula, Alucard); url https://github.com/dracula/dracula-theme; genizah ~/05-genizah/dracula-theme; commit 1e04a4b768302fa2de37d09cc7b8087eabcd3ed8
+//! official VS Code port: roles, UI, ANSI, Soft transform; url https://github.com/dracula/visual-studio-code; genizah ~/05-genizah/dracula-visual-studio-code; commit a08a206f2c8420ba3c05f0e8d01d43b2f933fdf8
+//! Tags: the tab (focused = the active tab, unfocused = the inactive one).
+//! Adjusted to meet pardes's floors (chrome only; text, syntax and ANSI are untouched):
+//! - focused tag ground #282a36 -> #41434d: 1.11:1 off the unfocused #21222c, pardes needs 1.5:1 on a dark page
+//! - unfocused tag text #6272a4 -> #7b89b3: 3.36:1 on #21222c, tag text needs 4.5:1 to be read and run
+pub const theme = .{
+ .name = "dracula",
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:185 editor.background: *BG (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:10)
+ .bg = .{ 0x28, 0x2a, 0x36 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:184 editor.foreground: *FG (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:11)
+ .fg = .{ 0xf8, 0xf8, 0xf2 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:189 editor.selectionBackground: *SELECTION (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:12)
+ .sel_bg = .{ 0x44, 0x47, 0x5a },
+ // the original keeps text colours over its selection; its text colour
+ .sel_fg = .{ 0xf8, 0xf8, 0xf2 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:178 tab.inactiveBackground: *BGDark (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:50)
+ .tag_bg = .{ 0x21, 0x22, 0x2c },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:179 tab.inactiveForeground: *COMMENT (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:13) #6272a4, adjusted
+ .tag_fg = .{ 0x7b, 0x89, 0xb3 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:172 tab.activeBackground: *BG (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:10) #282a36, adjusted
+ .tag_active_bg = .{ 0x41, 0x43, 0x4d },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:173 tab.activeForeground: *FG (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:11)
+ .tag_active_fg = .{ 0xf8, 0xf8, 0xf2 },
+ // the focused grip: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:175 tab.activeBorderTop: !alpha [*PINK, 80] over BG
+ .box = .{ 0x94, 0x52, 0x7e },
+ // derived: the grip at rest, the accent #94527e faded toward the unfocused tag #21222c as far as 1.6:1 off it (0.50 of the way)
+ .box_dim = .{ 0x5b, 0x3a, 0x55 },
+ // an unsaved grip: the original's warning colour, ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:250 editorWarning.foreground: *CYAN (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:14)
+ .box_dirty = .{ 0x8b, 0xe9, 0xfd },
+ // derived: the column grip, the original's function colour, ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:688 tokenColors "Function names" *GREEN
+ .column_box = .{ 0x50, 0xfa, 0x7b },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:725 tokenColors "Keywords" *PINK
+ .kw = .{ 0xff, 0x79, 0xc6 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:978 tokenColors "Strings" *YELLOW
+ .str = .{ 0xf1, 0xfa, 0x8c },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:640 tokenColors "Constants" *PURPLE
+ .num = .{ 0xbd, 0x93, 0xf9 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:601 tokenColors "Comments" *COMMENT
+ .comment = .{ 0x62, 0x72, 0xa4 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:186 editorLineNumber.foreground: *COMMENT (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:13)
+ .lineno = .{ 0x62, 0x72, 0xa4 },
+ // derived: none in the original; the page
+ .scroll_track = .{ 0x28, 0x2a, 0x36 },
+ // derived: none in the original; line numbers, ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:186 editorLineNumber.foreground: *COMMENT (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:13)
+ .scroll_thumb = .{ 0x62, 0x72, 0xa4 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:167 editorGroup.border: *PURPLE (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:18)
+ .border = .{ 0xbd, 0x93, 0xf9 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:197 editor.findMatchBackground: !alpha [*ORANGE, 80] over BG
+ .search_bg = .{ 0x94, 0x71, 0x51 },
+ // derived: the original keeps text colours over a match; the page's text, whichever reads better on it
+ .search_fg = .{ 0xf8, 0xf8, 0xf2 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:248 editorError.foreground: *RED (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:19)
+ .diagnostic_error = .{ 0xff, 0x55, 0x55 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:250 editorWarning.foreground: *CYAN (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:14)
+ .diagnostic_warning = .{ 0x8b, 0xe9, 0xfd },
+ .palette = .{
+ .{ 0x21, 0x22, 0x2c }, // 0: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:67 terminal.ansiBlack: *COLOR0 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:22)
+ .{ 0xff, 0x55, 0x55 }, // 1: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:68 terminal.ansiRed: *COLOR1 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:23)
+ .{ 0x50, 0xfa, 0x7b }, // 2: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:69 terminal.ansiGreen: *COLOR2 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:24)
+ .{ 0xf1, 0xfa, 0x8c }, // 3: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:70 terminal.ansiYellow: *COLOR3 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:25)
+ .{ 0xbd, 0x93, 0xf9 }, // 4: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:71 terminal.ansiBlue: *COLOR4 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:26)
+ .{ 0xff, 0x79, 0xc6 }, // 5: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:72 terminal.ansiMagenta: *COLOR5 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:27)
+ .{ 0x8b, 0xe9, 0xfd }, // 6: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:73 terminal.ansiCyan: *COLOR6 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:28)
+ .{ 0xf8, 0xf8, 0xf2 }, // 7: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:74 terminal.ansiWhite: *COLOR7 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:29)
+ .{ 0x62, 0x72, 0xa4 }, // 8: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:59 terminal.ansiBrightBlack: *COLOR8 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:30)
+ .{ 0xff, 0x6e, 0x6e }, // 9: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:60 terminal.ansiBrightRed: *COLOR9 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:31)
+ .{ 0x69, 0xff, 0x94 }, // 10: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:61 terminal.ansiBrightGreen: *COLOR10 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:32)
+ .{ 0xff, 0xff, 0xa5 }, // 11: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:62 terminal.ansiBrightYellow: *COLOR11 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:33)
+ .{ 0xd6, 0xac, 0xff }, // 12: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:63 terminal.ansiBrightBlue: *COLOR12 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:34)
+ .{ 0xff, 0x92, 0xdf }, // 13: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:64 terminal.ansiBrightMagenta: *COLOR13 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:35)
+ .{ 0xa4, 0xff, 0xff }, // 14: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:65 terminal.ansiBrightCyan: *COLOR14 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:36)
+ .{ 0xff, 0xff, 0xff }, // 15: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:66 terminal.ansiBrightWhite: *COLOR15 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:37)
+ },
+};
diff --git a/src/themes/dracula_soft.zig b/src/themes/dracula_soft.zig
new file mode 100644
index 00000000..9a8d5788
--- /dev/null
+++ b/src/themes/dracula_soft.zig
@@ -0,0 +1,79 @@
+//! Dracula Soft: Dracula, as close to the original as pardes can draw it.
+//! Every value is the original's own, cited on its line (path:line key); the
+//! chrome pardes needs and the original lacks is derived from its palette.
+//! Sources:
+//! official palette (Dracula, Alucard); url https://github.com/dracula/dracula-theme; genizah ~/05-genizah/dracula-theme; commit 1e04a4b768302fa2de37d09cc7b8087eabcd3ed8
+//! official VS Code port: roles, UI, ANSI, Soft transform; url https://github.com/dracula/visual-studio-code; genizah ~/05-genizah/dracula-visual-studio-code; commit a08a206f2c8420ba3c05f0e8d01d43b2f933fdf8
+//! Tags: the tab (focused = the active tab, unfocused = the inactive one).
+//! Adjusted to meet pardes's floors (chrome only; text, syntax and ANSI are untouched):
+//! - focused tag ground #282a36 -> #454751: 1.05:1 off the unfocused #272727, pardes needs 1.5:1 on a dark page
+//! - unfocused tag text #7b7f8b -> #8b8e99: 3.74:1 on #272727, tag text needs 4.5:1 to be read and run
+pub const theme = .{
+ .name = "dracula_soft",
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:185 editor.background: *BG (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:10)
+ .bg = .{ 0x28, 0x2a, 0x36 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:184 editor.foreground: *FG (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:11); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .fg = .{ 0xf6, 0xf6, 0xf4 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:189 editor.selectionBackground: *SELECTION (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:12)
+ .sel_bg = .{ 0x44, 0x47, 0x5a },
+ // the original keeps text colours over its selection; its text colour
+ .sel_fg = .{ 0xf6, 0xf6, 0xf4 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:178 tab.inactiveBackground: *BGDark (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:50); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .tag_bg = .{ 0x27, 0x27, 0x27 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:179 tab.inactiveForeground: *COMMENT (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:13); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44) #7b7f8b, adjusted
+ .tag_fg = .{ 0x8b, 0x8e, 0x99 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:172 tab.activeBackground: *BG (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:10) #282a36, adjusted
+ .tag_active_bg = .{ 0x45, 0x47, 0x51 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:173 tab.activeForeground: *FG (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:11); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .tag_active_fg = .{ 0xf6, 0xf6, 0xf4 },
+ // the focused grip: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:175 tab.activeBorderTop: !alpha [*PINK, 80] over BG; Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .box = .{ 0x7d, 0x69, 0x76 },
+ // derived: the grip at rest, the accent #7d6976 faded toward the unfocused tag #272727 as far as 1.6:1 off it (0.46 of the way)
+ .box_dim = .{ 0x4f, 0x45, 0x4b },
+ // an unsaved grip: the original's warning colour, ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:250 editorWarning.foreground: *CYAN (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:14); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .box_dirty = .{ 0x97, 0xe1, 0xf1 },
+ // derived: the column grip, the original's function colour, ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:688 tokenColors "Function names" *GREEN; Soft: desaturate(20)
+ .column_box = .{ 0x62, 0xe8, 0x84 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:725 tokenColors "Keywords" *PINK; Soft: desaturate(20)
+ .kw = .{ 0xf2, 0x86, 0xc4 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:978 tokenColors "Strings" *YELLOW; Soft: desaturate(20)
+ .str = .{ 0xe7, 0xee, 0x98 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:640 tokenColors "Constants" *PURPLE; Soft: desaturate(20)
+ .num = .{ 0xbf, 0x9e, 0xee },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:601 tokenColors "Comments" *COMMENT; Soft: desaturate(20)
+ .comment = .{ 0x7b, 0x7f, 0x8b },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:186 editorLineNumber.foreground: *COMMENT (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:13); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .lineno = .{ 0x7b, 0x7f, 0x8b },
+ // derived: none in the original; the page
+ .scroll_track = .{ 0x28, 0x2a, 0x36 },
+ // derived: none in the original; line numbers, ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:186 editorLineNumber.foreground: *COMMENT (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:13); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .scroll_thumb = .{ 0x7b, 0x7f, 0x8b },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:167 editorGroup.border: *PURPLE (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:18); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .border = .{ 0xbf, 0x9e, 0xee },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:197 editor.findMatchBackground: !alpha [*ORANGE, 80] over BG
+ .search_bg = .{ 0x94, 0x71, 0x51 },
+ // derived: the original keeps text colours over a match; the page's text, whichever reads better on it
+ .search_fg = .{ 0xf6, 0xf6, 0xf4 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:248 editorError.foreground: *RED (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:19); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .diagnostic_error = .{ 0xee, 0x66, 0x66 },
+ // ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:250 editorWarning.foreground: *CYAN (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:14); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .diagnostic_warning = .{ 0x97, 0xe1, 0xf1 },
+ .palette = .{
+ .{ 0x27, 0x27, 0x27 }, // 0: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:67 terminal.ansiBlack: *COLOR0 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:22); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xee, 0x66, 0x66 }, // 1: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:68 terminal.ansiRed: *COLOR1 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:23); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0x62, 0xe8, 0x84 }, // 2: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:69 terminal.ansiGreen: *COLOR2 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:24); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xe7, 0xee, 0x98 }, // 3: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:70 terminal.ansiYellow: *COLOR3 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:25); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xbf, 0x9e, 0xee }, // 4: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:71 terminal.ansiBlue: *COLOR4 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:26); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xf2, 0x86, 0xc4 }, // 5: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:72 terminal.ansiMagenta: *COLOR5 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:27); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0x97, 0xe1, 0xf1 }, // 6: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:73 terminal.ansiCyan: *COLOR6 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:28); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xf6, 0xf6, 0xf4 }, // 7: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:74 terminal.ansiWhite: *COLOR7 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:29); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0x7b, 0x7f, 0x8b }, // 8: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:59 terminal.ansiBrightBlack: *COLOR8 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:30); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xf0, 0x7d, 0x7d }, // 9: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:60 terminal.ansiBrightRed: *COLOR9 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:31); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0x78, 0xf0, 0x9a }, // 10: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:61 terminal.ansiBrightGreen: *COLOR10 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:32); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xf6, 0xf6, 0xae }, // 11: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:62 terminal.ansiBrightYellow: *COLOR11 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:33); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xd6, 0xb4, 0xf7 }, // 12: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:63 terminal.ansiBrightBlue: *COLOR12 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:34); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xf4, 0x9d, 0xda }, // 13: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:64 terminal.ansiBrightMagenta: *COLOR13 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:35); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xad, 0xf6, 0xf6 }, // 14: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:65 terminal.ansiBrightCyan: *COLOR14 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:36); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ .{ 0xff, 0xff, 0xff }, // 15: ~/05-genizah/dracula-visual-studio-code/src/dracula.yml:66 terminal.ansiBrightWhite: *COLOR15 (~/05-genizah/dracula-visual-studio-code/src/dracula.yml:37); Soft: desaturate(20) (~/05-genizah/dracula-visual-studio-code/scripts/generate.js:44)
+ },
+};