/* ============================================================================
   «Объявления» на телефоне и в установленном приложении — верхняя часть как в
   приложении, а не страница сайта.

   Подключается ТОЛЬКО на /catalog и последним, поэтому:
     · на компьютере (шире 860px) не действует ничего, кроме правил-заготовок,
       которые повторяют прежние инлайновые стили страницы;
     · на телефоне полоса сайта (.topbar, бегущая строка, большая шапка) уходит
       целиком, её роль играет верхняя часть приложения (.capp);
     · блок фильтров превращается из трёхэтажной карточки в понятную строку:
       поиск · категории · быстрые переключатели, а «Вид / Город / Сортировка»
       уезжают в лист снизу под кнопкой «Фильтры».

   Разбор по частям:
     1. Заготовки для компьютера — ничего не меняют.
     2. Верхняя часть приложения: знак проекта, «Потерялся», меню.
     3. Hero страницы: только заголовок и счётчик.
     4. Поиск, категории и быстрые переключатели одной прокручиваемой строкой.
     5. Лист фильтров и лист меню снизу.
   ============================================================================ */

/* ------------------------------------------------------------------ 1. ПК */

/* Всё, что относится к верхней части приложения, на компьютере не показываем. */
.capp,
.capp-scrim,
.capp-nav,
.capp__filters,
.page-hero__count,
.ct-short {
  display: none;
}

/* Заготовки повторяют инлайновые стили, которые были прямо в разметке
   страницы: строка кнопок уезжает на свою строку, у полосы категорий остаётся
   нижний отступ, у раздела — уменьшенный верхний. */
.filters .chips {
  margin-bottom: 16px;
}

.section--cat {
  padding-top: 40px;
}

/* «Вид / Город / Сортировка / Сбросить» лежат внутри общей обёртки: на
   компьютере она «растворяется» (display:contents), и поля снова становятся
   элементами строки фильтров — вид не меняется. */
.filters__more {
  display: contents;
}

.filters__more > .fmore__body {
  display: contents;
}

.filters__more > .fmore__head,
.filters__more > .fmore__foot {
  display: none;
}

/* Быстрые переключатели — своя строка во всю ширину (раньше это был отдельный
   блок с отступом сверху; отступ даёт промежуток строки фильтров). */
.filters__quick {
  flex: 1 0 100%;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
}

/* --------------------------------------------------- 2. Верхняя часть (телефон) */

@media (max-width:860px) {

  /* Раздел объявлений больше не подменяет шапку сайта: и на /catalog, и в любом
     другом разделе работает одна общая шапка и одно общее меню — ни отличий в
     оформлении, ни в размерах. Своя верхняя часть раздела (.capp), её лист
     (.capp-nav) и затемнение выключены; «Потерялся питомец» остаётся действием
     в общем меню (.nav__act), как на всех остальных страницах. Заодно
     возвращаются полоса контактов и бегущая строка — они часть общей шапки. */
  #site-header {
    display: block !important;
  }

  .capp,
  .capp-scrim,
  .capp-nav {
    display: none !important;
  }

  .capp.is-scrolled {
    box-shadow: 0 10px 24px rgba(158, 47, 34, .12);
  }

  .capp__row {
    display: flex;
    align-items: center;
    /* Высота и боковые отступы — как у шапки сайта (.header__inner{height:60px}
       и .container{padding:0 24px}): при переходе между разделами шапка не
       должна менять размер. Раньше строка была 54px с отступами 14px. */
    gap: 10px;
    height: 60px;
    padding: 0 24px;
  }

  .capp__brand {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
    padding: 2px;
    border-radius: 12px;
    color: var(--ink);
    text-decoration: none;
  }

  .capp__logo {
    /* Знак — как .logo__img в шапке сайта: 40px, радиус 12px, те же 4px
       внутреннего отступа. */
    width: 40px;
    height: 40px;
    padding: 4px;
    flex: none;
    border-radius: 12px;
    object-fit: contain;
  }

  .capp__name {
    min-width: 0;
    font-family: var(--ff-display);
    font-size: 17px;
    font-weight: 800;
    letter-spacing: -.02em;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* Ступени знака и названия — ровно те же, что у шапки сайта
     (@media(max-width:640px) и (max-width:560px) в style.css). Иначе на узких
     экранах название и знак в шапке объявлений выглядели крупнее. */
  @media (max-width:640px) {
    .capp__logo { width: 36px; height: 36px; }
    .capp__name { font-size: 15.5px; }
  }
  @media (max-width:560px) {
    .capp__name { font-size: 14.5px; }
  }

  /* Главное действие полосы: сообщить о пропаже. Раньше эта кнопка жила в
     шапке сайта и вместе с ней уехала бы с телефона. */
  .capp__lost {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-left: auto;
    padding: 8px 12px;
    /* Прямоугольник со скруглёнными углами, а не пилюля: 12px — тот же радиус,
       что у кнопок шапки и остальных кнопок сайта. */
    border-radius: 12px;
    background: var(--brand-soft);
    border: 1px solid var(--brand-line);
    color: var(--brand-dark);
    font-size: 13px;
    font-weight: 700;
    white-space: nowrap;
    text-decoration: none;
  }

  .capp__lost:active {
    transform: scale(.97);
  }

  .capp__lost .ico {
    width: 16px;
    height: 16px;
  }

  .capp__more {
    display: grid;
    place-items: center;
    width: 40px;
    height: 40px;
    flex: none;
    /* Тот же вид, что у гамбургера в шапке сайта: мягкая фирменная подложка,
       тёплая рамка и скругление 12px. Раньше кнопка была белой с серой рамкой
       и выбивалась из ряда «Потерялся» — вход — меню. */
    border: 1px solid #F3E5DC;
    border-radius: 12px;
    background: var(--brand-soft);
    color: var(--brand-dark);
  }

  .capp__more:active {
    transform: scale(.94);
  }

  /* ------------------------------------------------- 3. Заголовок и счётчик */

  /* Плашка заголовка — тонкая строка, а не баннер: на телефоне имя раздела и
     счётчик читаются и мелким кеглем, а место над списком дороже. Хлебные
     крошки и лид не показываем, но в разметке они остаются — их читают
     поисковые системы и на компьютере видно как раньше. */
  .page-hero {
    padding: 9px 0 8px;
  }

  .page-hero .crumbs,
  .page-hero .lead {
    display: none;
  }

  .page-hero .h-l {
    font-size: 18px;
    line-height: 1.25;
    letter-spacing: -.02em;
  }

  .page-hero__count {
    display: block;
    margin: 2px 0 0;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--muted);
  }

  /* Строка «Найдено N» с кнопкой под фильтрами на телефоне не нужна: счётчик
     стоит в заголовке, а «Разместить» есть в нижней полосе. */
  .section--cat {
    padding-top: 6px;
    padding-bottom: 24px;
  }

  .section--cat > .container > .flex-between {
    display: none;
  }

  /* --------------------------------------------- 4. Поиск, категории, фильтры */

  /* Карточка фильтров на телефоне не нужна: тот же блок становится обычной
     колонкой без рамки и фона. */
  .filters {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-bottom: 18px;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
  }

  .filters__row {
    display: contents;
  }

  /* Порядок строк: поиск, категории, быстрые фильтры. Лист фильтров вынут из
     потока (position:fixed), поэтому порядок его не касается. */
  .filters__row > .field {
    order: 1;
  }

  #cat-chips {
    order: 2;
  }

  .filters__quick {
    order: 3;
  }

  /* Поиск — крупное поле во всю ширину, с увеличительным стеклом внутри.
     Подпись «Поиск» на телефоне лишняя: смысл виден по подсказке. */
  .filters__row > .field > label {
    display: none;
  }

  .filters__row > .field {
    min-width: 0;
  }

  #f-q {
    padding: 13px 14px 13px 42px;
    border-radius: 14px;
    border-color: var(--line);
    font-size: 16px;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237D6860' stroke-width='1.7' stroke-linecap='round'><circle cx='11' cy='11' r='6.8'/><path d='m20.4 20.4-4.4-4.4'/></svg>");
    background-repeat: no-repeat;
    background-position: 14px center;
    background-size: 19px 19px;
    box-shadow: var(--shadow-s);
  }

  .filters .chips {
    margin-bottom: 0;
  }

  /* Категории — одна прокручиваемая строка от края до края. Прокрутка
     выходит за поля страницы, чтобы следующая таблетка была видна наполовину
     и было понятно, что ряд листается. */
  #cat-chips {
    flex-wrap: nowrap;
    gap: 8px;
    margin: 0 -14px;
    padding: 2px 14px 4px;
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
    scroll-snap-type: x proximity;
  }

  #cat-chips::-webkit-scrollbar {
    display: none;
  }

  #cat-chips .chip {
    flex: none;
    white-space: nowrap;
    scroll-snap-align: start;
    padding: 9px 14px;
  }

  /* Выбранная категория — фирменный цвет вместо чёрного: на телефоне это
     главный фильтр и он должен читаться издалека. */
  #cat-chips .chip.is-active {
    background: var(--brand);
    border-color: var(--brand);
    color: #fff;
    box-shadow: 0 4px 12px rgba(196, 64, 47, .26);
  }

  /* Быстрые фильтры — такой же прокручиваемый ряд таблеток. */
  .filters__quick {
    flex-wrap: nowrap;
    gap: 8px;
    margin: 0 -14px;
    padding: 2px 14px 4px;
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
  }

  .filters__quick::-webkit-scrollbar {
    display: none;
  }

  .filters__quick .chip {
    flex: none;
    white-space: nowrap;
    padding: 9px 14px;
  }

  /* Счётчик-флажок внутри таблетки не нужен: таблетку нажимают целиком. */
  .filters__quick .chip input {
    display: none;
  }

  /* Включённый переключатель виден сразу. :has() знает состояние с первого
     кадра (адрес может нести ?fav=1), класс .is-on подставляет скрипт — для
     браузеров без :has(). */
  .filters__quick .chip:has(input:checked),
  .filters__quick .chip.is-on {
    background: var(--brand);
    border-color: var(--brand);
    color: #fff;
    box-shadow: 0 4px 12px rgba(196, 64, 47, .26);
  }

  /* Короткие подписи: в узкой строке «Только срочные» и «Только избранное»
     занимают весь экран. */
  .ct-long {
    display: none;
  }

  .ct-short {
    display: inline;
  }

  /* Кнопка листа фильтров стоит первой в ряду — к ней ведёт счётчик
     выбранного. */
  .capp__filters {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    flex: none;
    order: -1;
    padding: 9px 14px;
    border: 1px solid var(--line-2);
    border-radius: 999px;
    background: #fff;
    font-size: 14px;
    font-weight: 700;
    white-space: nowrap;
  }

  .capp__filters .ico {
    width: 16px;
    height: 16px;
    color: var(--brand);
  }

  .capp__filters.is-on {
    border-color: var(--brand-line);
    background: var(--brand-soft);
    color: var(--brand-dark);
  }

  .capp__filters-n {
    display: inline-grid;
    place-items: center;
    min-width: 19px;
    height: 19px;
    padding: 0 5px;
    border-radius: 999px;
    background: var(--brand);
    color: #fff;
    font-size: 11.5px;
    font-weight: 700;
  }

  /* ------------------------------------------------- 5. Листы снизу (шторки) */

  .capp-scrim {
    display: block;
    position: fixed;
    inset: 0;
    z-index: 190;
    /* Тот же затемняющий слой, что у панели меню на остальных страницах. */
    background: rgba(43, 24, 19, .42);
    -webkit-backdrop-filter: blur(2px);
    backdrop-filter: blur(2px);
    opacity: 0;
    pointer-events: none;
    transition: opacity .26s ease;
  }

  .capp-scrim.is-open {
    opacity: 1;
    pointer-events: auto;
  }

  /* Лист фильтров и лист меню — одно и то же поведение: выезжают снизу,
     прижаты к низу экрана, прокручиваются внутри себя, если не влезли. */
  .filters__more,
  .capp-nav {
    display: flex;
    flex-direction: column;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 200;
    max-height: 88dvh;
    overflow-y: auto;
    overscroll-behavior: contain;
    padding: 4px 16px calc(18px + env(safe-area-inset-bottom, 0px));
    background: #fff;
    border-radius: 22px 22px 0 0;
    box-shadow: 0 -14px 44px rgba(43, 24, 19, .24);
    transform: translateY(103%);
    visibility: hidden;
    transition: transform .3s cubic-bezier(.2, .8, .2, 1), visibility .3s;
  }

  .filters__more.is-open,
  .capp-nav.is-open {
    transform: none;
    visibility: visible;
  }

  /* Пока лист открыт, страница под ним не прокручивается, а Миша уходит: его
     круглая кнопка иначе висела бы поверх листа. */
  body.is-sheet-open {
    overflow: hidden;
  }

  body.is-sheet-open .ms-root {
    opacity: 0;
    pointer-events: none;
    transition: opacity .2s ease;
  }

  /* Плашки поверх страницы (согласие на cookie, установка и обновление
     приложения) тоже уходят: они висят в самом низу и иначе оказались бы
     поверх листа. Вернутся, как только лист закроется. */
  body.is-sheet-open .analytics-consent,
  body.is-sheet-open .pwa-install,
  body.is-sheet-open .pwa-update,
  body.is-sheet-open .pwa-help {
    opacity: 0;
    pointer-events: none;
  }

  /* Ручка листа — понятная подсказка «это можно смахнуть». Селекторы с
     «>» здесь не для красоты: заготовки для компьютера скрывают те же узлы
     более точным селектором (.filters__more > .fmore__head), и без этого
     заголовок с кнопкой закрытия и кнопка «Показать» остались бы скрытыми. */
  .filters__more > .fmore__head,
  .capp-nav > .fmore__head {
    position: sticky;
    top: 0;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 0 8px;
    background: #fff;
  }

  .fmore__head::before {
    content: '';
    position: absolute;
    top: 2px;
    left: 50%;
    width: 40px;
    height: 4px;
    margin-left: -20px;
    border-radius: 999px;
    background: var(--line-2);
  }

  .fmore__title {
    flex: 1;
    min-width: 0;
    font-size: 18px;
    font-weight: 800;
    letter-spacing: -.02em;
  }

  .fmore__close {
    display: grid;
    place-items: center;
    width: 38px;
    height: 38px;
    flex: none;
    border: 1px solid var(--line);
    border-radius: 12px;
    background: #fff;
    color: var(--ink-2);
  }

  .filters__more > .fmore__body {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 6px 0 2px;
  }

  .fmore__body .field {
    min-width: 0;
    width: 100%;
  }

  .fmore__body .field label {
    font-size: 12px;
  }

  /* Низ листа закреплён: «Показать N объявлений» всегда под пальцем. */
  .filters__more > .fmore__foot {
    position: sticky;
    bottom: 0;
    display: flex;
    padding: 12px 0 2px;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0), #fff 38%);
  }

  .fmore__foot .btn {
    flex: 1;
    justify-content: center;
    min-height: 46px;
  }

  /* ------------------------------------------------------------- Лист меню */

  /* Шапка листа меню — как шапка панели меню на остальных страницах: белая
     с тёплой линией. Лист фильтров остаётся как был: правило у них общее. */
  .capp-nav > .fmore__head {
    padding: 12px 0;
    border-bottom: 1px solid #F3E5DC;
  }

  /* Боковые отступы листа — как у панели меню (12px + 12px внутри пункта),
     чтобы пункты стояли на том же месте, что и в остальных разделах. */
  .capp-nav {
    padding: 4px 12px calc(18px + env(safe-area-inset-bottom, 0px));
  }

  .capp-nav__list {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 4px 0 2px;
  }

  .capp-nav__list > a,
  .capp-nav__list > button {
    display: flex;
    align-items: center;
    gap: 11px;
    min-height: 46px;
    /* Пункт меню — те же размеры и цвет, что в панели меню на остальных
       страницах (.nav .nav__item в style.css). */
    padding: 12px;
    border-radius: 12px;
    color: var(--ink-2);
    font-size: 15.5px;
    font-weight: 600;
    text-align: left;
    text-decoration: none;
  }

  /* У <a> нет ни системного фона, ни рамки, а у <button> они есть по умолчанию:
     из-за этого «Войти с Яндекс ID», «Обновить приложение» и «Установить
     приложение» выглядели чужими — серый прямоугольник с рамкой посреди строк
     меню. Сбрасываем оформление системной кнопки, чтобы строка меню и действие
     выглядели одинаково. */
  .capp-nav__list > button {
    width: 100%;
    background: none;
    border: 0;
    appearance: none;
    -webkit-appearance: none;
    font-family: inherit;
    cursor: pointer;
  }

  .capp-nav__list > a:active,
  .capp-nav__list > button:active {
    background: var(--brand-soft);
    color: var(--brand-dark);
  }

  .capp-nav__list .ico {
    flex: none;
    color: var(--brand);
  }

  .capp-nav__list .nav__note {
    padding: 4px 12px;
    font-size: 12.5px;
    color: var(--muted);
  }

  .capp-nav__lost {
    color: var(--brand-dark);
  }

  /* hidden должен побеждать: у элементов верхней части есть собственный display
     (счётчик фильтров, пункты меню, подпись состояния приложения), и он иначе
     перебивал бы скрытие из разметки и скрипта. */
  .page-hero__count[hidden],
  .capp__filters-n[hidden],
  .capp-nav__list [hidden],
  .filters__more [hidden] {
    display: none !important;
  }
}

/* Кто просил меньше движения — лист появляется без выезда. */
@media (max-width:860px) and (prefers-reduced-motion:reduce) {
  .filters__more,
  .capp-nav,
  .capp-scrim {
    transition: none;
  }
}

/* ------------------------------------------------------------------ карточки каталога v2
   Единая фоторамка вместо размытых подложек и прыгающих пропорций. Фото
   остаётся выразительным, карточки держат одинаковую высоту и читаются как
   аккуратная витрина, а не набор разноразмерных блоков. */
.pets-grid--tiles {
  grid-template-columns: repeat(auto-fill, minmax(292px, 1fr));
  gap: 20px;
}

.pets-grid--tiles .pet-card {
  min-width: 0;
  border: 1px solid rgba(116, 79, 64, .16);
  border-radius: 18px;
  background: #fff;
  box-shadow: 0 8px 24px rgba(60, 32, 24, .08);
  overflow: hidden;
  transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
}

.pets-grid--tiles .pet-card:hover {
  transform: translateY(-3px);
  border-color: rgba(196, 64, 47, .28);
  box-shadow: 0 14px 32px rgba(60, 32, 24, .13);
}

/* isolation: isolate тут убран вместе с таким же правилом в style.css: он создавал
   медиа собственный контекст наложения, и сердечко «в избранное» (z-index:2 внутри
   медиа) оказывалось ниже прозрачной зоны нажатия карточки (z-index:1). Клик по
   сердцу уходил по ссылке на объявление. */
.pets-grid--tiles .pet-card__media {
  aspect-ratio: 4 / 3;
  background: #f3ece6;
}

/* Не используем мутную копию фото на фоне и не переключаем портреты в
   contain: у всей витрины одна спокойная рамка и одинаковая композиция. */
.pets-grid--tiles .pet-card__media::before,
.pets-grid--tiles .pet-card__media[data-photo-shape="fit"]::before {
  display: none !important;
}

.pets-grid--tiles .pet-card__media img,
.pets-grid--tiles .pet-card__media[data-photo-shape="fit"] img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover !important;
  object-position: center 38%;
  transform: scale(1.001);
  transition: transform .35s ease;
}

.pets-grid--tiles .pet-card:hover .pet-card__media img {
  transform: scale(1.035);
}

.pets-grid--tiles .pet-card__badges {
  top: 12px;
  left: 12px;
  right: 54px;
  gap: 6px;
  max-width: none;
}

.pets-grid--tiles .pet-card__badges .tag {
  padding: 5px 8px;
  border-radius: 999px;
  font-size: 11px;
  line-height: 1.2;
  box-shadow: 0 3px 10px rgba(43, 24, 19, .14);
}

.pets-grid--tiles .pet-card__fav {
  top: 12px;
  right: 12px;
  width: 36px;
  height: 36px;
}

/* Светлая подложка нужна только невыбранному сердцу — чтобы оно читалось на
   фотографии. Состояние «в избранном» (:not(.is-on) его исключает) оформляет
   style.css: заливка фирменным красным и цельное белое сердце. Иначе подложка
   отсюда перебивала .is-on — кнопка оставалась белой, а белый контур сердца
   на белом фоне был не виден. Геометрию выше состояние не трогает, иначе
   кнопка прыгала бы на пару пикселей при добавлении в избранное. */
.pets-grid--tiles .pet-card__fav:not(.is-on) {
  background: rgba(255, 255, 255, .94);
  border-color: rgba(116, 79, 64, .18);
  box-shadow: 0 4px 12px rgba(43, 24, 19, .14);
  backdrop-filter: blur(8px);
}

.pets-grid--tiles .pet-card__body {
  min-height: 218px;
  padding: 16px;
  gap: 10px;
}

.pets-grid--tiles .pet-card__title {
  gap: 8px;
  align-items: baseline;
}

.pets-grid--tiles .pet-card__title h3 {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 18px;
  line-height: 1.2;
}

.pets-grid--tiles .pet-card__title .muted {
  flex: none;
  font-size: 12px !important;
  color: var(--muted);
}

.pets-grid--tiles .pet-card__meta {
  gap: 5px;
  min-height: 24px;
  overflow: hidden;
}

.pets-grid--tiles .pet-card__meta .tag {
  max-width: 100%;
  padding: 4px 7px;
  border-radius: 999px;
  font-size: 11px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.pets-grid--tiles .pet-card__desc {
  display: -webkit-box;
  min-height: 57px;
  margin: 0;
  overflow: hidden;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  font-size: 13px;
  line-height: 1.45;
  color: var(--muted);
}

.pets-grid--tiles .pet-card__foot {
  margin-top: auto;
  padding-top: 11px;
  gap: 10px;
}

.pets-grid--tiles .pet-card__loc {
  min-width: 0;
  overflow: hidden;
  font-size: 12px;
  white-space: nowrap;
  text-overflow: ellipsis;
}

/* Вместо кнопки «Подробнее» в подвале стоит указатель открытия: карточка
   целиком — ссылка, поэтому кнопка дублировала бы клик. */
.pets-grid--tiles .pet-card__cue {
  width: 32px;
  height: 32px;
}
.pets-grid--tiles .pet-card__cue .ico {
  width: 16px;
  height: 16px;
}

.pets-grid--tiles .pet-card__share {
  margin-top: 0;
  padding-top: 2px;
}

@media (max-width: 860px) {
  .pets-grid--tiles {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
  }

  .pets-grid--tiles .pet-card {
    border-radius: 15px;
  }

  .pets-grid--tiles .pet-card__media {
    aspect-ratio: 1 / 1;
  }

  .pets-grid--tiles .pet-card__badges {
    top: 8px;
    left: 8px;
    right: 42px;
  }

  .pets-grid--tiles .pet-card__badges .tag {
    padding: 4px 6px;
    font-size: 10px;
  }

  .pets-grid--tiles .pet-card__fav {
    top: 8px;
    right: 8px;
    width: 34px;
    height: 34px;
  }

  .pets-grid--tiles .pet-card__body {
    min-height: 188px;
    padding: 11px;
    gap: 7px;
  }

  .pets-grid--tiles .pet-card__title h3 {
    font-size: 15px;
  }

  .pets-grid--tiles .pet-card__title .muted {
    font-size: 10px !important;
  }

  .pets-grid--tiles .pet-card__meta {
    min-height: 20px;
    gap: 4px;
  }

  .pets-grid--tiles .pet-card__meta .tag {
    padding: 3px 5px;
    font-size: 10px;
  }

  .pets-grid--tiles .pet-card__desc {
    min-height: 46px;
    font-size: 11.5px;
    line-height: 1.35;
    -webkit-line-clamp: 3;
  }

  .pets-grid--tiles .pet-card__foot {
    padding-top: 8px;
    gap: 5px;
  }

  .pets-grid--tiles .pet-card__loc {
    font-size: 10.5px;
  }

  .pets-grid--tiles .pet-card__cue {
    width: 30px;
    height: 30px;
  }
}

@media (max-width: 360px) {
  .pets-grid--tiles {
    gap: 9px;
  }

  .pets-grid--tiles .pet-card__body {
    padding: 9px;
  }
}

/* ------------------------------------------------------------------ карточки каталога v3
   Финальная настройка внутренней части: прежняя большая оранжевая кнопка
   «Поделиться» и слишком незаметные метки визуально перетягивали внимание.
   Контент теперь собран в спокойную иерархию: имя → признаки → описание →
   адрес и действия. */
html body .pets-grid--tiles .pet-card__body {
  min-height: 232px !important;
  padding: 17px !important;
  gap: 10px !important;
  background: linear-gradient(180deg, #fff 0%, #fffdfb 100%);
}

html body .pets-grid--tiles .pet-card__title h3 {
  font-size: 19px !important;
  font-weight: 800;
  letter-spacing: -.025em;
}

html body .pets-grid--tiles .pet-card__title .muted {
  padding: 4px 7px;
  border-radius: 999px;
  background: #f7ece4;
  color: #7d6860;
  font-size: 11px !important;
  line-height: 1.2;
}

html body .pets-grid--tiles .pet-card__meta {
  display: flex !important;
  min-height: 26px !important;
  gap: 6px !important;
}

html body .pets-grid--tiles .pet-card__meta .tag,
html body .pets-grid--tiles .pet-card__meta .tag:not(:first-child) {
  display: inline-flex !important;
  align-items: center;
  max-width: 100%;
  padding: 5px 8px !important;
  border: 1px solid rgba(116, 79, 64, .12);
  border-radius: 999px;
  background: #faf3ed;
  color: #5f4940;
  font-size: 11px !important;
  font-weight: 700;
  line-height: 1.15;
}

html body .pets-grid--tiles .pet-card__meta .tag--indigo {
  background: #f0f3fb;
  border-color: #d9e0f3;
  color: #44557e;
}

html body .pets-grid--tiles .pet-card__desc {
  min-height: 52px !important;
  font-size: 13px !important;
  line-height: 1.48 !important;
  color: #6e5a52;
}

html body .pets-grid--tiles .pet-card__foot {
  margin-top: auto !important;
  padding-top: 12px !important;
  border-top: 1px solid rgba(116, 79, 64, .14) !important;
}

html body .pets-grid--tiles .pet-card__loc {
  color: #806b62;
  font-size: 12px !important;
  font-weight: 600;
}

/* Тёмная кнопка «Подробнее» из этой иерархии убрана вместе с самой кнопкой:
   приглашение к открытию несёт указатель .pet-card__cue из style.css. */

/* Поделиться — вторичное действие, не широкая яркая полоса. */
html body .pets-grid--tiles .pet-card__share {
  display: flex !important;
  margin-top: 0 !important;
  padding-top: 0 !important;
}

html body .pets-grid--tiles .pet-card__share .listing-share-cta--compact,
html body .pets-grid--tiles .pet-card__share .listing-share-cta {
  width: auto !important;
  min-width: 0 !important;
  min-height: 32px !important;
  padding: 6px 10px !important;
  border: 1px solid #ead8cc !important;
  border-radius: 9px !important;
  background: #fff8f3 !important;
  color: #a34232 !important;
  box-shadow: none !important;
  font-size: 11.5px !important;
  font-weight: 700;
}

html body .pets-grid--tiles .pet-card__share .listing-share-cta--compact:hover,
html body .pets-grid--tiles .pet-card__share .listing-share-cta:hover {
  background: #fbeee7 !important;
  border-color: #dca18d !important;
}

html body .pets-grid--tiles .pet-card__share .listing-share-cta__icon {
  width: 17px;
  height: 17px;
  border-radius: 5px;
  background: transparent;
  color: currentColor;
}

@media (max-width: 860px) {
  html body .pets-grid--tiles .pet-card__body {
    min-height: 202px !important;
    padding: 12px !important;
    gap: 8px !important;
  }

  html body .pets-grid--tiles .pet-card__title h3 {
    font-size: 15px !important;
  }

  html body .pets-grid--tiles .pet-card__title .muted {
    padding: 3px 5px;
    font-size: 9.5px !important;
  }

  html body .pets-grid--tiles .pet-card__meta .tag,
  html body .pets-grid--tiles .pet-card__meta .tag:not(:first-child) {
    padding: 4px 6px !important;
    font-size: 9.5px !important;
  }

  html body .pets-grid--tiles .pet-card__desc {
    min-height: 45px !important;
    font-size: 11.5px !important;
  }


  html body .pets-grid--tiles .pet-card__share .listing-share-cta--compact,
  html body .pets-grid--tiles .pet-card__share .listing-share-cta {
    min-height: 30px !important;
    padding: 5px 8px !important;
    font-size: 10.5px !important;
  }
}

/* v4: полностью убираем старый blurred-photo механизм из карточек */
html body .pets-grid--tiles .pet-card__media::before,
html body .pets-grid--tiles .pet-card__media[data-photo-shape="fit"]::before {
  content: none !important;
  display: none !important;
  background: none !important;
  background-image: none !important;
  filter: none !important;
}
html body .pets-grid--tiles .pet-card__media img,
html body .pets-grid--tiles .pet-card__media[data-photo-shape="fit"] img {
  object-fit: cover !important;
}

/* v5: кнопка избранного не должна размывать фотографию под собой.
   Речь только о невыбранном сердце: с :not(.is-on) правило не мешает состоянию
   «в избранном» залить кнопку фирменным красным (иначе !important держал белую
   подложку и вместе с белым сердцем делал кнопку неразличимой). */
html body .pets-grid--tiles .pet-card__fav:not(.is-on),
html body .pets-grid--tiles .pet-card__fav:not(.is-on):hover {
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
  background: #ffffff !important;
}

/* Подсказка при наведении на невыбранное сердце переехала в style.css: она
   нужна не только плиткам каталога, но и карточкам на главной, в кабинете и
   на страницах питомцев. */

/* ------------------------------------------------------------------ нажатие на карточку каталога
   В каталоге карточка — плитка с собственным подъёмом на наведении
   (правила .pets-grid--tiles выше). По специфичности они сильнее общего
   правила из style.css, поэтому отклик на нажатие задаём здесь — с той же
   областью действия, что и подъём, иначе плитка «не отвечала» бы на касание. */
@media (hover: hover) {
  html body .pets-grid--tiles .pet-card:active {
    transform: translateY(-1px) scale(.99);
  }
}

@media (hover: none) {
  html body .pets-grid--tiles .pet-card:active {
    transform: scale(.985);
  }
}

@media (prefers-reduced-motion: reduce) {
  html body .pets-grid--tiles .pet-card:active {
    transform: none;
  }
}
