%main
  %div
    %div
      %span 404 error
      %span page not found
    %svg{:viewBox => "0 0 200 600"}
      %polygon{:points => "118.302698 8 59.5369448 66.7657528 186.487016 193.715824 14 366.202839 153.491505 505.694344 68.1413353 591.044514 200 591.044514 200 8"}
  %svg.crack{:viewBox => "0 0 200 600"}
    %polyline{:points => "118.302698 8 59.5369448 66.7657528 186.487016 193.715824 14 366.202839 153.491505 505.694344 68.1413353 591.044514"}
  %div
    %svg{:viewBox => "0 0 200 600"}
      %polygon{:points => "118.302698 8 59.5369448 66.7657528 186.487016 193.715824 14 366.202839 153.491505 505.694344 68.1413353 591.044514 0 591.044514 0 8"}
    %div
      %span sorry about that!
      %span
        %a
          %b return home?
View Compiled
$grey: #343434;
$red: #F04F54;
$green: #43CB9D;

$p: 12px;

$easeOutExpo: cubic-bezier(0.190, 1.000, 0.220, 1.000);

*, *:before, *:after { box-sizing: border-box; }
* { -webkit-tap-highlight-color: rgba(0,0,0,0); transform-style: preserve-3d; }
*:focus { outline: none!important; }
body, html { height: 100%; }

body {
  display: flex;
  align-items: center;
  align-content: center;
  justify-content: center;
  padding: $p;
  background: $grey;
  color: white;
  font-family: "Mona Sans", system-ui, sans-serif;
  font-feature-settings: "liga", "ss05" on, "ss07" on;
  font-size: 20px;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

::selection {
  background: none;
}

a {
  display: block;
  cursor: pointer;
  animation: pulseColor 1000ms linear 3100ms forwards;
  font-weight: 500;
  &:hover, &:focus {
    b {
      color: $red;
    }
  }
  &:active {
    b {
      color: $green;
    }
  }
}

svg {
  width: 50px;
  height: auto;
}

.crack {
  position: relative;
  z-index: 4;
  margin-left: -50px;
  polyline {
    fill: none;
    stroke: $red;
    stroke-width: 10px;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-dasharray: 1649.099;
    stroke-dashoffset: 1649.099;
    animation: drawStroke 1500ms ease-out 500ms forwards;
  }
}

main {
  display: flex;
  align-items: center;
  align-content: center;
  justify-content: center;
  > div {
    display: flex;
    align-items: center;
    align-content: center;
    position: relative;
    overflow: hidden;
    svg {
      position: relative;
      z-index: 1;
      polygon {
        fill: $grey;
      }
    }
    span {
      display: block;
      position: relative;
      z-index: 0;
      padding: 0 $p;
      line-height: 1.4;
    }
    &:first-child {
      text-align: right;
      z-index: 1;
      span {
        &:first-child {
          opacity: 0;
          transform: translateX(100%);
          animation: translateLeft 1000ms linear 1250ms forwards;
        }
        &:last-child {
          opacity: 0;
          transform: translateX(100%);
          animation: translateLeft 1000ms linear 1450ms forwards;
        }
      }
      svg {
        polygon {
          animation: removeFill 10ms ease-out 1600ms forwards;
        }
      }
    }
    &:last-child {
      z-index: 0;
      margin-left: -50px;
      span {
        &:first-child {
          opacity: 0;
          transform: translateX(-100%);
          animation: translateRight 1000ms linear 1650ms forwards;
        }
        &:last-child {
          opacity: 0;
          transform: translateX(-100%);
          animation: translateRight 1000ms linear 1850ms forwards;
        }
      }
    }
  }
}

@keyframes drawStroke {
  0% { stroke-dashoffset: 1649.099; }
  100% { stroke-dashoffset: 0; }
}

@keyframes removeFill {
  0% { fill: rgba($grey, 1); }
  100% { fill: rgba($grey, 0); }
}

@keyframes pulseColor {
  0% { color: white; }
  25% { color: $green; }
  50% { color: white; }
  75% { color: $green; }
  100% { color: white; }
}

/* https://goo.gl/v323yz */
@keyframes translateLeft {
  0% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 150, 0, 0, 1); opacity: 1; }
  7.61% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 69.561, 0, 0, 1); }
  11.41% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 39.355, 0, 0, 1); }
  15.12% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 17.801, 0, 0, 1); }
  18.92% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3.02, 0, 0, 1); }
  22.72% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -5.661, 0, 0, 1); }
  30.23% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -10.852, 0, 0, 1); }
  50.25% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2.282, 0, 0, 1); }
  70.27% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.519, 0, 0, 1); }
  100% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); opacity: 1; }
}

/* https://goo.gl/p1Hnde */
@keyframes translateRight {
  0% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -150, 0, 0, 1); opacity: 1; }
  7.61% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -69.561, 0, 0, 1); }
  11.41% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -39.355, 0, 0, 1); }
  15.12% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -17.801, 0, 0, 1); }
  18.92% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -3.02, 0, 0, 1); }
  22.72% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.661, 0, 0, 1); }
  30.23% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10.852, 0, 0, 1); }
  50.25% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2.282, 0, 0, 1); }
  70.27% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.519, 0, 0, 1); }
  100% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); opacity: 1; }
}
View Compiled
// ⟁ \\

External CSS

  1. https://gabriellew.ee/static/css/fonts.css

External JavaScript

This Pen doesn't use any external JavaScript resources.