.project-showcase {
  background: #d9d9d2;
  isolation: isolate;
}

.project-showcase::after {
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(180deg, transparent 58%, rgba(0, 0, 0, .5));
  content: "";
  opacity: .35;
  transition: opacity .35s ease;
  pointer-events: none;
}

.project-showcase > img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform .7s cubic-bezier(.2, .75, .2, 1), filter .35s ease;
}

.project-source {
  position: absolute;
  right: 1rem;
  bottom: 1rem;
  left: 1rem;
  z-index: 2;
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: end;
  gap: .15rem 1rem;
  padding: .9rem 1rem;
  border: 1px solid rgba(255, 255, 255, .34);
  background: rgba(7, 11, 10, .78);
  color: #fff;
  backdrop-filter: blur(12px);
  transform: translateY(calc(100% + 1rem));
  transition: transform .35s cubic-bezier(.2, .75, .2, 1);
}

.project-source b {
  font: 500 .57rem var(--mono);
  letter-spacing: .09em;
  text-transform: uppercase;
}

.project-source small {
  grid-column: 1;
  color: rgba(255, 255, 255, .66);
  font: 400 .62rem var(--mono);
}

.project-source svg {
  grid-column: 2;
  grid-row: 1 / 3;
  width: 1.35rem;
}

.project-showcase:hover > img,
.project-showcase:focus-visible > img {
  transform: scale(1.035);
  filter: saturate(1.05) contrast(1.02);
}

.project-showcase:hover::after,
.project-showcase:focus-visible::after {
  opacity: .7;
}

.project-showcase:hover .project-source,
.project-showcase:focus-visible .project-source {
  transform: translateY(0);
}

.project-showcase:focus-visible {
  outline: 3px solid var(--blue);
  outline-offset: 4px;
}

@media (hover: none) {
  .project-source {
    transform: translateY(0);
  }
}

@media (max-width: 580px) {
  .project-source {
    right: .65rem;
    bottom: .65rem;
    left: .65rem;
    padding: .7rem .75rem;
  }
}
