.cases-grid {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--grid-gap);
  row-gap: calc(var(--grid-gap) * 10);
  align-items: start;
  transition:
    opacity 300ms var(--ease),
    transform 620ms var(--ease);
}

.cases-grid.is-switching {
  opacity: 0;
  transform: translateY(24px);
  pointer-events: none;
}

/* 6 */
.case[data-variant="half-left"] {
  grid-column: 1 / span 6;
  align-self: center;
}
.case[data-variant="half-left"] .case__media {
  aspect-ratio: 4 / 3;
}
/* 5 */
.case[data-variant="half-right"] {
  grid-column: 8 / span 5;
  align-self: center;
}
.case[data-variant="half-right"] .case__media {
  aspect-ratio: 3 / 4;
}

/* wide 9 */
.case[data-variant="wide-left"] {
  grid-column: 1 / span 9;
}
.case[data-variant="wide-left"] .case__media,
.case[data-variant="wide-right"] .case__media {
  aspect-ratio: 12 / 7;
}

.case[data-variant="wide-right"] {
  grid-column: 4 / span 9;
}

.case__media {
  background: #555;
  border-radius: 30px;
  overflow: hidden;
  box-shadow: 0px 10px 100px rgba(0, 0, 0, 0.17);
  position: relative;
  width: 100%;
}

.case__thumb {
  width: 100%;
  height: 100%;
  object-fit: cover;
  cursor: pointer;
  display: block;
  max-width: 100%;
}

img.case__thumb.is-pending,
img.case__thumb.is-ready {
  transition: opacity 1.2s ease;
  will-change: opacity;
}

img.case__thumb.is-pending {
  opacity: 0;
}

img.case__thumb.is-ready {
  opacity: 1;
}
.case a {
  text-decoration: none;
}
.case-caption {
  margin-top: 2.2rem;
  color: var(--text);
}
.case-title {
  display: inline-block;
  line-height: var(--type-lead-line);
  font-size: clamp(1.1rem, 2vw, 1.5rem);
  max-width: 60ch;
}

.case-title__name {
  font-weight: 500;
  padding-right: 1.6rem;
  position: relative;
}

.case-title__desc {
  font-weight: 500;
}

.case-title__name::before {
  content: "";
  position: absolute;
  top: 0.28em;
  right: 0.28em;
  width: 8px;
  height: 8px;
  border-radius: 8px;
  background-color: var(--accent);
}
.case-tags {
  margin: 1.5rem 0 0;
  padding: 0;
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 8px var(--vr);
  font-size: var(--type-label-size);
  line-height: var(--type-label-line);
  font-weight: var(--type-label-weight);
  letter-spacing: var(--type-label-tracking);
  color: var(--text-muted);
}

.case-tags li {
  white-space: nowrap;
  opacity: 0;
  transition-property: opacity;
  transition-duration: 600ms;
  transition-timing-function: var(--ease);
  transition-delay: 100ms;
}
.case a:hover .case-tags li,
.case a:focus-visible .case-tags li {
  opacity: 1;
  transition-delay: 300ms;
  transition-duration: 1200ms;
}

.case a:hover .case-tags li:nth-child(1),
.case a:focus-visible .case-tags li:nth-child(1) {
  transition-delay: calc(100ms + var(--animation-step) * 0);
}
.case a:hover .case-tags li:nth-child(2),
.case a:focus-visible .case-tags li:nth-child(2) {
  transition-delay: calc(100ms + var(--animation-step) * 1);
}
.case a:hover .case-tags li:nth-child(3),
.case a:focus-visible .case-tags li:nth-child(3) {
  transition-delay: calc(100ms + var(--animation-step) * 2);
}
.case a:hover .case-tags li:nth-child(4),
.case a:focus-visible .case-tags li:nth-child(4) {
  transition-delay: calc(100ms + var(--animation-step) * 3);
}
.case a:hover .case-tags li:nth-child(5),
.case a:focus-visible .case-tags li:nth-child(5) {
  transition-delay: calc(100ms + var(--animation-step) * 4);
}

/* ============ Responsive ============ */

@media (max-width: 1023px) {
  .case[data-variant="half-left"],
  .case[data-variant="half-right"] {
    grid-column: span 6;
    align-self: start;
  }

  .case[data-variant="half-left"] .case__media {
    aspect-ratio: 4 / 5;
  }
  .case[data-variant="half-right"] .case__media {
    aspect-ratio: 4 / 5;
  }

  .case[data-variant="wide-left"],
  .case[data-variant="wide-right"] {
    grid-column: 1 / -1;
    align-self: start;
  }
  .cases-grid {
    row-gap: calc(var(--grid-gap) * 6);
  }
}

@media (max-width: 990px) {
  .case-caption {
    margin-top: 1.5rem;
  }
  .case-caption .case-tags {
    margin-top: 1rem;
  }
  .case .case-tags li {
    white-space: nowrap;
    opacity: 1;
  }
}

@media (max-width: 767px) {
  .cases-grid {
    grid-template-columns: 1fr;
    gap: calc(var(--vr, 8px) * 4);
  }

  .case[data-variant] {
    grid-column: 1 / -1;
    align-self: start;
  }

  .case[data-variant] .case__media {
    aspect-ratio: 5 / 4;
  }
  .case-tags {
    display: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .cases-grid {
    transition: none !important;
  }
}
