/*
 * Wspolny arkusz stylow dostepni.online.
 * Wczesniej kazdy szablon powielal wlasny blok <style> z (czesto niezgodnymi)
 * wartosciami cieni/promienia zaokraglenia/kolorow. Ten plik jest jednym
 * zrodlem prawdy dla tych wartosci - patrz szablony i nie dodawaj tam
 * ponownie lokalnych definicji tych samych klas.
 */

/* ---------------------------------------------------------------------
 * Cienie
 * "shadow-sm"/"shadow-lg" nie sa klasami Bulmy - byly uzywane w markupie
 * w dziesiatkach miejsc, ale definiowane (z rozjezdzajacymi sie wartosciami)
 * tylko w czesci szablonow, przez co na reszcie stron byly no-opem.
 * ------------------------------------------------------------------- */
.shadow-sm {
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);
}
.shadow-md {
    box-shadow: 0 6px 12px -2px rgba(0, 0, 0, 0.08), 0 3px 6px -3px rgba(0, 0, 0, 0.05);
}
.shadow-lg {
    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -4px rgba(0, 0, 0, 0.05);
}

/* ---------------------------------------------------------------------
 * Paleta zgodna z WCAG 2.1 AA
 *
 * Domyslna paleta Bulmy 0.9.4 nie spelnia WCAG 2.1 AA na bialym tle:
 * - is-primary/is-success/is-info/is-danger z bialym tekstem: kontrast 1.95-3.61 (wymagane 4.5)
 * - has-text-grey-light/has-text-grey: kontrast 2.05/4.29 (wymagane 4.5)
 * Nizej: te same odcienie barw, przyciemnione tak, zeby przejsc 4.5:1, bez zmiany charakteru marki.
 * Wyjatek: stopka ma ciemne tlo, wiec grey-light w niej zostaje w oryginalnym, jasniejszym odcieniu
 * (tam kontrast juz jest OK - patrz override na koncu bloku).
 * ------------------------------------------------------------------- */
:root {
    --a11y-primary: #007e6b;   /* bylo #00d1b2 - kontrast z bialym: 1.95 -> 5.00 */
    --a11y-success: #267d56;   /* bylo #48c78e - kontrast z bialym: 2.14 -> 5.06 */
    --a11y-info: #2b73af;      /* bylo #3e8ed0 - kontrast z bialym: 3.51 -> 5.03 */
    --a11y-danger: #dc1139;    /* bylo #f14668 - kontrast z bialym: 3.61 -> 5.02 */
    --a11y-grey-light: #6b6b6b; /* bylo #b5b5b5 - kontrast z bialym: 2.05 -> 5.33 */
    --a11y-grey: #595959;       /* bylo #7a7a7a - kontrast z bialym: 4.29 -> 7.00 */

    /*
     * "Ink" = te same barwy, ale uzywane jako KOLOR TEKSTU na tle strony (has-text-*),
     * w odroznieniu od barw powyzej, ktore sa TLEM pod bialy tekst (przyciski/tagi/notyfikacje).
     * W trybie jasnym to dokladnie te same wartosci - zero zmiany wizualnej.
     * W trybie ciemnym (patrz [data-theme="dark"] nizej) tekst siedzi na ciemnym tle, wiec
     * potrzebuje jasniejszych odcieni; tlo przyciskow/tagow zostaje bez zmian w obu trybach.
     */
    --a11y-primary-ink: var(--a11y-primary);
    --a11y-success-ink: var(--a11y-success);
    --a11y-info-ink: var(--a11y-info);
    --a11y-danger-ink: var(--a11y-danger);
    --a11y-grey-light-ink: var(--a11y-grey-light);
    --a11y-grey-ink: var(--a11y-grey);

    /* Fioletowo-indygowy akcent uzywany poza paleta Bulmy (dashboard/optymalizacja zdjec) -
       jako inline styl na kartach z tlem, ktore w trybie ciemnym zmienia sie na --surface-card.
       Bez wersji "ink" tekst zostawal na sztywno ciemnym odcieniem i znikal na ciemnym tle
       (kontrast ok. 2:1) - patrz override w [data-theme="dark"] nizej. */
    --accent-indigo-ink: #4f46e5;
    --accent-indigo-dark-ink: #4338ca;

    /* Powierzchnie/tekst niezalezne od marki - w trybie jasnym to no-op (te same
       wartosci co domyslne Bulmy), realna tresc jest w override'zie [data-theme="dark"]. */
    --surface-bg: #ffffff;
    --surface-card: #ffffff;
    --surface-alt: #f8fafc;
    --surface-hover: #eef1f5;
    --surface-border: #e2e8f0;
    --text-strong: #1d1d1b;
    --text-body: #363636;

    /* Obwodka pol formularzy (input/textarea/select) - --surface-border sluzy tez do
       dekoracyjnych podzialow (np. .navbar-divider), gdzie 3:1 nie jest wymagane, ale
       granica interaktywnego komponentu (WCAG 1.4.11) juz tak. #64748b przechodzi 3:1
       na tle --surface-card w OBU motywach (4.76:1 jasny, 3.41:1 ciemny), wiec jedna
       wartosc bez override'u w [data-theme="dark"] wystarczy. */
    --control-border: #64748b;

    color-scheme: light;
}

/* :not(.is-light) - warianty "is-light" (np. tag.is-info.is-light) maja WLASNA, juz poprawna
   pare jasne-tlo/ciemny-tekst od Bulmy, bez !important - nasz ogolny override by ja rozjechal.
   :not(.is-outlined) - z tego samego powodu: taki przycisk ma miec przezroczyste tlo i kolorowy
   obrys/tekst, a nie pelne kolorowe tlo (znaleziono w trakcie prac nad trybem ciemnym, ale
   dotyczylo obu motywow - np. pusty stan w historii narzedzi AI mial zielony tekst na zielonym tle). */
.button.is-primary:not(.is-light):not(.is-outlined), .is-primary.button:not(.is-light):not(.is-outlined), .tag.is-primary:not(.is-light),
.notification.is-primary:not(.is-light), .hero.is-primary:not(.is-light), .has-background-primary:not(.is-light),
.message.is-primary .message-header, span.is-primary:not(.is-light), div.is-primary:not(.is-light) { background-color: var(--a11y-primary) !important; }
.has-text-primary { color: var(--a11y-primary-ink) !important; }

.button.is-success:not(.is-light):not(.is-outlined), .is-success.button:not(.is-light):not(.is-outlined), .tag.is-success:not(.is-light),
.notification.is-success:not(.is-light), .hero.is-success:not(.is-light), .has-background-success:not(.is-light),
.message.is-success .message-header, span.is-success:not(.is-light), div.is-success:not(.is-light) { background-color: var(--a11y-success) !important; }
.has-text-success { color: var(--a11y-success-ink) !important; }

.button.is-info:not(.is-light):not(.is-outlined), .is-info.button:not(.is-light):not(.is-outlined), .tag.is-info:not(.is-light),
.notification.is-info:not(.is-light), .hero.is-info:not(.is-light), .has-background-info:not(.is-light),
.message.is-info .message-header, span.is-info:not(.is-light), div.is-info:not(.is-light) { background-color: var(--a11y-info) !important; }
.has-text-info { color: var(--a11y-info-ink) !important; }

.button.is-danger:not(.is-light):not(.is-outlined), .is-danger.button:not(.is-light):not(.is-outlined), .tag.is-danger:not(.is-light),
.notification.is-danger:not(.is-light), .hero.is-danger:not(.is-light), .has-background-danger:not(.is-light),
.message.is-danger .message-header, span.is-danger:not(.is-light), div.is-danger:not(.is-light) { background-color: var(--a11y-danger) !important; }
.has-text-danger { color: var(--a11y-danger-ink) !important; }

.has-text-grey-light { color: var(--a11y-grey-light-ink) !important; }
.has-text-grey { color: var(--a11y-grey-ink) !important; }

/* Bulma stawia .menu-label na #7a7a7a (ten sam za niski kontrast 4.29:1 co --a11y-grey
   wyzej naprawia dla .has-text-grey) - podswietlniki sidebara ("Szukaj", "Kategorie"...)
   sa pogrubione 12px, wiec NIE licza sie jako "large text" i wymagaja pelnych 4.5:1.
   Dotad byla tylko poprawka na tryb ciemny (patrz nizej) - w jasnym byla wciaz zbyt jasna. */
.menu-label { color: var(--a11y-grey-ink) !important; }

/*
 * Ciemne sekcje (boxy has-background-dark, niestandardowe hero z ciemnym tlem inline)
 * potrzebuja JASNIEJSZYCH odcieni niz reszta strony - oryginalne (nieprzyciemnione) kolory Bulmy
 * na ciemnym tle juz maja dobry kontrast, wiec tutaj po prostu je przywracamy.
 * Stopka (.site-footer) NIE jest tu wliczona - od teraz podaza za motywem strony jak
 * kazda inna powierzchnia (patrz sekcja "STOPKA" nizej), wiec korzysta ze zwyklych
 * zmiennych --text-*, a nie z tych na sztywno jasnych odcieni.
 */
.has-background-dark .has-text-grey-light,
.has-background-dark .has-text-grey,
.akademia-hero .has-text-grey-light,
.akademia-hero .has-text-grey {
    color: #b5b5b5 !important;
}
.has-background-dark .has-text-success,
.akademia-hero .has-text-success {
    color: #48c78e !important;
}
/* Ten konkretny hero ma juz recznie dobrany, mocno kontrastowy granat (bialy tekst 10.98:1) -
   wazniejsze zeby go nie nadpisywac naszym .hero.is-info niz trzymac sie jednego odcienia niebieskiego */
.hero.is-info.akademia-hero {
    background-color: #2c3e50 !important;
}

/* Widoczny fokus dla klawiatury wszedzie, gdziekolwiek przegladarka/inny styl by go wygasil.
   [role="tab"] - karty-zakladki (np. generator/generate_alt.html) sa div-ami z tabindex,
   nie natywnymi <button>, wiec nie zlapalyby sie na powyzsze selektory bez tego dopisku. */
a:focus-visible, button:focus-visible, input:focus-visible, textarea:focus-visible,
select:focus-visible, .button:focus-visible, [role="tab"]:focus-visible {
    outline: 2px solid #2b73af !important;
    outline-offset: 2px !important;
}

/* Triggery dropdownow w navbarze ("Oferta", "Narzedzia AI", konto) i przycisk wylogowania
   byly wczesniej <a> bez href - calkowicie nieosiagalne przez Tab. Zamienione na <button>
   (patrz base.html), zeby odzyskac natywna dostepnosc klawiatury - ale <button> ma domyslny
   obrys/tlo/czcionke przegladarki, ktorych .navbar-item/.navbar-link z Bulmy nie resetuja
   (zakladaly, ze to zawsze <a>). Przywracamy identyczny wyglad jak wczesniej. */
button.navbar-item, button.navbar-link {
    border: 0;
    background: none;
    font: inherit;
    text-align: left;
    width: 100%;
    cursor: pointer;
}

/* Esc na otwartym dropdownie (patrz JS w base.html) musi go zamkniec NIEZALEZNIE od tego,
   czy fokus nadal jest w jego wnetrzu (np. na samym triggerze, do ktorego oddajemy fokus) -
   samo ":focus-within", ktorego Bulma uzywa do pokazywania dropdownu, nie ma pojecia
   "zamknij mimo fokusu w srodku". Ta klasa wygrywa dzieki !important i jest zdejmowana
   w JS przy kolejnym swiadomym otwarciu/opuszczeniu triggera. */
.navbar-item.has-dropdown.is-escaped .navbar-dropdown {
    display: none !important;
}

/* ---------------------------------------------------------------------
 * Karta logowania / rejestracji (auth-card)
 * Wspolny komponent dla login.html i register.html - wczesniej ta sama
 * ~80-liniowa deklaracja byla skopiowana osobno do kazdego z tych plikow
 * i z czasem zaczela sie rozjezdzac (rozne max-width, rozne selektory).
 * ------------------------------------------------------------------- */
.auth-card { border-radius: 16px; overflow: hidden; border: 1px solid var(--surface-border); }

.auth-panel-col {
    background: linear-gradient(150deg, var(--a11y-primary), var(--a11y-success));
    min-height: 560px;
    display: flex;
}
.auth-panel {
    padding: 3rem 2.5rem;
    width: 100%;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}
.auth-panel-logo { max-height: 34px; }
.auth-panel-text { line-height: 1.7; opacity: 0.95; }
.auth-panel-features { list-style: none; padding: 0; margin: 0; }
.auth-panel-features li {
    color: #fff;
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.6rem 0;
    font-weight: 600;
    border-top: 1px solid rgba(255, 255, 255, 0.2);
}
.auth-panel-features li:first-child { border-top: none; }
.auth-panel-features i { width: 1.25em; text-align: center; }

.auth-form-wrap {
    padding: 3rem 3rem;
    max-width: 460px;
    margin: 0 auto;
}
.auth-heading { color: var(--text-strong); margin-bottom: 0.25rem; }

.auth-input {
    width: 100%;
    padding: 0.65rem 0.9rem 0.65rem 2.4rem;
    border: 1px solid var(--surface-border);
    border-radius: 8px;
    height: auto;
    font-size: 1rem;
    background-color: var(--surface-card);
    color: var(--text-strong);
    transition: border-color 0.2s ease;
}
.auth-input:focus {
    border-color: var(--a11y-primary);
    outline: 2px solid var(--a11y-primary);
    outline-offset: 1px;
    box-shadow: 0 0 0 3px rgba(0, 126, 107, 0.18);
}
.control.has-icons-right .auth-input { padding-right: 2.6rem; }

.password-toggle {
    pointer-events: auto;
    position: absolute;
    top: 0; right: 0; bottom: 0;
    width: 2.5em;
    background: transparent;
    border: none;
    color: var(--a11y-grey-light-ink);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
}
.password-toggle:hover { color: var(--a11y-primary); }

.auth-submit { border-radius: 8px; font-weight: 700; }

@media screen and (max-width: 768px) {
    .auth-form-wrap { padding: 2.25rem 1.75rem; max-width: 100%; }
}

/* Etykieta widoczna tylko dla czytnikow ekranu - pole ma juz kontekst wizualny
   (np. placeholder albo sasiadujacy tekst), ale wciaz potrzebuje nazwy dostepnej. */
.is-sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* Reset domyslnego wygladu przegladarki dla fieldset/legend - uzywamy ich do
   programowego powiazania nagłówka z grupa radiobuttonow (WCAG 1.3.1/4.1.2),
   ale bez tego resetu przegladarka dokleja wlasna ramke/padding/min-width. */
fieldset.is-unstyled {
    border: 0;
    padding: 0;
    margin: 0;
    min-width: 0;
}
fieldset.is-unstyled > legend {
    padding: 0;
    width: 100%;
}

/* Lista wymagan hasla, ktora Django doklada do pol formularzy zmiany/resetu hasla */
.help.has-text-grey-light ul {
    margin-left: 1.5rem;
    list-style-type: disc;
    margin-top: 0.25rem;
}
.help.has-text-grey-light ul li {
    margin-bottom: 0.2rem;
}

/* Link "Przejdz do glownej tresci" (templates/base.html) - pierwszy element w <body>,
   niewidoczny dopoki nie dostanie fokusu z klawiatury (Tab), zeby uzytkownicy czytnikow
   ekranu i klawiatury mogli ominac powtarzalna nawigacje bez wplywu na uklad strony. */
.skip-link {
    position: absolute;
    top: -3rem;
    left: 0.5rem;
    z-index: 2000;
    background: #1b1b1b;
    color: #fff;
    padding: 0.75rem 1.25rem;
    border-radius: 0 0 6px 6px;
    text-decoration: none;
    font-weight: 700;
    transition: top 0.15s ease-in-out;
}
.skip-link:focus {
    top: 0;
    color: #fff;
}

/* Baner informacyjny o plikach cookie (templates/base.html) */
.cookie-banner {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1000;
    background: #1b1b1b;
    color: #fff;
    padding: 1rem 1.5rem;
    box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.25);
}
.cookie-banner__content {
    max-width: 1100px;
    margin: 0 auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
}
.cookie-banner__content p {
    margin: 0;
    flex: 1 1 320px;
    font-size: 0.9rem;
    line-height: 1.5;
    color: #f0f0f0;
}
.cookie-banner__content a {
    color: #7fdca0;
    text-decoration: underline;
}
.cookie-banner__actions {
    flex: 0 0 auto;
    display: flex;
    gap: 0.75rem;
}
/* "Odrzuc" musi byc tak samo latwy do znalezienia i klikniecia jak "Akceptuj" (wymog
   RODO/ePrivacy - regulator traktuje maly/szary link "odrzuc" obok duzego zielonego
   przycisku jako dark pattern), wiec oba przyciski maja ten sam rozmiar/wage wizualna,
   roznia sie tylko kolorem (wypelniony zielony vs. jasny z obrysem). */
.cookie-banner__actions .button {
    font-size: 0.9rem;
}
.cookie-banner__actions #cookie-banner-reject {
    background-color: transparent;
    border: 1px solid rgba(255, 255, 255, 0.6);
    color: #fff;
}
.cookie-banner__actions #cookie-banner-reject:hover,
.cookie-banner__actions #cookie-banner-reject:focus-visible {
    background-color: rgba(255, 255, 255, 0.1);
    border-color: #fff;
}
@media (max-width: 600px) {
    .cookie-banner__content {
        flex-direction: column;
        align-items: stretch;
    }
    .cookie-banner__actions {
        flex-direction: column;
    }
    .cookie-banner__actions .button {
        width: 100%;
    }
}

/* ---------------------------------------------------------------------
 * STOPKA (templates/base.html)
 *
 * Wczesniej stopka miala na sztywno .has-background-dark .has-text-white -
 * wygladala tak samo (czarny pasek) niezaleznie od motywu strony, co w trybie
 * jasnym wygladalo jak inny, doklejony serwis, a w trybie ciemnym bylo tylko
 * przypadkowo spojne. Teraz to zwykla powierzchnia strony - jak .card/.box -
 * zbudowana na tych samych zmiennych --surface-.../--text-... co reszta UI,
 * wiec automatycznie podaza za obydwoma motywami bez osobnych regul
 * [data-theme="dark"] (te sa potrzebne tylko tam, gdzie Bulma narzuca
 * kolor na sztywno - stopka juz nie korzysta z takich klas Bulmy).
 * ------------------------------------------------------------------- */
.site-footer {
    background-color: var(--surface-alt);
    color: var(--text-body);
    border-top: 4px solid var(--a11y-success);
}
.site-footer-heading { color: var(--text-strong); }
.site-footer-muted { color: var(--a11y-grey-light-ink); }
.site-footer a.site-footer-muted:hover,
.site-footer a.site-footer-muted:focus-visible,
.site-footer button.site-footer-muted:hover,
.site-footer button.site-footer-muted:focus-visible { color: var(--a11y-primary-ink); }
/* "Ustawienia cookies" to <button>, nie <a href="#"> - nie prowadzi nigdzie, tylko odpala JS
   (patrz base.html), wiec dummy href psulby sie tylko jako martwy "#" w pasku statusu i przy
   wylaczonym JS. Reset wygladu, zeby nie odstawal od sasiednich linkow-<a>. */
button.site-footer-muted {
    background: none;
    border: none;
    font: inherit;
    cursor: pointer;
}
/* W trybie ciemnym ":root[data-theme=dark] button:not(.button) { color: inherit }" (patrz
   nizej) ma wyzsza specyficznosc niz .site-footer-muted i nadpisalby jej szary kolor na
   kolor rodzica - ten selektor musi byc konkretniejszy, zeby wygrac. */
:root[data-theme="dark"] .site-footer button.site-footer-muted { color: var(--a11y-grey-light-ink); }
:root[data-theme="dark"] .site-footer button.site-footer-muted:hover,
:root[data-theme="dark"] .site-footer button.site-footer-muted:focus-visible { color: var(--a11y-primary-ink); }
.site-footer-divider {
    background-color: var(--surface-border);
    height: 1px;
    margin: 3rem 0;
}
/* Polityka Prywatnosci / Regulamin / Ustawienia cookies w dolnym pasku stopki - is-size-7
   (12px) bez paddingu dawalo ~18px wysokosci klikalnego obszaru, ponizej wymaganych WCAG
   2.5.8 / Lighthouse "Touch targets" 24x24px. Padding zamiast wiekszej czcionki, zeby nie
   zmieniac wygladu wizualnego paska. */
.site-footer-legal-links a.site-footer-muted,
.site-footer-legal-links button.site-footer-muted {
    display: inline-block;
    padding: 0.6em 0.25em;
}
.site-footer-social {
    border-color: var(--surface-border) !important;
    color: var(--text-body) !important;
    background-color: transparent !important;
}
.site-footer-social:hover {
    background-color: var(--surface-hover) !important;
    border-color: var(--a11y-primary) !important;
    color: var(--a11y-primary-ink) !important;
}

/* ---------------------------------------------------------------------
 * Przelacznik trybu ciemnego (navbar, templates/base.html)
 * ------------------------------------------------------------------- */
.theme-toggle-btn {
    border-color: var(--surface-border) !important;
    background-color: var(--surface-card) !important;
    color: var(--text-strong) !important;
}
.theme-toggle-btn:hover { background-color: var(--surface-hover) !important; }

/* logo.svg ma na sztywno ciemne wypelnienie (zaprojektowane pod jasne tlo) - w trybie
   ciemnym podmieniamy je na logo_white.svg. Dotyczy zarowno navbara jak i stopki -
   .logo-light/.logo-dark to ten sam wzorzec przelaczania w obu miejscach. */
.logo-dark { display: none; }
:root[data-theme="dark"] .logo-light { display: none; }
:root[data-theme="dark"] .logo-dark { display: inline-block; }

/* ---------------------------------------------------------------------
 * TRYB CIEMNY
 *
 * Wlaczany atrybutem data-theme="dark" na <html> - patrz base.html:
 * skrypt w <head> ustawia go od razu (localStorage lub prefers-color-scheme
 * przy pierwszej wizycie, zeby uniknac "mrugniecia" jasnym tlem), a przycisk
 * w navbarze przelacza go i zapisuje wybor w localStorage.
 *
 * Bulma 0.9.4 (CDN) nie ma natywnego trybu ciemnego i jest wciagana jako
 * gotowy skompilowany CSS, wiec nie mamy dostepu do jej zmiennych Sass -
 * nadpisujemy jej komponenty recznie, ale przez zmienne --surface-... / --text-...
 * zdefiniowane w :root powyzej, zeby miec jedno zrodlo prawdy (ten sam wzorzec
 * co paleta WCAG na gorze pliku), a nie kolory porozrzucane po selektorach.
 *
 * Kolorowe warianty Bulmy (is-success/is-info/.../.is-light) NIE sa tu ruszane -
 * to samodzielne, juz dobrze kontrastujace pary tlo+tekst (plakietki, alerty,
 * boxy z przykladami w Akademii) i wygladaja dobrze jako kolorowe akcenty
 * niezaleznie od tla strony - patrz tez uzasadnienie przy .has-background-dark
 * wyzej w pliku, ta sama logika.
 * ------------------------------------------------------------------- */
:root[data-theme="dark"] {
    --surface-bg: #14181d;
    --surface-card: #1c2126;
    --surface-alt: #242a31;
    /* Bylo #2b323a - roznica wzgledem --surface-card (#1c2126) byla tak mala (+15,+17,+20
       na kanal), ze hover na navbar-item/dropdown-item byl praktycznie niewidoczny na oko
       (zglosnone: Blog/Akademia/pozycje w dropdown "nie maja hovera" w trybie ciemnym). */
    --surface-hover: #3c4552;
    --surface-border: #3a424c;
    --text-strong: #f5f6f7;
    --text-body: #ced2d6;

    --a11y-primary-ink: #2dd4bf;
    --a11y-success-ink: #4ade80;
    --a11y-info-ink: #60a5fa;
    --a11y-danger-ink: #f87171;
    --a11y-grey-light-ink: #9aa1a8;
    --a11y-grey-ink: #d4d7dc;

    --accent-indigo-ink: #a5b4fc;
    --accent-indigo-dark-ink: #818cf8;

    /* Native UI przegladarki (scrollbary, natywne <select>/date-picker, autofill) */
    color-scheme: dark;
}

:root[data-theme="dark"] body {
    background-color: var(--surface-bg);
    color: var(--text-body);
}

/* .title/.subtitle maja wlasny, na sztywno ciemny kolor od Bulmy (nie jest to zmienna,
   ktora moglibysmy podmienic) - bez tego override'u nagłówki byłyby prawie niewidoczne
   na ciemnym tle. Strony z .title.has-text-white(-ter) na kolorowym tle (hero/gradient)
   nie ucierpia - var(--text-strong)/var(--text-body) w trybie ciemnym i tak sa niemal biale. */
/* :not(.has-text-white...) - tytuly na kolorowym tle (hero/gradient, np. panel logowania,
   sekcje CTA) maja wlasny bialy tekst i musza go zachowac - inaczej ten override (bardziej
   specyficzny przez :root[data-theme="dark"]) by go zdominowal mimo klasy has-text-white. */
:root[data-theme="dark"] .title:not(.has-text-white):not(.has-text-white-ter):not(.has-text-white-bis):not(.has-text-light) { color: var(--text-strong) !important; }
:root[data-theme="dark"] .subtitle:not(.has-text-white):not(.has-text-white-ter):not(.has-text-white-bis):not(.has-text-light) { color: var(--text-body) !important; }

/* Kolejne "twarde" (nie-zmiennoprzecinkowe) kolory z Bulmy, ktore trzeba nadpisac osobno */
:root[data-theme="dark"] .has-text-grey-dark { color: var(--a11y-grey-light-ink) !important; }
:root[data-theme="dark"] .has-text-grey-darker { color: var(--text-strong) !important; }
:root[data-theme="dark"] .menu-label { color: var(--a11y-grey-light-ink) !important; }

/* .menu-list a ma na sztywno #4a4a4a od Bulmy - niewidoczne na sciemnianym przez nas
   .has-background-white-bis/-ter (patrz override wyzej), np. lista lekcji "Program szkolenia"
   w LMS (templates/lms/course_player.html) mialaby ~1.6:1 kontrastu zamiast wymaganych 4.5:1.
   .is-active tej listy ma wlasne tlo (--a11y-info) ustawiane inline w course_player.html -
   text-strong na nim dalej czyta sie dobrze, wiec nie trzeba osobnego wyjatku. */
:root[data-theme="dark"] .menu-list a { color: var(--text-body) !important; }
:root[data-theme="dark"] .menu-list a:hover { background-color: var(--surface-hover) !important; color: var(--text-strong) !important; }
:root[data-theme="dark"] .menu-list a.is-active { color: var(--text-strong) !important; }

/* Naglowki wewnatrz wstrzykiwanego bezpiecznego HTML-a (Regulamin/Polityka Prywatnosci
   z PortalPage.custom_html, tresc artykulow blogowych) - Bulma stylizuje je przez .content
   na sztywno ciemny kolor. */
:root[data-theme="dark"] .content h1,
:root[data-theme="dark"] .content h2,
:root[data-theme="dark"] .content h3,
:root[data-theme="dark"] .content h4,
:root[data-theme="dark"] .content h5,
:root[data-theme="dark"] .content h6 {
    color: var(--text-strong) !important;
}

/* Surowe <button> (np. rozwijane pytania FAQ) domyslnie NIE dziedzicza koloru tekstu
   po przegladarce (user-agent stylesheet ustawia wlasny kolor) - .button ma juz wlasna
   obsluge wyzej, wiec tu tylko te "gole" przyciski. */
:root[data-theme="dark"] button:not(.button) { color: inherit; }

/* Bulma ustawia <strong> na sztywno na ciemny #363636 (niezaleznie od dziedziczenia) -
   bez tego kazdy pogrubiony tekst (pytania FAQ, nazwa uzytkownika w navbarze, etykiety
   w tabelach itp.) zostawalby ciemny na ciemnym tle. color: inherit (nie sztywna zmienna),
   zeby nie popsuc pogrubionego tekstu wewnatrz kolorowych, celowo nietknietych boxow
   (np. "Uwaga dla administratora" - notification.is-warning.is-light). */
:root[data-theme="dark"] strong { color: inherit; }

:root[data-theme="dark"] a:focus-visible,
:root[data-theme="dark"] button:focus-visible,
:root[data-theme="dark"] input:focus-visible,
:root[data-theme="dark"] textarea:focus-visible,
:root[data-theme="dark"] select:focus-visible,
:root[data-theme="dark"] .button:focus-visible {
    outline-color: var(--a11y-info-ink) !important;
}

/* Zwykle linki w tresci (regulamin/polityka, blog, FAQ). :where() zeruje
   specyficznosc calego selektora - inaczej ":root[data-theme] a" (pseudoklasa +
   element) byloby PRZYPADKIEM bardziej specyficzne niz pojedyncza klasa Bulmy
   (np. ".button", ".menu-list a.is-active") i psuloby kolor tekstu w przyciskach
   i aktywnych linkach menu. Dzieki :where() ten selektor przegrywa z kazda
   klasa Bulmy z automatu i dziala tylko tam, gdzie nic innego nie ustawia koloru. */
:where(:root[data-theme="dark"]) a { color: var(--a11y-info-ink); }
:where(:root[data-theme="dark"]) a:hover { color: var(--a11y-primary-ink); }

/* Navbar */
:root[data-theme="dark"] .navbar {
    background-color: var(--surface-card) !important;
    border-bottom-color: var(--surface-border) !important;
}
/* :not(.has-text-*) - te linki maja wlasny kolor marki (Audyt/Deklaracja/Szkolenia = zielony,
   Wyloguj = czerwony) i musza go zachowac, inaczej ta regula (bardziej specyficzna przez
   :root[data-theme="dark"]) wygralaby z .has-text-success/.has-text-danger ponizej w pliku. */
:root[data-theme="dark"] .navbar-item:not(.has-text-success):not(.has-text-danger):not(.has-text-info):not(.has-text-primary):not(.has-text-warning),
:root[data-theme="dark"] .navbar-link:not(.has-text-success):not(.has-text-danger):not(.has-text-info):not(.has-text-primary):not(.has-text-warning) {
    color: var(--text-body) !important;
}
/* background-color osobno, bez :not(...) - te 5 wykluczen liczy sie do specyficznosci (0,8,0),
   co bilo regule :hover ponizej (0,4,0) mimo ze obie maja !important - hover NIGDY nie wygrywal,
   tlo zostawalo transparent (zgloszone: Blog/Akademia/dropdown "bez hovera" w trybie ciemnym).
   Sama transparencja w spoczynku nie musi byc warunkowa kolorem marki, wiec zostaje bez :not(). */
:root[data-theme="dark"] .navbar-item,
:root[data-theme="dark"] .navbar-link {
    background-color: transparent !important;
}
/* Strzalka rozwijanego menu (np. "Narzedzia AI") to obramowanie ::after, nie tekst -
   nie lapie sie na "color" powyzej i zostawala na sztywno prawie czarna (#0a0a0a z Bulmy),
   niewidoczna na ciemnym tle navbara. */
:root[data-theme="dark"] .navbar-link::after {
    border-color: var(--text-body) !important;
}
:root[data-theme="dark"] .navbar-item:hover,
:root[data-theme="dark"] .navbar-link:hover,
:root[data-theme="dark"] .navbar-item.is-active {
    background-color: var(--surface-hover) !important;
    color: var(--text-strong) !important;
}
:root[data-theme="dark"] .navbar-burger { color: var(--text-strong); }
:root[data-theme="dark"] .navbar-burger span { background-color: currentColor; }
:root[data-theme="dark"] .navbar-dropdown {
    background-color: var(--surface-card) !important;
    border-color: var(--surface-border) !important;
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.45) !important;
}
:root[data-theme="dark"] .navbar-divider { background-color: var(--surface-border) !important; }

/* Powierzchnie: boxy, karty, panele, modale, dropdowny */
:root[data-theme="dark"] .box,
:root[data-theme="dark"] .card,
:root[data-theme="dark"] .message,
:root[data-theme="dark"] .message-body,
:root[data-theme="dark"] .dropdown-content,
:root[data-theme="dark"] .modal-card-body,
:root[data-theme="dark"] .modal-card-head,
:root[data-theme="dark"] .modal-card-foot,
:root[data-theme="dark"] .panel-block {
    background-color: var(--surface-card) !important;
    color: var(--text-body) !important;
    border-color: var(--surface-border) !important;
}
:root[data-theme="dark"] .card-header {
    background-color: var(--surface-alt) !important;
    box-shadow: none !important;
}
:root[data-theme="dark"] .card-header-title { color: var(--text-strong) !important; }
:root[data-theme="dark"] .modal-background { background-color: rgba(0, 0, 0, 0.8) !important; }

/* Notyfikacje i tagi bez modyfikatora koloru (Bulma domyslnie: jasnoszare tlo) */
:root[data-theme="dark"] .notification:not(.is-light):not(.is-primary):not(.is-success):not(.is-info):not(.is-danger):not(.is-warning):not(.is-link):not(.is-dark) {
    background-color: var(--surface-alt) !important;
    color: var(--text-body) !important;
}
:root[data-theme="dark"] .tag:not(.is-light):not(.is-primary):not(.is-success):not(.is-info):not(.is-danger):not(.is-warning):not(.is-link):not(.is-dark):not(.is-white):not(.is-black) {
    background-color: var(--surface-alt) !important;
    color: var(--text-body) !important;
}

/* Hero: is-light/is-white maja jasne tlo z zalozenia - is-primary/success/... i is-dark zostaja bez zmian */
:root[data-theme="dark"] .hero.is-light,
:root[data-theme="dark"] .hero.is-white {
    background-color: var(--surface-alt) !important;
    color: var(--text-body) !important;
}
:root[data-theme="dark"] .hero.is-light .title,
:root[data-theme="dark"] .hero.is-white .title,
:root[data-theme="dark"] .hero.is-light .subtitle,
:root[data-theme="dark"] .hero.is-white .subtitle {
    color: var(--text-strong) !important;
}

/* Przyciski bez koloru marki (biale/jasne tlo obramowania nawigacyjne, "Zaloguj" itp.) */
:root[data-theme="dark"] .button.is-white,
:root[data-theme="dark"] .button.is-light:not(.is-primary):not(.is-success):not(.is-info):not(.is-danger):not(.is-warning):not(.is-link):not(.is-dark) {
    background-color: var(--surface-alt) !important;
    color: var(--text-strong) !important;
    border-color: var(--surface-border) !important;
}
:root[data-theme="dark"] .button.is-white:hover,
:root[data-theme="dark"] .button.is-light:hover {
    background-color: var(--surface-hover) !important;
}

/* .is-link/.is-info z .is-outlined celowo nie dostaja koloru z bloku a11y na gorze pliku
   (patrz komentarz przy :not(.is-outlined) wyzej - maja miec przezroczyste tlo i kolorowy
   obrys/tekst z Bulmy). Domyslny niebieski Bulmy (#485fc7 dla is-link, #3e8ed0 dla is-info)
   na bardzo ciemnym tle strony ma kontrast ok. 3.2:1 (is-link) - ponizej wymaganych 4.5:1
   i w praktyce nieczytelny/"niewidoczny". Uzywamy tego samego jasnego niebieskiego, co juz
   sluzy jako kolor tekstu na ciemnym tle gdzie indziej (linki, breadcrumb, focus outline). */
:root[data-theme="dark"] .button.is-link.is-outlined,
:root[data-theme="dark"] .button.is-info.is-outlined {
    color: var(--a11y-info-ink) !important;
    border-color: var(--a11y-info-ink) !important;
}
:root[data-theme="dark"] .button.is-link.is-outlined:hover,
:root[data-theme="dark"] .button.is-link.is-outlined:focus,
:root[data-theme="dark"] .button.is-info.is-outlined:hover,
:root[data-theme="dark"] .button.is-info.is-outlined:focus {
    background-color: var(--a11y-info-ink) !important;
    border-color: var(--a11y-info-ink) !important;
    color: var(--surface-bg) !important;
}
:root[data-theme="dark"] .button[disabled] {
    background-color: var(--surface-alt) !important;
    border-color: var(--surface-border) !important;
    color: var(--a11y-grey-light-ink) !important;
}

/* Formularze - inputy/textarea/select, natywne i Bulmowe.
   Obwodka (border-color) leci przez --control-border w OBU motywach na raz (patrz
   definicja zmiennej w :root) - domyslny kolor Bulmy (jasny) i --surface-border
   (ciemny, lokalne style w audit_landing/training_landing) mialy tylko ok. 1.5:1
   kontrastu z tlem pola, ponizej wymaganych WCAG 1.4.11 3:1 dla granicy komponentu. */
.input, .textarea, .select select,
input[type="text"], input[type="email"], input[type="password"], input[type="tel"],
input[type="number"], input[type="url"], input[type="search"], input[type="date"],
textarea, select {
    border-color: var(--control-border) !important;
}

:root[data-theme="dark"] .input,
:root[data-theme="dark"] .textarea,
:root[data-theme="dark"] .select select,
:root[data-theme="dark"] input[type="text"],
:root[data-theme="dark"] input[type="email"],
:root[data-theme="dark"] input[type="password"],
:root[data-theme="dark"] input[type="tel"],
:root[data-theme="dark"] input[type="number"],
:root[data-theme="dark"] input[type="url"],
:root[data-theme="dark"] input[type="search"],
:root[data-theme="dark"] input[type="date"],
:root[data-theme="dark"] textarea,
:root[data-theme="dark"] select {
    background-color: var(--surface-card) !important;
    color: var(--text-strong) !important;
}
:root[data-theme="dark"] .input::placeholder,
:root[data-theme="dark"] .textarea::placeholder,
:root[data-theme="dark"] input::placeholder,
:root[data-theme="dark"] textarea::placeholder {
    color: var(--a11y-grey-light-ink) !important;
    opacity: 1;
}
:root[data-theme="dark"] .input[disabled],
:root[data-theme="dark"] .textarea[disabled],
:root[data-theme="dark"] .select select[disabled],
:root[data-theme="dark"] input[disabled],
:root[data-theme="dark"] .input.is-static {
    background-color: var(--surface-alt) !important;
    color: var(--a11y-grey-light-ink) !important;
}
:root[data-theme="dark"] .file-cta,
:root[data-theme="dark"] .file-name {
    background-color: var(--surface-alt) !important;
    border-color: var(--surface-border) !important;
    color: var(--text-body) !important;
}
:root[data-theme="dark"] .checkbox,
:root[data-theme="dark"] .radio,
:root[data-theme="dark"] .label {
    color: var(--text-strong) !important;
}
:root[data-theme="dark"] .help:not(.is-danger):not(.is-success) {
    color: var(--a11y-grey-light-ink) !important;
}

/* Utility klasy Bulmy dla jasnych tel/ciemnego tekstu */
:root[data-theme="dark"] .has-background-white,
:root[data-theme="dark"] .has-background-white-bis,
:root[data-theme="dark"] .has-background-white-ter,
:root[data-theme="dark"] .has-background-light {
    background-color: var(--surface-alt) !important;
}
:root[data-theme="dark"] .has-text-dark,
:root[data-theme="dark"] .has-text-black,
:root[data-theme="dark"] .has-text-black-bis,
:root[data-theme="dark"] .has-text-black-ter {
    color: var(--text-strong) !important;
}
:root[data-theme="dark"] hr {
    background-color: var(--surface-border) !important;
}

/* Tabele - m.in. tabela cookies w Polityce Prywatnosci, tabele w tresci bloga/FAQ */
:root[data-theme="dark"] .table,
:root[data-theme="dark"] .content table {
    background-color: var(--surface-card) !important;
    color: var(--text-body) !important;
}
:root[data-theme="dark"] .table th,
:root[data-theme="dark"] .content table th {
    color: var(--text-strong) !important;
    border-color: var(--surface-border) !important;
}
:root[data-theme="dark"] .table td,
:root[data-theme="dark"] .content table td {
    border-color: var(--surface-border) !important;
}
:root[data-theme="dark"] .table.is-striped tbody tr:not(.is-selected):nth-child(even) {
    background-color: var(--surface-alt) !important;
}
:root[data-theme="dark"] .table tr:hover {
    background-color: var(--surface-alt) !important;
}

/* Paginacja, breadcrumb */
:root[data-theme="dark"] .pagination-link,
:root[data-theme="dark"] .pagination-previous,
:root[data-theme="dark"] .pagination-next,
:root[data-theme="dark"] .pagination-ellipsis {
    background-color: var(--surface-card) !important;
    border-color: var(--surface-border) !important;
    color: var(--text-body) !important;
}
:root[data-theme="dark"] .breadcrumb a { color: var(--a11y-info-ink) !important; }

/* Najczesciej powtarzane inline'owe kolory neutralne w szablonach (obramowania/rozdzielacze) -
   patrz uzasadnienie w komentarzu do plikow ponizej: to zawsze byly linie/obwodki, nigdy
   akcentowe/kolorowe wypelnienia, wiec bezpiecznie zmieniamy tylko border-color. */
:root[data-theme="dark"] [style*="#e2e8f0"],
:root[data-theme="dark"] [style*="#eaeaea"],
:root[data-theme="dark"] [style*="#eee"],
:root[data-theme="dark"] [style*="#dbdbdb"],
:root[data-theme="dark"] [style*="#ddd"],
:root[data-theme="dark"] [style*="#cbd5e1"],
:root[data-theme="dark"] [style*="#f1f5f9"],
:root[data-theme="dark"] [style*="#f0f0f0"],
:root[data-theme="dark"] [style*="#f5f5f5"] {
    border-color: var(--surface-border) !important;
}
/* ...i analogicznie inline'owe jasne tla (karty/panele na stronach generatorow, dashboardzie) */
:root[data-theme="dark"] [style*="background-color: #fff"],
:root[data-theme="dark"] [style*="background: #fff"],
:root[data-theme="dark"] [style*="#f8fafc"],
:root[data-theme="dark"] [style*="#fcfcfc"],
:root[data-theme="dark"] [style*="#fbfbfe"] {
    background-color: var(--surface-alt) !important;
}
:root[data-theme="dark"] img[style*="#f5f5f5"] {
    background-color: var(--surface-alt) !important;
}
:root[data-theme="dark"] [style*="linear-gradient(135deg, #ffffff"] {
    background: var(--surface-card) !important;
}

/* Klasy lokalne z <style> w konkretnych szablonach (generatory narzedzi AI, dashboard, blog) -
   powtarzaja sie na wielu stronach pod tymi samymi nazwami, wiec jedna regula tutaj
   pokrywa wszystkie miejsca uzycia. */
:root[data-theme="dark"] .custom-input,
:root[data-theme="dark"] .format-pill {
    background-color: var(--surface-alt) !important;
    border-color: var(--surface-border) !important;
    color: var(--text-body) !important;
}
:root[data-theme="dark"] .custom-input:focus {
    background-color: var(--surface-card) !important;
}
:root[data-theme="dark"] .format-pill .format-pill-name { color: var(--text-strong) !important; }
:root[data-theme="dark"] .format-pill .format-pill-icon,
:root[data-theme="dark"] .format-pill .format-pill-hint { color: var(--a11y-grey-light-ink) !important; }

:root[data-theme="dark"] .tool-card,
:root[data-theme="dark"] .stat-card,
:root[data-theme="dark"] .history-card {
    background-color: var(--surface-card) !important;
    border-color: var(--surface-border) !important;
}

:root[data-theme="dark"] .article-body { color: var(--text-body) !important; }
:root[data-theme="dark"] .article-body blockquote { background-color: var(--surface-alt) !important; }
:root[data-theme="dark"] .article-body th,
:root[data-theme="dark"] .article-body td { border-color: var(--surface-border) !important; }
