/* ==========================================================================
   SweetSyntax backend highlighting for fenced code blocks.
   Token classes are emitted by `sweetsyntax/renderers/htmlrenderer`:
   `<span class="<kind> <attr>...">`, e.g. `<span class="ident import">`.
   Kinds: ident int float tkHex tkOctal tkBinary tkBigInt tkImag char
   string punct comment doc_comment regex. Attrs are language-specific
   identifier/symbol names (e.g. `proc`, `return`, `assign`).
   Code blocks stay dark islands in both themes (see --booyaka-code-*).
   ========================================================================== */
pre code[class*="language-"] {
  display: block;
  overflow-x: auto;
  padding: 1em;
  background: var(--booyaka-code-bg);
  color: var(--booyaka-code-fg);
  border: 1px solid var(--booyaka-code-border);
  border-radius: var(--booyaka-radius-md, 8px);
}

/* comments */
pre code .comment,
pre code .doc_comment {
  color: #777;
  font-style: italic;
}

/* strings, chars, regex */
pre code .string,
pre code .char,
pre code .regex,
pre code .heredoc {
  color: #ff6868;
}

/* numbers */
pre code .int,
pre code .float,
pre code .tkHex,
pre code .tkOctal,
pre code .tkBinary,
pre code .tkBigInt,
pre code .tkImag {
  color: #ab875d;
}

/* punctuation / operators */
pre code .punct {
  color: #78b0e8;
}

/* identifiers default to the code foreground */
pre code .ident {
  color: inherit;
}

/* keywords (language-specific identifier attrs) */
pre code .ident.import,
pre code .ident.export,
pre code .ident.from,
pre code .ident.as,
pre code .ident.proc,
pre code .ident.func,
pre code .ident.function,
pre code .ident.const,
pre code .ident.let,
pre code .ident.var,
pre code .ident.return,
pre code .ident.if,
pre code .ident.elif,
pre code .ident.else,
pre code .ident.for,
pre code .ident.while,
pre code .ident.do,
pre code .ident.break,
pre code .ident.continue,
pre code .ident.case,
pre code .ident.of,
pre code .ident.when,
pre code .ident.switch,
pre code .ident.match,
pre code .ident.class,
pre code .ident.interface,
pre code .ident.enum,
pre code .ident.struct,
pre code .ident.type,
pre code .ident.distinct,
pre code .ident.template,
pre code .ident.macro,
pre code .ident.method,
pre code .ident.def,
pre code .ident.lambda,
pre code .ident.new,
pre code .ident.delete,
pre code .ident.typeof,
pre code .ident.sizeof,
pre code .ident.include,
pre code .ident.addr,
pre code .ident.cast,
pre code .ident.discard,
pre code .ident.assert,
pre code .ident.raise,
pre code .ident.try,
pre code .ident.except,
pre code .ident.finally,
pre code .ident.with,
pre code .ident.async,
pre code .ident.await,
pre code .ident.yield,
pre code .ident.in,
pre code .ident.is,
pre code .ident.isnot,
pre code .ident.not,
pre code .ident.and,
pre code .ident.or,
pre code .ident.xor,
pre code .ident.div,
pre code .ident.mod,
pre code .ident.nil,
pre code .ident.null,
pre code .ident.true,
pre code .ident.false,
pre code .ident.self,
pre code .ident.this,
pre code .ident.super,
pre code .ident.echo,
pre code .ident.result,
pre code .ident.iterator,
pre code .ident.object {
  color: #ff6868;
}

/* Tim Engine: element DSL tag names */
pre code .ident.tag {
  color: #7ee787;
}

/* Tim Engine: type names */
pre code .ident.typename {
  color: #79c0ff;
}

/* Tim Engine: directives (@import, @javascript, @client, @end, ...) */
pre code .ident.directive {
  color: #d2a8ff;
}

/* line numbers (enabled via `content.code_line_numbers`) */
pre code:has(> .code-line) {
  counter-reset: code-line;
}
pre code .code-line {
  display: block;
  counter-increment: code-line;
}
pre code .code-line::before {
  content: counter(code-line);
  display: inline-block;
  min-width: 2.5ch;
  margin-right: 1.25ch;
  padding-right: 1ch;
  border-right: 1px solid var(--booyaka-code-border);
  text-align: right;
  color: #777;
  user-select: none;
}
pre code .code-line:empty::after {
  content: " ";
}
