local palette = require("n8n.palette") ---@class N8nTheme local M = {} function M.colors() return { -- Editor backgrounds (mirroring n8n's layered dark surfaces) bg = palette.neutral_950, -- #171717 canvas background bg_dark = palette.neutral_black, -- #000000 deepest bg bg_float = palette.neutral_900, -- #212121 floating panels bg_popup = palette.neutral_850, -- #2b2b2b popup menus bg_sidebar = palette.neutral_900, -- #212121 sidebar/tree bg_statusline = palette.neutral_900, -- #212121 statusline bg_visual = palette.neutral_750, -- #424242 visual selection bg_highlight = palette.neutral_850, -- #2b2b2b cursorline bg_search = palette.yellow_900, -- #332700 search highlight bg -- Foregrounds fg = palette.neutral_200, -- #e0e0e0 primary text fg_bright = palette.neutral_white, -- #ffffff bright text fg_dark = palette.neutral_400, -- #949494 muted text fg_gutter = palette.neutral_600, -- #757575 gutter/line numbers fg_sidebar = palette.neutral_300, -- #adadad sidebar text -- Borders (n8n uses white alpha overlays on dark) border = palette.neutral_700, -- #4d4d4d default border border_highlight = palette.neutral_600, -- #757575 active border -- Brand accent (n8n orange in dark mode) accent = palette.orange_300, -- #ff6f5c brand accent accent_hover = palette.orange_400, -- #ff4b33 hover state accent_active = palette.orange_500, -- #ff1e00 active/pressed -- Syntax colors (derived from n8n's code editor + JSON viewer) keyword = palette.orange_300, -- #ff6f5c keywords (brand color) string = palette.purple_400, -- #a098dc strings func = palette.blue_300, -- #7fb3e6 functions variable = palette.neutral_200, -- #e0e0e0 variables constant = palette.gold_400, -- #e6a23d constants number = palette.green_600, -- #29a360 numbers boolean = palette.green_600, -- #29a360 booleans type = palette.purple_300, -- #c3bee9 types operator = palette.orange_250, -- #ff9c8f operators property = palette.blue_400, -- #4891db properties/fields parameter = palette.gold_300, -- #efc381 parameters comment = palette.neutral_500, -- #828282 comments punctuation = palette.neutral_400, -- #949494 punctuation tag = palette.orange_300, -- #ff6f5c HTML/XML tags attribute = palette.purple_400, -- #a098dc attributes namespace = palette.slate_300, -- #adabba namespaces preproc = palette.brand_pink, -- #EA4B71 preprocessor special = palette.highlight_2, -- #a977f0 special symbols regex = palette.mint_500, -- #16e975 regex escape = palette.mint_600, -- #13cd67 escape sequences builtin = palette.blue_300, -- #7fb3e6 built-in functions -- JSON viewer colors (directly from n8n's JSON display) json_key = palette.neutral_125, -- #f5f5f5 JSON keys json_string = palette.purple_400, -- #a098dc JSON string values json_number = palette.green_600, -- #29a360 JSON numbers json_boolean = palette.green_600, -- #29a360 JSON booleans json_null = palette.red_400, -- #f16a75 JSON null json_bracket = palette.neutral_700, -- #4d4d4d brackets -- Diagnostics error = palette.red_600, -- #ea1f30 warning = palette.yellow_500, -- #ffc400 info = palette.blue_500, -- #2878c8 hint = palette.green_500, -- #33cc78 -- Diff diff_add = palette.green_950, -- #0a291a diff_change = palette.blue_900, -- #081a2b diff_delete = palette.red_950, -- #4f070d diff_text = palette.blue_800, -- #13385e -- Git signs git_add = palette.green_500, -- #33cc78 git_change = palette.blue_400, -- #4891db git_delete = palette.red_500, -- #ee4452 -- n8n-specific semantic colors node_bg = palette.neutral_850, -- node card background node_border = palette.purple_500, -- pinned node border sticky_bg = palette.yellow_900, -- sticky note background sticky_border = palette.yellow_800, -- sticky note border sticky_text = palette.neutral_125, -- sticky note text success_bg = palette.green_950, -- success state bg success_fg = palette.green_50, -- success state text danger_bg = palette.red_950, -- danger state bg danger_fg = palette.red_50, -- danger state text info_bg = palette.blue_900, -- info state bg info_fg = palette.blue_50, -- info state text -- Terminal colors terminal = { black = palette.neutral_950, red = palette.red_500, green = palette.green_500, yellow = palette.yellow_500, blue = palette.blue_400, magenta = palette.purple_500, cyan = palette.mint_500, white = palette.neutral_200, bright_black = palette.neutral_600, bright_red = palette.red_400, bright_green = palette.green_400, bright_yellow = palette.yellow_300, bright_blue = palette.blue_300, bright_magenta = palette.purple_400, bright_cyan = palette.mint_600, bright_white = palette.neutral_white, }, } end return M