:root {
  --text: light-dark(#5c6166, #bfbdb6);
  --background: light-dark(#fcfcfc, #10141c);
  --comment: light-dark(#adaeb1, #5a6673);
  --accent: light-dark(#f29718, #e6b450);
  --markup: light-dark(#f07171, #f07178);
  --operator: light-dark(#f2a191, #f29668);
  --keyword: light-dark(#fa8532, #ff8f40);
  --func: light-dark(#eba400, #ffb454);
  --special: light-dark(#e59645, #e6c08a);
  --constant: light-dark(#a37acc, #d2a6ff);
  --string: light-dark(#86b300, #aad94c);
  --regexp: light-dark(#4cbf99, #95e6cb);
  --entity: light-dark(#22a4e6, #59c2ff);
  --tag: light-dark(#55b4d4, #39bae6);
}

pre {
  border-top: 2px solid var(--accent);
  border-bottom: 2px solid var(--accent);

  code {
    color: var(--text);
    background-color: var(--background);

    .constant_builtin { color: var(--special); }

    .comment,
    .comment_line,
    .comment_line_documentation,
    .comment_elm {
      color: var(--comment);
      font-style: italic;
    }

    .conditional { color: var(--keyword); }

    .property { color: var(--entity); }

    .include,
    .keyword,
    .keyword_conditional,
    .keyword_import,
    .keyword_operator,
    .keyword_return,
    .keyword_control_elm,
    .keyword_operator_assignment_elm,
    .keyword_other_elm {
      color: var(--keyword);
    }

    .function,
    .function_call,
    .function_elm,
    .function_macro,
    .function_method,
    .keyword_function {
      color: var(--func);
    }

    .operator,
    .keyword_operator_elm,
    .keyword_operator_arrow_elm {
      color: var(--operator);
    }

    .field,
    .type,
    .type_builtin,
    .storage_type_elm {
      color: var(--entity);
    }

    .label, .module {
      color: var(--markup);
    }

    .number,
    .float,
    .constant_numeric_elm {
      color: var(--constant);
    }

    .string { color: var(--string); }
    .string_escape { color: var(--regexp); }
    .string_special_symbol { color: var(--markup); }

    .repeat { color: var(--keyword); }
  }

  code.bash {
    .embedded,
    .operator {
      color: var(--operator);
    }

    .property { color: var(--entity); }
  }

  code.go {
    .function,
    .property {
      color: var(--func);
    }
  }

  code.haskell {
    .function_call { color: var(--func); }
  }

  code.lua {
    .keyword_function { color: var(--keyword); }
  }

  code.nim {
    .keyword_function { color: var(--keyword); }
  }

  code.odin {
    .variable { color: var(--text); }

    .type { color: var(--entity); }

    .keyword_function { color: var(--keyword); }

    .function { color: var(--func); }
  }

  code.ruby {
    .constant { color: var(--entity); }
  }

  code.rust {
    .constant_builtin { color: var(--constant); }
  }

  code.scheme {
    .operator.keyword { color: var(--operator); }

    .variable { color: var(--text); }
  }

  code.zig {
    .keyword_exception,
    .keyword_function,
    .keyword_modifier,
    .keyword_repeat {
      color: var(--keyword);
    }

    .variable { color: var(--text); }
    .variable_parameter { color: var(--constant); }

    .function,
    .function_builtin,
    .function_call {
      color: var(--func);
    }

    .module { color: var(--markup); }

    .type.function_call { color: var(--func); }
    .type.variable_member { color: var(--entity); }

    .constant_builtin { color: var(--special); }
  }

  code.ziggy {
    .constant { color: var(--constant); }

    .constant_builtin { color: var(--special); }

    .error.constant { color: var(--entity); }

    .punctuation { color: var(--operator); }
  }

  code.ziggy-schema {
    .constant_builtin { color: var(--special); }

    .identifier {
      color: var(--tag);

      &.type { color: var(--entity); }
    }
  }
}

