/* =========================================================================
   listing-obrazy.css   (2026-08-06)

   1) Ramka miniaturki o stalym stosunku bokow 480x340 z tlem zastepczym,
      dzieki czemu nigdy nie widac samego tekstu alternatywnego zanim
      obrazek sie wczyta (wczesniej kafle mialy src="" i przegladarka
      rysowala goly atrybut alt).
   2) Plynne pojawienie sie obrazka po wczytaniu (opacity, ok. 300 ms),
      kaskadowo - kolejne kafle w rzedzie z malym opoznieniem, wylacznie
      przez CSS (nth-child), bez petli w JS.
   3) Efekt najechania obejmujacy CALY kafel produktu, nie tylko zdjecie.

   Wszystko ograniczone do .product_list, zeby nie ruszac miniaturek
   w widgetach bocznych (.leo-widget, .sidebar .block .products).
   ========================================================================= */

/* ---------------------------------------------------------------------
   1. Miejsce na zdjecie + tlo zastepcze
   --------------------------------------------------------------------- */
.product_list .product-miniature .thumbnail-container .product-image > .product-thumbnail {
    display: block;
    position: relative;
    overflow: hidden;
    aspect-ratio: 480 / 340;
    background-color: #f5f2ef;
    background-image: linear-gradient(135deg, #f8f6f4 0%, #ebe5df 55%, #f8f6f4 100%);
    border-radius: 4px 4px 0 0;
}

.product_list .product-miniature .thumbnail-container .product-image > .product-thumbnail > img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* Przegladarki bez aspect-ratio (starsze Safari): rezerwa wysokosci przez
   atrybuty width/height obrazka - dlatego sa one obowiazkowe w szablonie. */
@supports not (aspect-ratio: 1 / 1) {
    .product_list .product-miniature .thumbnail-container .product-image > .product-thumbnail > img {
        height: auto;
    }
}

/* ---------------------------------------------------------------------
   2. Plynne pojawienie sie obrazka
   Klasa .alm-lz jest dokladana do <html> przez listing-obrazy.js.
   Bez JS (blad sieci, wylaczony JS) obrazki sa po prostu widoczne od razu -
   zaden scenariusz nie zostawia pustego kafla.
   --------------------------------------------------------------------- */
@media (prefers-reduced-motion: no-preference) {

    .alm-lz .product_list .product-miniature img.alm-tile-img {
        opacity: 0;
        transition: opacity .3s ease-out;
    }

    .alm-lz .product_list .product-miniature img.alm-tile-img.alm-in {
        opacity: 1;
    }

    /* Kaskada: opoznienie zalezne od pozycji kafla w rzedzie.
       Liczone modulo, wiec nie kumuluje sie na dlugich listingach. */
    @media (min-width: 992px) {
        .alm-lz .product_list .ajax_block_product:nth-child(4n+2) img.alm-tile-img { transition-delay: .06s; }
        .alm-lz .product_list .ajax_block_product:nth-child(4n+3) img.alm-tile-img { transition-delay: .12s; }
        .alm-lz .product_list .ajax_block_product:nth-child(4n+4) img.alm-tile-img { transition-delay: .18s; }
    }
    @media (min-width: 768px) and (max-width: 991px) {
        .alm-lz .product_list .ajax_block_product:nth-child(3n+2) img.alm-tile-img { transition-delay: .07s; }
        .alm-lz .product_list .ajax_block_product:nth-child(3n+3) img.alm-tile-img { transition-delay: .14s; }
    }
    @media (max-width: 767px) {
        .alm-lz .product_list .ajax_block_product:nth-child(2n) img.alm-tile-img { transition-delay: .08s; }
    }
}

/* ---------------------------------------------------------------------
   3. Hover na calym kaflu produktu
   Tylko dla urzadzen z prawdziwym kursorem - na dotyku nie ma stanu
   hover, wiec pierwsze dotkniecie nigdy nie jest "zjadane".
   --------------------------------------------------------------------- */
@media (hover: hover) and (pointer: fine) {

    .product_list .product-miniature .thumbnail-container {
        transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
    }

    .product_list .product-miniature:hover .thumbnail-container,
    .product_list .product-miniature:focus-within .thumbnail-container {
        transform: translateY(-3px);
        box-shadow: 0 10px 24px -8px rgba(82, 26, 6, .28);
        border-color: rgba(82, 26, 6, .35);
    }

    /* Delikatne przyblizenie samego zdjecia w ramach stalej ramki. */
    .product_list .product-miniature .thumbnail-container .product-image > .product-thumbnail > img {
        transition: transform .35s ease, opacity .3s ease-out;
    }
    .product_list .product-miniature:hover .thumbnail-container .product-image > .product-thumbnail > img {
        transform: scale(1.03);
    }

    /* Tytul i cena reaguja razem z kaflem, nawet gdy kursor jest nad tekstem. */
    .product_list .product-miniature:hover .thumbnail-container .product-title a {
        color: #521a06;
    }

    /* Karuzela appagebuilder ma overflow:hidden - bez tego uniesiony kafel
       bylby przyciety u gory. */
    .ApProductCarousel .carousel-inner {
        padding-top: 6px;
    }
}

/* Widoczny fokus klawiatury na calym kaflu (dostepnosc). */
.product_list .product-miniature .thumbnail-container:focus-within {
    outline: 2px solid rgba(82, 26, 6, .55);
    outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
    .product_list .product-miniature .thumbnail-container,
    .product_list .product-miniature:hover .thumbnail-container,
    .product_list .product-miniature .thumbnail-container .product-image > .product-thumbnail > img,
    .product_list .product-miniature:hover .thumbnail-container .product-image > .product-thumbnail > img {
        transition: none;
        transform: none;
    }
}
