<section class="error_section">
      <p class="error_section_subtitle">Thanks. You just broke it all !</p>
      <h1 class="error_title">
        <p>404</p>
        404
      </h1>
      <a href="#" class="btn">get me out of here</a>
    </section>
$primary-color: #32C983;
$secondary-color: #25F193;
$black: #343434;
$dark-black: #1A1A1A;
$gradient: linear-gradient(to top, $primary-color, $secondary-color);
$black-gradient: linear-gradient(-225deg, $dark-black, $black);
*{margin:0;padding:0;}
a{
  text-decoration: none;
}
body{
  font-family: 'Source Sans Pro', sans-serif;
  font-weight: 600;
  color: $black;
}
.error_section{
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  height: 100vh;
  background-image: $black-gradient;
  &_subtitle{
    color: $secondary-color;
    text-transform: uppercase;
    letter-spacing: 5pt;
    font-weight: 500;
    font-size: 0.8rem;
    margin-bottom: -5em;
  }
  .error_title{
    --x-shadow: 0;
    --y-shadow: 0;
    --x:50%;
    --y:50%;
    font-size: 15rem;
    transition: all 0.2s ease;
    position: relative;
    padding: 2rem;
    &:hover{
      transition: all 0.2s ease;
      text-shadow: var(--x-shadow) var(--y-shadow) 10px $dark-black;
    }
      p{
      position: absolute;
      top: 2rem;
      left: 2rem;
      background-image: radial-gradient(circle closest-side, rgba(white, 0.05), transparent);
      background-position: var(--x) var(--y);
      background-repeat: no-repeat;
      text-shadow: none; 
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;  
      transition: all 0.1s ease;
      }
  }
}
.btn{
  padding: 0.8em 1.5em;
  border-radius: 99999px;
  background-image: $gradient;
  box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.2), inset 0px -2px 5px 0px rgba(0,0,0,0.2);
  border: none;

  cursor: pointer;


  text-shadow: 0px 1px $black;
  color: white;
  text-transform: uppercase;
  letter-spacing: 1.5pt;
  font-family: 'Source Sans Pro', sans-serif;
  font-size: 0.8rem;
  font-weight: 700;

  transition: ease-out 0.2s all;

  &:hover{
    text-shadow: 0px 1px 1px $black;
    transform: translateY(-5px);
    box-shadow: 0px 4px 15px 2px rgba(0,0,0,0.1), inset 0px -3px 7px 0px rgba(0,0,0,0.2);
    transition: ease-out 0.2s all;
  }
}
View Compiled

 
const title = document.querySelector('.error_title')


//////// Light //////////
document.onmousemove = function(e) {
  let x = e.pageX - window.innerWidth/2;
  let y = e.pageY - window.innerHeight/2;
  
  title.style.setProperty('--x', x + 'px')
  title.style.setProperty('--y', y + 'px')
}

////////////// Shadow ///////////////////
title.onmousemove = function(e) {
  let x = e.pageX - window.innerWidth/2;
  let y = e.pageY - window.innerHeight/2;

  let rad = Math.atan2(y, x).toFixed(2); 
  let length = Math.round(Math.sqrt((Math.pow(x,2))+(Math.pow(y,2)))/10); 

  let x_shadow = Math.round(length * Math.cos(rad));
  let y_shadow = Math.round(length * Math.sin(rad));

  title.style.setProperty('--x-shadow', - x_shadow + 'px')
  title.style.setProperty('--y-shadow', - y_shadow + 'px')

}

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.