/* ═══════════════════════════════════════════════════════════════
   FXNET — Forgejo terminal theme
   Target: Forgejo v16.x  ·  file: theme-fxnet.css

   Palette source: fxnet-websitev2 --color-term-* (MonkeyType Terminal)
     bg #191a1b · surface #141516 · border #2a2b2c · text #e7eae0
     muted #48494b · faint #3a3b3d · accent #79a617 · error #a61717

   Deliberately a 3-hue system: green (interactive/positive), text
   (data/neutral), red (errors). Secondary accents collapse onto those
   three rather than introducing new hues. Two documented exceptions,
   marked [EXCEPTION] below, where collapsing would destroy information.

   This file must be SELF-CONTAINED — Forgejo serves custom themes raw,
   and the built-in themes' `@import "../chroma/dark.css"` paths do not
   exist at runtime. Chroma, CodeMirror and markup rules are inlined.
   ═══════════════════════════════════════════════════════════════ */

:root {
  /* ── neutral ramp ─────────────────────────────────────────────
     Replaces Forgejo's --steel-* scale. Anchored on the three real
     palette neutrals: 900=surface, 850=bg, 700=border, 500=muted,
     600=faint, 100=text. Intermediate steps interpolated. */
  --term-950: #0f1011;
  --term-900: #141516; /* palette: surface */
  --term-850: #191a1b; /* palette: bg */
  --term-800: #1e1f20;
  --term-750: #232425;
  --term-700: #2a2b2c; /* palette: border */
  --term-650: #313233;
  --term-600: #3a3b3d; /* palette: faint */
  --term-550: #414244;
  --term-500: #48494b; /* palette: muted */
  --term-450: #57585a;
  --term-400: #6a6b6d;
  --term-350: #7e7f81;
  --term-300: #939496;
  --term-250: #a9aaac;
  --term-200: #c0c1c2;
  --term-150: #d3d4d1;
  --term-100: #e7eae0; /* palette: text */

  /* Load-bearing for JS: web_src/js/utils.js isDarkTheme() reads this
     to pick CodeMirror/Mermaid/image-diff palettes. Must be `true`. */
  --is-dark-theme: true;
  color-scheme: dark;

  /* ── primary: phosphor green ──────────────────────────────────
     Forgejo convention in dark themes: -dark-N is LIGHTER, -light-N
     is DARKER. Preserved here so built-in rules behave correctly. */
  --color-primary: #79a617;
  --color-primary-contrast: #0f1011;
  --color-primary-dark-1: #88b81a;
  --color-primary-dark-2: #97ca1d;
  --color-primary-dark-3: #a6dc21;
  --color-primary-dark-4: #b8e644;
  --color-primary-dark-5: #c9ed70;
  --color-primary-dark-6: #daf39d;
  --color-primary-dark-7: #ebf9ca;
  --color-primary-light-1: #6b9414;
  --color-primary-light-2: #5d8112;
  --color-primary-light-3: #4f6e0f;
  --color-primary-light-4: #415b0c;
  --color-primary-light-5: #33480a;
  --color-primary-light-6: #263507;
  --color-primary-light-7: #1b2605;
  --color-primary-alpha-10: #79a61719;
  --color-primary-alpha-20: #79a61733;
  --color-primary-alpha-30: #79a6174b;
  --color-primary-alpha-40: #79a61766;
  --color-primary-alpha-50: #79a61780;
  --color-primary-alpha-60: #79a61799;
  --color-primary-alpha-70: #79a617b3;
  --color-primary-alpha-80: #79a617cc;
  --color-primary-alpha-90: #79a617e1;
  --color-primary-hover: var(--color-primary-dark-1);
  --color-primary-active: var(--color-primary-dark-2);

  /* ── secondary: neutrals ──────────────────────────────────── */
  --color-secondary: var(--term-700);
  --color-secondary-dark-1: var(--term-550);
  --color-secondary-dark-2: var(--term-500);
  --color-secondary-dark-3: var(--term-450);
  --color-secondary-dark-4: var(--term-400);
  --color-secondary-dark-5: var(--term-350);
  --color-secondary-dark-6: var(--term-300);
  --color-secondary-dark-7: var(--term-250);
  --color-secondary-dark-8: var(--term-200);
  --color-secondary-dark-9: var(--term-150);
  --color-secondary-dark-10: var(--term-100);
  --color-secondary-dark-11: var(--term-100);
  --color-secondary-dark-12: var(--term-100);
  --color-secondary-dark-13: var(--term-100);
  --color-secondary-light-1: var(--term-650);
  --color-secondary-light-2: var(--term-700);
  --color-secondary-light-3: var(--term-750);
  --color-secondary-light-4: var(--term-800);
  --color-secondary-alpha-10: #2a2b2c19;
  --color-secondary-alpha-20: #2a2b2c33;
  --color-secondary-alpha-30: #2a2b2c4b;
  --color-secondary-alpha-40: #2a2b2c66;
  --color-secondary-alpha-50: #2a2b2c80;
  --color-secondary-alpha-60: #2a2b2c99;
  --color-secondary-alpha-70: #2a2b2cb3;
  --color-secondary-alpha-80: #2a2b2ccc;
  --color-secondary-alpha-90: #2a2b2ce1;
  --color-secondary-hover: var(--term-750);
  --color-secondary-active: var(--term-700);

  /* ── console (Actions log viewer, .txt console files) ──────── */
  --color-console-fg: #e7eae0;
  --color-console-fg-subtle: #7e7f81;
  --color-console-bg: #0f1011;
  --color-console-border: #2a2b2c;
  --color-console-hover-bg: #79a61719;
  --color-console-active-bg: #2a2b2c;
  --color-console-menu-bg: #141516;
  --color-console-menu-border: #3a3b3d;

  /* ── generic named colors ─────────────────────────────────────
     Used by issue-label pickers and org avatars. Collapsed onto the
     three hues; differentiated by lightness so adjacent labels stay
     visually distinct without importing new hues. */
  --color-red: #a61717;
  --color-orange: #6b9414;
  --color-yellow: #97ca1d;
  --color-olive: #79a617;
  --color-green: #79a617;
  --color-teal: #c0c1c2;
  --color-blue: #939496;
  --color-violet: #b8e644;
  --color-purple: #c9ed70;
  --color-pink: #c81c1c;
  --color-brown: #6a6b6d;
  --color-grey: var(--term-500);
  --color-black: #0f1011;

  --color-red-light: #c81c1c;
  --color-orange-light: #79a617;
  --color-yellow-light: #a6dc21;
  --color-olive-light: #88b81a;
  --color-green-light: #88b81a;
  --color-teal-light: #d3d4d1;
  --color-blue-light: #a9aaac;
  --color-violet-light: #c9ed70;
  --color-purple-light: #daf39d;
  --color-pink-light: #d94a4a;
  --color-brown-light: #7e7f81;
  --color-grey-light: var(--term-300);
  --color-black-light: #141516;

  --color-red-dark-1: #951515;
  --color-orange-dark-1: #5d8112;
  --color-yellow-dark-1: #88b81a;
  --color-olive-dark-1: #6b9414;
  --color-green-dark-1: #6b9414;
  --color-teal-dark-1: #a9aaac;
  --color-blue-dark-1: #7e7f81;
  --color-violet-dark-1: #a6dc21;
  --color-purple-dark-1: #b8e644;
  --color-pink-dark-1: #b01818;
  --color-brown-dark-1: #57585a;
  --color-black-dark-1: #0a0b0c;

  --color-red-dark-2: #841212;
  --color-orange-dark-2: #4f6e0f;
  --color-yellow-dark-2: #79a617;
  --color-olive-dark-2: #5d8112;
  --color-green-dark-2: #5d8112;
  --color-teal-dark-2: #939496;
  --color-blue-dark-2: #6a6b6d;
  --color-violet-dark-2: #97ca1d;
  --color-purple-dark-2: #a6dc21;
  --color-pink-dark-2: #951515;
  --color-brown-dark-2: #48494b;
  --color-black-dark-2: #050606;

  /* ── ANSI [EXCEPTION 1] ───────────────────────────────────────
     These render *program output* in Actions logs. A build tool that
     prints red-for-failure must stay red; collapsing all 16 onto green
     would delete information the CI output is trying to convey. Hues
     are kept true but desaturated and pulled toward the palette's
     luminance range so they sit correctly on #0f1011. */
  --color-ansi-black: #191a1b;
  --color-ansi-red: #a61717;
  --color-ansi-green: #79a617;
  --color-ansi-yellow: #a3901a;
  --color-ansi-blue: #4a7a9e;
  --color-ansi-magenta: #96548a;
  --color-ansi-cyan: #3f8f88;
  --color-ansi-white: var(--color-console-fg-subtle);
  --color-ansi-bright-black: #48494b;
  --color-ansi-bright-red: #c81c1c;
  --color-ansi-bright-green: #97ca1d;
  --color-ansi-bright-yellow: #c4ae20;
  --color-ansi-bright-blue: #5c93bb;
  --color-ansi-bright-magenta: #b268a4;
  --color-ansi-bright-cyan: #4fada4;
  --color-ansi-bright-white: var(--color-console-fg);

  /* ── misc ─────────────────────────────────────────────────── */
  --color-gold: #97ca1d;
  --color-white: #ffffff;
  --color-pure-black: #000000;

  /* ── diff ─────────────────────────────────────────────────────
     The one place green/red is exactly the right semantic pair.
     "moved" has no third hue available, so it reads as neutral-raised. */
  --color-diff-added-word-bg: #33480a;
  --color-diff-removed-word-bg: #5c1414;
  --color-diff-added-row-bg: #1c2609;
  --color-diff-removed-row-bg: #2c1010;
  --color-diff-moved-row-bg: #26282a;
  --color-diff-added-row-border: #33480a;
  --color-diff-removed-row-border: #5c1414;
  --color-diff-moved-row-border: #48494b;
  --color-diff-inactive: var(--term-800);

  /* ── status ───────────────────────────────────────────────────
     [EXCEPTION 2 — see README] With no amber available, warning is
     separated from success by LUMINANCE, not hue: success sits at the
     base accent, warning at the brightest end of the green ramp. */
  --color-error-border: #a61717;
  --color-error-bg: #2c1010;
  --color-error-bg-active: #401717;
  --color-error-bg-hover: #3a1414;
  --color-error-text: #f2cfcf;

  --color-success-border: #4f6e0f;
  --color-success-bg: #1c2609;
  --color-success-text: #c9ed70;

  --color-warning-border: #97ca1d;
  --color-warning-bg: #33480a;
  --color-warning-text: #ebf9ca;

  --color-info-border: #48494b;
  --color-info-bg: #232425;
  --color-info-text: var(--term-100);

  --color-red-badge: #a61717;
  --color-red-badge-bg: #a6171722;
  --color-red-badge-hover-bg: #a6171744;
  --color-green-badge: #79a617;
  --color-green-badge-bg: #79a61722;
  --color-green-badge-hover-bg: #79a61744;
  --color-yellow-badge: #97ca1d;
  --color-yellow-badge-bg: #97ca1d22;
  --color-yellow-badge-hover-bg: #97ca1d44;
  --color-orange-badge: #6b9414;
  --color-orange-badge-bg: #6b941422;
  --color-orange-badge-hover-bg: #6b941444;

  /* ── thin colors: issue/PR state octicons ─────────────────────
     This is where open / merged / closed / draft get distinguished.
     Forgejo maps: green=open, purple=merged, red=closed, orange=draft.
     Encoded as four steps along the green ramp + red, so all four
     states stay tellable apart without leaving the palette. */
  --thin-lightness: 0.68;
  --regular-chroma: 0.19;
  --color-thin-green: #97ca1d;  /* open   — accent, brightest chroma */
  --color-thin-red: #c81c1c;    /* closed — red */
  --color-thin-purple: #daf39d; /* merged — pale phosphor, low chroma */
  --color-thin-orange: #6b9414; /* draft  — dim green */

  --thin-lightness-highlight: 0.75;
  --color-thin-red-highlight: #e04a4a;

  --bg-lightness: 0.26;
  --bg-chroma: 0.05;
  --color-danger-bg: #2c1010;

  /* ── target-based / structural ────────────────────────────── */
  --color-body: var(--term-850);
  --color-box-header: var(--term-900);
  --color-box-body: var(--term-900);
  --color-box-body-highlight: var(--term-800);
  --color-text-dark: #ffffff;
  --color-text: var(--term-100);
  --color-text-light: var(--term-200);
  --color-text-light-1: var(--term-250);
  --color-text-light-2: var(--term-300);
  --color-text-light-3: var(--term-350);
  --color-footer: var(--term-950);
  --color-timeline: var(--term-700);
  --color-input-text: var(--term-100);
  --color-input-background: var(--term-950);
  --color-input-toggle-background: var(--term-700);
  --color-input-border: var(--term-700);
  --color-input-border-hover: var(--color-primary);
  --color-header-wrapper: var(--term-950);
  --color-header-wrapper-transparent: #0f101100;
  --color-light: #00000028;
  --color-light-mimic-enabled: rgba(0, 0, 0, calc(40 / 255 * 222 / 255 / var(--opacity-disabled)));
  --color-light-border: #2a2b2c;
  --color-hover: var(--term-750);
  --color-active: var(--term-700);
  --color-menu: var(--term-900);
  --color-card: var(--term-900);
  --fancy-card-bg: var(--term-900);
  --fancy-card-border: var(--term-700);
  --color-markup-table-row: #ffffff06;
  --color-markup-code-block: var(--term-950);
  --color-markup-code-inline: var(--term-800);
  --color-button: var(--term-800);
  --color-code-bg: var(--term-950);
  --color-shadow: transparent; /* flat: no shadows anywhere */
  --color-secondary-bg: var(--term-800);
  --color-text-focus: #ffffff;
  --color-expand-button: var(--term-700);
  --color-placeholder-text: var(--term-450);
  --color-editor-line-highlight: var(--term-800);
  --color-project-board-bg: var(--term-900);
  --color-project-board-dark-label: var(--term-350);
  --color-caret: var(--color-primary); /* terminal cursor */
  --color-reaction-bg: #ffffff10;
  --color-reaction-active-bg: var(--color-primary-alpha-30);
  --color-reaction-hover-bg: var(--color-primary-alpha-40);
  --color-tooltip-text: #0f1011;
  --color-tooltip-bg: #97ca1d;
  --color-nav-bg: var(--term-950);
  --color-nav-hover-bg: var(--term-750);
  --color-secondary-nav-bg: var(--term-900);
  --color-label-text: var(--term-100);
  --color-label-bg: var(--term-700);
  --color-label-hover-bg: var(--term-650);
  --color-label-active-bg: var(--term-600);
  --color-label-bg-alt: var(--term-650);
  --color-accent: var(--color-primary);
  --color-small-accent: var(--color-primary-light-5);
  --color-highlight-fg: var(--color-primary-dark-2);
  --color-highlight-bg: var(--color-primary-alpha-20);
  --color-overlay-backdrop: #050606d0;
  --color-selection-bg: var(--color-primary);
  --color-selection-fg: #0f1011;

  --checkerboard-color-1: #2a2b2c;
  --checkerboard-color-2: #1e1f20;

  --color-indicator-offline: var(--term-400);
  --color-indicator-offline-20: #6a6b6d1a;
  --color-indicator-idle: #97ca1d;
  --color-indicator-idle-20: #97ca1d1a;
  --color-indicator-active: #79a617;
  --color-indicator-active-20: #79a61733;

  accent-color: var(--color-accent);

  /* ── FULL TERMINAL TREATMENT ────────────────────────────────── */
  /* --fonts-regular derives from --fonts-proportional in base.css, so
     overriding proportional switches all body text to mono. The trailing
     var(--fonts-emoji) is required — upstream --fonts-monospace ends with
     it, and dropping it breaks emoji inside code blocks. */
  --fonts-proportional: "JetBrains Mono", "JetBrainsMono Nerd Font", ui-monospace,
    SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace,
    var(--fonts-emoji);
  --fonts-monospace: "JetBrains Mono", "JetBrainsMono Nerd Font", ui-monospace,
    SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace,
    var(--fonts-emoji);

  /* Only these four exist in v16 base.css — do not invent others. */
  --border-radius: 0;
  --border-radius-medium: 0;
  --border-radius-large: 0;
  --border-radius-full: 9999px; /* left round: pills/avatars use this */
}

/* Mono everywhere. Forgejo sets font-family on body and on a number of
   Fomantic components independently, so this has to be broad. */
body,
button,
input,
select,
textarea,
optgroup,
.ui,
.ui.menu,
.ui.button,
.ui.input > input,
.ui.dropdown,
.ui.dropdown .menu,
.ui.header,
.ui.table,
.ui.form input,
.ui.form select,
.ui.form textarea,
.ui.label,
.ui.message,
.ui.modal,
.ui.card,
.markup {
  font-family: var(--fonts-monospace);
}

/* Square everything except avatars/status dots. `border-radius: 0` on a
   wildcard is safe here because circular elements are re-round below. */
*:not(.ui.circular):not(.avatar):not(.ui.avatar):not(.ui.circular.image) {
  border-radius: 0 !important;
}
.avatar,
.ui.avatar,
.ui.avatar.image,
.ui.circular,
.ui.circular.image,
.ui.circular.label,
.ui.circular.button,
img.avatar,
.repo-icon,
.ui.label.circular {
  border-radius: 50% !important;
}

/* Flat: kill every shadow Fomantic ships. */
*,
*::before,
*::after {
  box-shadow: none !important;
  text-shadow: none !important;
}

/* Hard 1px borders */
/* NOTE: `.ui.menu` is deliberately NOT in this list. In Forgejo it's a
   navigation bar, not a container — the navbar groups are literally
   `class="navbar-left ui secondary menu"`, and the repo tab row is
   `.ui.tabular.menu`. Bordering it draws stray boxes around the top
   bars and the repo header. Dropdown panels are covered separately by
   `.ui.dropdown .menu` below, which DOES want a border. */
.ui.segment,
.ui.card,
.ui.table,
.ui.message,
.ui.modal,
.ui.dropdown .menu,
.ui.popup,
.repository .diff-file-box,
.ui.attached.header {
  border: 1px solid var(--color-secondary) !important;
}

/* Accent focus ring — terminal-style, no glow */
:focus-visible,
.ui.input > input:focus,
.ui.form input:focus,
.ui.form textarea:focus,
.ui.selection.dropdown:focus {
  outline: 1px solid var(--color-primary) !important;
  outline-offset: -1px;
  border-color: var(--color-primary) !important;
}

::selection {
  background: var(--color-selection-bg);
  color: var(--color-selection-fg);
}

/* Scrollbars */
* {
  scrollbar-color: var(--term-600) var(--term-900);
}
::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}
::-webkit-scrollbar-track {
  background: var(--term-900);
}
::-webkit-scrollbar-thumb {
  background: var(--term-600);
}
::-webkit-scrollbar-thumb:hover {
  background: var(--color-primary-light-2);
}

/* ═══ chroma — syntax highlighting ═══════════════════════════════
   NOT variable-driven upstream; these are hard-coded rules that must
   be shipped inline. Rebuilt as a phosphor-monochrome scheme: meaning
   is carried by brightness along the green ramp, with red reserved for
   errors/tracebacks. Comments are dimmed and italic.
   Class list mirrors v16.0.1 web_src/css/chroma/dark.css. */
.chroma .c,
.chroma .c1,
.chroma .ch,
.chroma .cm,
.chroma .go { color: #5f6163; font-style: italic; } /* comments, output */
.chroma .cs { color: #6a6b6d; font-style: italic; } /* CommentSpecial */
.chroma .cp { color: #6b9414; } /* CommentPreproc */
.chroma .cpf { color: #79a617; } /* CommentPreprocFile */

.chroma .k,
.chroma .kd,
.chroma .kr,
.chroma .kn,
.chroma .kt,
.chroma .kp,
.chroma .ow { color: #b8e644; font-weight: 600; } /* keywords */
.chroma .kc { color: #c9ed70; } /* KeywordConstant */

.chroma .s,
.chroma .s1,
.chroma .s2,
.chroma .sb,
.chroma .sd,
.chroma .sh,
.chroma .sa,
.chroma .sx,
.chroma .dl { color: #79a617; } /* strings */
.chroma .se,
.chroma .si,
.chroma .ss { color: #a6dc21; } /* escapes / interpolation */
.chroma .sr { color: #88b81a; } /* regex */
.chroma .sc { color: #79a617; }

.chroma .m,
.chroma .mb,
.chroma .mf,
.chroma .mh,
.chroma .mi,
.chroma .mo,
.chroma .il { color: #c9ed70; } /* numbers */

.chroma .n,
.chroma .nn,
.chroma .nx { color: #e7eae0; } /* plain names */
.chroma .nf,
.chroma .fm { color: #daf39d; } /* functions */
.chroma .nc { color: #ebf9ca; font-weight: 600; } /* classes */
.chroma .na,
.chroma .nb,
.chroma .bp,
.chroma .ni { color: #97ca1d; } /* attributes / builtins */
.chroma .nd { color: #6b9414; } /* decorators */
.chroma .nt { color: #b8e644; } /* tags */
.chroma .nl { color: #a6dc21; } /* labels */
.chroma .no { color: #c9ed70; } /* constants */
.chroma .nv,
.chroma .vc,
.chroma .vg,
.chroma .vi,
.chroma .vm { color: #d3d4d1; } /* variables */
.chroma .ne { color: #c81c1c; } /* exceptions */

.chroma .o { color: #939496; } /* operators */
.chroma .p { color: #7e7f81; } /* punctuation */
.chroma .w { color: #3a3b3d; } /* whitespace */

.chroma .gd { color: #e7eae0; background-color: #2c1010; } /* deleted */
.chroma .gi { color: #e7eae0; background-color: #1c2609; } /* inserted */
.chroma .gr,
.chroma .gt { color: #c81c1c; } /* error / traceback */
.chroma .gh { color: #b8e644; font-weight: 600; } /* heading */
.chroma .gu { color: #97ca1d; font-weight: 600; } /* subheading */
.chroma .gp { color: #79a617; } /* prompt */
.chroma .ge { font-style: italic; }
.chroma .gs { font-weight: 600; }
.chroma .l,
.chroma .ld,
.chroma .g,
.chroma .gl,
.chroma .py {}
.chroma .err {} /* deliberately unstyled — Chroma over-applies it */

/* ═══ CodeMirror 5 (legacy editors still present in v16) ═══════ */
.CodeMirror.cm-s-default .cm-keyword,
.CodeMirror.cm-s-paper .cm-keyword { color: #b8e644; }
.CodeMirror.cm-s-default .cm-atom,
.CodeMirror.cm-s-paper .cm-atom { color: #c9ed70; }
.CodeMirror.cm-s-default .cm-number,
.CodeMirror.cm-s-paper .cm-number { color: #c9ed70; }
.CodeMirror.cm-s-default .cm-def,
.CodeMirror.cm-s-paper .cm-def { color: #e7eae0; }
.CodeMirror.cm-s-default .cm-property,
.CodeMirror.cm-s-paper .cm-property { color: #97ca1d; }
.CodeMirror.cm-s-default .cm-variable-2,
.CodeMirror.cm-s-paper .cm-variable-2 { color: #d3d4d1; }
.CodeMirror.cm-s-default .cm-variable-3,
.CodeMirror.cm-s-paper .cm-variable-3 { color: #a9aaac; }
.CodeMirror.cm-s-default .cm-comment,
.CodeMirror.cm-s-paper .cm-comment { color: #5f6163; font-style: italic; }
.CodeMirror.cm-s-default .cm-string,
.CodeMirror.cm-s-paper .cm-string { color: #79a617; }
.CodeMirror.cm-s-default .cm-string-2,
.CodeMirror.cm-s-paper .cm-string-2 { color: #88b81a; }
.CodeMirror.cm-s-default .cm-meta,
.CodeMirror.cm-s-paper .cm-meta,
.CodeMirror.cm-s-default .cm-qualifier,
.CodeMirror.cm-s-paper .cm-qualifier { color: #6b9414; }
.CodeMirror.cm-s-default .cm-builtin,
.CodeMirror.cm-s-paper .cm-builtin { color: #97ca1d; }
.CodeMirror.cm-s-default .cm-bracket,
.CodeMirror.cm-s-paper .cm-bracket { color: #7e7f81; }
.CodeMirror.cm-s-default .cm-tag,
.CodeMirror.cm-s-paper .cm-tag { color: #b8e644; }
.CodeMirror.cm-s-default .cm-attribute,
.CodeMirror.cm-s-paper .cm-attribute { color: #a6dc21; }
.CodeMirror.cm-s-default .cm-header,
.CodeMirror.cm-s-paper .cm-header { color: #ebf9ca; }
.CodeMirror.cm-s-default .cm-quote,
.CodeMirror.cm-s-paper .cm-quote { color: #6b9414; }
.CodeMirror.cm-s-default .cm-hr,
.CodeMirror.cm-s-paper .cm-hr { color: #48494b; }
.CodeMirror.cm-s-default .cm-url,
.CodeMirror.cm-s-paper .cm-url { color: #939496; }
.CodeMirror.cm-s-default .cm-link,
.CodeMirror.cm-s-paper .cm-link { color: #79a617; }
.CodeMirror.cm-s-default .cm-error,
.CodeMirror.cm-s-paper .cm-error { color: #c81c1c; }

/* ═══ markup — dark-mode image switching ═════════════════════════ */
.markup [src$="#gh-light-mode-only"],
.markup [src$="#light-mode-only"],
.markup [href$="#gh-light-mode-only"],
.markup [href$="#light-mode-only"] {
  display: none;
}
.markup [src$="#gh-dark-mode-only"],
.markup [src$="#dark-mode-only"],
.markup [href$="#gh-dark-mode-only"],
.markup [href$="#dark-mode-only"] {
  display: unset;
}

/* ═══ Fomantic-UI patches (ported from theme-forgejo-dark) ═══════ */
.ui.secondary.vertical.menu > .item {
  border-radius: 0;
}
.ui.primary.label,
.ui.primary.labels .label {
  background-color: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
  color: var(--color-primary-contrast) !important;
}
.ui.basic.red.button,
.ui.basic.red.buttons .button {
  box-shadow: inset 0 0 0 1px var(--color-red) !important;
  color: var(--color-red-light) !important;
}
.ui.basic.red.button:hover,
.ui.basic.red.buttons .button:hover {
  background: var(--color-error-bg) !important;
  box-shadow: inset 0 0 0 1px var(--color-red-light) !important;
  color: var(--color-error-text) !important;
}
i.grey.icon {
  color: var(--color-text-light-2) !important;
}
#review-box .review-comments-counter {
  background-color: var(--color-primary-light-4);
  color: var(--color-primary-dark-6);
}
strong.attention-note { color: var(--color-primary-dark-2); }
strong.attention-important { color: var(--color-primary-dark-4); }
strong.attention-warning { color: var(--color-warning-border); }
strong.attention-caution { color: var(--color-red-light); }

/* Emoji shouldn't be inverted — the built-in dark theme applies a
   filter to some monochrome icons; keep emoji true-color. */
.emoji,
img.emoji {
  filter: none;
}

/* ═══════════════════════════════════════════════════════════════
   TYPE SCALE
   base.css sets `html, body { font-size: 14px }`. Everything here is
   monospace, and mono renders optically larger at the same px size,
   so the whole UI reads oversized at 14. 13px is the single knob —
   change this one value to rescale the entire interface (all Fomantic
   sizing is em/rem-derived from it).
   ═══════════════════════════════════════════════════════════════ */
html,
body {
  font-size: 13px;
}

/* ═══════════════════════════════════════════════════════════════
   TOP BAR — tmux/lazygit style
   Mirrors resources/js/components/PublicShell.vue from fxnet-websitev2:
   sticky translucent bar, traffic-light dots, `host:path$` prompt,
   hairline bottom border.
   ═══════════════════════════════════════════════════════════════ */
#navbar {
  position: sticky;
  top: 0;
  z-index: 100;
  min-height: 0 !important;
  padding: 0.3rem 1rem !important;
  background: color-mix(in srgb, var(--term-850) 85%, transparent);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  border-bottom: 1px solid var(--term-700) !important;
  font-size: 0.8rem;
}

/* Forgejo's logo mark is a fixed-palette SVG that can't be recoloured
   to the theme, so it's swapped for the terminal dots + prompt. */
#navbar-logo img,
#navbar-logo svg,
#navbar-logo .logo {
  display: none !important;
}
#navbar-logo {
  position: relative;
  display: inline-flex !important;
  align-items: center;
  padding: 0.25rem 0.5rem !important;
}
#navbar-logo:hover {
  background: transparent !important;
}

/* Three dots from ONE pseudo-element via offset box-shadows. Needs
   !important + id specificity to beat the global shadow reset above. */
#navbar-logo::before {
  content: "";
  display: inline-block;
  width: 9px;
  height: 9px;
  border-radius: 50% !important;
  background: #a61717;
  box-shadow:
    15px 0 0 0 #79a617,
    30px 0 0 0 #97ca1d !important;
  margin-right: 39px;
  flex: none;
}

/* Prompt. Edit this string to change the hostname shown. */
#navbar-logo::after {
  content: "git.xfnet.org:~$";
  color: var(--term-500);
  font-family: var(--fonts-monospace);
  letter-spacing: 0.03em;
  white-space: nowrap;
}

/* Nav groups sit directly on the bar background — no panel of their own. */
.navbar-left,
.navbar-right,
.navbar-mobile-right,
.secondary-nav .ui.container {
  border: none !important;
  background: transparent !important;
}

/* Compact, flat nav items */
#navbar .item {
  font-size: 0.8rem;
  padding: 0.3rem 0.65rem !important;
  color: var(--term-200);
}
#navbar .item:hover {
  background: var(--color-primary-alpha-10) !important;
  color: var(--color-primary-dark-2) !important;
}
/* Active tab reads like a focused tmux window: green + underline */
#navbar .item.active {
  background: transparent !important;
  color: var(--color-primary-dark-2) !important;
  box-shadow: inset 0 -2px 0 0 var(--color-primary) !important;
}

/* Secondary context bar (the `jnewing ▾` row) — status-line styling */
.secondary-nav {
  background: var(--term-900) !important;
  border-bottom: 1px solid var(--term-700) !important;
  font-size: 0.8rem;
  padding-top: 0.15rem !important;
  padding-bottom: 0.15rem !important;
}

/* ── ambient spotlight ────────────────────────────────────────────
   The faint green glow from the top of fxnet.org. Purely decorative —
   delete this rule for a flat background.

   Applied as a background-image rather than PublicShell's fixed
   overlay div: `body` is `display: flex` in base.css, so a ::before
   here would become a flex item and disturb the layout. base.css sets
   `background-color` (not the `background` shorthand), so layering an
   image over it is safe and needs no stacking context. */
body {
  background-image:
    radial-gradient(ellipse 60% 40% at 50% 0%, rgba(121, 166, 23, 0.10), transparent 60%),
    radial-gradient(ellipse 40% 30% at 20% 100%, rgba(121, 166, 23, 0.06), transparent 60%);
  background-attachment: fixed;
  background-repeat: no-repeat;
}
