/* ================================
   Monochrome Code Blocks — code.css
   Dark-only • No rounded corners
   Works with: CodeHilite/Pygments, Prism, highlight.js
   ================================ */

/* ---------- Theme variables (dark) ---------- */
:root {
  --code-bg: #0f0f10;
  --code-fg: #e8e8e8;
  --code-muted: #9a9a9a;
  --code-strong: #f5f5f5;
  --code-accent: #d7d7d7;
  --code-border: #262626;
  --code-shadow: rgba(0, 0, 0, 0.45);
  --inline-bg: #151516;
}

/* ---------- Base reset for code ---------- */
pre, code, kbd, samp {
  font-family:
    ui-monospace, SFMono-Regular, Menlo, Monaco,
    Consolas, "Liberation Mono", "Fira Code",
    "Source Code Pro", "IBM Plex Mono", monospace;
  font-variant-ligatures: none;
  font-feature-settings: "liga" 0, "calt" 0;
  tab-size: 4;
}

/* ---------- Block code containers ---------- */
pre.codehilite,
.codehilite pre,
pre[class*="language-"],
pre > code.hljs {
  background: var(--code-bg);
  color: var(--code-fg);
  border: 1px solid var(--code-border);
  border-radius: 0;                 /* ← no radius */
  padding: 1rem 1.125rem;
  margin: 1rem 0;
  overflow: auto;
  line-height: 1.55;
  font-size: 0.95rem;
  box-shadow: 0 4px 16px var(--code-shadow);
}

/* Ensure inner <code> inherits and doesn’t add extra padding */
pre.codehilite code,
pre[class*="language-"] code,
pre > code.hljs {
  background: transparent !important;
  color: inherit;
  padding: 0;
  border: 0;
}

/* ---------- Inline code ---------- */
:not(pre) > code {
  background: var(--inline-bg);
  color: var(--code-fg);
  border: 1px solid var(--code-border);
  border-radius: 0;                 /* ← no radius */
  padding: 0.15rem 0.35rem;
  font-size: 0.925em;
  white-space: nowrap;
}

/* ---------- Selection & focus ---------- */
pre::selection,
code::selection,
.hljs::selection,
.token::selection {
  background: rgba(127,127,127,0.35);
}

/* ---------- Scrollbar (WebKit) ---------- */
pre::-webkit-scrollbar { height: 10px; width: 10px; }
pre::-webkit-scrollbar-track { background: transparent; }
pre::-webkit-scrollbar-thumb {
  background: #808080;
  border-radius: 8px;
  border: 2px solid transparent;
  background-clip: content-box;
}
pre::-webkit-scrollbar-thumb:hover { background: #9a9a9a; background-clip: content-box; }

/* ---------- Token coloring (monochrome) ---------- */
/* Comments */
.codehilite .c, .codehilite .cm, .codehilite .c1, .codehilite .cs,
.hljs-comment,
.token.comment, .token.prolog, .token.doctype, .token.cdata {
  color: var(--code-muted);
  font-style: italic;
}

/* Keywords / directives / control */
.codehilite .k, .codehilite .kd, .codehilite .kn, .codehilite .kr, .codehilite .kp, .codehilite .kt,
.hljs-keyword, .hljs-built_in, .hljs-meta .hljs-keyword,
.token.keyword, .token.atrule, .token.directive {
  color: var(--code-strong);
  font-weight: 600;
}

/* Types / classes / tags / namespaces */
.codehilite .nc, .codehilite .nn, .codehilite .nt, .codehilite .kt,
.hljs-type, .hljs-title.class_, .hljs-meta, .hljs-tag,
.token.class-name, .token.namespace, .token.tag {
  color: var(--code-accent);
  font-weight: 600;
}

/* Functions / methods */
.codehilite .nf, .codehilite .nl,
.hljs-title.function_,
.token.function, .token.method {
  color: var(--code-strong);
}

/* Strings */
.codehilite .s, .codehilite .sa, .codehilite .sb, .codehilite .sc, .codehilite .sd,
.codehilite .s1, .codehilite .s2, .codehilite .se, .codehilite .sh, .codehilite .si, .codehilite .sr, .codehilite .ss,
.hljs-string, .hljs-symbol, .hljs-attribute,
.token.string, .token.char, .token.attr-value, .token.regex {
  color: #cdcdcd;
}

/* Numbers / booleans / literals */
.codehilite .m, .codehilite .mi, .codehilite .mf, .codehilite .mh, .codehilite .mo,
.hljs-number, .hljs-literal,
.token.number, .token.boolean, .token.constant {
  color: #c3c3c3;
}

/* Operators & punctuation */
.codehilite .o, .codehilite .ow, .codehilite .p,
.hljs-operator, .hljs-punctuation,
.token.operator, .token.punctuation {
  color: #d4d4d4;
}

/* Attributes / properties */
.codehilite .na, .codehilite .nv,
.hljs-attr, .hljs-property,
.token.property, .token.attr-name, .token.variable {
  color: #d0d0d0;
}

/* Preprocessor / macros (C/C++/ASM) */
.codehilite .cp, .codehilite .cpf,
.hljs-meta .hljs-string, .hljs-meta,
.token.macro {
  color: #bdbdbd;
  font-style: italic;
}

/* Diff/patch additions & deletions — monochrome cues */
.codehilite .gi, .hljs-addition, .token.inserted {
  background: rgba(255, 255, 255, 0.06);
  border-left: 3px solid #bfbfbf;
  display: block;
}
.codehilite .gd, .hljs-deletion, .token.deleted {
  background: rgba(0, 0, 0, 0.25);
  border-left: 3px solid #4a4a4a;
  display: block;
}

/* Emphasis for errors */
.codehilite .err, .hljs-error, .token.error {
  background: rgba(0,0,0,0.35);
  border-bottom: 1px dotted #6b6b6b;
}

/* Optional compact variant */
pre.code--compact { padding: 0.75rem 0.9rem; font-size: 0.9rem; }

/* Print-friendly (still monochrome) */
@media print {
  pre.codehilite,
  .codehilite pre,
  pre[class*="language-"],
  pre > code.hljs,
  :not(pre) > code {
    background: transparent !important;
    color: #000 !important;
    border: 1px solid #bbb;
    box-shadow: none;
  }
}
