/* ================================================================
   Smile V2 — Product card component (Claude Design)
   Border-radius lives on the <img>, not on a wrapper.
   ================================================================ */

.smile-card { display: block; background: transparent; }

/* Anchor wrapper: pure positioning context for badges. No bg, no clip. */
.smile-card__ph {
  position: relative;
  display: block;
  text-decoration: none;
  cursor: pointer;
  line-height: 0;          /* kills inline-img whitespace */
  font-size: 0;
}

/* The image IS the visual. Rounded directly on the element. */
.smile-card__img {
  display: block;
  width: 100%;
  height: auto;
  max-width: 100%;
  border-radius: var(--r-md);
  background: transparent;
  margin: 0;
  padding: 0;
  border: 0;
  transition: transform 0.6s var(--ease);
  transform-origin: center;
}
.smile-card__ph:hover .smile-card__img { transform: scale(1.03); }

/* Badges overlay (top-left of the image, inside .ph wrapper) */
.smile-card__badges {
  position: absolute;
  top: 12px;
  left: 12px;
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0;
  padding: 0;
  list-style: none;
  z-index: 2;
  pointer-events: none;
  font-size: 0;             /* reset (parent has font-size:0) */
}
.smile-card__badge {
  font-family: var(--f-body);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
  padding: 5px 9px;
  border-radius: var(--r-sm);
  background: var(--ink);
  color: #fff;
  white-space: nowrap;
}
.smile-card__badge--new,
.smile-card__badge--online-only { background: var(--champagne); }
.smile-card__badge--discount,
.smile-card__badge--on-sale     { background: var(--burgundy); }
.smile-card__badge--popular,
.smile-card__badge--best-seller { background: var(--rose); color: var(--ink); }

/* Sold-out card variant — matches PDP .ibadge--sold per OUT_OF_STOCK_SPEC §8.
   Antracita translucent + rose dot + slight image desaturation. */
.smile-card__badge--sold {
  background: rgba(43, 40, 38, 0.88);
  color: #fff;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  -webkit-backdrop-filter: blur(4px);
  backdrop-filter: blur(4px);
}
.smile-card__badge--sold .dot {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--rose, #E8C5C5);
}
.smile-card--sold .smile-card__img {
  filter: saturate(0.9);
  opacity: 0.92;
}

/* Meta */
.smile-card__meta { padding: 14px 2px 0; font-size: 14px; line-height: 1.4; }

.smile-card__name {
  font-family: var(--f-body);
  font-size: 14px;
  font-weight: 500;
  line-height: 1.35;
  letter-spacing: 0.005em;
  color: var(--ink);
  margin: 0 0 4px;
}
.smile-card__name a { color: inherit; text-decoration: none; transition: color 0.15s var(--ease); }
.smile-card__name a:hover { color: var(--burgundy); }
.smile-card__name a:focus-visible {
  outline: 2px solid var(--burgundy);
  outline-offset: 2px;
  border-radius: 2px;
}

.smile-card__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

.smile-card__price {
  font-family: var(--f-body);
  font-size: 14px;
  font-weight: 500;
  color: var(--ink);
  font-variant-numeric: tabular-nums;
}
.smile-card__price-old {
  color: var(--ink-3);
  text-decoration: line-through;
  font-weight: 400;
  margin-right: 6px;
  font-size: 13px;
}

.smile-card__swatches { display: inline-flex; gap: 5px; align-items: center; }
.smile-card__sw {
  display: inline-block;
  width: 13px;
  height: 13px;
  border-radius: 50%;
  border: 1px solid rgba(43, 40, 38, 0.12);
  flex-shrink: 0;
  transition: transform 0.2s var(--ease);
}
.smile-card__sw:hover { transform: scale(1.2); }
