/* Titles belong to the card height so wrapped text cannot consume the row gap. */
.projects #projects.projects-list,
#related-projects .media-wrapper.grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  align-items: start;
  row-gap: 3rem;
}

.projects #projects.projects-list > .sub,
#related-projects .media-wrapper.grid > .sub,
.section--related-projects #related-projects .media-wrapper.grid > .sub {
  float: none;
  width: auto;
  min-width: 0;
  height: auto;
  margin: 0;
}

.projects #projects .no-title.project-wrapper,
#related-projects .no-title.project-wrapper {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  grid-template-rows: auto auto;
  height: auto;
}

.projects #projects .no-title.project-wrapper > .image-wrapper,
#related-projects .no-title.project-wrapper > .image-wrapper {
  grid-area: 1 / 1;
  height: 0;
  padding-bottom: 60%;
}

.projects #projects .no-title.project-wrapper::before,
#related-projects .no-title.project-wrapper::before {
  grid-area: 1 / 1;
  position: relative;
  height: auto;
  z-index: 1;
  pointer-events: none;
}

.projects #projects .no-title.project-wrapper > .btn,
#related-projects .no-title.project-wrapper > .btn {
  grid-area: 1 / 1;
  position: relative;
  inset: auto;
  align-self: center;
  justify-self: center;
  transform: none;
  z-index: 2;
}

.projects #projects .no-title.project-wrapper > .sub-caption,
#related-projects .no-title.project-wrapper > .sub-caption {
  grid-area: 2 / 1;
  display: block;
  position: static;
  margin-top: .6rem;
  overflow: visible;
  white-space: normal;
  overflow-wrap: anywhere;
  -webkit-line-clamp: unset;
  line-clamp: unset;
}

@media only screen and (max-width: 959px) {
  .projects #projects.projects-list,
  #related-projects .media-wrapper.grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media only screen and (max-width: 599px) {
  .projects #projects.projects-list,
  #related-projects .media-wrapper.grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
