/* ============================================================
   Kropka — Color tokens (Design System)

   ŹRÓDŁO: docs/Nowy-Design-Kropka/_ds/kropka-eduhub-design-system-
           9cab01f8-efff-4109-8fa5-976f5fbd8656/tokens/colors.css

   ODSTĘPSTWO OD ŹRÓDŁA (świadome, patrz openspec design D1 oraz
   redesign-gws-import D3): blok „Semantic aliases" z oryginału NIE
   jest kopiowany w całości. Aliasy dokładamy pojedynczo, na żądanie
   konkretnej strony, po sprawdzeniu kolizji nazw.

   NADAL POMINIĘTE: --accent, --accent-hover, --accent-press,
   --accent-tint, --bg, --surface-card, --text-strong, --text-body,
   --text-secondary, --text-muted, --text-hint, --chip-ink.

   Powód pominięcia --accent*: aplikacja definiuje własne --accent na
   :root (templates/base.html) i nadpisuje je per rola przez
   body.role-*. Wczytanie aliasów DS na :root podmieniłoby akcent
   aplikacji na niebieski DS na każdej stronie bez klasy body.role-*
   (np. landing dla niezalogowanego), bo obie deklaracje mają tę samą
   specyficzność i wygrywa późniejsza. Pozostałe pominięte nazwy nie
   kolidują — po prostu nie ma jeszcze ich konsumenta.

   DOŁOŻONE (ekran /auth/gws-import/): --bg-sunken, --focus-ring.
   DOŁOŻONE (Aktualności): --link, --link-hover oraz --overlay.
   Sprawdzone przed dodaniem: żadna z tych nazw nie występowała
   w templates/ ani static/.

   --overlay jest jedynym tokenem w tym pliku, którego NIE MA w źródle:
   wartość przyciemnienia pod modalem podaje wyłącznie proza readme DS
   („Transparency & blur"). Przy aktualizacji ze źródła nie usuwaj go
   jako „obcego".

   UWAGA na tryb ciemny: alias będący pośredniością do tokenu, który
   jest nadpisywany w body.dark, MUSI zostać powtórzony w bloku
   body.dark. Podstawienie var() zachodzi na elemencie deklaracji, więc
   alias z :root zamraża jasną wartość. Dotyczy --bg-sunken (wskazuje
   na --paper-2). Nie dotyczy --focus-ring — --blue-600 nie ma
   nadpisania ciemnego.

   Przy aktualizacji tego pliku ze źródła: NIE kopiuj bloku aliasów
   hurtem, dopóki aplikacja nie przejdzie w całości na tokeny DS.
   ============================================================ */

:root {
  /* ── Brand — blue (primary/interactive accent) ───────────── */
  --blue-700:  rgb(29, 78, 216);    /* pressed / deep */
  --blue-600:  rgb(37, 99, 235);    /* PRIMARY — CTA, active nav, focus, links */
  --blue-500:  rgb(59, 130, 246);   /* hover-light / illustration */
  --blue-100:  rgb(219, 234, 254);  /* tint surface */
  --blue-050:  rgb(239, 246, 255);  /* faint tint well */

  /* ── Neutrals — warm off-white → ink ─────────────────────── */
  --paper:     rgb(241, 241, 239);  /* app background — warm paper */
  --paper-2:   rgb(240, 241, 239);  /* sunken wells / progress track */
  --surface:   rgb(255, 255, 255);  /* cards + panels */
  --ink:       rgb(0, 0, 0);        /* primary text / wordmark */
  --ink-2:     rgb(45, 47, 46);     /* strong secondary (dense card titles) */
  --ink-3:     rgb(63, 63, 63);     /* dark chip / neutral pill fill */
  --muted:     rgb(90, 92, 90);     /* tertiary text */
  --hint:      rgb(93, 93, 93);     /* hint copy */
  --border:    rgb(232, 232, 230);  /* hairlines */
  --border-soft: rgba(172, 173, 172, 0.2);  /* faint card stroke */
  --divider:   rgb(216, 216, 216);  /* dividers / pill fill */

  /* ── Semantic status ─────────────────────────────────────── */
  --status-urgent:  rgb(179, 27, 37);   /* overdue / ≤ today — brick red */
  --status-warning: rgb(255, 106, 0);   /* soon — hot orange */
  --status-ok:      rgb(68, 131, 97);   /* healthy — forest green */
  --status-info:    rgb(37, 99, 235);   /* informational — blue */

  --status-urgent-bg:  rgba(179, 27, 37, 0.10);
  --status-warning-bg: rgba(255, 106, 0, 0.10);
  --status-ok-bg:      rgba(68, 131, 97, 0.10);
  --status-info-bg:    rgba(37, 99, 235, 0.10);

  /* ── Barwa TEKSTU na tincie statusowym ────────────────────────
     ROZSZERZENIE POZA MAKIETY, wynik pomiaru (patrz openspec
     redesign-gws-import). Makiety piszą etykietę statusu wprost
     kolorem statusu na jego 10-procentowym tincie. Dla zieleni daje
     to 3.99:1 przy wymaganych 4.5:1 dla tekstu 11px — czyli poniżej
     AA. Ten sam przepis dla pomarańczy schodzi do 2.60:1.

     Dokładamy więc osobną barwę tekstu, ciemniejszą o tyle, żeby
     przejść próg, z zachowaniem odcienia. Na razie tylko zieleń —
     jedyna z konsumentem (pigułka „nowy”). Pozostałe trzy dostaną
     swoje `-ink`, gdy któraś strona napisze nimi tekst; przepis:
     dobierz odcień tak, by na własnym tincie dał >= 4.5:1, i wpisz
     zmierzoną wartość tutaj zamiast zgadywać. */
  --status-ok-ink: rgb(56, 120, 88);   /* 4.71:1 na --status-ok-bg */

  /* ── Categorical palette (color-coding — not tied to any subject) ──
     Paleta wyboru koloru pozycji paska bocznego. --c-blue jest CELOWO
     wyłączony z katalogu (apps/users/sidebar_colors.py) — zarezerwowany
     jako akcent chrome. Pozostałe 19 kolorów jest do wyboru. */
  --c-red:      rgb(212, 76, 71);    /* brick */
  --c-coral:    rgb(230, 108, 90);
  --c-orange:   rgb(240, 138, 30);
  --c-amber:    rgb(216, 118, 32);
  --c-yellow:   rgb(232, 179, 30);
  --c-olive:    rgb(160, 158, 54);
  --c-lime:     rgb(124, 179, 66);
  --c-green:    rgb(68, 131, 97);    /* forest */
  --c-emerald:  rgb(46, 150, 118);
  --c-teal:     rgb(42, 148, 149);
  --c-cyan:     rgb(51, 126, 169);   /* cerulean */
  --c-blue:     rgb(37, 99, 235);
  --c-indigo:   rgb(79, 92, 190);
  --c-violet:   rgb(144, 101, 176);
  --c-purple:   rgb(122, 78, 158);
  --c-magenta:  rgb(193, 76, 138);
  --c-pink:     rgb(214, 96, 140);
  --c-clay:     rgb(159, 107, 83);
  --c-brown:    rgb(140, 96, 66);
  --c-slate:    rgb(96, 108, 122);

  /* ── Subject aliases (course color-coding — draw from palette) ──── */
  --subj-math:      var(--c-green);
  --subj-polish:    var(--c-clay);
  --subj-english:   var(--c-cyan);
  --subj-physics:   var(--c-red);
  --subj-chemistry: var(--c-magenta);
  --subj-info:      var(--c-violet);
  --subj-geo:       var(--c-amber);
  --subj-history:   var(--c-brown);
  --subj-bio:       var(--c-lime);

  /* ── Grade-mark palette (Polish 1–6 scale) ───────────────── */
  --mark-6: rgb(37, 99, 235);    /* celujący — blue */
  --mark-5: rgb(56, 142, 78);    /* bardzo dobry — green */
  --mark-4: rgb(124, 179, 66);   /* dobry — light green */
  --mark-3: rgb(232, 179, 30);   /* dostateczny — yellow */
  --mark-2: rgb(240, 138, 30);   /* dopuszczający — orange */
  --mark-1: rgb(179, 27, 37);    /* niedostateczny — red */

  /* ── Semantic aliases (dokładane pojedynczo, patrz nagłówek) ──
     --bg-sunken dołożyły niezależnie dwie wyspy (kanban i import z GWS);
     po scaleniu deklaracja jest tu JEDNA. Uwaga: wersja z wyspy kanban
     głosiła, że „ciemny wariant przychodzi sam, bo --paper-2 jest
     nadpisane w body.dark". To nieprawda i zostało zmierzone — patrz
     powtórzenie w bloku body.dark niżej. */
  --bg-sunken:  var(--paper-2);  /* hover wiersza, szapka grupy, well */
  --focus-ring: var(--blue-600); /* obrys focusu pól i przycisków */

  /* Barwa TEKSTU odnośnika. Osobny token, nie --blue-600 wprost: skala blue
     nie ma nadpisania ciemnego, a --blue-600 na ciemnym papierze daje 3.62:1
     (zmierzone, patrz readme DS). Wartość wpisana WPROST, nie przez var(),
     z tego samego powodu co --status-ok-ink — alias zamroziłby wersję jasną.

     W trybie jasnym to --blue-700, nie --blue-600: odnośnik bywa w wierszu
     z tintem statusowym (np. wiersz wpłaty na nieaktualne konto), gdzie
     --blue-600 schodzi do 4.22:1. --blue-700 daje tam ~5.9:1, a na białej
     powierzchni 6.3:1. */
  --link-ink: rgb(29, 78, 216);  /* = --blue-700 */

  /* Tekst na tle w kolorze oceny. DODANE PONAD ŹRÓDŁO: bundle DS
     używa do tego --chip-ink: var(--paper), które w trybie ciemnym
     staje się prawie czarne. Skala --mark-* jest w obu motywach
     identyczna (blok body.dark jej nie nadpisuje), więc odwracanie
     koloru tekstu psułoby kontrast na ciemnym motywie. Ten token
     jest celowo stały. */
  --mark-ink: rgb(255, 255, 255);
  /* Dołożone przez Aktualności (redesign-news-page). Oba wskazują na
     skalę blue, która NIE ma nadpisania w body.dark, więc powtórzenie
     w bloku ciemnym jest zbędne — inaczej niż przy --bg-sunken. */
  --link:       var(--blue-600);
  --link-hover: var(--blue-700);

  /* Przyciemnienie pod modalem — DODANE, NIE SKOPIOWANE. Źródłowe
     tokens/colors.css nie ma takiego tokena; wartość podaje wyłącznie
     proza readme DS (sekcja „Transparency & blur") i powtarza wprost
     każda makieta. Bez tokena każdy modal wpisywałby ją ręcznie.
     Celowo literał, a nie color-mix z --ink: --ink przełącza się
     w body.dark na niemal biały, więc wyliczane przyciemnienie
     rozjaśniałoby ekran zamiast go przyciemniać. */
  --overlay: rgba(13, 15, 14, 0.32);
}

/* ── Tryb ciemny ──────────────────────────────────────────────
   Oryginał DS trzyma nadpisania pod `.kropka-root.dark`; aplikacja
   Kropka używa `body.dark` (patrz templates/base.html, sekcja TRYB
   CIEMNY), więc selektor jest przepięty. Wartości bez zmian. */
body.dark {
  --paper:     rgb(19, 20, 19);
  --paper-2:   rgb(30, 32, 30);
  --surface:   rgb(29, 31, 29);
  --ink:       rgb(238, 239, 236);
  --ink-2:     rgb(214, 216, 213);
  --ink-3:     rgb(226, 227, 224);
  --muted:     rgb(151, 154, 151);
  --hint:      rgb(140, 142, 140);
  --border:    rgb(48, 51, 48);
  --border-soft: rgba(120, 124, 120, 0.18);
  --divider:   rgb(58, 61, 58);

  /* Barwy statusowe w wersji ciemnej — te same odcienie co tinty niżej,
     tylko o krok jaśniejsze. Wcześniej nadpisane były WYŁĄCZNIE tinty,
     a barwa tekstu zostawała ciemna. Zmierzone niezależnie w dwóch
     miejscach:
       · pigułka statusu na /auth/gws-import/ — zieleń rgb(68,131,97)
         na ciemnym tincie dawała 2.80:1 (redesign-gws-import),
       · alert wpłat na nieaktualne konto w księgowości — ceglasty
         rgb(179,27,37) dawał 2.33:1 (redesign-accounting-module).

     Pierwsze podejście brało odcienie wprost z tint (232,80,90 itd.);
     dla alertu na --paper (ciemniejszym niż --surface) dawało to
     dopiero 4.39:1. Wartości poniżej są o krok jaśniejsze i przechodzą
     próg w obu kontekstach — na tincie nad --surface i nad --paper.

     UWAGA przy użyciu: te tokeny PRZEŁĄCZAJĄ SIĘ z motywem, więc nie
     nadają się na wypełnienie pod tekstem o stałym kolorze — tam idzie
     paleta kategoryczna --c-*, wspólna dla obu motywów. */
  --status-urgent:  rgb(240, 100, 108);
  --status-warning: rgb(255, 160, 80);
  --status-ok:      rgb(110, 195, 148);
  --status-info:    rgb(110, 160, 245);

  --status-urgent-bg:  rgba(232, 80, 90, 0.16);
  --status-warning-bg: rgba(255, 150, 60, 0.16);
  --status-ok-bg:      rgba(90, 180, 130, 0.16);
  --status-info-bg:    rgba(80, 140, 240, 0.16);

  /* Wartość wpisana wprost, NIE var(--status-ok): podstawienie var()
     zachodzi na elemencie deklaracji, więc alias z :root zamroziłby
     wersję jasną. Ta sama pułapka co przy --bg-sunken wyżej. */
  --status-ok-ink: rgb(90, 180, 130);  /* 4.97:1 na ciemnym tincie */

  /* --blue-600 na ciemnym papierze to 3.62:1, --blue-500 daje 5.09:1 — ale
     odnośnik bywa w wierszu z tintem statusowym (np. „uzupełnij numer karty"
     w wierszu pomarańczowym), gdzie --blue-500 schodzi do 3.92:1. Odcień
     poniżej daje tam 6.2:1, a na samej powierzchni 7.1:1. Poza skalą blue,
     bo skala nie ma jaśniejszego kroku niż --blue-500 przed --blue-100. */
  --link-ink: rgb(120, 170, 255);

  /* Powtórzenie aliasu jest KONIECZNE, nie jest nadmiarem.
     var() w deklaracji własności niestandardowej jest podstawiane na
     tym elemencie, na którym własność zadeklarowano. --bg-sunken
     zadeklarowane na :root podstawia --paper-2 Z :root, czyli wartość
     jasną — nadpisanie --paper-2 na body.dark nigdy by go nie
     dosięgło (zmierzone w przeglądarce: alias zostawał jasny).
     Ta sama pułapka co --kp-color w pasku, patrz docs/DECYZJE.md.
     Nie „upraszczaj" tej linijki usuwając ją. */
  --bg-sunken: var(--paper-2);
}
