.card-image-swap.card-img-top {
  width: 100%;
  aspect-ratio: 4 / 3;
  background-size: cover;
  background-position: center;
  border-top-left-radius: 0.5rem;
  border-top-right-radius: 0.5rem;
  position: relative;
  transition: background-image 0.3s;
  background-image: var(--card-image);
  overflow: hidden;
}
.card-image-swap.card-img-top img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 0.5rem 0.5rem 0 0;
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none; /* ensures clicks pass through to link */
  aspect-ratio: 4 / 3;
  transition: opacity 0.3s;
  background: none;
}
.card:hover .card-image-swap.card-img-top {
  background-image: var(--card-image-hover);
}
.card:hover .card-image-swap.card-img-top img {
  opacity: 0; /* fade out the SEO-friendly image for the hover */
}

.intro-paragraph-narrow {
  max-width: 32%;
  margin-left: auto;
  margin-right: auto;
}

.card-image-swap .badge {
  z-index: 2;
  position: absolute; /* ensure this is set, it already is from Bootstrap in your HTML */
}

