dracula:
  base:
    - &BG        '#00141d'
    - &FG        '#419ac6'
    - &SELECTION '#002e3d'
    - &COMMENT   '#00627e'
    - &CYAN      '#00caff'
    - &GREEN     '#46fe7a'
    - &ORANGE    '#ff963b'
    - &PINK      '#ff85ef'
    - &PURPLE    '#ba90ff'
    - &RED       '#ff5b6f'
    - &YELLOW    '#faf605'
  ansi:
    - &COLOR0        '#21222C'
    - &COLOR1        '#FF5555'
    - &COLOR2        '#50FA7B'
    - &COLOR3        '#F1FA8C'
    - &COLOR4        '#BD93F9'
    - &COLOR5        '#FF79C6'
    - &COLOR6        '#8BE9FD'
    - &COLOR7        '#F8F8F2'
    - &COLOR8        '#6272A4'
    - &COLOR9        '#FF6E6E'
    - &COLOR10       '#69FF94'
    - &COLOR11       '#FFFFA5'
    - &COLOR12       '#D6ACFF'
    - &COLOR13       '#FF92DF'
    - &COLOR14       '#A4FFFF'
    - &COLOR15       '#FFFFFF'
  brightOther:
    # Temporary (awaiting fix)
    - &TEMP_QUOTES          '#E9F284'
    - &TEMP_PROPERTY_QUOTES '#8BE9FE'
  other:
    - &LineHighlight '#44475A75'
    - &NonText       '#424450'
    - &WHITE         '#FFFFFF'
    - &TAB_DROP_BG   '#44475A70'
    # UI Variants
    - &BGLighter     '#424450'
    - &BGLight       '#343746' # HSV (230   , 25.71, 27.45)
    - &BGDark        '#21222C' # HSV (234.55, 25   , 17.25)
    - &BGDarker      '#191A21' # HSV (234.55, 25   , 13   )


tokenColors:

# =============================================================================
# General
# =============================================================================

  - scope:
    - emphasis
    settings:
      fontStyle: italic
  - scope:
    - strong
    settings:
      fontStyle: bold
  - scope:
    - header
    settings:
      foreground: *PURPLE
  - scope:
    - source
    settings:
      foreground: *FG

  # Diffs
  # ======
  - scope:
    - meta.diff
    - meta.diff.header
    settings:
      foreground: *COMMENT
  - scope:
    - markup.inserted
    settings:
      foreground: *GREEN # =>
  - scope:
    - markup.deleted
    settings:
      foreground: *RED
  - scope:
    - markup.changed
    settings:
      foreground: *ORANGE
  - scope:
    - invalid
    settings:
      foreground: *RED
      fontStyle: underline italic
  - scope:
    - invalid.deprecated
    settings:
      foreground: *FG
      fontStyle: underline italic
  - scope:
    - entity.name.filename
    settings:
      foreground: *YELLOW
  - scope:
    - markup.error
    settings:
      foreground: *RED

  # Markdown / RST / Prose
  # ======================

  - name: Underlined markup
    scope:
    - markup.underline
    settings:
      fontStyle: underline

  - name: Bold markup
    scope:
    - markup.bold
    settings:
      fontStyle: bold
      foreground: *ORANGE

  - name: Markup headings
    scope:
    - markup.heading
    settings:
      fontStyle: bold
      foreground: *PURPLE

  - name: Markup italic
    scope:
    - markup.italic
    settings:
      foreground: *YELLOW
      fontStyle: italic

  - name: Bullets, lists (prose)
    scope:
    - beginning.punctuation.definition.list.markdown
    - beginning.punctuation.definition.quote.markdown
    - punctuation.definition.link.restructuredtext
    settings:
      foreground: *CYAN

  - name: Inline code (prose)
    scope:
    - markup.inline.raw
    - markup.raw.restructuredtext
    settings:
      foreground: *GREEN # =>

  - name: Links (prose)
    scope:
    - markup.underline.link
    - markup.underline.link.image
    settings:
      foreground: *CYAN

  - name: Link text, image alt text (prose)
    scope:
    - meta.link.reference.def.restructuredtext
    - punctuation.definition.directive.restructuredtext
    - string.other.link.description
    - string.other.link.title
    settings:
      foreground: *PINK

  - name: Blockquotes (prose)
    scope:
    - entity.name.directive.restructuredtext
    - markup.quote
    settings:
      foreground: *YELLOW
      fontStyle: italic

  - name: Horizontal rule (prose)
    scope:
    - meta.separator.markdown
    settings:
      foreground: *COMMENT

  - name: Code blocks
    scope:
    - fenced_code.block.language
    - markup.raw.inner.restructuredtext
    - markup.fenced_code.block.markdown punctuation.definition.markdown
    settings:
      foreground: *GREEN # =>

  - name: Prose constants
    scope:
    - punctuation.definition.constant.restructuredtext
    settings:
      foreground: *PURPLE

  - name: Braces in markdown headings
    scope:
    - markup.heading.markdown punctuation.definition.string.begin
    - markup.heading.markdown punctuation.definition.string.end
    settings:
      foreground: *PURPLE

  - name: Braces in markdown paragraphs
    scope:
    - meta.paragraph.markdown punctuation.definition.string.begin
    - meta.paragraph.markdown punctuation.definition.string.end
    settings:
      foreground: *FG

  - name: Braces in markdown blockquotes
    scope:
    - markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.begin
    - markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.end
    settings:
      foreground: *YELLOW

# =============================================================================
# Classes
# =============================================================================

  - name: User-defined class names
    scope:
    - entity.name.type.class
    settings:
      foreground: *CYAN
      fontStyle: normal

  - name: this, super, self, etc.
    scope:
    - keyword.expressions-and-types.swift
    - keyword.other.this
    - variable.language
    - variable.language punctuation.definition.variable.php # the "$" symbol in $this
    - variable.other.readwrite.instance.ruby                # ruby's "@" instance symbol
    - variable.parameter.function.language.special          # Special words as parameters
    settings:
      foreground: *PURPLE
      fontStyle: italic

  - name: Inherited classes
    scope:
    - entity.other.inherited-class
    settings:
      fontStyle: italic
      foreground: *CYAN

# =============================================================================
# Comments
# =============================================================================

  - name: Comments
    scope:
    - comment
    - punctuation.definition.comment
    - unused.comment
    - wildcard.comment
    settings:
      foreground: *COMMENT

  - name: JSDoc-style keywords
    scope:
    - comment keyword.codetag.notation
    - comment.block.documentation keyword
    - comment.block.documentation storage.type.class
    settings:
      foreground: *PINK

  - name: JSDoc-style types
    scope:
    - comment.block.documentation entity.name.type
    settings:
      foreground: *CYAN
      fontStyle: italic

  - name: JSDoc-style type brackets
    scope:
    - comment.block.documentation entity.name.type punctuation.definition.bracket
    settings:
      foreground: *CYAN

  - name: JSDoc-style comment parameters
    scope:
    - comment.block.documentation variable
    settings:
      foreground: *ORANGE
      fontStyle: italic

# =============================================================================
# Constants
# =============================================================================

  - name: Constants
    scope:
    - constant
    - variable.other.constant
    settings:
      foreground: *PURPLE

  - name: Constant escape sequences
    scope:
    - constant.character.escape
    - constant.character.string.escape
    - constant.regexp
    settings:
      foreground: *PINK

# =============================================================================
# Entities
# =============================================================================

  - name: HTML tags
    scope:
    - entity.name.tag
    settings:
      foreground: *PINK

  - name: CSS attribute parent selectors ('&')
    scope:
    - entity.other.attribute-name.parent-selector
    settings:
      foreground: *PINK

  - name: HTML/CSS attribute names
    scope:
    - entity.other.attribute-name
    settings:
      foreground: *GREEN # =>
      fontStyle: italic

# =============================================================================
# Functions/Methods
# =============================================================================

  - name: Function names
    scope:
    - entity.name.function
    - meta.function-call.generic
    - meta.function-call.object
    - meta.function-call.php
    - meta.function-call.static
    - meta.method-call.java meta.method
    - meta.method.groovy
    - support.function.any-method.lua
    - keyword.operator.function.infix
    settings:
      foreground: *GREEN # =>

  - name: Function parameters
    scope:
    - entity.name.variable.parameter
    - meta.at-rule.function variable # Sass function params
    - meta.at-rule.mixin variable    # Sass mixin params
    - meta.function.arguments variable.other.php
    - meta.selectionset.graphql meta.arguments.graphql variable.arguments.graphql
    - variable.parameter
    settings:
      fontStyle: italic
      foreground: *ORANGE

  - name: Decorators
    scope:
    - meta.decorator variable.other.readwrite
    - meta.decorator variable.other.property
    settings:
      foreground: *GREEN # =>
      fontStyle: italic

  - name: Decorator Objects
    scope:
      - meta.decorator variable.other.object
    settings:
      foreground: *GREEN # =>

# =============================================================================
# Keywords
# =============================================================================

  - name: Keywords
    scope:
    - keyword
    - punctuation.definition.keyword
    settings:
      foreground: *PINK

  - name: Keyword "new"
    scope:
    - keyword.control.new
    - keyword.operator.new
    settings:
      fontStyle: bold

  - name: Generic selectors (CSS/SCSS/Less/Stylus)
    scope:
    - meta.selector
    settings:
      foreground: *PINK

# =============================================================================
# Language Built-ins
# =============================================================================

  - name: Language Built-ins
    scope:
    - support
    settings:
      fontStyle: italic
      foreground: *CYAN

  - name: Built-in magic functions and constants
    scope:
    - support.function.magic
    - support.variable
    - variable.other.predefined
    settings:
      fontStyle: regular
      foreground: *PURPLE

  - name: Built-in functions / properties
    scope:
    - support.function
    - support.type.property-name
    settings:
      fontStyle: regular

# =============================================================================
# Punctuation
# =============================================================================

  - name: Separators (key/value, namespace, inheritance, pointer, hash, slice, etc)
    scope:
    - constant.other.symbol.hashkey punctuation.definition.constant.ruby
    - entity.other.attribute-name.placeholder punctuation # Sass placeholder `%` symbols
    - entity.other.attribute-name.pseudo-class punctuation
    - entity.other.attribute-name.pseudo-element punctuation
    - meta.group.double.toml
    - meta.group.toml
    - meta.object-binding-pattern-variable punctuation.destructuring
    - punctuation.colon.graphql
    - punctuation.definition.block.scalar.folded.yaml
    - punctuation.definition.block.scalar.literal.yaml
    - punctuation.definition.block.sequence.item.yaml
    - punctuation.definition.entity.other.inherited-class
    - punctuation.function.swift
    - punctuation.separator.dictionary.key-value
    - punctuation.separator.hash
    - punctuation.separator.inheritance
    - punctuation.separator.key-value
    - punctuation.separator.key-value.mapping.yaml
    - punctuation.separator.namespace
    - punctuation.separator.pointer-access
    - punctuation.separator.slice
    - string.unquoted.heredoc punctuation.definition.string
    - support.other.chomping-indicator.yaml
    - punctuation.separator.annotation
    settings:
      foreground: *PINK

  - name: Brackets, braces, parens, etc.
    scope:
    - keyword.operator.other.powershell # Commas
    - keyword.other.statement-separator.powershell
    - meta.brace.round
    - meta.function-call punctuation
    - punctuation.definition.arguments.begin
    - punctuation.definition.arguments.end
    - punctuation.definition.entity.begin
    - punctuation.definition.entity.end
    - punctuation.definition.tag.cs # HTML tags in comments
    - punctuation.definition.type.begin
    - punctuation.definition.type.end
    - punctuation.section.scope.begin
    - punctuation.section.scope.end
    - storage.type.generic.java
    - string.template meta.brace
    - string.template punctuation.accessor
    settings:
      foreground: *FG

  - name: Variable interpolation operators
    scope:
    - meta.string-contents.quoted.double punctuation.definition.variable
    - punctuation.definition.interpolation.begin
    - punctuation.definition.interpolation.end
    - punctuation.definition.template-expression.begin
    - punctuation.definition.template-expression.end
    - punctuation.section.embedded.begin
    - punctuation.section.embedded.coffee
    - punctuation.section.embedded.end
    - punctuation.section.embedded.end source.php  # PHP edge case
    - punctuation.section.embedded.end source.ruby # Issue with ruby's tmLanguage
    - punctuation.definition.variable.makefile
    settings:
      foreground: *PINK

# =============================================================================
# Serializable / Config Langages
# =============================================================================

  - name: Keys (serializable languages)
    scope:
    - entity.name.function.target.makefile
    - entity.name.section.toml
    - entity.name.tag.yaml
    - variable.other.key.toml
    settings:
      foreground: *CYAN

  - name: Dates / timestamps (serializable languages)
    scope:
    - constant.other.date
    - constant.other.timestamp
    settings:
      foreground: *ORANGE

  - name: YAML aliases
    scope:
    - variable.other.alias.yaml
    settings:
      fontStyle: italic underline
      foreground: *GREEN # =>

# =============================================================================
# Storage
# =============================================================================

  - name: Storage
    scope:
    - storage
    - meta.implementation storage.type.objc
    - meta.interface-or-protocol storage.type.objc
    - source.groovy storage.type.def
    settings:
      fontStyle: regular
      foreground: *PINK

  - name: Types
    scope:
    - entity.name.type
    - keyword.primitive-datatypes.swift
    - keyword.type.cs
    - meta.protocol-list.objc
    - meta.return-type.objc
    - source.go storage.type
    - source.groovy storage.type
    - source.java storage.type
    - source.powershell entity.other.attribute-name
    - storage.class.std.rust
    - storage.type.attribute.swift
    - storage.type.c
    - storage.type.core.rust
    - storage.type.cs
    - storage.type.groovy
    - storage.type.objc
    - storage.type.php
    - storage.type.haskell
    - storage.type.ocaml
    settings:
      fontStyle: italic
      foreground: *CYAN

  - name: Generics, templates, and mapped type declarations
    scope:
    - entity.name.type.type-parameter
    - meta.indexer.mappedtype.declaration entity.name.type # Mapped type declarations
    - meta.type.parameters entity.name.type                # Generic type declarations
    settings:
      foreground: *ORANGE

  - name: Modifiers
    scope:
    - storage.modifier
    settings:
      foreground: *PINK

# =============================================================================
# RegExp
# =============================================================================

  - name: RegExp string
    scope:
    - string.regexp
    - constant.other.character-class.set.regexp
    - constant.character.escape.backslash.regexp
    settings:
      foreground: *YELLOW

  - name: Non-capture operators
    scope:
    # NOTE: The scope name is a misnomer. It is actually non-capture operators
    - punctuation.definition.group.capture.regexp
    settings:
      foreground: *PINK

  - name: RegExp start and end characters
    scope:
    - string.regexp punctuation.definition.string.begin
    - string.regexp punctuation.definition.string.end
    settings:
      foreground: *RED

  - name: Character group
    scope:
    - punctuation.definition.character-class.regexp
    settings:
      foreground: *CYAN

  - name: Capture groups
    scope:
    - punctuation.definition.group.regexp
    settings:
      foreground: *ORANGE

  - name: Assertion operators
    scope:
    - punctuation.definition.group.assertion.regexp
    - keyword.operator.negation.regexp
    settings:
      foreground: *RED

  - name: Positive lookaheads
    scope:
    - meta.assertion.look-ahead.regexp
    settings:
      foreground: *GREEN # =>


# =============================================================================
# Strings
# =============================================================================

  - name: Strings
    scope:
    - string
    settings:
      foreground: *YELLOW

  - name: String quotes (temporary vscode fix)
    scope:
    # NOTE: This is a temporary fix for VSCode expand selection.
    # See (https://github.com/Microsoft/vscode/issues/4795)
    - punctuation.definition.string.begin
    - punctuation.definition.string.end
    settings:
      foreground: *TEMP_QUOTES

  - name: Property quotes (temporary vscode fix)
    scope:
    # NOTE: Same as above
    - punctuation.support.type.property-name.begin
    - punctuation.support.type.property-name.end
    settings:
      foreground: *TEMP_PROPERTY_QUOTES

  - name: Docstrings
    scope:
    - string.quoted.docstring.multi
    - string.quoted.docstring.multi.python punctuation.definition.string.begin
    - string.quoted.docstring.multi.python punctuation.definition.string.end
    - string.quoted.docstring.multi.python constant.character.escape
    settings:
      foreground: *COMMENT

# =============================================================================
# Variables
# =============================================================================

  - name: Variables and object properties
    scope:
    - variable
    - constant.other.key.perl     # Perl edge case
    - support.variable.property   # Object properties
    - variable.other.constant.js  # Fix incorrect highlighting of pseudo-constants in js, jsx
    - variable.other.constant.ts  # Fixes incorrect highlighting of pseudo-constants in ts
    - variable.other.constant.tsx # Fixes incorrect highlighting of pseudo-constants in tsx
    settings:
      foreground: *FG

  - name: Destructuring / aliasing reference name (LHS)
    scope:
    - meta.import variable.other.readwrite                          # Module import aliasing (real name)
    - meta.object-binding-pattern-variable variable.object.property # Object destructuring property
    - meta.variable.assignment.destructured.object.coffee variable  # Object destructuring property (coffeescript)
    settings:
      fontStyle: italic
      foreground: *ORANGE

  - name: Destructuring / aliasing variable name (RHS)
    scope:
    - meta.import variable.other.readwrite.alias                             # Module import aliasing (alias name)
    - meta.export variable.other.readwrite.alias                             # Module import aliasing (alias name)
    - meta.variable.assignment.destructured.object.coffee variable variable  # Object destructuring variable (coffeescript)
    settings:
      fontStyle: normal
      foreground: *FG

# =============================================================================
# Language Extensions / Edge Cases
# =============================================================================

  # GraphQL
  # =======
  - name: GraphQL keys
    scope:
    - meta.selectionset.graphql variable
    settings:
      foreground: *YELLOW

  - name: GraphQL function arguments
    scope:
    - meta.selectionset.graphql meta.arguments variable
    settings:
      foreground: *FG

  - name: GraphQL fragment name (definition)
    scope:
    - entity.name.fragment.graphql
    - variable.fragment.graphql
    settings:
      foreground: *CYAN

  # Edge Cases
  # ==========
  - name: Edge cases (foreground color resets)
    scope:
    - constant.other.symbol.hashkey.ruby                            # Ruby hash keys
    - keyword.operator.dereference.java                             # Java dot access
    - keyword.operator.navigation.groovy                            # groovy dot access
    - meta.scope.for-loop.shell punctuation.definition.string.begin
    - meta.scope.for-loop.shell punctuation.definition.string.end
    - meta.scope.for-loop.shell string
    - storage.modifier.import                                       # Java / Groovy imports
    - punctuation.section.embedded.begin.tsx
    - punctuation.section.embedded.end.tsx
    - punctuation.section.embedded.begin.jsx
    - punctuation.section.embedded.end.jsx
    - punctuation.separator.list.comma.css                          # Commas separating selectors in CSS
    - constant.language.empty-list.haskell
    settings:
      foreground: *FG

  # This is set to conform to the standard of coloring langage constants purple.
  # In this case, this colors "$?", "$@", "$*", "$1", etc..
  - name: Shell variables prefixed with "$" (edge case)
    scope:
    - source.shell variable.other
    settings:
      foreground: *PURPLE

  - name: Powershell constants mistakenly scoped to `support`, rather than `constant` (edge)
    scope:
    - support.constant
    settings:
      fontStyle: normal
      foreground: *PURPLE

  - name: Makefile prerequisite names
    scope:
    - meta.scope.prerequisites.makefile
    settings:
      foreground: *YELLOW

  - name: SCSS attibute selector strings
    scope:
      - meta.attribute-selector.scss
    settings:
      foreground: *YELLOW

  - name: SCSS attribute selector brackets
    scope:
      - punctuation.definition.attribute-selector.end.bracket.square.scss
      - punctuation.definition.attribute-selector.begin.bracket.square.scss
    settings:
      foreground: *FG

  - name: Haskell Pragmas
    scope:
      - meta.preprocessor.haskell
    settings:
      foreground: *COMMENT