/* Rouge syntax theme. All token colours meet WCAG AA (4.5:1) against --code-bg. */

:root {
  --syn-text: #1d1f27;
  --syn-comment: #656b7a;
  --syn-keyword: #7a3fd1;
  --syn-string: #1b7a3e;
  --syn-function: #0b5fae;
  --syn-number: #b0480c;
  --syn-type: #8a5800;
  --syn-builtin: #b02e6d;
  --syn-tag: #c0283f;
  --syn-operator: #4b5060;
  --syn-inserted-bg: rgb(27 122 62 / 0.1);
  --syn-deleted-bg: rgb(192 40 63 / 0.1);
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --syn-text: #e4e6ee;
    --syn-comment: #878ea0;
    --syn-keyword: #c4a7ff;
    --syn-string: #9be3a6;
    --syn-function: #7cc7ff;
    --syn-number: #ffb38a;
    --syn-type: #ffd77a;
    --syn-builtin: #ff9ecf;
    --syn-tag: #ff8fa3;
    --syn-operator: #a9b1c6;
    --syn-inserted-bg: rgb(155 227 166 / 0.1);
    --syn-deleted-bg: rgb(255 143 163 / 0.1);
  }
}

:root[data-theme="dark"] {
  --syn-text: #e4e6ee;
  --syn-comment: #878ea0;
  --syn-keyword: #c4a7ff;
  --syn-string: #9be3a6;
  --syn-function: #7cc7ff;
  --syn-number: #ffb38a;
  --syn-type: #ffd77a;
  --syn-builtin: #ff9ecf;
  --syn-tag: #ff8fa3;
  --syn-operator: #a9b1c6;
  --syn-inserted-bg: rgb(155 227 166 / 0.1);
  --syn-deleted-bg: rgb(255 143 163 / 0.1);
}

.highlight { color: var(--syn-text); background: transparent; }

/* Comments */
.highlight :is(.c, .ch, .cd, .cm, .cpf, .c1, .cs) { color: var(--syn-comment); font-style: italic; }
.highlight .cp { color: var(--syn-keyword); }

/* Keywords */
.highlight :is(.k, .kd, .kn, .kp, .kr, .kv, .ow) { color: var(--syn-keyword); }
.highlight :is(.kc, .kt) { color: var(--syn-type); }

/* Strings */
.highlight :is(.s, .sa, .sb, .sc, .dl, .s2, .sh, .s1, .sx) { color: var(--syn-string); }
.highlight :is(.se, .si, .sr, .ss) { color: var(--syn-builtin); }
.highlight .sd { color: var(--syn-comment); }

/* Numbers */
.highlight :is(.m, .mb, .mf, .mh, .mi, .il, .mo, .mx) { color: var(--syn-number); }

/* Names */
.highlight :is(.nf, .fm, .nx) { color: var(--syn-function); }
.highlight :is(.nc, .nn, .ne, .nd) { color: var(--syn-type); }
.highlight :is(.nb, .bp, .no, .nl) { color: var(--syn-builtin); }
.highlight .nt { color: var(--syn-tag); }
.highlight .na { color: var(--syn-type); }
.highlight :is(.nv, .vc, .vg, .vi, .vm) { color: var(--syn-tag); }

/* Operators and punctuation */
.highlight .o { color: var(--syn-operator); }
.highlight .p { color: var(--syn-operator); }

/* Diffs and generic output */
.highlight .gi { color: var(--syn-string); background: var(--syn-inserted-bg); display: block; }
.highlight .gd { color: var(--syn-tag); background: var(--syn-deleted-bg); display: block; }
.highlight :is(.gh, .gu) { color: var(--syn-function); font-weight: 600; }
.highlight .gp { color: var(--syn-comment); user-select: none; }
.highlight .ge { font-style: italic; }
.highlight .gs { font-weight: 600; }
.highlight .err { color: var(--syn-tag); }
