/* ============================================================
   KARTA PRODUKTU - nowy wyglad
   Ladowane tylko na is_product() (patrz bm-newlayout.php).

   INACZEJ NIZ SKLEP: tresc sklepu to jeden shortcode, wiec dalo sie ja
   przerenderowac wlasnym szablonem. Tutaj 104 elementy sa zbudowane
   w Oxygenie (szablon 408 "Produkt"), a w nie wpiete sa komponenty
   WooCommerce (formularz wariantow, koszyk, zakladki, galeria),
   17 blokow kodu i probnik kolorow pf-plugin. Odtworzenie tego wlasnym
   szablonem oznaczaloby przepisanie mechaniki sprzedazy.

   Dlatego tu PRZESTYLOWUJEMY NA MIEJSCU: zostawiamy uklad i CSS Oxygena,
   nakladamy na wierzch palete, typografie i przyciski z makiety.
   Zakres zawezony do body.single-product, zeby nie promieniowac dalej.
   Autor: claude, 2026-08-19.
   ============================================================ */

body.woocommerce.single-product {
    --navy:       #0B2240;
    --navy-2:     #12325C;
    --red:        #DB0632;
    --ink:        #171A1E;
    --muted:      #6C7079;
    --paper:      #FCFAF6;
    --cream:      #F5F1E9;
    --sand:       #EAE3D6;
    --line:       rgba(11, 34, 64, .13);
    --line-soft:  rgba(11, 34, 64, .07);
    --shadow-m:   0 14px 40px -18px rgba(11, 34, 64, .22);
    --r:          18px;
    --ease:       cubic-bezier(.22, 1, .36, 1);
    --brush:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 300 40' preserveAspectRatio='none'%3E%3Cpath fill='white' d='M0 0 H170 Q184 4 168 8 Q186 13 170 17 Q188 21 169 25 Q185 29 167 33 Q182 36 172 40 H0 Z'/%3E%3Cellipse fill='white' cx='191' cy='6' rx='4.2' ry='2.4'/%3E%3Cellipse fill='white' cx='195' cy='19' rx='2.8' ry='1.7'/%3E%3Cellipse fill='white' cx='190' cy='31' rx='3.4' ry='2.1'/%3E%3Cellipse fill='white' cx='197.5' cy='26' rx='1.6' ry='1.1'/%3E%3Cellipse fill='white' cx='196' cy='11' rx='1.4' ry='1'/%3E%3C/svg%3E");
    --serif:      "Playfair Display", Georgia, "Times New Roman", serif;
    --sans:       "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

/* ---------- 1. Nazwa produktu ------------------------------
   W makiecie naglowki sekcji sa szeryfowe (Playfair) - karta produktu
   dostaje ten sam charakter. */
body.woocommerce.single-product .product_title {
    font-family: var(--serif);
    font-weight: 500;
    font-size: clamp(1.7rem, 3vw, 2.5rem);
    line-height: 1.14;
    letter-spacing: -.01em;
    color: var(--navy);
    text-wrap: balance;
}

/* ---------- 2. Cena ---------------------------------------- */
body.woocommerce.single-product .woocommerce-Price-amount,
body.woocommerce.single-product p.price,
body.woocommerce.single-product .price .woocommerce-Price-amount {
    font-family: var(--sans);
    font-weight: 600;
    color: var(--navy);
    font-variant-numeric: tabular-nums;
}

body.woocommerce.single-product p.price {
    font-size: 1.5rem;
}

body.woocommerce.single-product .price del .woocommerce-Price-amount {
    color: var(--muted);
    font-weight: 400;
}

/* ---------- 3. Krotki opis --------------------------------- */
body.woocommerce.single-product .woocommerce-product-details__short-description {
    font-family: var(--sans);
    font-size: .95rem;
    font-weight: 300;
    line-height: 1.7;
    color: var(--muted);
    max-width: 60ch;
}

/* ---------- 4. Formularz wariantow ------------------------- */
body.woocommerce.single-product .variations select {
    font-family: var(--sans);
    font-size: .88rem;
    color: var(--ink);
    background-color: var(--paper);
    border: 1px solid var(--line);
    border-radius: 999px;
    padding: 12px 18px;
    -webkit-appearance: none;
    appearance: none;
}

body.woocommerce.single-product .variations select:focus {
    outline: 0;
    border-color: var(--navy-2);
    background-color: #fff;
}

body.woocommerce.single-product .variations th,
body.woocommerce.single-product .variations label {
    font-family: var(--sans);
    font-size: .68rem;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--navy);
}

body.woocommerce.single-product .reset_variations {
    font-family: var(--sans);
    font-size: .68rem;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--muted);
    text-decoration: none;
}

body.woocommerce.single-product .reset_variations:hover { color: var(--red); }

/* ---------- 5. Ilosc --------------------------------------- */
body.woocommerce.single-product .quantity input[type="number"],
body.woocommerce.single-product .quantity .qty {
    font-family: var(--sans);
    font-size: .95rem;
    font-variant-numeric: tabular-nums;
    color: var(--ink);
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: 999px;
    padding: 12px 10px;
    text-align: center;
}

/* ---------- 6. Przycisk "Dodaj do koszyka" -----------------
   Wzorzec .bmx-btn z makiety, razem z efektem pociagniecia pedzla. */
body.woocommerce.single-product .single_add_to_cart_button {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 16px 34px;
    border: 1px solid var(--red);
    border-radius: 999px;
    background: var(--red);
    color: #fff;
    font-family: var(--sans);
    font-size: .735rem;
    font-weight: 600;
    letter-spacing: .15em;
    text-transform: uppercase;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
    transition: color .45s var(--ease), border-color .45s var(--ease), transform .45s var(--ease);
}

/* FALLBACK dla przegladarek bez masek - farba od dolu. */
body.woocommerce.single-product .single_add_to_cart_button::after {
    content: "";
    position: absolute;
    left: -6%;
    right: -6%;
    bottom: -2px;
    height: 210%;
    z-index: -1;
    background: var(--navy);
    border-radius: 48% 52% 0 0 / 16% 20% 0 0;
    transform: translateY(102%) rotate(-2deg);
    transition: transform .95s cubic-bezier(.62, .02, .3, 1),
                border-radius .95s cubic-bezier(.62, .02, .3, 1);
}

body.woocommerce.single-product .single_add_to_cart_button:hover,
body.woocommerce.single-product .single_add_to_cart_button:focus-visible {
    border-color: var(--navy);
    color: #fff;
    transform: translateY(-2px);
}

body.woocommerce.single-product .single_add_to_cart_button:hover::after,
body.woocommerce.single-product .single_add_to_cart_button:focus-visible::after {
    transform: translateY(0) rotate(0deg);
    border-radius: 0;
}

/* WLASCIWY EFEKT - maska pedzla jadaca z prawej na lewa. */
@supports ((-webkit-mask-image: url('')) or (mask-image: url(''))) {

    body.woocommerce.single-product .single_add_to_cart_button::after {
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        height: auto;
        border-radius: 0;
        transform: none;
        background:
            repeating-linear-gradient(112deg, rgba(255, 255, 255, .022) 0 2px, rgba(255, 255, 255, 0) 2px 11px),
            var(--navy);
        -webkit-mask-image: var(--brush);
                mask-image: var(--brush);
        -webkit-mask-size: 300% 100%;
                mask-size: 300% 100%;
        -webkit-mask-repeat: no-repeat;
                mask-repeat: no-repeat;
        -webkit-mask-position: 100% center;
                mask-position: 100% center;
        transition: -webkit-mask-position 1.05s cubic-bezier(.42, .03, .25, 1),
                            mask-position 1.05s cubic-bezier(.42, .03, .25, 1);
    }

    body.woocommerce.single-product .single_add_to_cart_button:hover::after,
    body.woocommerce.single-product .single_add_to_cart_button:focus-visible::after {
        transform: none;
        border-radius: 0;
        -webkit-mask-position: 0% center;
                mask-position: 0% center;
    }
}

/* ---------- 7. Galeria ------------------------------------- */
body.woocommerce.single-product .woocommerce-product-gallery__image {
    background: var(--cream);
    border-radius: var(--r);
    overflow: hidden;
}

body.woocommerce.single-product .woocommerce-product-gallery__image img {
    mix-blend-mode: multiply;
}

/* ---------- 8. Zakladki ------------------------------------ */
body.woocommerce.single-product .woocommerce-tabs ul.wc-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin: 0 0 24px;
    padding: 0 0 2px;
    border-bottom: 1px solid var(--line-soft);
    list-style: none;
}

body.woocommerce.single-product .woocommerce-tabs ul.wc-tabs li {
    margin: 0;
    padding: 0;
    background: transparent;
    border: 0;
    border-radius: 0;
}

body.woocommerce.single-product .woocommerce-tabs ul.wc-tabs li::before,
body.woocommerce.single-product .woocommerce-tabs ul.wc-tabs li::after {
    display: none;
}

body.woocommerce.single-product .woocommerce-tabs ul.wc-tabs li a {
    display: inline-block;
    padding: 12px 18px;
    font-family: var(--sans);
    font-size: .7rem;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--muted);
    text-decoration: none;
    border-bottom: 2px solid transparent;
    transition: color .35s var(--ease), border-color .35s var(--ease);
}

body.woocommerce.single-product .woocommerce-tabs ul.wc-tabs li a:hover {
    color: var(--navy);
}

body.woocommerce.single-product .woocommerce-tabs ul.wc-tabs li.active a {
    color: var(--navy);
    border-bottom-color: var(--red);
}

body.woocommerce.single-product .woocommerce-Tabs-panel {
    font-family: var(--sans);
    font-size: .93rem;
    font-weight: 300;
    line-height: 1.75;
    color: var(--ink);
}

body.woocommerce.single-product .woocommerce-Tabs-panel h2 {
    font-family: var(--serif);
    font-weight: 500;
    color: var(--navy);
}

/* ---------- 9. Komunikaty WooCommerce ---------------------- */
body.woocommerce.single-product .woocommerce-message,
body.woocommerce.single-product .woocommerce-info,
body.woocommerce.single-product .woocommerce-error {
    font-family: var(--sans);
    font-size: .9rem;
    border-radius: var(--r);
    border-top-color: var(--red);
}

@media (prefers-reduced-motion: reduce) {
    body.woocommerce.single-product .single_add_to_cart_button::after { transition-duration: .001ms; }
}

/* ============================================================
   PODBICIE WAGI DLA PRZYCISKU KOSZYKA
   universal.css Oxygena ma selektor
     .woocommerce .oxy-woo-element div.product .single_add_to_cart_button
   o wadze (0,4,1) i laduje sie PO naszym arkuszu. Powyzsze reguly maja
   (0,3,1), wiec same by przegraly. Dokladamy 'div.product' - to daje
   (0,4,2) i przebija ich selektor bez uciekania sie do !important.
   ============================================================ */
body.woocommerce.single-product div.product .single_add_to_cart_button {
    border: 1px solid var(--red);
    border-radius: 999px;
    background: var(--red);
    color: #fff;
    font-family: var(--sans);
    font-size: .735rem;
    font-weight: 600;
    letter-spacing: .15em;
    text-transform: uppercase;
    padding: 16px 34px;
    position: relative;
    isolation: isolate;
    overflow: hidden;
}

body.woocommerce.single-product div.product .single_add_to_cart_button:hover,
body.woocommerce.single-product div.product .single_add_to_cart_button:focus-visible {
    background: var(--red);
    border-color: var(--navy);
    color: #fff;
    transform: translateY(-2px);
}

/* Nazwa produktu: '.woocommerce h1.product_title' ma (0,2,1) i laduje sie
   pozniej - remis rozstrzygalby na ich korzysc. 'h1' podnosi nas do (0,3,2). */
body.woocommerce.single-product h1.product_title {
    font-family: var(--serif);
    font-weight: 500;
    color: var(--navy);
}

/* ============================================================
   10. POWIAZANE PRODUKTY
   Znaczniki pochodza z bloku ACF (.related-acf) i NIE MAJA ZADNYCH STYLOW -
   sprawdzone: ani we wtyczkach, ani w CSS Oxygena, ani inline. Dlatego
   pozycje ukladaly sie jedna pod druga jak zwykle diwy.
   Budujemy z nich siatke kart wzorowana na .bmx-card z makiety.
   Pusty <a class="prod-link"> jest tu odpowiednikiem .bmx-card__lnk -
   rozciagamy go na cala karte jako nakladke klikalna.
   ============================================================ */
/* 3 kafelki w rzedzie - przy 4 byly za waskie na tekst, przy pelnej
   szerokosci opis nie wypelnial kafelka. */
body.woocommerce.single-product .choose-related {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: clamp(16px, 1.8vw, 26px);
    align-items: stretch;
}

@media (max-width: 900px) {
    body.woocommerce.single-product .choose-related { grid-template-columns: repeat(2, 1fr); gap: 14px; }
}

body.woocommerce.single-product .choosed-prod {
    position: relative;
    isolation: isolate;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: #fff;
    border: 1px solid var(--line-soft);
    border-radius: var(--r);
    transition: transform .55s var(--ease), box-shadow .55s var(--ease), border-color .55s var(--ease);
}

body.woocommerce.single-product .choosed-prod:hover {
    transform: translateY(-7px);
    box-shadow: var(--shadow-m);
    border-color: transparent;
}

/* Pusty link jako nakladka na cala karte. */
body.woocommerce.single-product .choosed-prod .prod-link {
    position: absolute;
    inset: 0;
    z-index: 3;
    text-indent: -9999px;
    overflow: hidden;
}

/* Kadr bez wewnetrznego marginesu - zdjecie ma go wypelnic, a nie wpasowac
   sie w srodek z zapasem. Nadmiar przycinamy (overflow:hidden). */
/* Kadr odrobine wyzszy niz kwadrat (1 : 1.05). Przy 3 kolumnach kafelek ma
   ok. 340 px, wiec daje to ~15 px dodatkowej wysokosci. Zdjecie zrodlowe jest
   wyzsze niz szersze (200x234), wiec wyzszy kadr = mniej przyciete i wieksza
   puszka. Ratio zamiast sztywnych pikseli, zeby skalowalo sie z kafelkiem. */
/* Wysokosc kadru podana wprost (200 px), na zyczenie klienta - zamiast
   proporcji. 'box-sizing: border-box' jest tu istotne: bez niego margines
   wewnetrzny doliczylby sie do 200 px i kadr mialby realnie ~256 px. */
body.woocommerce.single-product .choosed-image {
    box-sizing: border-box;
    width: 100%;
    height: 200px;
    display: block;
    padding: 8%;
    background: var(--cream);
    overflow: hidden;
}

/* Zdjecie ma natywnie tylko 200x234 px. Przy 'width:auto' renderowalo sie
   w tym rozmiarze i NIE ROSLO do kafelka - stad bylo kilkakrotnie za male.
   Makieta robi to inaczej: 100% + object-fit:contain, czyli obrazek wypelnia
   kadr, zachowujac proporcje. Kopiujemy ten wzorzec razem z cieniem. */
/* 'cover' wypelnial kadr, ale przycinal puszke u gory i u dolu. Wracamy na
   'contain' - cale zdjecie miesci sie w kadrze, nic nie jest ucinane.
   Zeby przy tym nie bylo za male: kadr jest wyzszy niz kwadrat (1:1.05),
   a wewnetrzny margines to tylko 8% zamiast wczesniejszych 12%/16%.
   Zrodlo jest wyzsze niz szersze (200x234), wiec przy 'contain' zdjecie
   dopasowuje sie do WYSOKOSCI kadru i wykorzystuje go niemal w calosci. */
body.woocommerce.single-product .choosed-image img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    filter: drop-shadow(0 14px 22px rgba(11, 34, 64, .14));
    transition: transform .75s var(--ease);
}

body.woocommerce.single-product .choosed-prod:hover .choosed-image img {
    transform: scale(1.09) translateY(-4px);
}

body.woocommerce.single-product .choosed-details {
    display: flex;
    flex-direction: column;
    gap: 7px;
    flex: 1;
    padding: 18px 18px 20px;
}

body.woocommerce.single-product .choosed-details h3 {
    margin: 0;
    font-family: var(--sans);
    font-size: .955rem;
    font-weight: 600;
    line-height: 1.32;
    color: var(--navy);
}

/* Tresc ma inline 'text-align: justify' - w waskiej karcie tworzy dziury
   miedzy slowami. Styl inline bije wszystko procz !important. */
/* Opis ma wypelniac szerokosc kafelka. 'max-width:none' na wypadek
   ograniczen z zewnatrz, przyciecie do 5 linii zamiast 4 - przy szerszym
   kafelku miesci sie wiecej tresci bez rozjezdzania wysokosci. */
body.woocommerce.single-product .excerpt-box,
body.woocommerce.single-product .choosed-details {
    width: 100%;
    max-width: none;
}

body.woocommerce.single-product .excerpt-box p {
    margin: 0;
    width: 100%;
    max-width: none;
    text-align: left !important;
    font-size: .845rem;
    font-weight: 300;
    line-height: 1.6;
    color: var(--muted);
    display: -webkit-box;
    -webkit-line-clamp: 5;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ============================================================
   ZAKLADKA "OPIS" - CELOWO BEZ WLASNYCH STYLOW UKLADU
   Tresc opisu to pole post_content produktu, wypelniane recznie w edytorze.
   Struktura rozni sie miedzy produktami (6-11 obrazkow, 5-12 akapitow,
   raz obrazkow wiecej niz tekstu), wiec zadna regula CSS nie da rownego
   ukladu na wszystkich 31 kartach. Probowalismy oplywania i kolumn -
   na decyzje klienta wracamy do renderowania oryginalnego.
   Nie dodawac tu regul ukladu ani rozmiarow obrazkow.
   ============================================================ */
