/* Everforest: sainnhe's warm, green-based palette, adapted to Vole's tokens.
   https://github.com/sainnhe/everforest (MIT)

   Six variants share one layout: dark and light, each in hard, medium, and soft
   contrast. This is Vole's permanent theme; the document starts on dark/medium
   and static/theme.js applies a saved account-page choice (or the system's
   light/dark medium default) before the first paint.

   The palette is taken from palette.md. The light foreground accents are mixed
   with the dark ground in a few places (links, status text) so small UI type
   keeps its contrast; syntax highlighting uses the published accents as-is. */

/* ---------- foreground palette ---------- */

:root[data-theme^="everforest-"] {
  --ef-fg: #d3c6aa;
  --ef-red: #e67e80;
  --ef-orange: #e69875;
  --ef-yellow: #dbbc7f;
  --ef-green: #a7c080;
  --ef-aqua: #83c092;
  --ef-blue: #7fbbb3;
  --ef-purple: #d699b6;
  --ef-grey0: #7a8478;
  --ef-grey1: #859289;
  --ef-grey2: #9da9a0;
  accent-color: var(--accent);
}

:root[data-theme^="everforest-light"] {
  --ef-fg: #5c6a72;
  --ef-red: #f85552;
  --ef-orange: #f57d26;
  --ef-yellow: #dfa000;
  --ef-green: #8da101;
  --ef-aqua: #35a77c;
  --ef-blue: #3a94c5;
  --ef-purple: #df69ba;
  --ef-grey0: #a6b0a0;
  --ef-grey1: #939f91;
  --ef-grey2: #829181;
}

/* ---------- background palette ---------- */

:root[data-theme="everforest-dark-hard"] {
  --ef-bg0: #272e33;
  --ef-bg1: #2e383c;
  --ef-bg2: #374145;
  --ef-bg3: #414b50;
  --ef-bg4: #495156;
  --ef-bg5: #4f5b58;
  --ef-bg-red: #493b40;
  --ef-bg-yellow: #45443c;
  --ef-bg-green: #3c4841;
  --ef-bg-blue: #384b55;
  --ef-bg-purple: #463f48;
}
:root[data-theme="everforest-dark-medium"] {
  --ef-bg0: #2d353b;
  --ef-bg1: #343f44;
  --ef-bg2: #3d484d;
  --ef-bg3: #475258;
  --ef-bg4: #4f585e;
  --ef-bg5: #56635f;
  --ef-bg-red: #514045;
  --ef-bg-yellow: #4d4c43;
  --ef-bg-green: #425047;
  --ef-bg-blue: #3a515d;
  --ef-bg-purple: #4a444e;
}
:root[data-theme="everforest-dark-soft"] {
  --ef-bg0: #333c43;
  --ef-bg1: #3a464c;
  --ef-bg2: #434f55;
  --ef-bg3: #4d5960;
  --ef-bg4: #555f66;
  --ef-bg5: #5d6b66;
  --ef-bg-red: #59464c;
  --ef-bg-yellow: #55544a;
  --ef-bg-green: #48584e;
  --ef-bg-blue: #3f5865;
  --ef-bg-purple: #4e4953;
}
:root[data-theme="everforest-light-hard"] {
  --ef-bg0: #fffbef;
  --ef-bg1: #f8f5e4;
  --ef-bg2: #f2efdf;
  --ef-bg3: #edeada;
  --ef-bg4: #e8e5d5;
  --ef-bg5: #bec5b2;
  --ef-bg-red: #ffe7de;
  --ef-bg-yellow: #fef2d5;
  --ef-bg-green: #f3f5d9;
  --ef-bg-blue: #ecf5ed;
  --ef-bg-purple: #fceced;
}
:root[data-theme="everforest-light-medium"] {
  --ef-bg0: #fdf6e3;
  --ef-bg1: #f4f0d9;
  --ef-bg2: #efebd4;
  --ef-bg3: #e6e2cc;
  --ef-bg4: #e0dcc7;
  --ef-bg5: #bdc3af;
  --ef-bg-red: #fde3da;
  --ef-bg-yellow: #faedcd;
  --ef-bg-green: #f0f1d2;
  --ef-bg-blue: #e9f0e9;
  --ef-bg-purple: #fae8e2;
}
:root[data-theme="everforest-light-soft"] {
  --ef-bg0: #f3ead3;
  --ef-bg1: #eae4ca;
  --ef-bg2: #e5dfc5;
  --ef-bg3: #ddd8be;
  --ef-bg4: #d8d3ba;
  --ef-bg5: #b9c0ab;
  --ef-bg-red: #fadbd0;
  --ef-bg-yellow: #f1e4c5;
  --ef-bg-green: #e5e6c5;
  --ef-bg-blue: #e1e7dd;
  --ef-bg-purple: #f1ddd4;
}

/* ---------- dark tokens ---------- */

:root[data-theme^="everforest-dark"] {
  color-scheme: dark;

  --bg: var(--ef-bg0);
  --bg-panel: var(--ef-bg1);
  --bg-raised: var(--ef-bg2);
  --bg-hover: var(--ef-bg3);
  --bg-active: var(--ef-bg4);
  --border: var(--ef-bg4);
  --border-strong: var(--ef-bg5);

  --fg: var(--ef-fg);
  --fg-muted: var(--ef-grey2);
  --fg-faint: var(--ef-grey1);

  --accent: var(--ef-green);
  --accent-fg: var(--ef-bg0);
  --accent-soft: color-mix(in srgb, var(--ef-green) 16%, transparent);
  /* This theme's accent and good are both green, so a running job needs the
     palette's blue to stay distinct from one that already finished. */
  --running: var(--ef-blue);
  --good: var(--ef-green);
  --good-soft: var(--ef-bg-green);
  --bad: var(--ef-red);
  --bad-soft: var(--ef-bg-red);
  --warn: var(--ef-yellow);
  --warn-soft: var(--ef-bg-yellow);
  /* Kept off --accent, which is this theme's green: a merged request must not
     look like an open one. The purple is the palette's own. */
  --merged: var(--ef-purple);
  --merged-soft: var(--ef-bg-purple);

  --syn-comment: var(--ef-grey1);
  --syn-punctuation: var(--ef-grey2);
  --syn-operator: var(--ef-orange);
  --syn-number: var(--ef-purple);
  --syn-string: var(--ef-green);
  --syn-keyword: var(--ef-red);
  --syn-function: var(--ef-green);
  --syn-type: var(--ef-yellow);
  --syn-variable: var(--ef-fg);
  --syn-added: var(--ef-green);
  --syn-deleted: var(--ef-red);
}

/* ---------- light tokens ---------- */

:root[data-theme^="everforest-light"] {
  color-scheme: light;

  --bg: var(--ef-bg0);
  --bg-panel: var(--ef-bg1);
  --bg-raised: var(--ef-bg2);
  --bg-hover: var(--ef-bg3);
  --bg-active: var(--ef-bg4);
  --border: var(--ef-bg4);
  --border-strong: var(--ef-bg5);

  --fg: var(--ef-fg);
  --fg-muted: #708089;
  --fg-faint: var(--ef-grey2);

  /* The published light green is a highlighter on paper. These two shades are
     the same hue mixed toward the dark ground so links and small labels read. */
  --accent: #677618;
  --accent-fg: #fffbef;
  --accent-soft: rgba(141, 161, 1, 0.14);
  --running: var(--ef-blue);
  --good: #677618;
  --good-soft: var(--ef-bg-green);
  --bad: #bb4b4b;
  --bad-soft: var(--ef-bg-red);
  --warn: #866a1e;
  --warn-soft: var(--ef-bg-yellow);
  /* The published light purple is a highlighter on paper; this shade keeps the
     same hue dark enough for the 11px state label. */
  --merged: #9b4a86;
  --merged-soft: var(--ef-bg-purple);

  --syn-comment: var(--ef-grey1);
  --syn-punctuation: var(--ef-grey2);
  --syn-operator: var(--ef-orange);
  --syn-number: var(--ef-purple);
  --syn-string: var(--ef-green);
  --syn-keyword: var(--ef-red);
  --syn-function: var(--ef-green);
  --syn-type: var(--ef-yellow);
  --syn-variable: var(--ef-fg);
  --syn-added: var(--ef-green);
  --syn-deleted: var(--ef-red);
}

/* ---------- syntax highlighting ---------- */

/* vole.css colours Prism tokens with a fixed dark palette. Everforest swaps
   those colours for its own accents; the token classes are the same. */
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.comment,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.prolog,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.doctype,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.cdata {
  color: var(--syn-comment);
}
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.punctuation,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.namespace {
  color: var(--syn-punctuation);
}
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.operator,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.entity,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.url {
  color: var(--syn-operator);
}
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.boolean,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.number,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.constant,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.symbol {
  color: var(--syn-number);
}
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.string,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.char,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.attr-value,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.regex {
  color: var(--syn-string);
}
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.atrule,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.keyword,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.tag,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.selector {
  color: var(--syn-keyword);
}
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.function,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.function-name,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.method {
  color: var(--syn-function);
}
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.class-name,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.builtin,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.attr-name,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.property,
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.title {
  color: var(--syn-type);
}
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.variable {
  color: var(--syn-variable);
}
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.deleted {
  color: var(--syn-deleted);
}
:root[data-theme^="everforest-"] :is(.blob, .diff) .token.inserted {
  color: var(--syn-added);
}
