{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "ThemeFile",
  "description": "Serializable theme definition (matches JSON structure)\n\nThe five color sections (`editor`, `ui`, `search`, `diagnostic`, `syntax`)\nare all optional. Every leaf field within each section already has a\n`#[serde(default = \"…\")]` fallback, so a theme JSON only needs to specify\nthe colors it cares about. This matches the minimal example shipped in\n`docs/features/themes.md` and unblocks user-authored themes that override\njust `editor`/`syntax` (issue #1281).\n\n**Inheritance**: when a theme omits whole sections, the unset fields are\nresolved against a *base* theme rather than against the per-field hardcoded\nfallback. The base is chosen in this order:\n\n1. Explicit `extends` field (`\"builtin://light\"`, `\"dark\"`, etc.).\n2. If `editor.bg` is provided, the relative-luminance of that color picks\n   `builtin://light` or `builtin://dark` automatically — so a user theme\n   that sets a cream background gets light UI chrome without any extra\n   configuration.\n3. Otherwise, fall through to the per-field hardcoded defaults.\n\nOnly built-in themes are valid `extends` targets in this version. Chained\ninheritance across user themes is intentionally out of scope here.",
  "type": "object",
  "properties": {
    "name": {
      "description": "Theme name",
      "type": "string"
    },
    "extends": {
      "description": "Optional base theme to inherit from. Accepts `\"builtin://NAME\"` or a\nbare built-in name (e.g. `\"dark\"`, `\"light\"`, `\"high-contrast\"`).\nWhen set, every field this theme does not specify is taken from the\nbase; explicit fields override the base. See [`ThemeFile`] for the\nfull inheritance resolution order.",
      "type": [
        "string",
        "null"
      ]
    },
    "editor": {
      "description": "Editor area colors",
      "$ref": "#/$defs/EditorColors",
      "default": {
        "bg": [
          30,
          30,
          30
        ],
        "fg": [
          212,
          212,
          212
        ],
        "cursor": [
          255,
          255,
          255
        ],
        "inactive_cursor": "DarkGray",
        "selection_bg": [
          38,
          79,
          120
        ],
        "selection_modifier": null,
        "current_line_bg": [
          40,
          40,
          40
        ],
        "line_number_fg": [
          100,
          100,
          100
        ],
        "line_number_bg": [
          30,
          30,
          30
        ],
        "diff_add_bg": [
          35,
          60,
          35
        ],
        "diff_remove_bg": [
          70,
          35,
          35
        ],
        "diff_add_highlight_bg": null,
        "diff_remove_highlight_bg": null,
        "diff_modify_bg": [
          40,
          38,
          30
        ],
        "diff_add_collision_fg": null,
        "diff_remove_collision_fg": null,
        "diff_modify_collision_fg": null,
        "ruler_bg": [
          50,
          50,
          50
        ],
        "indentation_guide_fg": null,
        "indent_rainbow_1": [
          255,
          215,
          0
        ],
        "indent_rainbow_2": [
          218,
          112,
          214
        ],
        "indent_rainbow_3": [
          50,
          205,
          50
        ],
        "indent_rainbow_4": [
          30,
          144,
          255
        ],
        "indent_rainbow_5": [
          255,
          127,
          80
        ],
        "indent_rainbow_6": [
          147,
          112,
          219
        ],
        "whitespace_indicator_fg": [
          70,
          70,
          70
        ],
        "bracket_match_fg": [
          255,
          215,
          0
        ],
        "bracket_rainbow_1": [
          255,
          215,
          0
        ],
        "bracket_rainbow_2": [
          218,
          112,
          214
        ],
        "bracket_rainbow_3": [
          50,
          205,
          50
        ],
        "bracket_rainbow_4": [
          30,
          144,
          255
        ],
        "bracket_rainbow_5": [
          255,
          127,
          80
        ],
        "bracket_rainbow_6": [
          147,
          112,
          219
        ],
        "after_eof_bg": null
      }
    },
    "ui": {
      "description": "UI element colors (tabs, menus, status bar, etc.)",
      "$ref": "#/$defs/UiColors",
      "default": {
        "tab_active_fg": "Yellow",
        "tab_active_bg": "Blue",
        "tab_inactive_fg": "White",
        "tab_inactive_bg": "DarkGray",
        "tab_separator_bg": "Black",
        "tab_close_hover_fg": [
          255,
          100,
          100
        ],
        "tab_hover_bg": [
          70,
          70,
          75
        ],
        "menu_bg": [
          60,
          60,
          65
        ],
        "menu_fg": [
          220,
          220,
          220
        ],
        "menu_active_bg": [
          60,
          60,
          60
        ],
        "menu_active_fg": [
          255,
          255,
          255
        ],
        "menu_dropdown_bg": [
          50,
          50,
          50
        ],
        "menu_dropdown_fg": [
          220,
          220,
          220
        ],
        "menu_highlight_bg": [
          70,
          130,
          180
        ],
        "menu_highlight_fg": [
          255,
          255,
          255
        ],
        "menu_border_fg": [
          100,
          100,
          100
        ],
        "menu_separator_fg": [
          80,
          80,
          80
        ],
        "menu_hover_bg": [
          55,
          55,
          55
        ],
        "menu_hover_fg": [
          255,
          255,
          255
        ],
        "menu_disabled_fg": [
          100,
          100,
          100
        ],
        "menu_disabled_bg": [
          50,
          50,
          50
        ],
        "status_bar_fg": "White",
        "status_bar_bg": "DarkGray",
        "status_palette_fg": null,
        "status_palette_bg": null,
        "status_separator_fg": null,
        "status_separator_bg": null,
        "status_lsp_on_fg": null,
        "status_lsp_on_bg": null,
        "status_lsp_actionable_fg": null,
        "status_lsp_actionable_bg": null,
        "prompt_fg": "White",
        "prompt_bg": "Black",
        "prompt_selection_fg": "White",
        "prompt_selection_bg": [
          58,
          79,
          120
        ],
        "popup_border_fg": "Gray",
        "popup_bg": [
          30,
          30,
          30
        ],
        "popup_selection_bg": [
          58,
          79,
          120
        ],
        "text_input_selection_bg": [
          58,
          79,
          120
        ],
        "popup_selection_fg": [
          255,
          255,
          255
        ],
        "popup_text_fg": "White",
        "suggestion_bg": [
          30,
          30,
          30
        ],
        "suggestion_fg": null,
        "suggestion_selected_bg": [
          58,
          79,
          120
        ],
        "help_bg": "Black",
        "help_fg": "White",
        "help_key_fg": "Cyan",
        "help_separator_fg": "DarkGray",
        "help_indicator_fg": "Red",
        "help_indicator_bg": "Black",
        "inline_code_bg": "DarkGray",
        "split_separator_fg": [
          100,
          100,
          100
        ],
        "split_separator_hover_fg": [
          100,
          149,
          237
        ],
        "scrollbar_track_fg": "DarkGray",
        "scrollbar_thumb_fg": "Gray",
        "scrollbar_track_hover_fg": "Gray",
        "scrollbar_thumb_hover_fg": "White",
        "compose_margin_bg": [
          18,
          18,
          18
        ],
        "semantic_highlight_bg": [
          60,
          60,
          80
        ],
        "semantic_highlight_modifier": null,
        "terminal_bg": "Default",
        "terminal_fg": "Default",
        "status_warning_indicator_bg": [
          181,
          137,
          0
        ],
        "status_warning_indicator_fg": [
          0,
          0,
          0
        ],
        "status_error_indicator_bg": [
          220,
          50,
          47
        ],
        "status_error_indicator_fg": [
          255,
          255,
          255
        ],
        "status_warning_indicator_hover_bg": [
          211,
          167,
          30
        ],
        "status_warning_indicator_hover_fg": [
          0,
          0,
          0
        ],
        "status_error_indicator_hover_bg": [
          250,
          80,
          77
        ],
        "status_error_indicator_hover_fg": [
          255,
          255,
          255
        ],
        "tab_drop_zone_bg": [
          70,
          130,
          180
        ],
        "tab_drop_zone_border": [
          100,
          149,
          237
        ],
        "settings_selected_bg": [
          60,
          60,
          70
        ],
        "settings_selected_fg": [
          255,
          255,
          255
        ],
        "file_status_added_fg": null,
        "file_status_modified_fg": null,
        "file_status_deleted_fg": null,
        "file_status_renamed_fg": null,
        "file_status_untracked_fg": null,
        "file_status_conflicted_fg": null
      }
    },
    "search": {
      "description": "Search result highlighting colors",
      "$ref": "#/$defs/SearchColors",
      "default": {
        "match_bg": [
          100,
          100,
          20
        ],
        "match_fg": [
          255,
          255,
          255
        ],
        "label_bg": [
          199,
          78,
          189
        ],
        "label_fg": [
          255,
          255,
          255
        ]
      }
    },
    "diagnostic": {
      "description": "LSP diagnostic colors (errors, warnings, etc.)",
      "$ref": "#/$defs/DiagnosticColors",
      "default": {
        "error_fg": "Red",
        "error_bg": [
          60,
          20,
          20
        ],
        "warning_fg": "Yellow",
        "warning_bg": [
          60,
          50,
          0
        ],
        "info_fg": "Blue",
        "info_bg": [
          0,
          30,
          60
        ],
        "hint_fg": "Gray",
        "hint_bg": [
          30,
          30,
          30
        ]
      }
    },
    "syntax": {
      "description": "Syntax highlighting colors",
      "$ref": "#/$defs/SyntaxColors",
      "default": {
        "keyword": [
          86,
          156,
          214
        ],
        "string": [
          206,
          145,
          120
        ],
        "comment": [
          106,
          153,
          85
        ],
        "function": [
          220,
          220,
          170
        ],
        "type": [
          78,
          201,
          176
        ],
        "variable": [
          156,
          220,
          254
        ],
        "variable_builtin": [
          86,
          156,
          214
        ],
        "constant": [
          79,
          193,
          255
        ],
        "operator": [
          212,
          212,
          212
        ],
        "punctuation_bracket": [
          212,
          212,
          212
        ],
        "punctuation_delimiter": [
          212,
          212,
          212
        ]
      }
    }
  },
  "required": [
    "name"
  ],
  "$defs": {
    "EditorColors": {
      "description": "Editor area colors",
      "type": "object",
      "properties": {
        "bg": {
          "description": "Editor background color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            30,
            30,
            30
          ]
        },
        "fg": {
          "description": "Default text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            212,
            212,
            212
          ]
        },
        "cursor": {
          "description": "Cursor color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            255,
            255
          ]
        },
        "inactive_cursor": {
          "description": "Cursor color in unfocused splits",
          "$ref": "#/$defs/ColorDef",
          "default": "DarkGray"
        },
        "selection_bg": {
          "description": "Selected text background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            38,
            79,
            120
          ]
        },
        "selection_modifier": {
          "description": "Optional text-attribute modifiers (e.g. `[\"reversed\"]`) layered\non top of `selection_bg`. Themes that want a terminal-adaptive\nvisual selection (the canonical pattern for native-palette\nthemes — vim/neovim Visual, helix term16, htop, less) set\n`[\"reversed\"]` here; the renderer ORs `Modifier::REVERSED` into\nthe selected cells, which works on any terminal because it\ninverts whatever fg/bg the terminal already uses.",
          "anyOf": [
            {
              "$ref": "#/$defs/ModifierDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "current_line_bg": {
          "description": "Background of the line containing cursor",
          "$ref": "#/$defs/ColorDef",
          "default": [
            40,
            40,
            40
          ]
        },
        "line_number_fg": {
          "description": "Line number text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            100,
            100,
            100
          ]
        },
        "line_number_bg": {
          "description": "Line number gutter background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            30,
            30,
            30
          ]
        },
        "diff_add_bg": {
          "description": "Diff added line background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            35,
            60,
            35
          ]
        },
        "diff_remove_bg": {
          "description": "Diff removed line background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            70,
            35,
            35
          ]
        },
        "diff_add_highlight_bg": {
          "description": "Diff added word-level highlight background (optional override)\nWhen not set, computed by brightening diff_add_bg",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "diff_remove_highlight_bg": {
          "description": "Diff removed word-level highlight background (optional override)\nWhen not set, computed by brightening diff_remove_bg",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "diff_modify_bg": {
          "description": "Diff modified line background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            40,
            38,
            30
          ]
        },
        "diff_add_collision_fg": {
          "description": "Fallback fg for cells whose existing fg matches `diff_add_bg`\n(e.g. ANSI Green-on-Green). Only applied on collision; other\ntokens keep their syntax colour.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "diff_remove_collision_fg": {
          "description": "Collision-only fallback fg for `diff_remove_bg`.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "diff_modify_collision_fg": {
          "description": "Collision-only fallback fg for `diff_modify_bg`.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "ruler_bg": {
          "description": "Vertical ruler background color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            50,
            50,
            50
          ]
        },
        "indentation_guide_fg": {
          "description": "Indentation guide foreground color. When omitted, inherits\n`whitespace_indicator_fg` so guides remain subtle in both dark and\nlight themes while still allowing a dedicated override.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "indent_rainbow_1": {
          "description": "Rainbow indentation-guide color (nesting level 1)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            215,
            0
          ]
        },
        "indent_rainbow_2": {
          "description": "Rainbow indentation-guide color (nesting level 2)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            218,
            112,
            214
          ]
        },
        "indent_rainbow_3": {
          "description": "Rainbow indentation-guide color (nesting level 3)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            50,
            205,
            50
          ]
        },
        "indent_rainbow_4": {
          "description": "Rainbow indentation-guide color (nesting level 4)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            30,
            144,
            255
          ]
        },
        "indent_rainbow_5": {
          "description": "Rainbow indentation-guide color (nesting level 5)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            127,
            80
          ]
        },
        "indent_rainbow_6": {
          "description": "Rainbow indentation-guide color (nesting level 6)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            147,
            112,
            219
          ]
        },
        "whitespace_indicator_fg": {
          "description": "Whitespace indicator foreground color (for tab arrows and space dots)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            70,
            70,
            70
          ]
        },
        "bracket_match_fg": {
          "description": "Bracket match highlight color (used when rainbow is disabled)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            215,
            0
          ]
        },
        "bracket_rainbow_1": {
          "description": "Rainbow bracket color (nesting level 1)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            215,
            0
          ]
        },
        "bracket_rainbow_2": {
          "description": "Rainbow bracket color (nesting level 2)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            218,
            112,
            214
          ]
        },
        "bracket_rainbow_3": {
          "description": "Rainbow bracket color (nesting level 3)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            50,
            205,
            50
          ]
        },
        "bracket_rainbow_4": {
          "description": "Rainbow bracket color (nesting level 4)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            30,
            144,
            255
          ]
        },
        "bracket_rainbow_5": {
          "description": "Rainbow bracket color (nesting level 5)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            127,
            80
          ]
        },
        "bracket_rainbow_6": {
          "description": "Rainbow bracket color (nesting level 6)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            147,
            112,
            219
          ]
        },
        "after_eof_bg": {
          "description": "Background color for lines after end-of-file (optional override).\nWhen not set, computed as a slightly contrasting shade of `bg`\n(lighter for dark themes, darker for light themes) to give post-EOF\nrows a subtle visual separation from the buffer content.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      }
    },
    "ColorDef": {
      "description": "Serializable color representation",
      "anyOf": [
        {
          "description": "RGB color as [r, g, b]",
          "type": "array",
          "prefixItems": [
            {
              "type": "integer",
              "format": "uint8",
              "minimum": 0,
              "maximum": 255
            },
            {
              "type": "integer",
              "format": "uint8",
              "minimum": 0,
              "maximum": 255
            },
            {
              "type": "integer",
              "format": "uint8",
              "minimum": 0,
              "maximum": 255
            }
          ],
          "minItems": 3,
          "maxItems": 3
        },
        {
          "description": "Named color",
          "type": "string"
        }
      ]
    },
    "ModifierDef": {
      "description": "Serializable text-attribute modifier list.\n\nLets a theme specify SGR text attributes (reverse video, bold,\nitalic, underline, dim) on top of fg/bg colors. Designed for\nterminal-adaptive themes that want to use `[\"reversed\"]` on the\nvisual selection — the canonical pattern documented for native-\npalette themes (vim/neovim Visual mode, helix term16, htop, less)\nbecause reverse video automatically inverts the terminal's\ncurrent fg/bg and so adapts to both light and dark backgrounds\nwithout a separate variant.\n\nJSON form: `[\"reversed\"]` or `[\"bold\", \"underlined\"]`. Unknown\nstrings are silently dropped so a typo can't crash a render.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "UiColors": {
      "description": "UI element colors (tabs, menus, status bar, etc.)\n\nNaming convention: every `*_bg` key that has text drawn on top of\nit MUST have a matching `*_fg` key, and renderers must pair them\n(never borrow a foreground from an unrelated surface — doing so is\nhow text ends up invisible when a theme's borrowed fg matches the\nreal bg). `popup_text_fg` is the foreground for `popup_bg` (kept\nunder its historical name with a `popup_fg` serde alias).\n\n`*_bg` keys WITHOUT a matching `*_fg` are intentional — they don't\ndraw their own text and inherit the surrounding foreground:\n  - lines / borders / separators: `tab_separator_bg`,\n    `popup_border_fg`, `menu_border_fg`, `menu_separator_fg`,\n    `split_separator_fg`, `scrollbar_*`, `tab_drop_zone_border`\n  - selection / hover / highlight tints layered over a surface that\n    keeps its base fg: `*_selection_bg`, `*_hover_bg`,\n    `suggestion_selected_bg`, `text_input_selection_bg`,\n    `semantic_highlight_bg`, `compose_margin_bg`, `inline_code_bg`",
      "type": "object",
      "properties": {
        "tab_active_fg": {
          "description": "Active tab text color",
          "$ref": "#/$defs/ColorDef",
          "default": "Yellow"
        },
        "tab_active_bg": {
          "description": "Active tab background color",
          "$ref": "#/$defs/ColorDef",
          "default": "Blue"
        },
        "tab_inactive_fg": {
          "description": "Inactive tab text color",
          "$ref": "#/$defs/ColorDef",
          "default": "White"
        },
        "tab_inactive_bg": {
          "description": "Inactive tab background color",
          "$ref": "#/$defs/ColorDef",
          "default": "DarkGray"
        },
        "tab_separator_bg": {
          "description": "Tab bar separator color",
          "$ref": "#/$defs/ColorDef",
          "default": "Black"
        },
        "tab_close_hover_fg": {
          "description": "Tab close button hover color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            100,
            100
          ]
        },
        "tab_hover_bg": {
          "description": "Tab hover background color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            70,
            70,
            75
          ]
        },
        "menu_bg": {
          "description": "Menu bar background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            60,
            60,
            65
          ]
        },
        "menu_fg": {
          "description": "Menu bar text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            220,
            220,
            220
          ]
        },
        "menu_active_bg": {
          "description": "Active menu item background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            60,
            60,
            60
          ]
        },
        "menu_active_fg": {
          "description": "Active menu item text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            255,
            255
          ]
        },
        "menu_dropdown_bg": {
          "description": "Dropdown menu background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            50,
            50,
            50
          ]
        },
        "menu_dropdown_fg": {
          "description": "Dropdown menu text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            220,
            220,
            220
          ]
        },
        "menu_highlight_bg": {
          "description": "Highlighted menu item background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            70,
            130,
            180
          ]
        },
        "menu_highlight_fg": {
          "description": "Highlighted menu item text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            255,
            255
          ]
        },
        "menu_border_fg": {
          "description": "Menu border color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            100,
            100,
            100
          ]
        },
        "menu_separator_fg": {
          "description": "Menu separator line color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            80,
            80,
            80
          ]
        },
        "menu_hover_bg": {
          "description": "Menu item hover background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            55,
            55,
            55
          ]
        },
        "menu_hover_fg": {
          "description": "Menu item hover text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            255,
            255
          ]
        },
        "menu_disabled_fg": {
          "description": "Disabled menu item text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            100,
            100,
            100
          ]
        },
        "menu_disabled_bg": {
          "description": "Disabled menu item background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            50,
            50,
            50
          ]
        },
        "status_bar_fg": {
          "description": "Status bar text color",
          "$ref": "#/$defs/ColorDef",
          "default": "White"
        },
        "status_bar_bg": {
          "description": "Status bar background color",
          "$ref": "#/$defs/ColorDef",
          "default": "DarkGray"
        },
        "status_palette_fg": {
          "description": "Command palette shortcut hint text color in status bar (falls back to status_bar_fg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "status_palette_bg": {
          "description": "Command palette shortcut hint background in status bar (falls back to status_bar_bg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "status_separator_fg": {
          "description": "Status bar separator glyph text color (falls back to status_bar_fg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "status_separator_bg": {
          "description": "Status bar separator glyph background (falls back to status_bar_bg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "status_lsp_on_fg": {
          "description": "Status bar LSP indicator text color when LSP is running (falls back to status_bar_fg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "status_lsp_on_bg": {
          "description": "Status bar LSP indicator background when LSP is running (falls back to status_bar_bg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "status_lsp_actionable_fg": {
          "description": "Status bar LSP indicator text color when LSP options are available\nto act on (configured-but-not-running). Drawn prominently to signal\n\"click here to enable\". Falls back to `status_warning_indicator_fg`.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "status_lsp_actionable_bg": {
          "description": "Status bar LSP indicator background when LSP options are available\nto act on. Falls back to `status_warning_indicator_bg`.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "prompt_fg": {
          "description": "Command prompt text color",
          "$ref": "#/$defs/ColorDef",
          "default": "White"
        },
        "prompt_bg": {
          "description": "Command prompt background",
          "$ref": "#/$defs/ColorDef",
          "default": "Black"
        },
        "prompt_selection_fg": {
          "description": "Prompt selected text color",
          "$ref": "#/$defs/ColorDef",
          "default": "White"
        },
        "prompt_selection_bg": {
          "description": "Prompt selection background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            58,
            79,
            120
          ]
        },
        "popup_border_fg": {
          "description": "Popup window border color",
          "$ref": "#/$defs/ColorDef",
          "default": "Gray"
        },
        "popup_bg": {
          "description": "Popup window background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            30,
            30,
            30
          ]
        },
        "popup_selection_bg": {
          "description": "Popup selected item background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            58,
            79,
            120
          ]
        },
        "text_input_selection_bg": {
          "description": "Selection background inside a widget Text input. Reads\nagainst `prompt_bg`, so it needs higher contrast against\nthat tint than `editor.selection_bg` (which targets the\neditor surface). Defaults to the same `popup_selection_bg`\nblue used everywhere \"selected item inside a chrome\nsurface\" is shown — same key the prompt selection uses, so\nthe cue reads consistently across selection UIs.",
          "$ref": "#/$defs/ColorDef",
          "default": [
            58,
            79,
            120
          ]
        },
        "popup_selection_fg": {
          "description": "Popup selected item text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            255,
            255
          ]
        },
        "popup_text_fg": {
          "description": "Popup window text color. Per the `*_bg`/`*_fg` convention this\nis the foreground for `popup_bg`; `popup_fg` is accepted as an\nalias so theme JSON can use the convention-consistent name.",
          "$ref": "#/$defs/ColorDef",
          "default": "White"
        },
        "suggestion_bg": {
          "description": "Autocomplete suggestion background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            30,
            30,
            30
          ]
        },
        "suggestion_fg": {
          "description": "Text color for content drawn on `suggestion_bg` (autocomplete\nitems, the overlay-prompt title/input field). Falls back to\n`popup_text_fg` so existing themes need no change.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "suggestion_selected_bg": {
          "description": "Selected suggestion background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            58,
            79,
            120
          ]
        },
        "help_bg": {
          "description": "Help panel background",
          "$ref": "#/$defs/ColorDef",
          "default": "Black"
        },
        "help_fg": {
          "description": "Help panel text color",
          "$ref": "#/$defs/ColorDef",
          "default": "White"
        },
        "help_key_fg": {
          "description": "Help keybinding text color",
          "$ref": "#/$defs/ColorDef",
          "default": "Cyan"
        },
        "help_separator_fg": {
          "description": "Help panel separator color",
          "$ref": "#/$defs/ColorDef",
          "default": "DarkGray"
        },
        "help_indicator_fg": {
          "description": "Help indicator text color",
          "$ref": "#/$defs/ColorDef",
          "default": "Red"
        },
        "help_indicator_bg": {
          "description": "Help indicator background",
          "$ref": "#/$defs/ColorDef",
          "default": "Black"
        },
        "inline_code_bg": {
          "description": "Inline code block background",
          "$ref": "#/$defs/ColorDef",
          "default": "DarkGray"
        },
        "split_separator_fg": {
          "description": "Split pane separator color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            100,
            100,
            100
          ]
        },
        "split_separator_hover_fg": {
          "description": "Split separator hover color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            100,
            149,
            237
          ]
        },
        "scrollbar_track_fg": {
          "description": "Scrollbar track color",
          "$ref": "#/$defs/ColorDef",
          "default": "DarkGray"
        },
        "scrollbar_thumb_fg": {
          "description": "Scrollbar thumb color",
          "$ref": "#/$defs/ColorDef",
          "default": "Gray"
        },
        "scrollbar_track_hover_fg": {
          "description": "Scrollbar track hover color",
          "$ref": "#/$defs/ColorDef",
          "default": "Gray"
        },
        "scrollbar_thumb_hover_fg": {
          "description": "Scrollbar thumb hover color",
          "$ref": "#/$defs/ColorDef",
          "default": "White"
        },
        "compose_margin_bg": {
          "description": "Compose mode margin background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            18,
            18,
            18
          ]
        },
        "semantic_highlight_bg": {
          "description": "Word under cursor highlight",
          "$ref": "#/$defs/ColorDef",
          "default": [
            60,
            60,
            80
          ]
        },
        "semantic_highlight_modifier": {
          "description": "Optional text-attribute modifiers (e.g. `[\"bold\"]` or\n`[\"reversed\"]`) layered on top of `semantic_highlight_bg`.\nPer the canonical native-palette pattern, current-word\nhighlights are often shown via `Bold` (so the word stands\nout against other variables without altering its color slot)\nor `Reversed`. See `EditorColors::selection_modifier`.",
          "anyOf": [
            {
              "$ref": "#/$defs/ModifierDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "terminal_bg": {
          "description": "Embedded terminal background (use Default for transparency)",
          "$ref": "#/$defs/ColorDef",
          "default": "Default"
        },
        "terminal_fg": {
          "description": "Embedded terminal default text color",
          "$ref": "#/$defs/ColorDef",
          "default": "Default"
        },
        "status_warning_indicator_bg": {
          "description": "Warning indicator background in status bar",
          "$ref": "#/$defs/ColorDef",
          "default": [
            181,
            137,
            0
          ]
        },
        "status_warning_indicator_fg": {
          "description": "Warning indicator text color in status bar",
          "$ref": "#/$defs/ColorDef",
          "default": [
            0,
            0,
            0
          ]
        },
        "status_error_indicator_bg": {
          "description": "Error indicator background in status bar",
          "$ref": "#/$defs/ColorDef",
          "default": [
            220,
            50,
            47
          ]
        },
        "status_error_indicator_fg": {
          "description": "Error indicator text color in status bar",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            255,
            255
          ]
        },
        "status_warning_indicator_hover_bg": {
          "description": "Warning indicator hover background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            211,
            167,
            30
          ]
        },
        "status_warning_indicator_hover_fg": {
          "description": "Warning indicator hover text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            0,
            0,
            0
          ]
        },
        "status_error_indicator_hover_bg": {
          "description": "Error indicator hover background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            250,
            80,
            77
          ]
        },
        "status_error_indicator_hover_fg": {
          "description": "Error indicator hover text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            255,
            255
          ]
        },
        "tab_drop_zone_bg": {
          "description": "Tab drop zone background during drag",
          "$ref": "#/$defs/ColorDef",
          "default": [
            70,
            130,
            180
          ]
        },
        "tab_drop_zone_border": {
          "description": "Tab drop zone border during drag",
          "$ref": "#/$defs/ColorDef",
          "default": [
            100,
            149,
            237
          ]
        },
        "settings_selected_bg": {
          "description": "Settings UI selected item background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            60,
            60,
            70
          ]
        },
        "settings_selected_fg": {
          "description": "Settings UI selected item foreground (text on selected background)",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            255,
            255
          ]
        },
        "file_status_added_fg": {
          "description": "File status: added file color in file explorer (falls back to diagnostic.info_fg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "file_status_modified_fg": {
          "description": "File status: modified file color in file explorer (falls back to diagnostic.warning_fg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "file_status_deleted_fg": {
          "description": "File status: deleted file color in file explorer (falls back to diagnostic.error_fg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "file_status_renamed_fg": {
          "description": "File status: renamed file color in file explorer (falls back to diagnostic.info_fg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "file_status_untracked_fg": {
          "description": "File status: untracked file color in file explorer (falls back to diagnostic.hint_fg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "file_status_conflicted_fg": {
          "description": "File status: conflicted file color in file explorer (falls back to diagnostic.error_fg)",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorDef"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      }
    },
    "SearchColors": {
      "description": "Search result highlighting colors",
      "type": "object",
      "properties": {
        "match_bg": {
          "description": "Search match background color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            100,
            100,
            20
          ]
        },
        "match_fg": {
          "description": "Search match text color",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            255,
            255
          ]
        },
        "label_bg": {
          "description": "Background color for jump labels (e.g. flash plugin labels).\nShould be visually distinct from `match_bg` so labels stand\nout against highlighted matches.  Default: bright magenta.",
          "$ref": "#/$defs/ColorDef",
          "default": [
            199,
            78,
            189
          ]
        },
        "label_fg": {
          "description": "Foreground color for jump labels.  Should be high contrast\nagainst `label_bg` so the single label letter is unambiguous\neven on small terminal cells.  Default: white.",
          "$ref": "#/$defs/ColorDef",
          "default": [
            255,
            255,
            255
          ]
        }
      }
    },
    "DiagnosticColors": {
      "description": "LSP diagnostic colors (errors, warnings, etc.)",
      "type": "object",
      "properties": {
        "error_fg": {
          "description": "Error message text color",
          "$ref": "#/$defs/ColorDef",
          "default": "Red"
        },
        "error_bg": {
          "description": "Error highlight background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            60,
            20,
            20
          ]
        },
        "warning_fg": {
          "description": "Warning message text color",
          "$ref": "#/$defs/ColorDef",
          "default": "Yellow"
        },
        "warning_bg": {
          "description": "Warning highlight background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            60,
            50,
            0
          ]
        },
        "info_fg": {
          "description": "Info message text color",
          "$ref": "#/$defs/ColorDef",
          "default": "Blue"
        },
        "info_bg": {
          "description": "Info highlight background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            0,
            30,
            60
          ]
        },
        "hint_fg": {
          "description": "Hint message text color",
          "$ref": "#/$defs/ColorDef",
          "default": "Gray"
        },
        "hint_bg": {
          "description": "Hint highlight background",
          "$ref": "#/$defs/ColorDef",
          "default": [
            30,
            30,
            30
          ]
        }
      }
    },
    "SyntaxColors": {
      "description": "Syntax highlighting colors.\n\nEach field is a [`StyledColorDef`]: a bare color, or a color bundled with\nthe text attributes to render it with. The bundle keeps a category's color\nand its attributes in one value — no parallel `*_modifier` keys.",
      "type": "object",
      "properties": {
        "keyword": {
          "description": "Language keywords (if, for, fn, etc.)",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            86,
            156,
            214
          ]
        },
        "string": {
          "description": "String literals",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            206,
            145,
            120
          ]
        },
        "comment": {
          "description": "Code comments",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            106,
            153,
            85
          ]
        },
        "function": {
          "description": "Function names",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            220,
            220,
            170
          ]
        },
        "type": {
          "description": "Type names",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            78,
            201,
            176
          ]
        },
        "variable": {
          "description": "Variable names",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            156,
            220,
            254
          ]
        },
        "variable_builtin": {
          "description": "Built-in language variables (self, this, super, etc.)",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            86,
            156,
            214
          ]
        },
        "constant": {
          "description": "Constants and literals",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            79,
            193,
            255
          ]
        },
        "operator": {
          "description": "Operators (+, -, =, etc.)",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            212,
            212,
            212
          ]
        },
        "punctuation_bracket": {
          "description": "Punctuation brackets ({, }, (, ), [, ])",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            212,
            212,
            212
          ]
        },
        "punctuation_delimiter": {
          "description": "Punctuation delimiters (;, ,, .)",
          "$ref": "#/$defs/StyledColorDef",
          "default": [
            212,
            212,
            212
          ]
        }
      }
    },
    "StyledColorDef": {
      "description": "A syntax color that may carry text attributes.\n\nA theme key is either a bare color (`[156, 220, 254]` or `\"Blue\"`) or an\nobject bundling that color with a modifier list\n(`{\"color\": [156, 220, 254], \"modifier\": [\"bold\"]}`). Bundling keeps the\ncolor and its attributes in one value, so nothing has to declare a separate\n`*_modifier` sibling key or map one to the other. A bare color carries no\nattributes.\n\n`Plain` must precede `Styled`: untagged deserialization tries variants in\norder, and only an object can match `Styled`, so an array/string settles on\n`Plain` and an object falls through to `Styled`.",
      "anyOf": [
        {
          "description": "A color with no text attributes.",
          "$ref": "#/$defs/ColorDef"
        },
        {
          "description": "A color bundled with the text attributes to render it with.",
          "type": "object",
          "properties": {
            "color": {
              "$ref": "#/$defs/ColorDef"
            },
            "modifier": {
              "anyOf": [
                {
                  "$ref": "#/$defs/ModifierDef"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "color"
          ]
        }
      ]
    }
  }
}
