/*
 * portfolioGrid — de kop met link en het raster van projecten.
 *
 * Maten 1-op-1 van samdesign.nl (R9): brede kaart 1280x525, smalle kaarten
 * 625x794, 30px ertussen. Onder 1024px wordt het een rij die opzij schuift.
 */

.portfolioHeader {
  margin-bottom: 20px;
}

.portfolioIntro {
  border: 0;
  padding-left: 0;
}

/* ------------------------------------------------------------------
   Het raster
   ------------------------------------------------------------------ */

.portfolioItems {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 30px;
}

.portfolioItem {
  position: relative;
  overflow: hidden;
}

.portfolioItemWide {
  grid-column: 1 / -1;
  aspect-ratio: 1280 / 525;
}

.portfolioItemTall {
  aspect-ratio: 625 / 794;
}

.portfolioLink {
  display: block;
  height: 100%;
  color: var(--colorWhite);
  text-decoration: none;
}

.portfolioFrame {
  position: relative;
  height: 100%;
  overflow: hidden;
}

/*
 * Drie classes, want de reset zet height:auto op img[width][height] en dat
 * weegt zwaarder dan één class. Zonder dit zakt de brede kaart onder 1025px in
 * tot de eigen verhouding van de foto (99px in plaats van 308px).
 */
.portfolioItem .portfolioFrame .portfolioImage {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s;
}

.portfolioItem:hover .portfolioImage {
  transform: scale(1.1);
}

/*
 * Twee verlopen over de brede kaart, precies zoals op samdesign.nl: één over
 * de hele hoogte en één die de onderste 247px dichttrekt, zodat de badge en de
 * onderrand rustig blijven.
 */
.portfolioItemWide .portfolioFrame::before,
.portfolioItemWide .portfolioFrame::after {
  content: '';
  position: absolute;
  left: 0;
  width: 100%;
}

.portfolioItemWide .portfolioFrame::before {
  top: 0;
  height: 100%;
  background: linear-gradient(rgba(255, 255, 255, 0) 37%, rgb(0, 0, 0) 100%);
  opacity: 0.85;
}

.portfolioItemWide .portfolioFrame::after {
  bottom: 0;
  height: 247.28px;
  background: linear-gradient(
    180deg,
    rgba(18, 18, 18, 0) 0%,
    rgba(18, 18, 18, 0.94) 62%,
    rgba(18, 18, 18, 1) 78%,
    rgba(18, 18, 18, 1) 100%
  );
}

/* ------------------------------------------------------------------
   De ronde badge
   ------------------------------------------------------------------ */

.portfolioBadge {
  position: absolute;
  top: 160px;
  left: 80px;
  display: flex;
  flex-direction: column;
  /*
   * flex-start op de dwarsas: de kop krijgt zijn eigen breedte in plaats van
   * die van het vulvlak, breekt daardoor tussen de woorden en niet erdoorheen.
   * Dat is precies wat samdesign.nl doet.
   */
  align-items: flex-start;
  justify-content: center;
  width: 310px;
  height: 310px;
  padding: 45px;
  border-radius: 999px;
  background: var(--badgeColor, #c1856c);
}

.portfolioBadgeTitle {
  margin: 0;
  font-size: 72px;
  font-weight: 500;
  line-height: 59px;
}

.portfolioBadgeSubtitle {
  margin: 0;
  font-size: 27px;
  font-weight: 500;
  line-height: 33px;
}

/* ==================================================================
   Onder 1024px: een rij die je opzij schuift
   ================================================================== */

@media (max-width: 1024px) {
  .portfolioItems {
    display: flex;
    gap: 20px;
    margin-inline: calc(var(--containerPadding) * -1);
    padding-inline: var(--containerPadding);
    /* Dicht op de y-as, anders vangt de rij het scrollen van de pagina op (§7). */
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    scroll-padding-inline: var(--containerPadding);

    /* Geen scrollbalk, net als bij de andere veegvlakken en op samdesign.nl. */
    scrollbar-width: none;
  }

  .portfolioItems::-webkit-scrollbar {
    display: none;
  }

  /*
   * Drie kaarten op een rij die opzij schuift, met een ondergrens van 767px
   * voor de rij zelf: onder die breedte blijft een kaart 242.33px en schuif je
   * verder. Zo staat het op samdesign.nl — gemeten 328px op 1024 en 242.33px
   * op 767 én 390.
   */
  .portfolioItem,
  .portfolioItemWide,
  .portfolioItemTall {
    flex: 0 0 max(33.3333%, 242.333px);
    grid-column: auto;
    aspect-ratio: 625 / 794;
    scroll-snap-align: start;
  }

  .portfolioBadge {
    top: 190px;
    left: 30px;
    width: 125px;
    height: 125px;
    padding: 15px;
  }

  .portfolioBadgeTitle {
    font-size: 29px;
    font-weight: 700;
    line-height: 29px;
  }

  .portfolioBadgeSubtitle {
    font-size: 16px;
    font-weight: 600;
    line-height: 14px;
  }
}

@media (max-width: 767px) {
  .portfolioHeader {
    margin-bottom: 20px;
  }

  .portfolioTitle {
    margin-bottom: 10px;
  }

  /* De badge staat hier dichter bij de hoek en de ondertitel is kleiner. */
  .portfolioBadge {
    top: 120px;
    left: 20px;
  }

  .portfolioBadgeSubtitle {
    font-size: 10px;
  }
}

/*
 * Geen indicator waar het raster geen carrousel is. Drie kaarten van 242px met
 * 20px ertussen zijn 766 breed; hoe breder het venster, hoe minder er te
 * schuiven valt, en rond 542px vallen de laatste twee stippen op dezelfde stand.
 * carousel.js rekent dat per rij uit; deze grens ligt er met opzet iets onder, en
 * niet erboven: zo is het altijd de CSS die verbergt en hoeft het script de
 * hoogte nooit weg te halen — er verspringt dus niets (§9).
 */
@media (min-width: 520px) and (max-width: 767px) {
  .portfolioGrid .carouselDots {
    display: none;
  }
}
