/*
 * HappiHacking Terminal Code Theme
 * Terminal aesthetic with green/orange accents
 * Works for all languages: JS, Java, Erlang, Elixir, Bash, Python, etc.
 * Uses Hack font
 */

code[class*="language-"],
pre[class*="language-"] {
  color: var(--code-text) !important;
  background: var(--code-bg) !important;
  font-family: 'Hack', 'Monaco', 'Menlo', 'Courier New', monospace !important;
  text-align: left;
  white-space: pre-wrap;
  word-spacing: normal;
  word-break: break-word;
  word-wrap: break-word;
  line-height: 1.5;
  tab-size: 4;
  hyphens: none;
}

/* ASCII art and plain text should not wrap */
pre[class*="language-text"],
pre.language-text,
code.language-text {
  white-space: pre !important;
  word-break: normal !important;
  overflow-x: auto !important;
}

/* Code blocks */
pre[class*="language-"] {
  padding: 1em !important;
  margin: 1em 0 !important;
  overflow-x: hidden !important;
  overflow-y: auto !important;
  border-radius: 0.3em;
  border-left: 4px solid #2EC26E !important;  /* Terminal green default */
  max-width: 100%;
  box-sizing: border-box;
}

/* Ensure code inside pre wraps */
pre[class*="language-"] > code {
  display: block;
  white-space: pre-wrap;
  word-break: break-word;
}

/* Language-specific left borders */
pre[class*="language-erlang"],
pre.language-erlang {
  border-left: 4px solid #A90533 !important;  /* Erlang red */
}

pre[class*="language-elixir"],
pre.language-elixir {
  border-left: 4px solid #4B275F !important;  /* Elixir purple */
}

pre[class*="language-javascript"],
pre[class*="language-js"],
pre.language-javascript,
pre.language-js {
  border-left: 4px solid #D68C28 !important;  /* Terminal orange for JS */
}

pre[class*="language-bash"],
pre[class*="language-shell"],
pre[class*="language-sh"],
pre.language-bash,
pre.language-shell,
pre.language-sh {
  border-left: 4px solid #2EC26E !important;  /* Terminal green for bash */
}

pre[class*="language-java"],
pre.language-java {
  border-left: 4px solid #D68C28 !important;  /* Terminal orange for Java */
}

pre[class*="language-python"],
pre.language-python {
  border-left: 4px solid #2EC26E !important;  /* Terminal green for Python */
}

/* Inline code with language class */
:not(pre) > code[class*="language-"] {
  padding: 0.2em 0.5em;
  border-radius: 0.3em;
  white-space: normal;
  background: var(--code-bg) !important;
  border: 1px solid #2EC26E;
  color: var(--code-text) !important;
  font-size: 0.9em;
}

/* Regular inline code (without language class) */
code:not([class*="language-"]) {
  padding: 0.2em 0.5em;
  border-radius: 0.3em;
  background: var(--code-bg);
  border: 1px solid #2EC26E;
  color: var(--code-text);
  font-family: 'Hack', 'Monaco', 'Menlo', 'Courier New', monospace;
  font-size: 0.9em;
  white-space: nowrap;
}

/* Tokens */
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
  color: var(--token-comment) !important;
  font-style: italic;
  opacity: 0.8;
}

.token.punctuation {
  color: var(--code-text) !important;
}

/* Brace matching colors - Terminal aesthetic */
/* MUST come AFTER .token.punctuation to override it */
/* Pattern: Terminal Orange, Terminal Green, White, repeat */

/* Level 0, 3, 6, 9... - Terminal Orange */
.token.brace-level-0,
.token.brace-level-3,
.token.brace-level-6,
.token.brace-level-9,
.token.brace-level-12,
.token.brace-level-15,
.token.brace-level-18,
.token.brace-level-21 {
  color: var(--token-number) !important;
  font-weight: 600;
}

/* Level 1, 4, 7, 10... - Terminal Green */
.token.brace-level-1,
.token.brace-level-4,
.token.brace-level-7,
.token.brace-level-10,
.token.brace-level-13,
.token.brace-level-16,
.token.brace-level-19,
.token.brace-level-22 {
  color: var(--token-string) !important;
  font-weight: 600;
}

/* Level 2, 5, 8, 11... - White */
.token.brace-level-2,
.token.brace-level-5,
.token.brace-level-8,
.token.brace-level-11,
.token.brace-level-14,
.token.brace-level-17,
.token.brace-level-20,
.token.brace-level-23 {
  color: var(--code-text) !important;
  font-weight: 600;
}

.token.namespace {
  opacity: 0.7;
}

.token.operator {
  color: var(--token-operator) !important;
}

.token.boolean {
  color: var(--token-boolean) !important;
  font-weight: 600;
}

.token.number {
  color: var(--token-number) !important;
}

.token.property {
  color: var(--token-property) !important;
}

.token.tag {
  color: var(--token-tag) !important;
}

.token.string {
  color: var(--token-string) !important;
}

.token.selector {
  color: var(--token-selector) !important;
}

.token.attr-name {
  color: var(--token-attr-name) !important;
}

.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
  color: var(--token-entity) !important;
}

.token.attr-value,
.token.keyword,
.token.control,
.token.directive,
.token.unit {
  color: var(--token-keyword) !important;
  font-weight: 600;
}

.token.function,
.token.statement,
.token.regex,
.token.atrule {
  color: var(--token-function) !important;
  font-weight: 600;
}

.token.placeholder,
.token.variable {
  color: var(--token-variable) !important;
  font-weight: 400;
}

/* Erlang-specific */
/* Note: Prism's Erlang tokenizer marks ALL lowercase words as 'atom',
   including actual atoms (ok, error) and module names (erlang, ets).
   Function names with () are marked as 'function'.
   We use blue for atoms to match the intended color scheme. */
.token.atom {
  color: var(--token-variable) !important;
  font-weight: 400;
}

/* Elixir-specific */
/* Atoms in Elixir use :symbol syntax and are marked as 'atom' or 'symbol' */
.token.symbol {
  color: var(--token-variable) !important;
  font-weight: 400;
}

/* Modules in Elixir (capitalized names) */
.token.class-name,
.token.module {
  color: var(--token-class-name) !important;
  font-weight: 500;
}

/* Attribute names (key: value syntax in Elixir) */
.token.attr-name {
  color: var(--token-attr-name) !important;
}

.token.attribute {
  color: var(--token-attr-name) !important;
}

.token.regex {
  color: var(--token-regex) !important;
}

.token.deleted {
  color: var(--token-deleted) !important;
}

.token.inserted {
  color: var(--token-inserted) !important;
}

.token.italic {
  font-style: italic;
}

.token.important,
.token.bold {
  font-weight: bold;
}

.token.important {
  color: var(--token-important) !important;
}
