/* Codeheim · paleta Bifrost (Nine Realms, moduł Bifrost, tokeny v1.0.0).
   Dwa warianty: Void (ciemny, domyślny) i Snow (jasny). Wybiera je atrybut data-theme na <html>
   (wartości "dark" = Void i "light" = Snow); bez zapisanej preferencji decyduje prefers-color-scheme.
   Wartości pochodzą z style/pallete_tokens.json, opis w style/bifrost.md; gdy się różnią, obowiązuje plik JSON.
   Nazwy zmiennych idą za wzorami z bifrost.md: --<rola> i --<rola>-alt dla neutralnych, --<barwa>-<ton> dla ramp,
   --<stan> dla stanów, --accent dla akcentu interfejsu, --editor-<token> dla akcentów edytora.
   Zmienne zależne od wariantu są zdefiniowane dwa razy (Void w :root, Snow niżej); ramp, odcieni violet i sekwencji wykresów
   to stałe, więc występują tylko w :root. Pod tokenami: baza, przełącznik motywu, logo i sekcja „Materiały” z siatką komórek-odnośników. */

/* ---------- czcionki (hostowane lokalnie, licencja SIL OFL, patrz assets/fonts/LICENSE-*.txt) ---------- */
/* Inter: zmienna oś wagi 400–700. Chakra Petch: tylko 700, używana w nagłówkach sekcji.
   Pliki przycięte do łaciny i Latin Extended-A, więc pokrywają polskie znaki. */
@font-face{font-family:'Inter';font-style:normal;font-weight:400 700;font-display:swap;src:url(assets/fonts/inter-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+2013-2014,U+2018-2019,U+201C-201D,U+2022,U+2026,U+20AC,U+2122,U+2212}
@font-face{font-family:'Inter';font-style:normal;font-weight:400 700;font-display:swap;src:url(assets/fonts/inter-latin-ext.woff2) format('woff2');unicode-range:U+0100-017F}
@font-face{font-family:'Chakra Petch';font-style:normal;font-weight:700;font-display:swap;src:url(assets/fonts/chakra-petch-700-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+2013-2014,U+2018-2019,U+201C-201D,U+2022,U+2026,U+20AC,U+2122,U+2212}
@font-face{font-family:'Chakra Petch';font-style:normal;font-weight:700;font-display:swap;src:url(assets/fonts/chakra-petch-700-latin-ext.woff2) format('woff2');unicode-range:U+0100-017F}


:root{
  /* ===== stałe w obu wariantach ===== */

  /* rampy tonalne: --<barwa>-<ton>, a --<barwa> to ton dark (dla pink light); stałe w obu wariantach */
  --red-lightest:#EBC4C2; --red-light:#C0392B; --red-dark:#9E2B25; --red-darkest:#5F1511; --red:var(--red-dark);
  --orange-lightest:#EDD6BF; --orange-light:#DFA368; --orange-dark:#B36A21; --orange-darkest:#63380D; --orange:var(--orange-dark);
  --gold-lightest:#EDE2C0; --gold-light:#E0BA3D; --gold-dark:#C9A227; --gold-darkest:#624E0E; --gold:var(--gold-dark);
  --olive-lightest:#D8E2CB; --olive-light:#A7C482; --olive-dark:#6B8F3D; --olive-darkest:#3B531D; --olive:var(--olive-dark);
  --green-lightest:#D0DCD5; --green-light:#8FB8A0; --green-dark:#4F8767; --green-darkest:#254B35; --green:var(--green-dark);
  --teal-lightest:#CBE2DF; --teal-light:#4FB3A6; --teal-dark:#3D8F86; --teal-darkest:#1D534D; --teal:var(--teal-dark);
  --jade-lightest:#C4E8E2; --jade-light:#35A99A; --jade-dark:#1B7468; --jade-darkest:#0F4640; --jade:var(--jade-dark);
  --cyan-lightest:#D2E8ED; --cyan-light:#81C2CF; --cyan-dark:#20626F; --cyan-darkest:#123C45; --cyan:var(--cyan-dark);
  --steel-lightest:#CDD7E0; --steel-light:#87A7C0; --steel-dark:#4C7A9E; --steel-darkest:#203B50; --steel:var(--steel-dark);
  --blue-lightest:#C9DCF2; --blue-light:#407ECB; --blue-dark:#0C6DA1; --blue-darkest:#0F3457; --blue:var(--blue-dark);
  --indigo-lightest:#C9CEE3; --indigo-light:#7F8DC8; --indigo-dark:#4A5FB8; --indigo-darkest:#1B2655; --indigo:var(--indigo-dark);
  --violet-lightest:#C6C0E5; --violet-light:#9587DD; --violet-dark:#5E50A5; --violet-darkest:#37305C; --violet:var(--violet-dark);
  --purple-lightest:#D5CEDE; --purple-light:#9F8ABD; --purple-dark:#6A4C93; --purple-darkest:#35224E; --purple:var(--purple-dark);
  --magenta-lightest:#EED6EF; --magenta-light:#D29AD6; --magenta-dark:#712D76; --magenta-darkest:#45194A; --magenta:var(--magenta-dark);
  --pink-lightest:#E8C5DD; --pink-light:#D774B8; --pink-dark:#A63081; --pink-darkest:#5C1545; --pink:var(--pink-light);
  --slate-lightest:#D3D2DA; --slate-light:#9C9AAC; --slate-dark:#65637A; --slate-darkest:#302E42; --slate:var(--slate-dark);
  --indigo-muted-lightest:#D9D6E6; --indigo-muted-light:#7C86B4; --indigo-muted-dark:#4F5C86; --indigo-muted-darkest:#262B48; --indigo-muted:var(--indigo-muted-dark);

  /* sekwencja serii na wykresach: --chart-1…8 */
  --chart-1:var(--violet); --chart-2:var(--teal); --chart-3:var(--red); --chart-4:var(--orange); --chart-5:var(--green); --chart-6:var(--indigo); --chart-7:var(--pink); --chart-8:var(--olive);

  /* violet: dwanaście odcieni (cztery wykończenia po trzy tony). Baza, światło (-highlight), cień (-shadow),
     kolor etykiety na bazie (-label) i gradient wykończenia; w komentarzu kontrast bazy z tłem Void i Snow.
     Do palet, ilustracji i wykresów, nie do akcentu interfejsu. */
  --violet-mat-light:#D9D0F4; --violet-mat-light-highlight:#EBE3FC; --violet-mat-light-shadow:#B6AFDB; --violet-mat-light-label:#2A2620;   /* void 13.23 · snow 1.39 */
  --violet-mat-light-gradient:linear-gradient(180deg, #E8DFFF 0%, #D9D0F4 55%, #B6AFDB 100%);
  --violet-mat-mid:#998BB9; --violet-mat-mid-highlight:#B1A3CA; --violet-mat-mid-shadow:#796D9F; --violet-mat-mid-label:#2A2620;   /* void 6.25 · snow 2.95 */
  --violet-mat-mid-gradient:linear-gradient(180deg, #A899C5 0%, #998BB9 55%, #796D9F 100%);
  --violet-mat-dark:#494261; --violet-mat-dark-highlight:#5F5675; --violet-mat-dark-shadow:#322E4C; --violet-mat-dark-label:#EDE6D3;   /* void 2.07 · snow 8.91 */
  --violet-mat-dark-gradient:linear-gradient(180deg, #564F6D 0%, #494261 55%, #322E4C 100%);
  --violet-satin-light:#B6ABEE; --violet-satin-light-highlight:#DAD0FF; --violet-satin-light-shadow:#8C84CD; --violet-satin-light-label:#2A2620;   /* void 9.31 · snow 1.98 */
  --violet-satin-light-gradient:linear-gradient(180deg, #8C84CD 0%, #B6ABEE 22%, #DAD0FF 42%, #B6ABEE 64%, #8C84CD 100%);
  --violet-satin-mid:#7463B7; --violet-satin-mid-highlight:#9C8BD6; --violet-satin-mid-shadow:#4D3F8E; --violet-satin-mid-label:#F7F9FC;   /* void 3.9 · snow 4.73 */
  --violet-satin-mid-gradient:linear-gradient(180deg, #4D3F8E 0%, #7463B7 22%, #9C8BD6 42%, #7463B7 64%, #4D3F8E 100%);
  --violet-satin-dark:#362F7B; --violet-satin-dark-highlight:#5B539B; --violet-satin-dark-shadow:#1C1850; --violet-satin-dark-label:#EDE6D3;   /* void 1.71 · snow 10.77 */
  --violet-satin-dark-gradient:linear-gradient(180deg, #1C1850 0%, #362F7B 22%, #5B539B 42%, #362F7B 64%, #1C1850 100%);
  --violet-gloss-light:#937BFC; --violet-gloss-light-highlight:#E0DFFF; --violet-gloss-light-shadow:#5C39C1; --violet-gloss-light-label:#2A2620;   /* void 6.0 · snow 3.07 */
  --violet-gloss-light-gradient:linear-gradient(180deg, #A798FF 0%, #E0DFFF 9%, #F6F6FF 13%, #E0DFFF 17%, #A798FF 30%, #937BFC 62%, #5C39C1 100%);
  --violet-gloss-mid:#6232C4; --violet-gloss-mid-highlight:#B4ABFF; --violet-gloss-mid-shadow:#33087A; --violet-gloss-mid-label:#EDE6D3;   /* void 2.57 · snow 7.18 */
  --violet-gloss-mid-gradient:linear-gradient(180deg, #754ADC 0%, #B4ABFF 9%, #F6F6FF 13%, #B4ABFF 17%, #754ADC 30%, #6232C4 62%, #33087A 100%);
  --violet-gloss-dark:#1E183F; --violet-gloss-dark-highlight:#7F82AA; --violet-gloss-dark-shadow:#0D0B1F; --violet-gloss-dark-label:#EDE6D3;   /* void 1.17 · snow 15.83 */
  --violet-gloss-dark-gradient:linear-gradient(180deg, #2E2952 0%, #7F82AA 9%, #F6F6FF 13%, #7F82AA 17%, #2E2952 30%, #1E183F 62%, #0D0B1F 100%);
  --violet-metal-light:#ABA9C2; --violet-metal-light-highlight:#F2F0FB; --violet-metal-light-shadow:#4B4966; --violet-metal-light-label:#2A2620;   /* void 8.51 · snow 2.17 */
  --violet-metal-light-gradient:linear-gradient(180deg, #F2F0FB 0%, #ABA9C2 34%, #4B4966 49%, #FAF9FF 51%, #CCC9E0 62%, #ABA9C2 80%, #4B4966 100%);
  --violet-metal-mid:#7671D6; --violet-metal-mid-highlight:#C8D9FF; --violet-metal-mid-shadow:#39246C; --violet-metal-mid-label:#0A0D12;   /* void 4.73 · snow 3.9 */
  --violet-metal-mid-gradient:linear-gradient(180deg, #C8D9FF 0%, #7671D6 34%, #39246C 49%, #DBE6FF 51%, #8B95F1 62%, #7671D6 80%, #39246C 100%);
  --violet-metal-dark:#5E3594; --violet-metal-dark-highlight:#E9AC76; --violet-metal-dark-shadow:#13316D; --violet-metal-dark-label:#EDE6D3;   /* void 2.24 · snow 8.25 */
  --violet-metal-dark-gradient:linear-gradient(180deg, #F7DC8B 0%, #E9AC76 16%, #BE6299 32%, #5E3594 46%, #061E4D 50%, #4574BA 52%, #8C47A0 72%, #13316D 100%);

  /* ===== Void (domyślny) ===== */
  /* neutralne: --<rola> i alternatywa --<rola>-alt */
  --background:#0A0D12;            --background-alt:#05070A;      /* alt: głębszy niż Void, modale pełnoekranowe */
  --surface:#161B22;               --surface-alt:#1D2530;         /* alt: drugi poziom wyniesienia, hover i zaznaczenia */
  --border:#2A3038;                --border-alt:rgba(237,230,211,0.12);
  --text-secondary:#8B94A6;        --text-secondary-alt:#B7BECB;
  --text-primary:#EDE6D3;          --text-primary-alt:#C9C2AC;
  --comment:#6C7486;               --comment-alt:#454C58;

  /* pochodne neutralnych, specyficzne dla strony */
  --text-body:var(--text-primary-alt);      /* tekst bazowy strony: nieco cichszy niż text-primary */
  --text-secondary-rgb:139,148,166;
  --tint-rgb:237,230,211;                   /* text-primary: baza półprzezroczystych podświetleń */
  --border-strong:rgba(237,230,211,0.22);
  --surface-inset:rgba(10,13,18,0.55);      /* background na tle strefy */
  --overlay:rgba(10,13,18,0.7);             /* przesłona pod modalami i szufladami */
  --shine-rgb:251,252,254;                  /* background-alt ze Snow: błysk na logo */

  /* akcent interfejsu: violet-light na Void, violet-dark na Snow; tekst na wypełnieniu ma kontrast 6,3 */
  --accent:#9587DD;                         /* violet-light */
  --on-accent:#0A0D12;                      /* background */
  --accent-rgb:149,135,221;
  --accent-strong:var(--violet-dark);
  --accent-strong-hover:var(--violet-satin-mid);
  --accent-grad-end:var(--violet-light);
  --accent-ink:var(--violet-lightest);      /* ikony na fioletowych plakietkach */
  --accent-soft:rgba(149,135,221,0.14);
  --accent-ring:rgba(149,135,221,0.32);
  --shadow-card:0 10px 15px -3px rgba(55,48,92,0.25),0 4px 6px -4px rgba(55,48,92,0.25);  /* violet-darkest */
  --shadow-btn:0 4px 6px -1px rgba(55,48,92,0.4);

  /* stany funkcjonalne */
  --success:#4F8767;   /* green-dark */
  --warning:#B36A21;   /* orange-dark */
  --error:#C0392B;     /* red-light */
  --info:#4C7A9E;      /* steel-dark */

  /* akcenty edytora: jaśniejsze i bardziej nasycone niż rampy, bo kod leży na niemal czarnym tle */
  --editor-violet:#9587DD;   --editor-gold:#E0BA3D;     --editor-teal:#5FA8A0;     --editor-red:#D9645C;
  --editor-orange:#D08A3E;   --editor-pink:#D774B8;     --editor-green:#7CAE85;    --editor-purple:#A688C9;
  --editor-steel:#7FA8C9;    --editor-indigo:#8B98E0;   --editor-olive:#9DC96B;    --editor-slate:#65637A;
  --editor-jade:#35A99A;     --editor-cyan:#81C2CF;     --editor-magenta:#D29AD6;  --editor-comment:#6C7486;
  --editor-gold-rgb:224,186,61;  --editor-teal-rgb:95,168,160;  --editor-red-rgb:217,100,92;
  --editor-steel-rgb:127,168,201;  --editor-green-rgb:124,174,133;

  /* zakładka Fimbulvetr: wartości wzięte wprost z plików motywu (style/fimbulvetr/*_color_theme.json), nie z ramp */
  --ide-comment:#7C8395;                    /* komentarze i numery linii w motywie 1.0.1, o ton jaśniejsze niż --comment */
  --ansi-0:#2A3038; --ansi-1:#D9645C; --ansi-2:#7CAE85; --ansi-3:#D08A3E; --ansi-4:#7FA8C9; --ansi-5:#A688C9; --ansi-6:#5FA8A0; --ansi-7:#C9C2AC;
  --ansi-8:#8B94A6; --ansi-9:#C0392B; --ansi-10:#9DC96B; --ansi-11:#E0BA3D; --ansi-12:#8B98E0; --ansi-13:#D29AD6; --ansi-14:#81C2CF; --ansi-15:#EDE6D3;

  /* zakładka Gleipnir: barwy segmentów wprost z style/gleipnir/gleipnir.omp.json („palette” = Void, „palettes.list.snow” = Snow).
     Trójki --gl-<segment>-{bg,fg,ic}: tło, tekst, ikona; status ma te same barwy co rozjazd (--gl-div-*). */
  --gl-root-bg:#624E0E;  --gl-root-fg:#EDE2C0;  --gl-root-ic:#E0BA3D;
  --gl-path-bg:#37305C;  --gl-path-fg:#C6C0E5;  --gl-path-ic:#9587DD;
  --gl-git-bg:#254B35;   --gl-git-fg:#D0DCD5;   --gl-git-ic:#7CAE85;
  --gl-dirty-bg:#63380D; --gl-dirty-fg:#EDD6BF; --gl-dirty-ic:#D08A3E;
  --gl-sync-bg:#203B50;  --gl-sync-fg:#CDD7E0;  --gl-sync-ic:#7FA8C9;
  --gl-div-bg:#5F1511;   --gl-div-fg:#EBC4C2;   --gl-div-ic:#D9645C;
  --gl-exec-bg:#1D534D;  --gl-exec-fg:#CBE2DF;  --gl-exec-ic:#5FA8A0;
  --gl-ctx-bg:#1D2530;   --gl-ctx-fg:#8B94A6;
  --gl-py:#5C93D8; --gl-go:#35A99A; --gl-rs:#D08A3E; --gl-dk:#81C2CF; --gl-pj:#A688C9;
  --gl-accent:#9587DD; --gl-error:#D9645C; --gl-root:#E0BA3D; --gl-muted:#8B94A6; --gl-faint:#454C58;

  /* tło „Witraż Bifrostu”: gotowa scena na wariant, generowana przez style/backdrop.py z tych samych tokenów */
  --backdrop:url(assets/brand/backdrop-dark.svg);

  --r-lg:.5rem; --r-xl:.75rem; --r-2xl:1rem;
  --font-head:'Chakra Petch','Inter',ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --font:'Inter',ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  color-scheme:dark;
}

/* Snow: jasny wariant. Blok jest powtórzony: raz dla preferencji systemowej (bez wyboru użytkownika),
   raz dla jawnego wyboru data-theme="light". Oba muszą mieć tę samą treść. */
@media (prefers-color-scheme:light){
  :root:not([data-theme="dark"]){
    --background:#F7F9FC;          --background-alt:#FBFCFE;      /* alt: o włos jaśniejszy niż Snow, pola tekstowe i terminal */
    --surface:#EBEEF3;             --surface-alt:#E3E7EE;
    --border:#D7DCE3;              --border-alt:rgba(42,38,32,0.12);
    --text-secondary:#6B6354;      --text-secondary-alt:#3A362C;
    --text-primary:#2A2620;        --text-primary-alt:#A69A7C;
    --comment:#6E6552;             --comment-alt:#B7AB8C;

    --text-body:var(--text-secondary-alt);
    --text-secondary-rgb:107,99,84;
    --tint-rgb:42,38,32;
    --border-strong:rgba(42,38,32,0.22);
    --surface-inset:rgba(251,252,254,0.75);  /* background-alt */
    --shine-rgb:251,252,254;

    --accent:#5E50A5;              /* violet-dark */
    --on-accent:#F7F9FC;           /* background */
    --accent-rgb:94,80,165;
    --accent-strong:var(--violet-dark);
    --accent-strong-hover:var(--violet-darkest);
    --accent-grad-end:var(--violet-satin-mid);
    --accent-ink:var(--violet-darkest);
    --accent-soft:rgba(94,80,165,0.12);
    --accent-ring:rgba(94,80,165,0.32);
    --shadow-card:0 10px 15px -3px rgba(55,48,92,0.12),0 4px 6px -4px rgba(55,48,92,0.12);
    --shadow-btn:0 4px 6px -1px rgba(55,48,92,0.25);

    --success:#2E6B45;
    --warning:#96430D;
    --error:#9E2B25;
    --info:#2E5E80;

    --editor-violet:#5E50A5;   --editor-gold:#6B5200;     --editor-teal:#1D534D;     --editor-red:#9E2B25;
    --editor-orange:#96430D;   --editor-pink:#A63081;     --editor-green:#2E6B45;    --editor-purple:#6A4C93;
    --editor-steel:#2E5E80;    --editor-indigo:#4A5FB8;   --editor-olive:#4A6B24;    --editor-slate:#6C6A7A;
    --editor-jade:#1B7468;     --editor-cyan:#20626F;     --editor-magenta:#712D76;  --editor-comment:#6E6552;
    --editor-gold-rgb:201,162,39;  --editor-teal-rgb:61,143,134;  --editor-red-rgb:158,43,37;   /* rgb do wypełnień, więc bliżej ramp niż tekstu */
    --editor-steel-rgb:76,122,158;  --editor-green-rgb:79,135,103;

    --ide-comment:#6E6552;
    --ansi-0:#3A362C; --ansi-1:#9E2B25; --ansi-2:#2E6B45; --ansi-3:#96430D; --ansi-4:#2E5E80; --ansi-5:#6A4C93; --ansi-6:#1B7468; --ansi-7:#8B94A6;
    --ansi-8:#6E6552; --ansi-9:#C0392B; --ansi-10:#4F8767; --ansi-11:#B36A21; --ansi-12:#4C7A9E; --ansi-13:#A63081; --ansi-14:#3D8F86; --ansi-15:#B7BECB;

    --gl-root-bg:#EDE2C0;  --gl-root-fg:#624E0E;  --gl-root-ic:#6B5200;
    --gl-path-bg:#C6C0E5;  --gl-path-fg:#37305C;  --gl-path-ic:#5E50A5;
    --gl-git-bg:#D0DCD5;   --gl-git-fg:#254B35;   --gl-git-ic:#2E6B45;
    --gl-dirty-bg:#EDD6BF; --gl-dirty-fg:#63380D; --gl-dirty-ic:#96430D;
    --gl-sync-bg:#CDD7E0;  --gl-sync-fg:#203B50;  --gl-sync-ic:#2E5E80;
    --gl-div-bg:#EBC4C2;   --gl-div-fg:#5F1511;   --gl-div-ic:#9E2B25;
    --gl-exec-bg:#CBE2DF;  --gl-exec-fg:#1D534D;  --gl-exec-ic:#1D534D;
    --gl-ctx-bg:#E3E7EE;   --gl-ctx-fg:#6B6354;
    --gl-py:#2F5FA0; --gl-go:#1B7468; --gl-rs:#96430D; --gl-dk:#20626F; --gl-pj:#6A4C93;
    --gl-accent:#5E50A5; --gl-error:#9E2B25; --gl-root:#6B5200; --gl-muted:#6B6354; --gl-faint:#B7AB8C;

    --backdrop:url(assets/brand/backdrop-light.svg);
    color-scheme:light;
  }
}
:root[data-theme="light"]{
  --background:#F7F9FC;            --background-alt:#FBFCFE;
  --surface:#EBEEF3;               --surface-alt:#E3E7EE;
  --border:#D7DCE3;                --border-alt:rgba(42,38,32,0.12);
  --text-secondary:#6B6354;        --text-secondary-alt:#3A362C;
  --text-primary:#2A2620;          --text-primary-alt:#A69A7C;
  --comment:#6E6552;               --comment-alt:#B7AB8C;

  --text-body:var(--text-secondary-alt);
  --text-secondary-rgb:107,99,84;
  --tint-rgb:42,38,32;
  --border-strong:rgba(42,38,32,0.22);
  --surface-inset:rgba(251,252,254,0.75);  /* background-alt */
  --shine-rgb:251,252,254;

  --accent:#5E50A5;                /* violet-dark */
  --on-accent:#F7F9FC;             /* background */
  --accent-rgb:94,80,165;
  --accent-strong:var(--violet-dark);
  --accent-strong-hover:var(--violet-darkest);
  --accent-grad-end:var(--violet-satin-mid);
  --accent-ink:var(--violet-darkest);
  --accent-soft:rgba(94,80,165,0.12);
  --accent-ring:rgba(94,80,165,0.32);
  --shadow-card:0 10px 15px -3px rgba(55,48,92,0.12),0 4px 6px -4px rgba(55,48,92,0.12);
  --shadow-btn:0 4px 6px -1px rgba(55,48,92,0.25);

  --success:#2E6B45;
  --warning:#96430D;
  --error:#9E2B25;
  --info:#2E5E80;

  --editor-violet:#5E50A5;   --editor-gold:#6B5200;     --editor-teal:#1D534D;     --editor-red:#9E2B25;
  --editor-orange:#96430D;   --editor-pink:#A63081;     --editor-green:#2E6B45;    --editor-purple:#6A4C93;
  --editor-steel:#2E5E80;    --editor-indigo:#4A5FB8;   --editor-olive:#4A6B24;    --editor-slate:#6C6A7A;
  --editor-jade:#1B7468;     --editor-cyan:#20626F;     --editor-magenta:#712D76;  --editor-comment:#6E6552;
  --editor-gold-rgb:201,162,39;  --editor-teal-rgb:61,143,134;  --editor-red-rgb:158,43,37;   /* rgb do wypełnień, więc bliżej ramp niż tekstu */
  --editor-steel-rgb:76,122,158;  --editor-green-rgb:79,135,103;

  --ide-comment:#6E6552;
  --ansi-0:#3A362C; --ansi-1:#9E2B25; --ansi-2:#2E6B45; --ansi-3:#96430D; --ansi-4:#2E5E80; --ansi-5:#6A4C93; --ansi-6:#1B7468; --ansi-7:#8B94A6;
  --ansi-8:#6E6552; --ansi-9:#C0392B; --ansi-10:#4F8767; --ansi-11:#B36A21; --ansi-12:#4C7A9E; --ansi-13:#A63081; --ansi-14:#3D8F86; --ansi-15:#B7BECB;

  --gl-root-bg:#EDE2C0;  --gl-root-fg:#624E0E;  --gl-root-ic:#6B5200;
  --gl-path-bg:#C6C0E5;  --gl-path-fg:#37305C;  --gl-path-ic:#5E50A5;
  --gl-git-bg:#D0DCD5;   --gl-git-fg:#254B35;   --gl-git-ic:#2E6B45;
  --gl-dirty-bg:#EDD6BF; --gl-dirty-fg:#63380D; --gl-dirty-ic:#96430D;
  --gl-sync-bg:#CDD7E0;  --gl-sync-fg:#203B50;  --gl-sync-ic:#2E5E80;
  --gl-div-bg:#EBC4C2;   --gl-div-fg:#5F1511;   --gl-div-ic:#9E2B25;
  --gl-exec-bg:#CBE2DF;  --gl-exec-fg:#1D534D;  --gl-exec-ic:#1D534D;
  --gl-ctx-bg:#E3E7EE;   --gl-ctx-fg:#6B6354;
  --gl-py:#2F5FA0; --gl-go:#1B7468; --gl-rs:#96430D; --gl-dk:#20626F; --gl-pj:#6A4C93;
  --gl-accent:#5E50A5; --gl-error:#9E2B25; --gl-root:#6B5200; --gl-muted:#6B6354; --gl-faint:#B7AB8C;

  --backdrop:url(assets/brand/backdrop-light.svg);
  color-scheme:light;
}

*,*::before,*::after{box-sizing:border-box}
html{height:100%;-webkit-text-size-adjust:100%}
body{
  margin:0;min-height:100dvh;display:flex;flex-direction:column;
  background:var(--background);color:var(--text-body);
  font-family:var(--font);font-size:16px;line-height:1.5;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-lg)}

.icon{width:1.25rem;height:1.25rem;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:var(--r-xl);color:var(--text-secondary);transition:background-color .15s,color .15s}
.icon-btn:hover{background:rgba(var(--tint-rgb),0.05);color:var(--text-primary)}

/* ---------- tło „Witraż Bifrostu” ---------- */
/* Warstwa przypięta pod treścią. Scena jest w assets/brand/backdrop-{dark,light}.svg (zmienna --backdrop).
   Rozmiar 100%×100% oddaje plikowi SVG całe okno: jego preserveAspectRatio="xMinYMax slice" kadruje scenę
   przy lewej i dolnej krawędzi, a media queries w środku SVG zmniejszają Walkirię na węższych oknach
   i chowają ją poniżej 1024 px. Animacje (śnieg, gwiazdy, poświata) też są w SVG i szanują prefers-reduced-motion. */
.backdrop{position:fixed;inset:0;z-index:0;pointer-events:none;background:var(--backdrop) left bottom/100% 100% no-repeat}
.page,.footer{position:relative;z-index:1}

/* ---------- strona ---------- */
.page{flex:1;padding:4.5rem 1rem 3rem}
@media (min-width:640px){.page{padding:5rem 1.5rem 4rem}}
.container{max-width:72rem;margin:0 auto}

.hero{text-align:center;margin-bottom:3rem}
@media (min-width:640px){.hero{margin-bottom:4rem}}
.hero-link{position:relative;display:inline-block;border-radius:var(--r-xl)}
.hero-logo{display:block;width:100%;max-width:240px;height:auto;margin:0 auto;filter:drop-shadow(0 12px 30px rgba(var(--accent-rgb),0.25))}
@media (min-width:640px){.hero-logo{max-width:300px}}
.hero-logo--bifrost,.hero-logo--fimbulvetr,.hero-logo--gleipnir{max-width:160px}
@media (min-width:640px){.hero-logo--bifrost,.hero-logo--fimbulvetr,.hero-logo--gleipnir{max-width:200px}}
/* które logo widać, decyduje zakładka (data-view na <html>): Codeheim, Bifrost, Fimbulvetr albo Gleipnir; wersję na motyw wybierają klasy .cell-logo--on-* */
:root:not([data-view="bifrost"]) .hero-link--bifrost{display:none}
:root:not([data-view="fimbulvetr"]) .hero-link--fimbulvetr{display:none}
:root:not([data-view="gleipnir"]) .hero-link--gleipnir{display:none}
:root[data-view="bifrost"] .hero-link--home,:root[data-view="fimbulvetr"] .hero-link--home,:root[data-view="gleipnir"] .hero-link--home{display:none}

/* błysk: ukośna smuga światła biegnie z lewego dolnego do prawego górnego rogu logo.
   Warstwa jest maskowana kształtem logo, więc światło pada tylko na jego kreski. */
.hero-shine{
  position:absolute;inset:0;pointer-events:none;overflow:hidden;
  -webkit-mask:url(assets/brand/logo.svg) center/contain no-repeat;
          mask:url(assets/brand/logo.svg) center/contain no-repeat;
}
.hero-shine::after{
  content:"";position:absolute;inset:-50%;
  background:linear-gradient(45deg,transparent 43%,rgba(var(--shine-rgb),0.22) 48%,rgba(var(--shine-rgb),0.7) 50%,rgba(var(--shine-rgb),0.22) 52%,transparent 57%);
  translate:-30% 30%;
  animation:shine 7s cubic-bezier(.45,.05,.55,.95) 1.5s infinite;
}
@keyframes shine{
  0%{translate:-30% 30%}
  24%,100%{translate:30% -30%}
}
@media (prefers-reduced-motion:reduce){.hero-shine{display:none}}

/* sekcja: strefa z przerywaną obwódką, jak dawniej „Postęp prac”. Kolor sekcji ustawiają zmienne
   --section-rgb i --section-ink: domyślnie akcent interfejsu, odmiany poniżej podmieniają go na akcent edytora. */
.section{
  --section-rgb:var(--accent-rgb);--section-ink:var(--accent-ink);
  max-width:42rem;margin:0 auto 2rem;padding:1rem;
  border:2px dashed rgba(var(--section-rgb),0.40);border-radius:var(--r-2xl);
  background:rgba(var(--section-rgb),0.05);
}
.section:last-child{margin-bottom:0}
@media (min-width:640px){.section{padding:1.5rem}}
.section--social{--section-rgb:var(--editor-steel-rgb);--section-ink:var(--editor-steel)}      /* steel: odnośniki i informacje */
.section--projects{--section-rgb:var(--editor-green-rgb);--section-ink:var(--editor-green)}  /* green: patyna, zieleń z brązem */

/* komórki: poziome wiersze z logo i nazwą, dwie kolumny od 640 px.
   Pierwsza komórka to nagłówek sekcji (runa + tytuł) i zajmuje całą szerokość. */
.cells{display:grid;grid-template-columns:1fr;gap:.5rem;text-align:left}
@media (min-width:640px){.cells{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:.75rem}}
.cell{
  display:flex;align-items:center;gap:.875rem;height:100%;min-width:0;margin:0;padding:.75rem .875rem;   /* min-width:0, żeby długie wiersze kodu nie rozpychały siatki */
  border-radius:var(--r-xl);border:1px solid var(--border-alt);background:var(--surface-inset);
  text-decoration:none;color:var(--text-primary);
  transition:border-color .15s,transform .15s;
}
a.cell:hover{border-color:rgba(var(--section-rgb),0.45);transform:translateY(-1px)}
@media (prefers-reduced-motion:reduce){.cell{transition:none}a.cell:hover{transform:none}}
.cell:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.cell-logo{width:2rem;height:2rem;flex-shrink:0}
.cell-name{font-size:.9375rem;font-weight:600;line-height:1.3;min-width:0}
.section--projects .cell-logo{width:2.5rem;height:2.5rem}   /* komórki z opisem są wyższe, logo ma więcej miejsca */
.cell-body{display:flex;flex-direction:column;gap:.125rem;min-width:0}
.cell-sub{font-size:.8125rem;font-weight:400;line-height:1.4;color:var(--text-secondary)}
.cell--head{grid-column:1 / -1;border-color:rgba(var(--section-rgb),0.30);background:rgba(var(--section-rgb),0.12)}
.cell--head .cell-name{font-family:var(--font-head);font-size:1.25rem;font-weight:700;letter-spacing:.03em}
.section-icon{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;flex-shrink:0;border-radius:var(--r-lg);background:rgba(var(--section-rgb),0.18);color:var(--section-ink);box-shadow:inset 0 0 0 1px rgba(var(--section-rgb),0.30)}

/* stopka */
.footer{padding:1.25rem 1rem;text-align:center;border-top:1px solid var(--border-alt)}
@media (min-width:640px){.footer{padding:1.5rem}}
.footer-meta{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:.25rem .5rem;margin:0;font-size:.75rem;line-height:1.5;color:var(--text-secondary)}
.dot{color:var(--comment)}
@media (max-width:639px){.footer-meta{flex-direction:column;gap:.125rem}.footer-meta .dot{display:none}}

/* logotypy w dwóch wersjach: jasna na Void, ciemna na Snow. Reguły idą za tymi samymi warunkami co tokeny motywu. */
.cell-logo--on-light{display:none}
@media (prefers-color-scheme:light){
  :root:not([data-theme="dark"]) .cell-logo--on-dark{display:none}
  :root:not([data-theme="dark"]) .cell-logo--on-light{display:block}
}
:root[data-theme="light"] .cell-logo--on-dark{display:none}
:root[data-theme="light"] .cell-logo--on-light{display:block}

/* belka: przypięta u góry nad tłem i treścią, półprzezroczysta z rozmyciem; .page ma górny padding, który robi jej miejsce */
.topbar{
  position:fixed;top:0;left:0;right:0;z-index:10;
  display:flex;align-items:center;justify-content:space-between;gap:.5rem;
  padding:.5rem 1rem;
  background:var(--surface-inset);border-bottom:1px solid var(--border-alt);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
}
@media (min-width:640px){.topbar{padding:.5rem 1.5rem}}
.topbar-nav{display:flex;align-items:center;gap:.25rem}
.topbar-link{
  display:inline-flex;align-items:center;min-height:2.25rem;padding:0 .75rem;border-radius:var(--r-lg);
  font-size:.9375rem;font-weight:600;color:var(--text-secondary);text-decoration:none;
  transition:background-color .15s,color .15s;
}
@media (max-width:479px){.topbar-link{padding:0 .5rem;font-size:.875rem}}   /* cztery zakładki i przełącznik muszą zmieścić się na telefonie */
.topbar-link:hover{background:rgba(var(--tint-rgb),0.05);color:var(--text-primary)}
.topbar-link[aria-current="page"]{color:var(--text-primary);background:var(--accent-soft)}

/* próbki barw w zakładce Bifrost: kolor podaje zmienna --c ustawiona inline na elemencie (zawsze var(--token), nigdy wartość) */
.swatch{display:inline-block;width:1.5rem;height:1.5rem;flex-shrink:0;border-radius:50%;background:var(--c);box-shadow:inset 0 0 0 1px var(--border-strong)}
.swatch+.swatch{margin-left:-.5rem}                                   /* para ton + alternatywa: lekko nachodzące kółka */
.swatch--lg{width:2.5rem;height:2.5rem;border-radius:var(--r-lg)}   /* gradient wykończenia */
.ramp{display:inline-flex;gap:.25rem;flex-shrink:0}
.ramp .swatch{width:1.125rem;height:1.125rem;border-radius:.25rem;margin:0}
.section-icon .ramp{gap:1px}
.section-icon .ramp .swatch{width:.5rem;height:1rem;border-radius:2px}
.cell--text{display:block;font-size:.875rem;line-height:1.5;color:var(--text-secondary);grid-column:1 / -1}
.cell--wide{grid-column:1 / -1}
.cell-hint{font-weight:400;color:var(--text-secondary)}

/* makiety w zakładce Bifrost: przyciski, plakietki, komunikaty, okno, formularz, kod, wykres. Kolor stanu podaje --tone,
   a półprzezroczyste tła liczy color-mix(), żeby nie dublować wartości rgb. */
.demo{flex-direction:column;align-items:stretch;gap:.75rem}
.demo-title{font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary)}
.demo-row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}
.demo-note{margin:0;font-size:.8125rem;line-height:1.4;color:var(--text-secondary)}
.demo-link{color:var(--accent);font-weight:600;text-decoration:underline;text-underline-offset:.2em}
.demo-link:hover{color:var(--accent-strong-hover)}

.btn{display:inline-flex;align-items:center;gap:.5rem;min-height:2.25rem;padding:0 .875rem;border-radius:var(--r-lg);border:1px solid transparent;font-size:.9375rem;font-weight:600;line-height:1;cursor:pointer;transition:background-color .15s,color .15s,border-color .15s,box-shadow .15s}
.btn--primary{background:var(--accent);color:var(--on-accent)}
.btn--primary:hover{box-shadow:var(--shadow-btn),0 0 0 3px var(--accent-ring)}
.btn--secondary{background:var(--surface);border-color:var(--border);color:var(--text-primary)}
.btn--secondary:hover{border-color:var(--accent);color:var(--accent)}
.btn--ghost{color:var(--accent)}
.btn--ghost:hover{background:var(--accent-soft)}
.btn--danger{border-color:var(--error);color:var(--error)}
.btn--danger:hover{background:color-mix(in srgb,var(--error) 12%,transparent)}
.btn[disabled]{opacity:.45;cursor:not-allowed;box-shadow:none}

.badge{display:inline-flex;align-items:center;min-height:1.5rem;padding:0 .625rem;border-radius:999px;font-size:.75rem;font-weight:600;color:var(--tone);background:color-mix(in srgb,var(--tone) 16%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--tone) 35%,transparent)}
.badge--accent{--tone:var(--accent)} .badge--success{--tone:var(--success)} .badge--warning{--tone:var(--warning)}
.badge--error{--tone:var(--error)} .badge--info{--tone:var(--info)} .badge--muted{--tone:var(--text-secondary)}

.alert{display:flex;align-items:flex-start;gap:.625rem;padding:.625rem .75rem;border-radius:var(--r-lg);font-size:.875rem;line-height:1.4;color:var(--text-primary);background:color-mix(in srgb,var(--tone) 10%,transparent);border:1px solid color-mix(in srgb,var(--tone) 40%,transparent)}
.alert-icon{color:var(--tone);margin-top:.0625rem}
.alert--info{--tone:var(--info)} .alert--success{--tone:var(--success)} .alert--warning{--tone:var(--warning)} .alert--error{--tone:var(--error)}

.field{display:flex;flex-direction:column;gap:.25rem;font-size:.875rem}
.field-label{font-weight:600;color:var(--text-secondary)}
.field-hint{font-size:.75rem;color:var(--error)}
.input{width:100%;padding:.5rem .75rem;border-radius:var(--r-lg);border:1px solid var(--border);background:var(--background-alt);color:var(--text-primary);font:inherit;transition:border-color .15s,box-shadow .15s}
.input::placeholder{color:var(--text-primary-alt)}
.input:focus,.input.is-focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}
.field--invalid .input{border-color:var(--error);box-shadow:0 0 0 3px color-mix(in srgb,var(--error) 25%,transparent)}
.input[disabled]{background:var(--surface);color:var(--text-primary-alt);cursor:not-allowed}

.demo-stage{padding:1.5rem 1rem;border-radius:var(--r-lg);background:var(--overlay)}
.modal{max-width:22rem;margin:0 auto;padding:1rem;border-radius:var(--r-xl);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-card);color:var(--text-primary)}
.modal-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem}
.modal-title{font-family:var(--font-head);font-size:1.125rem;font-weight:700;letter-spacing:.02em}
.modal-body{margin:.5rem 0 1rem;font-size:.875rem;line-height:1.5;color:var(--text-secondary)}
.modal-foot{display:flex;justify-content:flex-end;gap:.5rem}

/* kod: akcenty edytora --editor-*, numery linii w barwie komentarza */
.code{margin:0;padding:.75rem .875rem;overflow-x:auto;border-radius:var(--r-lg);background:var(--background-alt);border:1px solid var(--border);color:var(--text-primary);font:.8125rem/1.6 ui-monospace,'Cascadia Mono','JetBrains Mono',Consolas,Menlo,monospace;tab-size:4}
.code .ln{display:inline-block;width:1.75rem;color:var(--editor-comment);user-select:none}
.tk-kw{color:var(--editor-purple)} .tk-class{color:var(--editor-gold)} .tk-type{color:var(--editor-teal)} .tk-str{color:var(--editor-green)}
.tk-var{color:var(--editor-red)} .tk-num{color:var(--editor-pink)} .tk-fn{color:var(--editor-steel)} .tk-self{color:var(--editor-indigo)}
.tk-param{color:var(--editor-orange)} .tk-deco{color:var(--editor-magenta)} .tk-const{color:var(--editor-olive)} .tk-cm{color:var(--editor-comment);font-style:italic}

.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--background-alt)}
.table{width:100%;border-collapse:collapse;font-size:.875rem;line-height:1.4;color:var(--text-primary)}
.table th,.table td{padding:.5rem .75rem;text-align:left;vertical-align:middle;white-space:nowrap}
.table thead th{font-size:.75rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-secondary);background:var(--surface);border-bottom:1px solid var(--border)}
.table tbody tr+tr td{border-top:1px solid var(--border-alt)}
.table tbody tr:hover td{background:rgba(var(--tint-rgb),0.04)}
.table tr.is-selected td{background:var(--accent-soft)}
.table .num{text-align:right;font-variant-numeric:tabular-nums}

.bars{display:flex;flex-direction:column;gap:.375rem}
.bar{display:block;height:.75rem;border-radius:.25rem;background:var(--n)}
.progress{height:.5rem;border-radius:999px;background:var(--surface-alt);overflow:hidden}
.progress-bar{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--accent-strong),var(--accent-grad-end))}

/* zakładki: widoczny jest widok wskazany przez data-view na <html> (home, bifrost, fimbulvetr, gleipnir); bez atrybutu (i bez skryptu) widać stronę główną */
.view{display:none}
:root:not([data-view]) #view-home,:root[data-view="home"] #view-home,:root[data-view="bifrost"] #view-bifrost,:root[data-view="fimbulvetr"] #view-fimbulvetr,:root[data-view="gleipnir"] #view-gleipnir{display:block}
/* animacja przełączenia: skrypt najpierw nadaje bieżącemu widokowi .is-leaving (krótkie wygaszenie w górę), a po jego
   końcu zmienia data-view; nowy widok i nowe logo wjeżdżają z dołu, bo zmiana display z none na block restartuje animację. */
.view,.hero-link{animation:view-in .32s cubic-bezier(.2,.7,.3,1)}
.view.is-leaving{animation:view-out .16s ease-in forwards}
@keyframes view-in{from{opacity:0;translate:0 .75rem}}
@keyframes view-out{to{opacity:0;translate:0 -.5rem}}
@media (prefers-reduced-motion:reduce){.view,.hero-link,.view.is-leaving{animation:none}}

/* przełącznik motywu: widoczny dopiero, gdy skrypt ustawi data-theme; ikona pokazuje wariant docelowy */
.theme-toggle{display:none}
:root[data-theme] .theme-toggle{display:inline-flex}
.theme-toggle .icon--moon{display:none}
:root[data-theme="light"] .theme-toggle .icon--sun{display:none}
:root[data-theme="light"] .theme-toggle .icon--moon{display:block}

/* ---------- zakładka Fimbulvetr: motyw edytora ---------- */
/* Legendy palety i podgląd kodu złożone z tych samych tokenów co reszta strony, z jedną wartością wziętą wprost
   z plików motywu (--ide-comment). Kod podąża za przełącznikiem motywu: Void = Fimbulvetr Void, Snow = Fimbulvetr Snow.
   Sekcje z legendami i kodem są szersze (.section--wide), bo kod potrzebuje miejsca. */
.section--wide{max-width:64rem}
.section--frost{--section-rgb:var(--editor-teal-rgb);--section-ink:var(--editor-teal)}   /* teal: szron, kolor kryształu z logo */
.section--gold{--section-rgb:var(--editor-gold-rgb);--section-ink:var(--editor-gold)}    /* gold: złoty płat wstęgi z logo Gleipnir */

/* legenda palety: para próbek Void + Snow o stałych wartościach, żeby oba warianty były widoczne naraz */
.pair{display:inline-flex;flex-shrink:0;border-radius:var(--r-lg);overflow:hidden;box-shadow:inset 0 0 0 1px var(--border-strong)}
.pair .swatch{width:1.25rem;height:2rem;border-radius:0;margin:0;box-shadow:none}
.pair .swatch:first-child{background:var(--c-void)} .pair .swatch:last-child{background:var(--c-snow)}
.ansi{display:grid;grid-template-columns:repeat(4,1fr);gap:.25rem;width:100%;min-width:0}
@media (min-width:640px){.ansi{grid-template-columns:repeat(8,1fr)}}
.ansi .swatch{width:100%;min-width:0;height:1.5rem;margin:0 0 1.5rem;border-radius:.25rem}
.ansi .swatch::after{content:attr(data-n);display:block;margin-top:1.625rem;font-size:.625rem;line-height:1.2;text-align:center;color:var(--text-secondary)}

/* podgląd kodu: zakładki języków nad jednym panelem; panel ma stałą wysokość dwudziestu linii, żeby układ nie skakał */
.fv-cell{display:block;padding:0;overflow:hidden;background:var(--background)}
.fv-tabs{display:flex;flex-wrap:wrap;background:var(--surface);border-bottom:1px solid var(--border)}
.fv-tab{display:inline-flex;align-items:baseline;gap:.5rem;height:2.25rem;padding:0 .875rem;border-right:1px solid var(--border);font-size:.8125rem;font-weight:600;line-height:2.25rem;color:var(--text-secondary);white-space:nowrap}
.fv-tab:hover{background:var(--surface-alt);color:var(--text-primary)}
.fv-tab[aria-selected="true"]{background:var(--background);color:var(--text-primary);box-shadow:inset 0 1px 0 var(--accent)}
.fv-tab:focus-visible{outline-offset:-2px}
.fv-file{display:none;font-size:.75rem;font-weight:400;color:var(--text-secondary)}
@media (min-width:768px){.fv-tab[aria-selected="true"] .fv-file{display:inline}}   /* nazwa pliku tylko przy wybranym języku */
.fv-pane[hidden]{display:none}
.fv-pane .code{min-height:calc(20*1.6em + 1.25rem);margin:0;padding:.625rem .875rem .625rem 0;border:0;border-radius:0;background:transparent;font-size:.8125rem;line-height:1.6}
.fv-pane .code .ln{width:3rem;padding-right:1rem;text-align:right;color:var(--ide-comment)}

/* kolorowanie w panelach: te same klasy .tk-* co w zakładce Bifrost plus style pisma z motywu (kursywa typów
   i parametrów, pogrubienie klas i deklaracji) oraz dodatkowe role, których tam nie było */
.fv .tk-cm{color:var(--ide-comment)}
.fv .tk-class{font-weight:700} .fv .tk-type{font-style:italic} .fv .tk-param{font-style:italic} .fv .tk-deco{font-style:italic} .fv .tk-self{font-style:italic}
.fv .tk-fndef{color:var(--editor-steel);font-weight:700}      /* deklaracja funkcji i metody */
.fv .tk-builtin{color:var(--editor-indigo)}                   /* funkcje wbudowane, zmienne i wbudowane powłoki */
.fv .tk-esc{color:var(--editor-cyan)}                         /* regex, znaki ucieczki, operatory logiczne, stałe support */
.fv .tk-op{color:var(--text-secondary)}                       /* operatory i interpunkcja */
.fv .tk-life{color:var(--editor-orange);font-style:italic}    /* czasy życia i atrybuty w Rust */
.fv .tk-key{color:var(--editor-red)}                          /* klucze YAML, TOML i JSON */
.fv .tk-imp{color:var(--editor-steel)}                        /* słowa kluczowe importu */
.fv .tk-macro{color:var(--editor-magenta);font-style:italic}  /* makra */
.fv .tk-ph{color:var(--editor-pink)}                          /* symbole formatu w łańcuchach: %q, {:?} */
.fv .tk-fstr{color:var(--editor-purple)}                      /* nawiasy interpolacji i prefiks f-string */
.fv .tk-sect{color:var(--editor-gold);font-weight:700}        /* nagłówki sekcji TOML i INI */
.fv .tk-str .tk-esc{font-style:normal}
.fv .tk-md-h{color:var(--editor-gold);font-weight:700} .fv .tk-md-m{color:var(--text-secondary)}
.fv .tk-md-b{color:var(--text-primary);font-weight:700} .fv .tk-md-i{color:var(--editor-purple);font-style:italic}
.fv .tk-md-code{color:var(--editor-orange)} .fv .tk-md-link{color:var(--editor-steel);text-decoration:underline;text-underline-offset:.15em}
.fv .tk-md-lt{color:var(--editor-steel)} .fv .tk-md-q{color:var(--text-secondary-alt);font-style:italic}
.fv .tk-md-li{color:var(--accent)} .fv .tk-md-s{color:var(--editor-slate);text-decoration:line-through}
.fv .tk-gen{color:var(--editor-jade)}                         /* nawiasy generyków */
.fv .tk-doc{color:var(--editor-green);font-style:italic}      /* docstringi */
.fv .bk1{color:var(--editor-teal)} .fv .bk2{color:var(--editor-purple)} .fv .bk3{color:var(--editor-gold)}   /* sześć par nawiasów */
.fv .bk4{color:var(--editor-red)} .fv .bk5{color:var(--editor-steel)} .fv .bk6{color:var(--editor-olive)}

/* ---------- zakładka Gleipnir: motyw znaku zachęty oh-my-posh ---------- */
/* Makieta terminala złożona z tokenów --gl-* (barwy segmentów z pliku motywu). Segment to pigułka: zaokrąglone końce
   odpowiadają diamentowym ogranicznikom  i , a kolor tła, tekstu i ikony podają zmienne --bg, --fg, --ic
   ustawione inline (zawsze var(--gl-…), nigdy wartość). Wypełniacz między lewą a prawą stroną linii to cienka kreska
   w najcichszym tonie, jak znak ─ w motywie. */
.gl-kbd{padding:.1em .35em;border-radius:.25rem;background:var(--surface);border:1px solid var(--border-alt);font:.8125em/1 ui-monospace,'Cascadia Mono','JetBrains Mono',Consolas,Menlo,monospace;color:var(--text-primary)}
.gl-term{display:flex;flex-direction:column;gap:.125rem;min-height:calc(6*2rem + 1.25rem);padding:.625rem .875rem;overflow-x:auto;background:var(--background);color:var(--text-primary);font:.8125rem/1.6 ui-monospace,'Cascadia Mono','JetBrains Mono',Consolas,Menlo,monospace}
.gl-term--plain{min-height:0;border-radius:var(--r-lg);border:1px solid var(--border)}
.gl-line{display:flex;align-items:center;gap:.375rem;min-height:2rem;white-space:nowrap}
.gl-line .icon{width:1rem;height:1rem;stroke-width:2.25}
.gl-line--transient{min-height:1.75rem}
.gl-fill{flex:1;min-width:1.5rem;height:0;border-top:1px solid var(--gl-faint)}
.gl-muted{color:var(--gl-muted)} .gl-faint{color:var(--gl-faint)} .gl-out{color:var(--text-secondary)} .gl-err{color:var(--gl-error)}
.gl-cmd{color:var(--text-primary)}
.gl-ps{color:var(--gl-accent)} .gl-ps--err{color:var(--gl-error)} .gl-ps--root{color:var(--gl-root)}
.gl-cursor{display:inline-block;width:.55em;height:1.2em;margin-left:.125rem;background:var(--gl-accent);vertical-align:text-bottom;animation:gl-blink 1.1s steps(1) infinite}
@keyframes gl-blink{50%{opacity:0}}
@media (prefers-reduced-motion:reduce){.gl-cursor{animation:none}}
.seg{display:inline-flex;align-items:center;gap:.3rem;height:1.625rem;padding:0 .625rem;border-radius:999px;background:var(--bg);color:var(--fg);flex-shrink:0}
.seg b{font-weight:700;color:inherit}
.seg .icon{width:.9rem;height:.9rem;color:var(--ic)}
.seg .seg-sep{width:.75rem;height:.75rem;margin:0 -.1rem;color:var(--ic);opacity:.7}
.seg--ctx{height:1.5rem;padding:0 .5rem;font-size:.75rem}
/* ikony ścieżki: segment w komórce legendy, w piśmie terminala, zawsze nad opisem, żeby komórki o różnej długości ścieżki wyglądały tak samo */
.gl-path{flex-direction:column;align-items:flex-start;gap:.5rem}
.gl-path .seg{font:.8125rem/1 ui-monospace,'Cascadia Mono','JetBrains Mono',Consolas,Menlo,monospace}
