

.property-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--sp-6);
}
@media (min-width: 640px) {
  .property-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
  .property-grid { grid-template-columns: repeat(3, 1fr); }
}

.property-card {
  position: relative;
}
.property-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-xl);
}
.property-card > a {
  display: block;
  color: inherit;
  text-decoration: none;
}

.card-img {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 3;
  background-color: var(--c-bg-subtle);
  overflow: hidden;
}
.card-img > img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}
.badge {
  position: absolute;
  top: var(--sp-3);
  left: var(--sp-3);
  background: var(--c-badge-sale);
  color: var(--c-text-on-brand);
  padding: var(--sp-1) var(--sp-3);
  border-radius: var(--r-full);
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  letter-spacing: var(--letter-wide);
  text-transform: uppercase;
  z-index: 2;
}
.badge-rent { background: var(--c-badge-rent); }

/* ── Ruban « Exclusif » (mandat exclusif) — coin haut gauche, −45° ──
   Le conteneur = zone de découpe sur toute la photo ; la bande est calée
   pour que ses bords touchent bien le coin (pas de décalage flottant). */
.ribbon-exclusif {
  position: absolute;
  inset: 0;
  overflow: hidden;
  z-index: 4;
  pointer-events: none;
}
.ribbon-exclusif > span {
  position: absolute;
  display: block;
  /* Décollé du coin, légèrement remonté */
  top: 22px;
  left: -30px;
  width: 130px;
  margin: 0;
  padding: 5px 0;
  transform: rotate(-45deg);
  transform-origin: center center;
  background: var(--c-brand-darker, #1D102F);
  color: var(--c-text-on-brand, #fff);
  text-align: center;
  font-size: 13px;
  font-weight: var(--fw-bold, 700);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1.2;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);
  white-space: nowrap;
}
/* Fiche bien : photo plus large → bande un peu plus ample, même ancrage */
.gallery-main-wrap .ribbon-exclusif > span {
  top: 26px;
  left: -34px;
  width: 150px;
  padding: 6px 0;
  font-size: 15px;
  letter-spacing: 0.14em;
}
/* Badge Vente/Location : bascule à droite pour ne pas chevaucher le ruban */
.card-img--exclusif > .badge,
.card-img--exclusif > .pc-badge-tx {
  left: auto;
  right: var(--sp-3);
}

.card-body-property {
  padding: var(--sp-5) var(--sp-5) var(--sp-6);
}
.price {
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  color: var(--c-text);
  margin-bottom: var(--sp-2);
  letter-spacing: var(--letter-tight);
}
.property-card h3 {
  font-size: var(--fs-md);
  margin-bottom: var(--sp-2);
  font-weight: var(--fw-medium);
  line-height: var(--lh-tight);

  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.card-meta {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
}
.card-meta span {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
}

