/* =========================================================================
   MONARQUE LADY — блок «Подарки» в кабинете участницы (каталог подарков).

   Источник истины:
     • CONCEPT.md §2 «Каталог подарков: не только гардероб» — участница
       выбирает подарок из каталога: изображение, название, цена, категория.
     • CONCEPT.md §4.3 — «Wishlist» открывается на Pass / Elite; закрытие даёт
       сервер, здесь только аккуратная подсказка и переход на оплату.
     • CONCEPT.md §5.5 — изображения каталога: собственная съёмка клуба.

   Правила вёрстки:
     • Плитка: изображение 1:1, object-fit: cover, без растягивания.
     • Высота плиток одинаковая, подпись — максимум две строки с многоточием.
     • Hover меняет только цвет, фон и границы. Никаких transform/scale и
       сдвигов геометрии — правило владельца.
     • Кнопки не меньше 40px по высоте — палец на экране 390px.
     • Категории прокручиваются горизонтально внутри своего ряда; страница
       горизонтально не прокручивается (min-width: 0 у всех уровней).
     • RTL: логические свойства (margin-inline, padding-inline), числа —
       в <bdi dir="ltr">, у арабского блока свои шрифт и трекинг.
   ========================================================================= */

/* ------------------------------------------------------------- блок --- */
.gifts {
  /* Локальные токены с фолбэком: блок работает и на других палитрах сайтов. */
  --gifts-surface: var(--site-surface, rgba(255, 255, 255, 0.03));
  --gifts-surface-2: var(--site-surface-2, rgba(255, 255, 255, 0.055));
  --gifts-text: var(--site-text, var(--ink));
  --gifts-text-soft: var(--site-text-soft, var(--ink-soft));
  --gifts-muted: var(--site-muted, var(--muted));
  --gifts-acc: var(--site-acc, var(--gold-3));
  --gifts-acc-2: var(--site-acc-2, var(--gold-2));
  --gifts-border: var(--site-border, var(--gold-line));
  --gifts-border-strong: var(--site-border-strong, var(--gold-line-strong));
  --gifts-card-radius: 16px;

  max-width: 100%;
  min-width: 0;
}

/* Арабский блок: трекинг не рвёт арабское письмо, шрифт с арабской гарнитурой. */
.gifts[lang="ar"] {
  font-family: "Noto Kufi Arabic", var(--font-body);
}
.gifts[lang="ar"] h2 {
  font-family: "Noto Kufi Arabic", var(--font-display);
}
.gifts[lang="ar"] .gifts__chip,
.gifts[lang="ar"] .gift-card__title,
.gifts[lang="ar"] .gift-card__add {
  letter-spacing: 0;
  text-transform: none;
}

/* --------------------------------------------------- строка категорий --- */
.gifts__bar {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem 0.75rem;
  margin-top: 1rem;
  min-width: 0;
  max-width: 100%;
}

/* Горизонтальный ряд категорий. Скроллится только сам ряд, страница — нет.
   Базис 14rem: на широком экране ряд делит строку со счётчиком, на узком —
   счётчик уходит на свою строку, а не сжимает кнопки категорий. */
.gifts__chips {
  display: flex;
  align-items: center;
  gap: 0.45rem;
  flex: 1 1 14rem;
  min-width: 0;
  max-width: 100%;
  padding-block: 0.15rem;
  overflow-x: auto;
  overflow-y: hidden;
  overscroll-behavior-inline: contain;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
  scrollbar-color: var(--gifts-border-strong) transparent;
}
.gifts__chips::-webkit-scrollbar {
  height: 6px;
}
.gifts__chips::-webkit-scrollbar-track {
  background: transparent;
}
.gifts__chips::-webkit-scrollbar-thumb {
  background: var(--gifts-border-strong);
  border-radius: 999px;
}

.gifts__chip {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  min-height: 40px;
  padding: 0.45rem 0.85rem;
  border-radius: 999px;
  border: 1px solid var(--gifts-border);
  background: var(--gifts-surface);
  color: var(--gifts-text-soft);
  font-family: var(--font-body);
  font-size: 0.74rem;
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
  cursor: pointer;
  transition: color 0.2s ease, background-color 0.2s ease,
    border-color 0.2s ease, box-shadow 0.2s ease;
}
.gifts__chip:hover {
  color: var(--gifts-text);
  border-color: var(--gifts-border-strong);
}
.gifts__chip:focus-visible {
  outline: 2px solid var(--gifts-acc);
  outline-offset: 2px;
}
.gifts__chip.is-active {
  border-color: var(--gifts-acc);
  background: color-mix(in srgb, var(--gifts-acc) 16%, transparent);
  color: var(--gifts-text);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--gifts-acc) 28%, transparent);
}
.gifts__chip-count {
  font-family: var(--font-mono);
  font-size: 0.68rem;
  font-variant-numeric: tabular-nums;
  color: var(--gifts-muted);
}
.gifts__chip.is-active .gifts__chip-count {
  color: var(--gifts-text-soft);
}

.gifts__count {
  flex: 0 0 auto;
  margin-inline-start: auto;
  font-size: 0.72rem;
  line-height: 1.4;
  color: var(--gifts-muted);
  white-space: nowrap;
}

/* -------------------------------------------------------- сетка плиток --- */
.gifts__grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.75rem;
  margin-top: 1rem;
  min-width: 0;
}

@media (min-width: 720px) {
  .gifts__grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 1rem;
  }
}
@media (min-width: 1100px) {
  .gifts__grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}

/* -------------------------------------------------------- плитка товара --- */
.gift-card {
  display: flex;
  flex-direction: column;
  min-width: 0;
  overflow: hidden;
  border: 1px solid var(--gifts-border);
  border-radius: var(--gifts-card-radius);
  background: var(--gifts-surface);
  transition: border-color 0.22s ease, background-color 0.22s ease;
}
.gift-card:hover {
  border-color: var(--gifts-border-strong);
}
.gift-card.is-in-list {
  border-color: color-mix(in srgb, var(--gifts-acc) 52%, transparent);
}

/* Квадрат без растягивания: object-fit crop, а не деформация снимка. */
.gift-card__media {
  position: relative;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  background: color-mix(in srgb, var(--gifts-text) 6%, transparent);
}
.gift-card__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.gift-card__media--empty {
  background: color-mix(in srgb, var(--gifts-text) 8%, transparent);
}

.gift-card__body {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  flex: 1 1 auto;
  min-width: 0;
  padding: 0.7rem 0.8rem 0.35rem;
}

/* Подпись — не больше двух строк; высота блока подписи фиксирована, поэтому
   плитки в ряду выглядят ровно даже при названиях разной длины. */
.gift-card__title {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: 2.6em;
  font-size: 0.82rem;
  line-height: 1.3;
  font-weight: 600;
  color: var(--gifts-text);
  overflow-wrap: break-word;
}

.gift-card__price {
  margin-top: auto;
  font-family: var(--font-mono);
  font-size: 0.78rem;
  line-height: 1.3;
  letter-spacing: 0.01em;
  color: var(--gifts-acc-2);
  unicode-bidi: isolate;
}

.gift-card__foot {
  padding: 0.5rem 0.8rem 0.8rem;
}

/* Кнопка на всю ширину плитки, высотой от 40px — удобно пальцем.
   Размер шрифта задан явно: в styles.css базовый .btn--sm у части сайтов
   опускается до 8.5px, а нажимать её будет палец. */
.gift-card__add {
  width: 100%;
  min-height: 40px;
  padding-inline: 0.6rem;
  font-size: 0.7rem;
  line-height: 1.2;
  letter-spacing: 0.07em;
  text-align: center;
}
.gift-card__add.is-loading {
  /* Состояние ожидания ответа: спиннер даёт базовый .btn.is-loading,
     здесь только снимаем затемнение, чтобы текст плитки не гас. */
  opacity: 1;
  filter: none;
  pointer-events: none;
}
.gift-card__add.is-in-list {
  border-color: color-mix(in srgb, var(--gifts-acc) 55%, transparent);
  color: var(--gifts-text-soft);
  /* Базовое правило .btn[aria-disabled] гасит кнопку до 0.42 — для метки
     «В списке» это слишком бледно: оставляем читаемый текст. */
  opacity: 0.78;
  filter: none;
}

/* --------------------------------------------------- пустые состояния --- */
.gifts__empty {
  grid-column: 1 / -1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.3rem;
  padding: 1.5rem 1rem;
  border: 1px dashed var(--gifts-border);
  border-radius: 14px;
  text-align: center;
  color: var(--gifts-muted);
}
.gifts__empty b {
  font-size: 0.86rem;
  font-weight: 700;
  color: var(--gifts-text-soft);
}
.gifts__empty p {
  margin: 0;
  max-width: 46ch;
  font-size: 0.74rem;
  line-height: 1.5;
}
.gifts__empty .btn {
  margin-top: 0.5rem;
}

/* ------------------------------------------------------- уведомление --- */
.gifts__status {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin: 0.85rem 0 0;
  font-size: 0.76rem;
  line-height: 1.45;
  color: var(--gifts-muted);
}
.gifts__status.is-ok {
  color: var(--mint, #8fd3ae);
}
.gifts__status.is-error {
  color: var(--rose, #d98a8a);
}
.gifts__status[hidden] {
  display: none;
}

/* ---------------------------------------------------------- мелкий шрифт --- */
.gifts__note {
  margin: 0.9rem 0 0;
  max-width: 74ch;
  font-size: 0.68rem;
  line-height: 1.5;
  color: var(--gifts-muted);
}

/* Текст только для скринридера (статус загрузки). */
.gifts__sr {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* --------------------------------------------------------- скелетон --- */
.gift-card--skeleton {
  pointer-events: none;
}
.gift-card--skeleton .gift-card__media,
.gift-card--skeleton .gift-card__title,
.gift-card--skeleton .gift-card__price,
.gift-card--skeleton .gift-card__add {
  background: color-mix(in srgb, var(--gifts-text) 7%, transparent);
  animation: gifts-pulse 1.6s ease-in-out infinite;
}
.gift-card--skeleton .gift-card__media {
  background: linear-gradient(
    100deg,
    color-mix(in srgb, var(--gifts-text) 5%, transparent),
    color-mix(in srgb, var(--gifts-text) 11%, transparent),
    color-mix(in srgb, var(--gifts-text) 5%, transparent)
  );
  background-size: 220% 100%;
  animation: gifts-shimmer 1.8s linear infinite;
}
.gift-card--skeleton .gift-card__title {
  height: 1.3em;
  min-height: 1.3em;
  border-radius: 6px;
}
.gift-card--skeleton .gift-card__price {
  width: 4.5rem;
  height: 0.9em;
  border-radius: 6px;
}
.gift-card--skeleton .gift-card__add {
  display: block;
  width: 100%;
  min-height: 40px;
  border-radius: 999px;
}

@keyframes gifts-pulse {
  0%, 100% { opacity: 0.55; }
  50% { opacity: 1; }
}
@keyframes gifts-shimmer {
  from { background-position: 140% 0; }
  to { background-position: -40% 0; }
}

@media (prefers-reduced-motion: reduce) {
  .gift-card--skeleton .gift-card__media,
  .gift-card--skeleton .gift-card__title,
  .gift-card--skeleton .gift-card__price,
  .gift-card--skeleton .gift-card__add {
    animation: none;
  }
}

/* ---------------------------------------------------- узкий экран 390 --- */
@media (max-width: 640px) {
  .gifts__bar {
    align-items: flex-start;
  }
  .gifts__chips {
    /* Скрываем полосу прокрутки, свайп остаётся. */
    scrollbar-width: none;
  }
  .gifts__chips::-webkit-scrollbar {
    display: none;
  }
  .gifts__count {
    margin-inline-start: 0;
    white-space: normal;
  }
  .gift-card__body {
    padding: 0.6rem 0.65rem 0.3rem;
  }
  .gift-card__foot {
    padding: 0.4rem 0.65rem 0.65rem;
  }
  .gift-card__title {
    font-size: 0.78rem;
  }
  .gifts__empty {
    padding: 1.1rem 0.8rem;
  }
}

/* ------------------------------------------------------------- RTL --- */
/* Цены и числа не переставляются (в разметке они в <bdi dir="ltr">), а
   подписи идут от ведущего края блока. */
.gifts[dir="rtl"] .gifts__chip,
.gifts[dir="rtl"] .gift-card__title,
.gifts[dir="rtl"] .gifts__status,
.gifts[dir="rtl"] .gifts__note {
  text-align: start;
}
