/* Etykieta GARAN. Kroj narzuca zalacznik II przez sam plik SVG Komisji
   (font-family: Inter). Inter jest na licencji SIL OFL, wiec jedzie w paczce -
   bez niego przegladarka podstawia kroj zastepczy, co jest widoczna roznica
   wobec wzoru. Font wchodzi RAZ na sklep, dlatego SVG idzie w tresc strony,
   a nie przez <img>: obrazek zewnetrzny nie widzi @font-face strony. */
@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('../fonts/Inter-Regular.woff2') format('woff2');
}

@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 800;
    font-display: swap;
    src: url('../fonts/Inter-ExtraBold.woff2') format('woff2');
}

/* Urzedowy SVG prosi najpierw o rodzine "Inter-ExtraBold", a dopiero potem o "Inter"
   (font-family: Inter-ExtraBold, Inter). Motywy sklepowe (np. Classic) czesto
   deklaruja wlasna rodzine "Inter" w kilku wagach (np. 700) - bez wlasnej deklaracji
   pod pierwsza nazwa dopasowanie schodzi do wagi motywu zamiast naszej wagi 800, a
   wyglad cyfry zalezy wtedy od tego, co akurat zaladowal motyw. Deklaracja pod
   dokladna pierwsza nazwa z SVG usuwa te zaleznosc od motywu bezwarunkowo. */
@font-face {
    font-family: 'Inter-ExtraBold';
    font-style: normal;
    font-weight: 800;
    font-display: swap;
    src: url('../fonts/Inter-ExtraBold.woff2') format('woff2');
}

/* Regula wspolna. Dla formy nested nizsze `min-width: 180px` i tak wygrywa z tym
   `max-width` - przy sprzecznosci CSS przyznaje pierwszenstwo min-width (CSS 2.1 10.4),
   niezaleznie od kolejnosci i specyficznosci. Zostawione, bo dla formy pelnej jest
   wlasciwe, a dla nested nieszkodliwe. */
.pl-gl-label svg {
    max-width: 100%;
    height: auto;
}

.pl-gl-label__link {
    display: inline-block;
    text-decoration: none;
}

.pl-gl-label--product {
    margin: 1.5rem 0;
    max-width: 340px;
}

.pl-gl-label--product svg {
    /* Sama forma full dzis dziala (340x358 px) tylko dlatego, ze nie jest
       owinieta w <a> - block-level replaced element bez atrybutow width/height
       na SVG wypelnia wtedy szerokosc kontenera. To przypadek kaskady, nie
       projekt: forma nested ma identyczna regule width:auto + height:auto i
       renderuje sie 0x0, bo jest owinieta w <a> (inline). Jawny width usuwa
       ta zaleznosc od tego, czy ktos kiedys owinie forme full w link. */
    /* Forma pelna ZOSTAJE przy max-width: 100%, w odroznieniu od nested wyzej.
       340 px to niemal cala szerokosc telefonu, wiec zmniejszenie do kontenera jest
       tu proporcjonalne i etykieta zostaje czytelna - to nie ta sama sytuacja, co
       pasek 180 px wtloczony w kolumne 18 px (ruling 102, drobne D2 z przegladu). */
    width: 340px;
    max-width: 100%;
    height: auto;
}

.pl-gl-label__notice {
    margin-top: .5rem;
    font-size: .875rem;
}


.pl-gl-label--cart,
.pl-gl-label--listing,
.pl-gl-label--checkout,
.pl-gl-label--checkout-top,
.pl-gl-label--cart-footer,
.pl-gl-label--checkout-footer,
.pl-gl-label--cart-line,
.pl-gl-label--checkout-line,
.pl-gl-label--product-price {
    margin: .5rem 0 0;
}

/* Miejsca przy wierszu trafiaja zwykle do kontenera FLEX samego wiersza (TheCheckout:
   `.product-line-body`, `display: inline-flex; flex-wrap: wrap`). Bez tych dwoch
   wlasciwosci etykieta jest kolejnym elementem TEJ SAMEJ linii, czyli laduje z prawej,
   za ikona kosza, i przy waskim oknie wychodzi poza ekran - zmierzone na TheCheckout.
   `flex-basis: 100%` spycha ja do wlasnej linii POD produktem (dziala, bo kontener ma
   `flex-wrap: wrap`), a `align-self` odbiera jej rozciaganie na cala wysokosc wiersza
   (opakowanie paska 28 px mierzylo bez tego 121 px i zostawialo pusta plame).
   Obie wlasciwosci dzialaja WYLACZNIE w kontenerze flex/grid - w zwyklym ukladzie sa
   bez skutku, wiec nie zmieniaja niczego w pozostalych miejscach ekspozycji. */
.pl-gl-label--cart-line,
.pl-gl-label--checkout-line {
    align-self: flex-start;
    flex-basis: 100%;
}

/* Karta produktu, forma nested (1.0.4). Ten sam pasek 180 px co w koszyku i na listingu -
   `min-width`, nie `max-width`, bo pasek ma WYSTAWAC z za ciasnego kontenera, a nie
   po cichu zniknac (ruling 111). */
.pl-gl-label--cart svg,
.pl-gl-label--listing svg,
.pl-gl-label--checkout svg,
.pl-gl-label--checkout-top svg,
.pl-gl-label--cart-footer svg,
.pl-gl-label--checkout-footer svg,
.pl-gl-label--cart-line svg,
.pl-gl-label--checkout-line svg,
.pl-gl-label--product-price svg {
    /* Urzedowe SVG nie ma atrybutow width/height, tylko viewBox. Przy width:auto
       RAZEM z height:auto przegladarka rozwiazuje jego rozmiar do zera - etykieta
       zostaje w drzewie dokumentu, ale znika z ekranu i nie da sie w nia kliknac.
       Jawny width to naprawia. Atrybutow do SVG dopisac NIE WOLNO - urzedowa grafika
       zostaje bajt w bajt (G1).

       `min-width` zamiast `max-width: 100%` to wniosek z rulingu 102. Tamten zapis
       kazal paskowi ZMNIEJSZYC sie do kontenera - i w kolumnie 18 px na Classicu
       urzedowe oznakowanie schodzilo do 2,8 px wysokosci: bylo w DOM, klikalne,
       z poprawnym aria-label i nieczytelne. Wytyczne praktyczne Komisji 3.3.2 zadaja
       "legible at default display size", wiec ciche zmniejszanie jest zlamaniem wymogu,
       a nie eleganckim ustepstwem. Przy min-width pasek w za ciasnym kontenerze
       WYSTAJE - awaria, ktora widac przy pierwszym spojrzeniu i da sie zglosic,
       zamiast takiej, ktora przechodzi przeglad i komplet sprawdzianow.

       Zmierzone miejsca (getBoundingClientRect, 2026-09-10): kolumna pod cena
       jednostkowa ma 233 px na Classicu przy 1440 px, 230 px przy 375 px
       i 536 px na Hummingbirdzie - wszedzie z zapasem ponad 180 px. */
    width: 180px;
    min-width: 180px;
    height: auto;
}

/* Modal z pelna etykieta (1.0.4). Element <dialog> jest przenoszony do <body> przez
   JS, wiec te reguly nie konkuruja z ukladem motywu. */
.pl-gl-modal {
    border: 0;
    border-radius: 4px;
    /* Gora wieksza niz pozostale trzy boki: `.pl-gl-modal__close` stoi
       `position: absolute` (kontenerem jest sam <dialog> - w stanie modalnym
       UA-stylesheet daje mu `position: fixed`, wiec jest wlasnym blokiem
       zawierajacym bez potrzeby jawnego `position: relative` tutaj) i zajmuje
       w przyblizeniu gorne 34px w prawym rogu (top: .25rem + wysokosc
       przycisku). Bez dodatkowego zapasu u gory tresc (SVG na pelna
       szerokosc, patrz nizej) wchodzila w te sama komorke i przycisk
       zachodzil na urzedowa grafike - zmierzone w rundzie poprawkowej 2:
       `.pl-gl-label--modal svg` i `.pl-gl-modal__close` mialy zachodzace na
       siebie prostokaty. Lewy/prawy/dolny bok zostaja 1.5rem - to jest
       wymiar, ktory liczy sie do `520 - 2*24px = ~472px` tresci w komentarzu
       przy `width` nizej; podbicie samej gory nie zmienia tamtego rachunku. */
    padding: 3rem 1.5rem 1.5rem;
    background: #fff;
    box-shadow: 0 4px 24px rgba(0, 0, 0, .25);
    /* Szerokosc stoi TUTAJ, na kontenerze, nie tylko na SVG nizej - to jest
       naprawa rulingu 110 (runda poprawkowa 1). Arkusz przegladarki daje
       <dialog> domyslnie `width: fit-content`, a ZADEN kontener posredni
       (.pl-gl-modal__body budowany w JS, .pl-gl-label--modal ponizej) nie
       mial wlasnej szerokosci - caly lancuch boxow byl wiec na
       shrink-to-fit i mierzyl TRESC zamiast MIEJSCA. SVG deklarowal 520px,
       ale renderowal sie ~309px, bo box, ktory go opakowywal, zacisnal sie
       do jego rzeczywistej (przeskalowanej) szerokosci zanim SVG zdazyl
       zadac swoich 520px - identyczny mechanizm jak w rulingu 102 (patrz
       komentarz przy .pl-gl-label--listing svg wyzej), tylko na innym
       elemencie. Std. `min()` zamiast `width + max-width`, bo <dialog> nie
       przyjmuje dwoch osobnych deklaracji tak przewidywalnie jak zwykly
       blokowy element.

       UWAGA (runda poprawkowa 2, ta sama wada przeniesiona z pionu na
       poziom): motyw Hummingbird ustawia globalny reset
       `*, :after, :before { box-sizing: border-box }` (assets/css/theme.css).
       Pod `border-box` powyzsze `width` to szerokosc CALEGO pudelka RAZEM
       Z `padding: 1.5rem` (24px z kazdej strony) - na TRESC zostaje
       `520 - 2*24 = ~472px`, nie 520px. SVG nizej ma teraz `width: 100%`
       wlasnie dlatego - rozwiazuje sie wobec tej JUZ OKRESLONEJ szerokosci
       kontenera (bloku zawierajacego), zamiast powtarzac sztywne 520px,
       ktore zadalyby wiecej miejsca niz kontener naprawde ma do
       zaoferowania po odjeciu paddingu. Gdyby SVG mial wlasny sztywny
       `width`, wieksza z dwoch liczb (jego wlasna vs. dostepna tresc)
       wygrywalaby przez przepelnienie - dokladnie ten sam mechanizm
       "deklarowany rozmiar kontra faktycznie widoczny", tylko os pozioma
       zamiast pionowej.

       `max-height` i `overflow-y` obok: SVG w pelnym rozmiarze (520x548 px
       plus padding) nie miesci sie w niskim oknie (telefon poziomo, ~375 px
       wysokosci) - bez tego tresc wychodzila poza dolna krawedz i nie dalo
       sie jej przewinac (Minor z przegladu, podniesiony w rundzie 1, bo po
       tej naprawie etykieta jest WIEKSZA, wiec ryzyko obciecia rosnie).
       `overflow-x: hidden` obok NIE jest kosmetyka: skoro SVG jest teraz
       plynny wobec dostepnej tresci, pozioma os nie powinna nigdy
       przewijac sie sama - jawne `hidden` (zamiast domyslnego `visible`,
       ktore specyfikacja CSS Overflow i tak zamienilaby cicho na `auto` w
       obecnosci `overflow-y: auto`) czyni to zamierzonym, a nie
       przypadkowym skutkiem ubocznym jednej deklaracji `overflow-y`.

       UWAGA (naprawa przegladu koncowego 1.0.4-modal, dodatek wlasciciela 1): `82vw`
       dawalo na 375 px TRESCI 259,5 px (307,5 px kontenera minus 2*24px paddingu pod
       border-box) - MNIEJ niz 340 px, ktore ta sama etykieta miala na karcie w 1.0.3.
       Przy formie 'nested' modal jest JEDYNYM miejscem pelnej etykiety na telefonie,
       wiec to ta liczba, nie 82vw sama w sobie, odpowiada za wymog 3.3.2 "legible at
       default display size" - i spadala o cwierc wobec stanu poprzedniego. `calc(100vw
       - 16px)` zamiast czystego mnoznika `vw` odejmuje STALY, maly zapas (8px z kazdej
       strony poza samym dialogiem), zamiast procentowego, ktory przy waskim oknie zjada
       nieproporcjonalnie duzo miejsca na rzecz paddingu.

       PULAPKA znaleziona przy pomiarze (2026-09-15, Chrome, <dialog> w stanie modalnym):
       sam `width` NIE WYSTARCZA. Arkusz przegladarki (nie ten plik) daje `dialog:modal`
       WLASNE `max-width: calc(100% - 38px)`, a wlasciwosc `max-width` ZAWSZE ma
       pierwszenstwo nad `width` w obliczeniu szerokosci, niezaleznie od pochodzenia
       reguly - wiec sam `width` powyzej nigdy nie przebije UA-owego `max-width`. Ale
       arkusz przegladarki jest pochodzenia INNEGO (user-agent, nie autorskie) i z
       definicji przegrywa z KAZDA regula autorska tej samej wlasciwosci - wiec wlasny
       `max-width`, dopisany tutaj, przebija UA-owy limit, a jego BRAK zostawia go w mocy.
       Bez wlasnego
       `max-width` obok `width` powyzsza zmiana byla cicho obcinana z powrotem do ~337 px
       kontenera (289 px tresci) - GORZEJ niz cel tej naprawy, a sprawdzenie PHP tego nie
       lapie (patrz kontekst przegladu: geometria widoczna wylacznie w przegladarce).
       Std. `max-width` z TA SAMA wartoscia co `width` - `min()` juz ustala gorny pulap,
       wiec `max-width` tu nie zaciska nic dodatkowego, tylko odbiera to prawo arkuszowi
       przegladarki.

       Zmierzone w przegladarce (2026-09-15, getBoundingClientRect, Hummingbird/
       border-box - gorszy przypadek, viewport 375x812, po dodaniu `max-width`):
       kontener 359 px, TRESC (po odjeciu 2*24px paddingu) 311 px - wyraznie blizej
       340 px niz 259,5 px, bez przewijania w poziomie (scrollWidth === clientWidth) i
       bez kolizji z .pl-gl-modal__close (padding-top 3rem tej zmiany nie dotyczy). */
    width: min(520px, calc(100vw - 16px));
    max-width: min(520px, calc(100vw - 16px));
    max-height: min(90vh, 720px);
    overflow-y: auto;
    overflow-x: hidden;
}

.pl-gl-modal::backdrop {
    background: rgba(0, 0, 0, .5);
}

.pl-gl-modal__close {
    position: absolute;
    top: .25rem;
    right: .5rem;
    border: 0;
    background: transparent;
    font-size: 1.75rem;
    line-height: 1;
    cursor: pointer;
}

/* Pelna etykieta w oknie. Docelowo ok. 520 px zamiast 340 px z bloku zapewnien -
   w oknie jest miejsce, a wytyczne 3.3.2 zadaja czytelnosci w domyslnym rozmiarze
   wyswietlania.

   `width: 100%` zamiast sztywnych px (runda poprawkowa 2) - SVG rozwiazuje sie
   teraz wobec szerokosci TRESCI .pl-gl-modal (patrz duzy komentarz przy .pl-gl-modal
   wyzej: kontener ma `width: min(520px, 82vw)` w `box-sizing: border-box`, wiec po
   odjeciu `padding: 1.5rem` z kazdej strony na trescia zostaje ok. 472px, nie 520px).
   Sztywne `width: 520px` na samym SVG zadalaby wiecej miejsca, niz kontener ma do
   zaoferowania, i albo przycinalaby sie, albo wymuszala przewijanie w poziomie -
   `100%` nie zgaduje wlasnej liczby, tylko wypelnia dokladnie to, co dostal blok
   zawierajacy (a ten juz ma jawna, skalowana szerokosc - shrink-to-fit z rundy 1
   tu nie wraca, bo .pl-gl-label--modal i .pl-gl-modal__body (z JS) same nie maja
   wlasnej szerokosci i przejmuja szerokosc TRESCI .pl-gl-modal). */
.pl-gl-label--modal svg {
    width: 100%;
    height: auto;
}

.pl-gl-label--modal {
    margin: 0;
}

/* ------------------------------------------------------------------------------------
   Widocznosc etykiety na listingu (1.0.6). Tryb 'always' NIE doklada zadnej klasy, wiec
   dotychczasowe zachowanie modulu zostaje bit w bit takie, jakie bylo - caly ten blok
   dotyczy wylacznie kafelkow, ktore dostaly `pl-gl-label--hover`.
   ------------------------------------------------------------------------------------ */

/*
 * Cale chowanie siedzi w `@media (hover: hover)`. Na ekranie dotykowym najechania nie
 * ma, wiec regula ponizej sie nie stosuje i etykieta jest tam widoczna na stale,
 * niezaleznie od ustawienia. To nie jest uprzejmosc wobec telefonow, tylko warunek
 * sensownosci calego trybu: bez tego na telefonie urzedowe oznakowanie znikneloby
 * z listingu bez zadnego sposobu, zeby je pokazac.
 */
@media (hover: hover) and (pointer: fine) {
    /*
     * Zakres ograniczony do `[data-id-product]`, czyli do kafelka produktu. To atrybut
     * RDZENIA, nie klasa motywu: stawiaja go oba motywy w paczce (classic, hummingbird)
     * i opiera sie na nim wlasny JS PrestaShopa - zmiana wariantu, szybki podglad,
     * dodanie do koszyka. Motyw, ktory by go nie mial, po prostu NIE zlapie tej reguly
     * i etykieta zostanie widoczna na stale. Tak ma byc: przy niepewnosci urzedowe
     * oznakowanie ma byc widoczne, a nie po cichu schowane (ta sama zasada co przy
     * min-width paska, ruling 111).
     *
     * `opacity: 0`, a nie `visibility: hidden` ani `display: none`, i to z dwoch
     * osobnych powodow:
     *
     * 1. `display: none` odbiera etykiecie miejsce w ukladzie. Kafelek rosnie dopiero
     *    pod kursorem, cala siatka produktow przeskakuje, a kursor potrafi wypasc poza
     *    kafelek, ktory sam sie przesunal - etykieta miga wtedy w kolko. `opacity`
     *    miejsca nie rusza, wiec siatka stoi.
     * 2. `visibility: hidden` wyjmuje element z kolejnosci tabulatora. Forma nested JEST
     *    linkiem (wymog "shall" z wytycznych 3.3.1), wiec musi dac sie zogniskowac -
     *    a przy `visibility: hidden` do `:focus-within` nizej nie doszloby NIGDY:
     *    element nie do zogniskowania nie wywola ogniskowania, ktore mialoby go pokazac.
     *
     * `pointer-events: none` w parze z `opacity: 0`: element przezroczysty dalej lapie
     * klikniecia. Bez tego klient trafialby w niewidoczny link, celujac w puste miejsce
     * pod cena. Na najechanym kafelku wraca `auto`, wiec w widocznym stanie klika sie
     * normalnie.
     */
    [data-id-product] .pl-gl-label--hover {
        opacity: 0;
        pointer-events: none;
        transition: opacity .12s ease-in-out;
    }

    /*
     * `:focus-within` obok `:hover`, bo do linku wchodzi sie takze tabulatorem. Bez tego
     * osoba poruszajaca sie klawiatura zogniskowalaby link, ktorego nie widac - i to
     * wlasnie urzedowe oznakowanie byloby tym, czego nie widac.
     */
    [data-id-product]:hover .pl-gl-label--hover,
    [data-id-product]:focus-within .pl-gl-label--hover {
        opacity: 1;
        pointer-events: auto;
    }
}
