/* ==========================================
   CATEGORY LIST (баннеры категорий)
========================================== */
/* =========================
   TITLE
========================= */
.cat-list-section-wrap{
    width:93%;
    max-width:1500px;
    margin:100px auto 0;
}

.cat-list-title{
    font-size:28px;
    font-weight:700;
    margin:0 0 20px;
    color:#111;
}

.cat-list-section{
    margin:0 auto 40px;
}

@media(max-width:900px){

.cat-list-section-wrap{
    width:93%;
    margin:95px auto 25px;
}

.cat-list-title{
    font-size:26px;
    margin-bottom:20px;
    text-align:center;
}

.cat-list-section{
    margin:0 auto 25px;
}

}

.cat-list-section{
    display:flex;
    flex-wrap:wrap;
    gap:22px;
}

.cat-item {
    display: block;
    position: relative;

    flex: 0 0 calc((100% - 44px) / 3);
    min-width: 0;

    /* Сразу резервируем место */
    aspect-ratio: 2 / 1;

    overflow: hidden;

    border-radius: 28px;
    border: 1px solid rgb(226,226,226);
    background: #fff;

    text-decoration: none;

    transition:
        transform .25s ease,
        box-shadow .25s ease;
}

.cat-item:hover{
    transform:translateY(-3px);
    box-shadow:0 10px 25px rgba(0,0,0,.08);
}

.cat-item .cat-label{
    position:absolute;
    left:24px;
    bottom:20px;

    color:#fff;
    font-weight:600;
    font-size:22px;

    text-shadow:0 2px 8px rgba(0,0,0,.35);
    z-index:2;
}

/* =========================
   TABLET
========================= */

@media(max-width:1200px){

.cat-item{
    flex:0 0 calc((100% - 22px) / 2);
}

}

/* =========================
   MOBILE
========================= */

@media(max-width:900px){

.cat-list-section{
    flex-direction:column;
    gap:16px;
}

.cat-item{
    flex:0 0 auto;
    width:100%;
    aspect-ratio:2 / 1;
    min-height:160px;
    border-radius:22px;
}

.cat-item .cat-label{
    left:16px;
    bottom:14px;
    font-size:18px;
}

}

/* =========================
   IMAGE PLACEHOLDER / SKELETON
========================= */

/* Зарезервированное место под изображение — заполняет .cat-item целиком,
   поэтому высота блока фиксирована ещё ДО загрузки картинки */
.cat-image-placeholder {
    position: absolute;
    inset: 0;

    width: 100%;
    height: 100%;

    overflow: hidden;

    background: linear-gradient(
        90deg,
        #eeeeee 25%,
        #f5f5f5 37%,
        #eeeeee 63%
    );
    background-size: 400% 100%;
    animation: skeleton-loading 1.4s ease infinite;
}

/* Когда картинка загрузилась — гасим скелетон-анимацию */
.cat-image-placeholder.loaded {
    animation: none;
    background: none;
}

/* Само изображение */
.cat-image-placeholder img {
    width: 100%;
    height: 100%;

    display: block;
    object-fit: cover;

    opacity: 0;
    transition: opacity .3s ease;
}

/* После загрузки плавно проявляем */
.cat-image-placeholder img.loaded {
    opacity: 1;
}

@keyframes skeleton-loading {
    0%   { background-position: 100% 50%; }
    100% { background-position: 0 50%; }
}

