/* Shared marketplace/directory listing card — generalized from the Places
   marketplace card. Token-only, flat with a subtle hover lift. Two layouts:
   "grid" (vertical card) and "row" (horizontal row card). */
.sivar-listingcard {
  display: flex;
  text-align: left;
  text-decoration: none;
  cursor: pointer;
  border: 1px solid rgb(var(--sivar-line, 229 231 235));
  border-radius: var(--r-lg, 16px);
  background: rgb(var(--sivar-paper, 255 255 255));
  color: rgb(var(--sivar-ink, 17 17 17));
  overflow: hidden;
  padding: 0;
  font-family: 'Inter', system-ui, sans-serif;
  transition:
    transform 160ms var(--sivar-ease-out, ease),
    box-shadow 160ms var(--sivar-ease-out, ease),
    border-color 160ms var(--sivar-ease-out, ease);
}

.sivar-listingcard:hover {
  transform: translateY(-2px);
  border-color: rgb(var(--sivar-line-strong, 209 213 219));
  box-shadow:
    0 1px 2px rgb(var(--sivar-ink, 17 17 17) / 0.06),
    0 8px 24px rgb(var(--sivar-ink, 17 17 17) / 0.08);
}

.sivar-listingcard:focus-visible {
  outline: 2px solid rgb(var(--sivar-accent, 130 10 209));
  outline-offset: 2px;
}

/* ---- grid (vertical) ---- */
.sivar-listingcard--grid {
  flex-direction: column;
}

/* ---- row (horizontal) ---- */
.sivar-listingcard--row {
  flex-direction: row;
  align-items: stretch;
  gap: 0.875rem;
  padding: 0.625rem;
}

/* ---- hero ---- */
.sivar-listingcard__hero {
  width: 100%;
  display: block;
  background: rgb(var(--sivar-wash, 245 245 245));
}

.sivar-listingcard--grid .sivar-listingcard__hero {
  aspect-ratio: 4 / 3;
}

.sivar-listingcard--row .sivar-listingcard__hero {
  flex: 0 0 auto;
  width: 7rem;
  aspect-ratio: 1 / 1;
  border-radius: var(--r-md, 12px);
  overflow: hidden;
}

/* tinted fallback shown when there is no image */
.sivar-listingcard__fallback {
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.75rem;
  line-height: 1;
  color: rgb(var(--sivar-ink-soft, 107 114 128));
  background: rgb(var(--sivar-wash, 245 245 245));
}

.sivar-listingcard__fallback > svg {
  width: 1.75rem;
  height: 1.75rem;
}

/* ---- body ---- */
.sivar-listingcard__body {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  min-width: 0;
}

.sivar-listingcard--grid .sivar-listingcard__body {
  padding: 0.75rem 0.875rem 0.875rem;
}

.sivar-listingcard--row .sivar-listingcard__body {
  flex: 1 1 auto;
  justify-content: center;
  padding: 0;
}

.sivar-listingcard__title {
  font-family: var(--sivar-font-display, 'Fraunces', Georgia, serif);
  font-weight: 800;
  font-size: 1.0625rem;
  line-height: 1.2;
  letter-spacing: -0.01em;
  color: rgb(var(--sivar-ink, 17 17 17));
  /* clamp long names to two lines */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.sivar-listingcard__meta {
  font-size: 0.8125rem;
  line-height: 1.3;
  color: rgb(var(--sivar-ink-soft, 107 114 128));
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.sivar-listingcard__status {
  margin-top: 0.125rem;
}

/* ---- footer (price + rating) ---- */
.sivar-listingcard__footer {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.5rem;
  margin-top: 0.375rem;
}

.sivar-listingcard__price {
  font-weight: 700;
  font-size: 0.9375rem;
  color: rgb(var(--sivar-ink, 17 17 17));
}

.sivar-listingcard__price-unit {
  margin-left: 0.125rem;
  font-weight: 500;
  font-size: 0.75rem;
  color: rgb(var(--sivar-ink-soft, 107 114 128));
}

.sivar-listingcard__rating {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  font-weight: 600;
  font-size: 0.8125rem;
  color: rgb(var(--sivar-ink, 17 17 17));
}

.sivar-listingcard__star {
  width: 0.875rem;
  height: 0.875rem;
  fill: rgb(var(--sivar-mustard, 200 154 46));
  color: rgb(var(--sivar-mustard, 200 154 46));
}

.sivar-listingcard__rating--empty {
  color: rgb(var(--sivar-ink-soft, 107 114 128));
  font-weight: 500;
}

@media (prefers-reduced-motion: reduce) {
  .sivar-listingcard {
    transition: none;
  }

  .sivar-listingcard:hover {
    transform: none;
  }
}
