/* =============================================================================
   Syntax highlighting — dual scheme
   -----------------------------------------------------------------------------
   Replaces the single-scheme giallo.css. Zola emits `.z-*` classes
   (`[markdown.highlighting] style = "class"`); this file maps them onto a small
   set of `--fm-syn-*` tokens so both colour schemes are served from one
   stylesheet, following the same selection order as the Foremast token layer.

   Dark values are ayu-dark, unchanged except `comment`, which was lightened
   #5a6673 -> #78848f to clear 4.5:1 on --fm-color-surface (it measured 3.10:1).
   Light values are ayu-light, darkened until every token clears 4.5:1 on the
   light surface.

   The `.z-*` rules below are kept in the order giallo emitted them, including
   the duplicates — several selectors are redeclared and rely on last-wins.
   ========================================================================== */

/* -- dark: night watch ------------------------------------------------------ */
:root {
  --fm-syn-fg: #bfbdb6;
  --fm-syn-comment: #78848f;
  --fm-syn-string: #aad94c;
  --fm-syn-keyword: #ff8f40;
  --fm-syn-operator: #f29668;
  --fm-syn-number: #d2a6ff;
  --fm-syn-char: #95e6cb;
  --fm-syn-func: #ffb454;
  --fm-syn-entity: #59c2ff;
  --fm-syn-type: #39bae6;
  --fm-syn-member: #f07178;
  --fm-syn-error: #d95757;
  --fm-syn-inserted: #70bf56;
  --fm-syn-changed: #73b8ff;
  --fm-syn-deleted: #f26d78;
  --fm-syn-other: #e6c08a;
  --fm-syn-meta: #c594c5;
  --fm-syn-punct: #8a8c89;
  --fm-syn-hl-bg: #161a24;
  --fm-syn-raw-bg: rgb(191 189 182 / 0.06);
}

/* -- light: chart table ----------------------------------------------------- */
@media (prefers-color-scheme: light) {
  :root:not([data-fm-theme="dark"]) {
    --fm-syn-fg: #4c5257;
    --fm-syn-comment: #666d73;
    --fm-syn-string: #4a6b00;
    --fm-syn-keyword: #a85413;
    --fm-syn-operator: #9c5411;
    --fm-syn-number: #7d4fc0;
    --fm-syn-char: #1a7358;
    --fm-syn-func: #8a5f09;
    --fm-syn-entity: #146ba8;
    --fm-syn-type: #1d6c8c;
    --fm-syn-member: #b34141;
    --fm-syn-error: #b32626;
    --fm-syn-inserted: #37701f;
    --fm-syn-changed: #2a63a3;
    --fm-syn-deleted: #b53a48;
    --fm-syn-other: #8a6828;
    --fm-syn-meta: #864a92;
    --fm-syn-punct: #666d73;
    --fm-syn-hl-bg: #e9e5d9;
    --fm-syn-raw-bg: rgb(30 58 52 / 0.06);
  }
}

:root[data-fm-theme="light"] {
  --fm-syn-fg: #4c5257;
  --fm-syn-comment: #666d73;
  --fm-syn-string: #4a6b00;
  --fm-syn-keyword: #a85413;
  --fm-syn-operator: #9c5411;
  --fm-syn-number: #7d4fc0;
  --fm-syn-char: #1a7358;
  --fm-syn-func: #8a5f09;
  --fm-syn-entity: #146ba8;
  --fm-syn-type: #1d6c8c;
  --fm-syn-member: #b34141;
  --fm-syn-error: #b32626;
  --fm-syn-inserted: #37701f;
  --fm-syn-changed: #2a63a3;
  --fm-syn-deleted: #b53a48;
  --fm-syn-other: #8a6828;
  --fm-syn-meta: #864a92;
  --fm-syn-punct: #666d73;
  --fm-syn-hl-bg: #e9e5d9;
  --fm-syn-raw-bg: rgb(30 58 52 / 0.06);
}

/* -- base -------------------------------------------------------------------
   The code background comes from the Foremast surface token, not from the
   syntax theme, so code blocks sit on the same surface as every other panel. */
.z-code {
  color: var(--fm-syn-fg);
  background-color: var(--fm-color-surface);
}

.z-hl {
  background-color: var(--fm-syn-hl-bg);
}

.giallo-ln {
  color: var(--fm-color-text-dim);
}

/* -- scopes ------------------------------------------------------------------ */
.z-comment {
  color: var(--fm-syn-comment);
  font-style: italic;
}
.z-string {
  color: var(--fm-syn-string);
}
.z-variable {
  color: var(--fm-syn-fg);
}
.z-storage {
  color: var(--fm-syn-keyword);
}
.z-keyword {
  color: var(--fm-syn-keyword);
}
.z-invalid {
  color: var(--fm-syn-error);
}
.z-emphasis {
  color: var(--fm-syn-member);
  font-style: italic;
}
.z-match {
  color: var(--fm-syn-comment);
}
.z-string.z-regexp {
  color: var(--fm-syn-char);
}
.z-constant.z-character {
  color: var(--fm-syn-char);
}
.z-constant.z-other {
  color: var(--fm-syn-char);
}
.z-constant.z-numeric {
  color: var(--fm-syn-number);
}
.z-constant.z-language {
  color: var(--fm-syn-number);
}
.z-variable.z-member {
  color: var(--fm-syn-member);
}
.z-variable.z-language {
  color: var(--fm-syn-type);
  font-style: italic;
}
.z-keyword.z-operator {
  color: var(--fm-syn-operator);
}
.z-punctuation.z-separator {
  color: var(--fm-syn-punct);
}
.z-punctuation.z-terminator {
  color: var(--fm-syn-punct);
}
.z-punctuation.z-section {
  color: var(--fm-syn-fg);
}
.z-punctuation.z-accessor {
  color: var(--fm-syn-operator);
}
.z-meta.z-embedded {
  color: var(--fm-syn-fg);
}
.z-variable.z-parameter {
  color: var(--fm-syn-number);
}
.z-meta.z-parameter {
  color: var(--fm-syn-number);
}
.z-variable.z-function {
  color: var(--fm-syn-func);
}
.z-variable.z-annotation {
  color: var(--fm-syn-func);
}
.z-support.z-function {
  color: var(--fm-syn-member);
}
.z-support.z-macro {
  color: var(--fm-syn-member);
}
.z-entity.z-name {
  color: var(--fm-syn-entity);
}
.z-support.z-constant {
  color: var(--fm-syn-operator);
  font-style: italic;
}
.z-support.z-type {
  color: var(--fm-syn-type);
}
.z-support.z-class {
  color: var(--fm-syn-type);
}
.z-meta.z-diff {
  color: var(--fm-syn-meta);
}
.z-message.z-error {
  color: var(--fm-syn-error);
}
.z-markup.z-heading {
  color: var(--fm-syn-string);
  font-weight: bold;
}
.z-markup.z-italic {
  color: var(--fm-syn-member);
  font-style: italic;
}
.z-markup.z-bold {
  color: var(--fm-syn-member);
  font-weight: bold;
}
.z-markup.z-underline {
  text-decoration: underline;
}
.z-markup.z-raw {
  background-color: var(--fm-syn-raw-bg);
}
.z-meta.z-separator {
  color: var(--fm-syn-comment);
  background-color: var(--fm-syn-raw-bg);
  font-weight: bold;
}
.z-markup.z-quote {
  color: var(--fm-syn-char);
  font-style: italic;
}
.z-markup.z-inserted {
  color: var(--fm-syn-inserted);
}
.z-markup.z-changed {
  color: var(--fm-syn-changed);
}
.z-markup.z-deleted {
  color: var(--fm-syn-deleted);
}
.z-markup.z-strike {
  color: var(--fm-syn-other);
}
.z-markup.z-strong {
  font-weight: bold;
}
.z-markup.z-table {
  color: var(--fm-syn-type);
  background-color: var(--fm-syn-raw-bg);
}
.z-storage.z-type {
  color: var(--fm-syn-type);
}
.z-variable.z-other {
  color: var(--fm-syn-other);
}
.z-punctuation.z-decorator {
  color: var(--fm-syn-other);
}
.z-support.z-type {
  color: var(--fm-syn-comment);
}
.z-entity.z-name {
  color: var(--fm-syn-string);
  font-weight: bold;
}
.z-markup.z-bold {
  font-weight: bold;
  font-style: italic;
}
.z-markup.z-italic {
  font-weight: bold;
  font-style: italic;
}
.z-constant.z-other.z-symbol {
  color: var(--fm-syn-string);
}
.z-variable.z-parameter.z-function-call {
  color: var(--fm-syn-fg);
}
.z-punctuation.z-definition.z-template-expression {
  color: var(--fm-syn-keyword);
}
.z-punctuation.z-section.z-embedded {
  color: var(--fm-syn-keyword);
}
.z-entity.z-other.z-inherited-class {
  color: var(--fm-syn-type);
}
.z-storage.z-type.z-function {
  color: var(--fm-syn-keyword);
}
.z-entity.z-name.z-function {
  color: var(--fm-syn-func);
}
.z-meta.z-function-call.z-generic {
  color: var(--fm-syn-func);
}
.z-support.z-function.z-go {
  color: var(--fm-syn-func);
}
.z-entity.z-name.z-import {
  color: var(--fm-syn-string);
}
.z-entity.z-name.z-package {
  color: var(--fm-syn-string);
}
.z-entity.z-name.z-tag {
  color: var(--fm-syn-type);
}
.z-meta.z-tag.z-sgml {
  color: var(--fm-syn-type);
}
.z-support.z-class.z-component {
  color: var(--fm-syn-entity);
}
.z-punctuation.z-definition.z-tag {
  color: var(--fm-syn-type);
}
.z-entity.z-other.z-attribute-name {
  color: var(--fm-syn-func);
}
.z-storage.z-type.z-annotation {
  color: var(--fm-syn-other);
}
.z-meta.z-diff.z-header {
  color: var(--fm-syn-meta);
}
.z-support.z-type.z-property-name {
  color: var(--fm-syn-type);
}
.z-markup.z-underline.z-link {
  color: var(--fm-syn-type);
}
.z-string.z-other.z-link {
  color: var(--fm-syn-type);
}
.z-markup.z-raw.z-inline {
  background-color: var(--fm-syn-raw-bg);
}
.z-punctuation.z-definition.z-markdown {
  color: var(--fm-syn-comment);
}
.z-storage.z-type.z-primitive {
  color: var(--fm-syn-type);
}
.z-variable.z-other.z-readwrite {
  color: var(--fm-syn-func);
}
.z-entity.z-name.z-tag {
  color: var(--fm-syn-entity);
}
.z-markup.z-inline.z-raw {
  color: var(--fm-syn-operator);
}
.z-meta.z-dummy.z-line-break {
  color: var(--fm-syn-comment);
  background-color: var(--fm-syn-comment);
}
.z-punctuation.z-definition.z-tag.z-end {
  color: var(--fm-syn-type);
}
.z-punctuation.z-definition.z-tag.z-begin {
  color: var(--fm-syn-type);
}
.z-entity.z-other.z-attribute-name.z-pseudo-class {
  color: var(--fm-syn-char);
}
.z-entity.z-name.z-function.z-decorator {
  color: var(--fm-syn-other);
}
.z-constant.z-numeric.z-line-number.z-match {
  color: var(--fm-syn-keyword);
}
.z-entity.z-name.z-filename.z-find-in-files {
  color: var(--fm-syn-string);
}
.z-punctuation.z-definition.z-list.z-begin {
  color: var(--fm-syn-func);
}
