/* ================================================================
   PawHappiness — Shop by Category Section
   File:    assets/pawhappiness-categories.css
   ================================================================ */

/* ── Section Shell ────────────────────────────────────────────── */
.ph-categories-section {
  display: block;
}

.ph-cats {
  background: var(--ph-cream, #faf8f5);
  padding-block: clamp(64px, 10vw, 100px);
}

.ph-cats__inner {
  width: 100%;
  max-width: 1280px;
  margin-inline: auto;
  padding-inline: clamp(20px, 5vw, 80px);
}

/* ── Section Header ───────────────────────────────────────── */
.ph-cats__header {
  text-align: center;
  margin-bottom: clamp(40px, 6vw, 60px);
}

.ph-cats__eyebrow {
  font-family: 'Jost', 'Helvetica Neue', sans-serif;
  font-size: clamp(10px, 1vw, 11.5px);
  font-weight: 400;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: #c9a96e;
  margin: 0 0 14px;
}

.ph-cats__heading {
  font-family: 'Cormorant Garamond', Georgia, serif;
  font-size: clamp(36px, 5vw, 56px);
  font-weight: 300;
  line-height: 1.05;
  letter-spacing: -0.02em;
  color: #1c1813;
  margin: 0 0 14px;
}

.ph-cats__sub {
  font-family: 'Jost', 'Helvetica Neue', sans-serif;
  font-size: clamp(14px, 1.4vw, 17px);
  font-weight: 300;
  color: rgba(28, 24, 19, 0.55);
  margin: 0;
  letter-spacing: 0.01em;
}

/* ── Category Grid ────────────────────────────────────────────── */
.ph-cats__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}

/* ── Category Card ────────────────────────────────────────────── */
.ph-cats__card {
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 26px 24px;
  background: #fff;
  border: 1px solid rgba(28, 24, 19, 0.08);
  border-radius: 16px;
  text-decoration: none;
  color: inherit;
  position: relative;
  overflow: hidden;
  transition:
    transform      0.32s cubic-bezier(0.25, 0.46, 0.45, 0.94),
    box-shadow     0.32s cubic-bezier(0.25, 0.46, 0.45, 0.94),
    border-color   0.32s ease;
  -webkit-tap-highlight-color: transparent;
}

/* Gold shimmer on hover via pseudo */
.ph-cats__card::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, rgba(201, 169, 110, 0.04) 0%, transparent 50%);
  opacity: 0;
  transition: opacity 0.32s ease;
}

.ph-cats__card:hover,
.ph-cats__card:focus-visible {
  transform: translateY(-4px);
  box-shadow: 0 16px 48px rgba(28, 24, 19, 0.1);
  border-color: rgba(201, 169, 110, 0.35);
}

.ph-cats__card:hover::before {
  opacity: 1;
}

.ph-cats__card:active {
  transform: translateY(-2px);
}

.ph-cats__card:focus-visible {
  outline: 2px solid #c9a96e;
  outline-offset: 3px;
}

/* ── Icon ─────────────────────────────────────────────────────*/
.ph-cats__icon-wrap {
  flex-shrink: 0;
  width: 52px;
  height: 52px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #faf8f5 0%, #f2ece3 100%);
  border-radius: 14px;
  position: relative;
  z-index: 1;
  transition: background 0.3s ease, transform 0.3s ease;
}

.ph-cats__card:hover .ph-cats__icon-wrap {
  background: linear-gradient(135deg, rgba(201, 169, 110, 0.15) 0%, rgba(201, 169, 110, 0.08) 100%);
  transform: scale(1.06);
}

.ph-cats__icon {
  display: flex;
  align-items: center;
  color: #7c5c3e;
  transition: color 0.3s ease;
}

.ph-cats__icon svg {
  width: 26px;
  height: 26px;
}

.ph-cats__card:hover .ph-cats__icon {
  color: #c9a96e;
}

/* ── Text ─────────────────────────────────────────────────────*/
.ph-cats__text {
  flex: 1;
  position: relative;
  z-index: 1;
}

.ph-cats__name {
  font-family: 'Jost', 'Helvetica Neue', sans-serif;
  font-size: clamp(14px, 1.3vw, 16px);
  font-weight: 500;
  color: #1c1813;
  margin: 0 0 4px;
  letter-spacing: -0.01em;
  transition: color 0.28s ease;
}

.ph-cats__card:hover .ph-cats__name {
  color: #7c5c3e;
}

.ph-cats__count {
  font-family: 'Jost', 'Helvetica Neue', sans-serif;
  font-size: 11.5px;
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(28, 24, 19, 0.38);
}

/* ── Arrow ────────────────────────────────────────────────────*/
.ph-cats__arrow {
  flex-shrink: 0;
  color: rgba(28, 24, 19, 0.2);
  position: relative;
  z-index: 1;
  transition: color 0.28s ease, transform 0.28s ease;
}

.ph-cats__card:hover .ph-cats__arrow {
  color: #c9a96e;
  transform: translateX(4px);
}

/* ── Footer CTA ─────────────────────────────────────────────*/
.ph-cats__footer {
  display: flex;
  justify-content: center;
  margin-top: clamp(36px, 5vw, 52px);
}

.ph-cats__cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: 'Jost', 'Helvetica Neue', sans-serif;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  text-decoration: none;
  color: #7c5c3e;
  padding: 14px 36px;
  border: 1.5px solid rgba(124, 92, 62, 0.35);
  border-radius: 999px;
  transition:
    color       0.3s ease,
    border-color 0.3s ease,
    background  0.3s ease,
    transform   0.25s ease;
}

.ph-cats__cta:hover,
.ph-cats__cta:focus-visible {
  color: #1c1813;
  border-color: #c9a96e;
  background: rgba(201, 169, 110, 0.06);
  transform: translateY(-2px);
}

.ph-cats__cta svg {
  transition: transform 0.28s ease;
}

.ph-cats__cta:hover svg {
  transform: translateX(3px);
}

.ph-cats__cta:focus-visible {
  outline: 2px solid #c9a96e;
  outline-offset: 3px;
}

/* ── Responsive: Tablet (≤1024px) ──────────────────────────── */
@media (max-width: 1024px) {
  .ph-cats__grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ── Responsive: Mobile (≤640px) ──────────────────────────────*/
@media (max-width: 640px) {
  .ph-cats__grid {
    grid-template-columns: 1fr;
    gap: 10px;
  }

  .ph-cats__card {
    padding: 20px 18px;
  }

  .ph-cats__icon-wrap {
    width: 46px;
    height: 46px;
  }
}

/* ── Reduced Motion ────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .ph-cats__card,
  .ph-cats__card::before,
  .ph-cats__icon-wrap,
  .ph-cats__icon,
  .ph-cats__name,
  .ph-cats__arrow,
  .ph-cats__cta,
  .ph-cats__cta svg {
    transition: none;
  }
}
