:root {
  --work-tags-height: 0rem; /* REMOVED WORK-TAGS, if using work-tags the default value should be around 2.5rem */
  --max-video-h: 65vh;
}

.work-card-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr); /* Four equal-width columns */
  grid-template-rows: 0fr auto; /* Four equal-width columns */
  grid-column-gap: var(--gap);
  grid-row-gap: var(--gap);
}

/* ↓↓↓ CARD SPECIFIC STYLES ↓↓↓ */

.work-card {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  border: var(--frame) solid var(--bs-emphasis-color);
  grid-column: span 1;
  grid-row: span 1;
  background: var(--bs-secondary-bg);

  border-radius: var(--radius);

  & > *:not(.btn) {
    overflow: hidden;
    border-radius: calc(var(--radius) / 1.5);
  }

  /* This fixes dark outline on the corners */
  .work-sample-media {
    transition: border-radius var(--speed) var(--ease-out);
    border-radius: 0 0 calc(var(--radius) * 0.85) calc(var(--radius) * 0.85);
    overflow: hidden;
  }

  .work-card-content {
    position: absolute;
    bottom: 0;
    left: 0;
    background-color: color-mix(
      in srgb,
      var(--bs-secondary-bg),
      transparent 25%
    );
    backdrop-filter: blur(4px);
    padding-inline: calc(var(--gap) / 2);
    display: grid;
    align-content: start;
    overflow-y: inherit;

    width: 100%;

    scrollbar-color: currentColor transparent;
    scrollbar-width: thin;
    scrollbar-gutter: stable;

    height: 1.75em; /* Fallback for non-support of interpolate-size */
    max-height: 1.75em; /* Fallback for non-support of interpolate-size */

    transition-property: padding-top, padding-bottom, max-height, height;
    transition-duration: calc(var(--speed) * 1.5); /* The speed SHRINKAGE */
    transition-timing-function: var(--ease-out);
    transition-delay: calc(var(--speed) / 4), 0s, 0s, calc(var(--speed) / 1);
  }

  @supports (interpolate-size: allow-keywords) {
    .work-card-content {
      height: fit-content;
      max-height: fit-content;

      box-shadow: inset 0px 0px 0.5rem -0.25rem var(--bs-secondary-bg);
    }
  }

  .work-card-details {
    display: grid;
    height: auto;
    mask-image: linear-gradient(to top, transparent 1rem, black 2rem);
    mask-repeat: no-repeat;

    grid-template-rows: 0fr;
    mask-size: 100% 0%;
    margin-bottom: 0rem;

    transition-property: grid-template-rows, mask-size, margin-bottom;
    transition-duration: calc(var(--speed) * 3);
    transition-timing-function: var(--ease-out);
    transition-delay: calc(var(--speed) / 6), 0s, calc(var(--speed) / 4);
  }

  .work-card-heading {
    color: var(--bs-body-color);
    font-size: var(--fs-3xs);
    margin: 0;
    margin-block: calc(var(--gap) / 2);
  }

  @supports not (interpolate-size: allow-keywords) {
    /* Fallback for non-support of interpolate-size */
    .work-card-heading {
      margin-block: 0.75em;
      display: -webkit-box;
      line-clamp: 1;
      -webkit-line-clamp: 1;
      -webkit-box-orient: vertical;
      overflow: clip;
      text-overflow: ellipsis;
      text-wrap: unset;
    }
  }

  .work-card-description {
    font-size: var(--fs-2xs);
    overflow: hidden;
    max-height: fit-content;

    p {
      max-width: 100%;
    }
  }

  .work-card-img {
    width: 100%;
    height: 100%;
    overflow-clip-margin: unset;
    overflow: clip;
    object-fit: cover;
    transform: scale(1.05);
    transform-origin: center center;
    filter: invert(0) brightness(1) contrast(1);

    object-position: 50% 50%;
    aspect-ratio: 16 / 9;

    transition-property: filter, transform;
    transition-duration: calc(var(--speed) * 5);
    transition-timing-function: cubic-bezier(0.16, 0.75, 0.43, 1);
  }

  .work-card-actions {
    position: absolute;
    width: 101%;
    bottom: -3rem;
    left: 0rem;
    display: flex;
    gap: calc(var(--gap) / 2);
    background-color: transparent;
    max-height: fit-content;
    justify-content: flex-end;
    padding: calc(var(--gap) / 2);
    padding-block: calc(var(--gap) / 2);
    padding-inline-start: calc(var(--gap) / 2);
    padding-inline-end: calc(var(--gap) * 1);
    box-sizing: border-box;
    margin: 0;
    opacity: 0;
    transition-property: bottom, opacity;
    transition-duration: calc(var(--speed) * 1.5);
    background: radial-gradient(
      ellipse at bottom right,
      var(--bs-secondary-bg) 10%,
      transparent 55%
    );

    & > a,
    button {
      -webkit-backdrop-filter: blur(4px); /* fix for Safari */
      backdrop-filter: blur(4px);
    }
  }

  .close-video {
    position: absolute;
    right: calc(var(--frame) * 0.666 * -1);
    bottom: 100%;
    margin-block: calc(var(--gap) / 2);

    transform: translateY(0rem);
    opacity: 0;
    display: none;

    transition-behavior: allow-discrete;
    transition-property: transform, opacity, display;
    transition-duration: calc(var(--speed) / 8), calc(var(--speed) / 8),
      calc(var(--speed) / 2);
  }

  .work-sample-cookie-notice {
    font-size: var(--fs-md);
    color: var(--bs-primary);
    text-align: center;
    text-wrap-style: balance;
  }

  /* OPTIONAL only used if WORK-TAGS are added*/

  /* .work-tags {
   height: var(--work-tags-height);
   position: absolute;
   width: 100%;
   top: 0rem;
   left: 0rem;
   display: flex;
   gap: calc(var(--gap) / 2);
   align-items: start;
   padding-inline-start: calc(var(--gap) / 2);
   padding-block-start: calc(var(--gap) / 2);
   background-size: 100% 100%;
   background-position: 0% 0%;
   transition-property: background-color, background-size;
   transition-duration: calc(var(--speed) * 4);
   transition-timing-function: var(--ease-in-snap);

   p {
     opacity: 0;
     font-size: var(--fs-3xs);
     color: var(--bs-body-bg);
     backdrop-filter: blur(2px);

     margin: 0;
     padding-block: 0.2rem 0.1rem;
     padding-inline: 0.4rem;
     background-color: #00000066;
     border-radius: var(--border);
     border: calc(var(--border) / 2) solid var(--bs-primary);
     cursor: pointer;
     transition-property: opacity, background-color, color;
     transition-duration: calc(var(--speed) * 2);
     transition-timing-function: var(--ease-out);
   }
 } */
}

/* ↓↓↓ CARD HOVER STYLES ↓↓↓ */

.work-card:not(.playing) {
  &:hover,
  &:focus,
  &:focus-within {
    .work-card-content {
      overflow-y: auto;

      padding-top: var(--work-tags-height);
      padding-bottom: 0rem;

      max-height: 100%;
      height: 100%;

      transition-property: padding-top, padding-bottom, max-height, height;
      transition-duration: calc(var(--speed) * 1.5); /* The speed of GROWTH */
      transition-timing-function: var(--ease-in-snap);
      transition-delay: calc(var(--speed) / 8), calc(var(--speed) / 8),
        calc(var(--speed) / 8), calc(var(--speed) / 8);
    }

    /* This fixes dark outline on the corners */
    .work-sample-media {
      border-radius: calc(var(--radius) * 0.85) !important;
      overflow: hidden;
    }

    @supports not (interpolate-size: allow-keywords) {
      /* Fallback for non-support of interpolate-size */
      .work-card-heading {
        display: -webkit-box;
        line-clamp: 5;
        -webkit-line-clamp: 5;
        -webkit-box-orient: vertical;
        overflow: hidden;
        text-overflow: ellipsis;
      }
    }

    .work-card-details {
      grid-template-rows: 1fr;
      mask-size: 100% 150%;
      margin-bottom: calc(var(--gap) * 2 + 1em);

      transition-property: grid-template-rows, mask-size, margin-bottom;
      transition-duration: calc(var(--speed) * 3);
      transition-timing-function: var(--ease-in);
      transition-delay: 0s, 0s, calc(var(--speed) / 6);
    }

    .work-card-img {
      transform: scale(1);
      filter: invert(0.05) brightness(1) contrast(0.8);
      transition-property: filter, transform;
      transition-duration: calc(var(--speed) * 4);
      transition-timing-function: cubic-bezier(0.16, 0.75, 0.43, 1);
    }

    .work-card-actions {
      bottom: 0rem;
      opacity: 1;
    }

    /* OPTIONAL only used if WORK-TAGS are added*/

    /*
    .work-tags {
      background-size: 50% 50%;
      background-position: -50% -50%;
      transition-duration: calc(var(--speed) * 2);
      p {
        opacity: 1;
        background-color: var(--bs-primary);
        color: var(--bs-body-color);
        transition-duration: calc(var(--speed) / 2);
      }
    } 
    */
  }
}

/* ↓↓↓ WORK ARCHIVES STYLES ↓↓↓ */

.work-categories {
  .work-card {
    min-height: 160px;
  }

  .close-video {
    position: absolute;
    right: calc(var(--frame) * 0.666 * -1);
    bottom: 100%;
    margin-block: calc(var(--gap) / 2);
  }
}

/* ↓↓↓ 


PLAYING WORK ITEM base styles 


↓↓↓ */

.work-card.playing,
.work-card:hover.playing {
  grid-column: 1 / -1;
  grid-row: span 1;
  max-height: calc(var(--frame) * 2 + var(--max-video-h));

  .work-card-content,
  .work-card-actions {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    display: none;
    height: 0%;
  }

  .work-card-img {
    transform: scale(1);
  }

  .h-100 {
    max-height: var(--max-video-h);
  }

  .close-video {
    display: flex;
    transform: translateY(0rem);
    opacity: 1;
  }

  &:not(.player-active) .close-video {
    animation: fade-close calc(var(--speed) * 1) forwards;
  }
}

@keyframes fade-close {
  0% {
    opacity: 0;
    transform: translateY(3rem);
  }
  100% {
    opacity: 1;
    transform: translateY(0rem);
  }
}

/* ↓↓↓ 


VIDEO PLAYER, ANIMATIONS & TRANSITIONS 


↓↓↓ */

/* View transitions SASS */

/*
@mixin itemNumberOrder {
  @for $i from 1 through 12 {
    &:nth-child(#{$i}) {
      order: #{$i};
      view-transition-name: work-sample-transition-#{$i};
    }
  }
}
*/

/* 
.work-card-grid > * {
  @include itemNumberOrder;
  view-transition-class: work-sample-transition;
} 
*/

.work-card-grid > * {
  view-transition-class: work-sample-transition;
  /* This fancys it up a bit*/
}
.work-card-grid > *:nth-child(1) {
  order: 1;
  view-transition-name: work-sample-transition-1;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(2) {
  order: 2;
  view-transition-name: work-sample-transition-2;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(3) {
  order: 3;
  view-transition-name: work-sample-transition-3;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(4) {
  order: 4;
  view-transition-name: work-sample-transition-4;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(5) {
  order: 5;
  view-transition-name: work-sample-transition-5;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(6) {
  order: 6;
  view-transition-name: work-sample-transition-6;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(7) {
  order: 7;
  view-transition-name: work-sample-transition-7;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(8) {
  order: 8;
  view-transition-name: work-sample-transition-8;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(9) {
  order: 9;
  view-transition-name: work-sample-transition-9;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(10) {
  order: 10;
  view-transition-name: work-sample-transition-10;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(11) {
  order: 11;
  view-transition-name: work-sample-transition-11;
  /* This fancys it up a lot */
}
.work-card-grid > *:nth-child(12) {
  order: 12;
  view-transition-name: work-sample-transition-12;
  /* This fancys it up a lot */
}

@media (width >= 576px) {
  @supports not (view-transition-name: none) {
    /* 
  
  Featured item FALLBACK transitions
  
  
  */
    .work-card-grid {
      .work-card:nth-child(2):not(.playing) {
        height: 100%;
        aspect-ratio: 16 / 9;
        transform-origin: top left;
        z-index: 1000;
      }

      &:has(.playing) {
        .work-card:nth-child(2):not(.playing) {
          animation: feature-scale-down calc(var(--speed) * 3) forwards linear;
        }
      }

      &:has(.player-active) {
        .work-card:nth-child(2):not(.playing) {
          animation: none;
        }
      }

      .work-card:nth-child(2):not(.playing) {
        animation: feature-scale-up calc(var(--speed) * 3) forwards linear;
      }
    }

    @keyframes feature-scale-down {
      0% {
        transform-origin: top left;
        transform: scale(1);
        grid-column: span 2;
        grid-row: span 2;
      }

      49% {
        transform-origin: top left;
        transform: scale(0.75);
        grid-column: span 2;
        grid-row: span 2;
      }

      50% {
        transform-origin: top left;
        transform: scale(1.5);
        grid-column: span 1;
        grid-row: span 1;
      }

      100% {
        transform-origin: top left;
        transform: scale(1);
        grid-column: span 1;
        grid-row: span 1;
      }
    }

    @keyframes feature-scale-up {
      0% {
        transform-origin: top left;
        transform: scale(1);
        grid-column: span 1;
        grid-row: span 1;
      }

      49% {
        transform-origin: top left;
        transform: scale(1.5);
        grid-column: span 1;
        grid-row: span 1;
      }

      50% {
        transform-origin: top left;
        transform: scale(0.75);
        grid-column: span 2;
        grid-row: span 2;
      }

      100% {
        transform-origin: top left;
        transform: scale(1);
        grid-column: span 2;
        grid-row: span 2;
      }
    }

    .work-card-grid {
      &:not(:has(.player-active)) {
        .work-card.playing {
          width: 100%;
          max-height: var(--max-video-h);
          grid-column: 1 / -1;
          grid-row: 1;

          transition: all calc(var(--speed) * 8);

          animation: player-scale-up calc(var(--speed) * 4) forwards
            var(--ease-out); /* This creates the FALLBACK scale-up transition */
        }
      }
    }
  }

  /* 
  
  
  Playing item transitions 
  
  
  */

  .work-card-grid {
    transition: grid-template-rows var(--speed), margin-block-end var(--speed),
      margin-block-start calc(var(--speed) * 1) 0s;

    &:has(.playing),
    &:has(.player-active) {
      grid-template-rows: 1fr auto; /* This creates scale-up transition */

      .player-filler {
        background-color: var(--bs-emphasis-color);
        border: var(--frame) solid var(--bs-emphasis-color);
        aspect-ratio: 16 / 9;
        grid-column: 1 / -1;
        grid-row: 1;
        height: 100%;
        display: block;
        border-radius: var(--radius);
        overflow: hidden;
      }
    }
  }

  @keyframes player-scale-up {
    0% {
      opacity: 0;
      aspect-ratio: 99 / 1;
      height: 0%;
    }

    100% {
      opacity: 1;
      aspect-ratio: 16 / 9;
      height: 100%;
    }
  }
}

.player-filler {
  background-color: transparent;
  border: var(--frame) solid transparent;
  width: 100%;
  max-height: var(--max-video-h);
  aspect-ratio: 99 / 1;
  grid-column: 1 / -1;
  grid-row: 1;
  height: 0%;
  opacity: 1;
  display: block;
  transition-behavior: allow-discrete;
  transition-property: aspect-ratio, height, display, margin-block-end, border,
    background-color;
  transition-duration: calc(var(--speed) * 4);
  transition-timing-function: var(--ease-out);
  border-radius: var(--radius);
}

.player-container {
  opacity: 1;
  height: 100%;
}

.hide-video {
  visibility: hidden;
  opacity: 0;
  transition: all calc(var(--speed) * 1) var(--ease-out) 0s;
}

.hide-image {
  visibility: hidden;
  opacity: 0;
  transition: all calc(var(--speed) * 4) var(--ease-out) 0.5s;
}

.work-sample-media {
  display: grid;
  & > * {
    grid-column: 1;
    grid-row: 1;
  }
}

.work-card-grid > * > * {
  grid-area: 1/1;
}

/* ↓↓↓ 


RESPONSIVE CARD-GRID 


↓↓↓ */

@media (width <= 1200px) {
  .work-card-grid {
    grid-template-columns: repeat(4, 1fr);
  }
}

@media (width <= 1200px) {
  .work-card-grid {
    grid-template-columns: repeat(3, 1fr);

    &:has(.player-active) .card-16-9,
    &:has(.playing) .card-16-9 {
      aspect-ratio: auto;
      min-height: 7.5rem;
      height: 100%;
      grid-column: span 2;
    }
  }
}

@media (width <= 768px) {
  .work-card-grid {
    grid-template-columns: repeat(2, 1fr);

    &:has(.player-active) .card-16-9 {
      grid-column: span 1;
    }
  }
}

@media (width >= 576px) {
  .work-card-grid {
    /* Set up the playing item */
    .work-card.playing {
      order: 1; /* Push the playin item to front */
      grid-row: 1;

      transition: order var(--speed) linear;
    }

    &:not(:has(.playing)) {
      transition: margin-block-start calc(var(--speed) * 1.5)
        calc(var(--speed) * 3);

      margin-block-start: calc(var(--gap) * 1.5 * -1);

      /* Set up the featured item */
      .work-card:nth-child(2):not(.playing) {
        height: 100%; /* Fixes gap caused by the forced aspect ratio */
        grid-column: span 2;
        grid-row: span 2;
      }
    }
  }
}

@media (width <= 576px) {
  .work-card-grid,
  .work-card-grid:has(.playing) {
    grid-template-columns: repeat(2, 1fr);

    .player-filler {
      display: none;
    }

    .work-card,
    .work-card.playing {
      grid-column: span 2;
    }

    .card-16-9 {
      aspect-ratio: 16 / 4.5;
      grid-column: span 2;
    }

    /* Hide every item except first three */
    .work-card:nth-last-child(-n + 6) {
      display: none;
    }
  }
}
