/*
 * 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: #f8f8f2 !important;
  background: #1a1d1e !important;  /* Darker terminal background */
  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: #1a1d1e !important;
  border: 1px solid #2EC26E;
  color: #f8f8f2 !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: #1a1d1e;
  border: 1px solid #2EC26E;
  color: #f8f8f2;
  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: #2EC26E !important;  /* Terminal green for comments */
  font-style: italic;
  opacity: 0.8;
}

.token.punctuation {
  color: #f8f8f2 !important;
}

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

/* Level 1, 4, 7, 10... - Terminal Orange */
.token.brace-level-0,
.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: #D68C28 !important;
  font-weight: 600;
}

/* Level 2, 5, 8, 11... - Terminal Green */
.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: #2EC26E !important;
  font-weight: 600;
}

/* Level 3, 6, 9, 12... - White */
.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,
.token.brace-level-24 {
  color: #ffffff !important;
  font-weight: 600;
}

.token.namespace {
  opacity: 0.7;
}

.token.operator {
  color: #f92672 !important;
}

.token.boolean {
  color: #6b46c1 !important;  /* Dark purple for true/false */
  font-weight: 600;
}

.token.number {
  color: #66d9ef !important;  /* Light blue for numbers */
}

.token.property {
  color: #f92672 !important;
}

.token.tag {
  color: #f92672 !important;
}

.token.string {
  color: #98c379 !important;  /* Light green for strings */
}

.token.selector {
  color: #a6e22e !important;
}

.token.attr-name {
  color: #fd971f !important;
}

.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
  color: #98c379 !important;  /* Light green for strings */
}

.token.attr-value,
.token.keyword,
.token.control,
.token.directive,
.token.unit {
  color: #6b46c1 !important;  /* Dark purple for keywords (fun, end, etc.) */
  font-weight: 600;
}

.token.function,
.token.statement,
.token.regex,
.token.atrule {
  color: #61afef !important;  /* Blue - Prism treats most atoms as general atoms */
  font-weight: 600;
}

.token.placeholder,
.token.variable {
  color: #fd971f !important;  /* Orange for variables (uppercase) */
  font-weight: 500;
}

/* 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: #61afef !important;  /* Blue for atoms */
  font-weight: 500;
}

/* Elixir-specific */
/* Atoms in Elixir use :symbol syntax and are marked as 'atom' or 'symbol' */
.token.symbol {
  color: #61afef !important;  /* Blue for atoms/symbols */
  font-weight: 500;
}

/* Modules in Elixir (capitalized names) */
.token.class-name,
.token.module {
  color: #61afef !important;  /* Blue for modules */
  font-weight: 500;
}

/* Attribute names (key: value syntax in Elixir) */
.token.attr-name {
  color: #fd971f !important;  /* Orange for attribute names */
}

/* Module attributes like @doc, @moduledoc */
.token.attribute {
  color: #e74c3c !important;  /* Red for module attributes */
}

/* Sigils and special strings */
.token.regex {
  color: #98c379 !important;  /* Light green for regex */
}

.token.deleted {
  color: #f92672;
}

.token.inserted {
  color: #a6e22e;
}

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

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

.token.important {
  color: #f92672;
}
