<div class="card">
  <div class="card-content">
    <h3 class="card-title">I know exactly what I'm doing</h3>
    <h4 class="card-subtitle"></h4>
  </div>
  <i class="fa-solid fa-hat-witch card-icon"></i>
</div>

<a id="source-link" class="meta-link" href="https://brand.twitch.tv" target="_blank">
  <i class="fa-solid fa-link"></i>
  <span class="roboto-mono">Source</span>
</a>

<a id="yt-link" class="meta-link" href="https://youtu.be/joDhIH6Xumw" target="_blank">
  <i class="fa-brands fa-youtube"></i>
  <span>3 min tutorial</span>
</a>
:root {
  --border: rgb(3, 169, 244);
  
  --g1: rgb(98, 0, 234);
  --g2: rgb(236, 64, 122);
  --g3: rgb(253, 216, 53);
}

body {
  background-color: rgb(10, 10, 10);
  display: grid;
  height: 100vh;
  margin: 0px;
  padding: 0px;
  place-items: center;
}

.card {
  aspect-ratio: 1 / 1.6;
  border: 0.5vmin solid var(--border);
  cursor: pointer;
  position: relative;
  width: 56vmin;
}

.card:hover:before {
  background-position: 100% 100%;
  transform: scale(1.08, 1.03);
}

.card:hover > .card-content {
  background-position: -10% 0%;
}

.card:hover > .card-icon {
  color: white; 
}

.card:hover > .card-content > .card-subtitle > .card-subtitle-word {  
  opacity: 1;
  transform: translateY(0%);
  transition: opacity 0ms, transform 200ms cubic-bezier(.90, .06, .15, .90);
}

.card:before {
  background: linear-gradient(
    130deg, 
    transparent 0% 33%, 
    var(--g1) 66%, 
    var(--g2) 83.5%, 
    var(--g3) 100%
  );
  background-position: 0% 0%;
  background-size: 300% 300%;
  content: "";
  height: 100%;
  left: 0px;
  pointer-events: none;
  position: absolute;
  top: 0px;
  transition: background-position 350ms ease, transform 350ms ease;
  width: 100%;
  z-index: 1;
}

.card-content {
  background-image: radial-gradient(
    rgba(255, 255, 255, 0.2) 8%, 
    transparent 8%
  );
  background-position: 0% 0%;
  background-size: 5vmin 5vmin;
  height: calc(100% - 10vmin);
  padding: 5vmin;
  position: relative;
  transition: background-position 350ms ease;
  width: calc(100% - 10vmin);
  z-index: 2;
}

.card-title,
.card-subtitle {
  color: white;
  font-family: "Anek Latin", sans-serif;
  font-weight: 400;
  margin: 0px;
}

.card-title {
  font-size: 6vmin;
}

.card-subtitle {
  font-size: 3vmin;
  margin-top: 2vmin;
}

.card-subtitle-word {
  display: inline-block;
  margin: 0vmin 0.3vmin;
  opacity: 0;
  position: relative;  
  transform: translateY(40%);
  transition: none;
}

.card-icon {
  bottom: 0px;
  color: rgba(255, 255, 255, 0.5);
  font-size: 7vmin;
  left: 0px;
  margin: 5vmin;
  position: absolute;
  transition: color 250ms ease;
  z-index: 2;
}

/* -- YouTube Link Styles -- */

#source-link {
  top: 60px;
}

#source-link > i {
  color: rgb(94, 106, 210);
}

#yt-link {  
  top: 10px;
}

#yt-link > i {
  color: rgb(239, 83, 80);
}

.meta-link {
  align-items: center;
  backdrop-filter: blur(3px);
  background-color: rgba(255, 255, 255, 0.05);
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 6px;
  box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.1);
  cursor: pointer;  
  display: inline-flex;
  gap: 5px;
  left: 10px;
  padding: 10px 20px;
  position: fixed;
  text-decoration: none;
  transition: background-color 350ms, border-color 350ms;
  z-index: 10000;
}

.meta-link:hover {
  background-color: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.2);
}

.meta-link > i, .meta-link > span {
  height: 20px;
  line-height: 20px;
}

.meta-link > span {
  color: white;
  font-family: "Anek Latin", sans-serif;
  transition: color 600ms;
}
const subtitle = document.getElementsByClassName("card-subtitle")[0];

const createWord = (text, index) => {
  const word = document.createElement("span");
  
  word.innerHTML = `${text} `;
  
  word.classList.add("card-subtitle-word");
  
  word.style.transitionDelay = `${index * 40}ms`;
  
  return word;
}

const addWord = (text, index) => subtitle.appendChild(createWord(text, index));

const createSubtitle = text => text.split(" ").map(addWord);

createSubtitle("But in a much more real sense, I have no idea what I'm doing.");

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://codepen.io/Hyperplexed/pen/xxYJYjM/54407644e24173ad6019b766443bf2a6.js