:root {
  --main-bg-color: #111;
  --main-text-color: #eee;
}

body {
  background: var(--main-bg-color);
  color: var(--main-text-color);
  font-family: "Fira Sans", sans-serif;
	white-space: nowrap;
}
a {
  text-decoration: none;
}

h1 {
  font-size: 3em;
  font-weight: 700;
  margin-bottom: 0;
  margin-top: 1em;
}
h3 {
  font-size: 2em;
  font-weight: 500;
  margin-bottom: 1em;
  margin-top: 0.25em;
}
h1, h3 {
  text-align: center;
}

.periodic-table {
  --animation-time: 0.5s;
  --border-radius: 0.5em;
  --cubic-bezier: cubic-bezier(0.25, 0.75, 0.5, 1.5);
  --delay-time: 0.1s;
  --element-border: 0.33em;
  --element-size: 8em;

  display: grid;
  grid-gap: 1em;
  grid-template-columns: repeat(5, var(--element-size));
  grid-template-rows: repeat(3, var(--element-size));
  justify-content: center;
}

.social-media {
  --start-color: #ff616d;
  --end-color: #ffc171;
}
.personal-info {
  --start-color: #37cfdc;
  --end-color: #5a88e5;
}
.software-projects {
  --start-color: #58ac30;
  --end-color: #a7df62;
}
.social-media,
.personal-info,
.software-projects {
  background: linear-gradient(
      to bottom right,
      var(--start-color) 0%,
      var(--end-color) 100%);
}

.periodic-element-image {
  border: var(--element-border) solid #fff;
  height: calc(100% - var(--element-border) * 2);
  transition: all var(--animation-time) ease;
  width: calc(100% - var(--element-border) * 2);
  z-index: 2;
}
@media (hover: hover) {
  .periodic-element-image:hover {
    border: 0.1em solid #fff;
    border-radius: var(--border-radius);
    transform: scale(1.6);
    z-index: 10;
  }
}

.periodic-element {
  padding: var(--element-border);
  position: relative;
  transition: all var(--animation-time) ease;
  z-index: 1;
}
.periodic-element .periodic-element-inner {
  background: var(--main-bg-color);
  height: 100%;
}

.periodic-element .title {
  font: 700 4em "Fira Mono", monospace;
  padding-top: 0.25em;
  text-align: center;
}
.periodic-element .description {
  font-weight: 500;
  padding-top: 0.1em;
  text-align: center;
}
.periodic-element .title,
.periodic-element .description {
  background: -webkit-linear-gradient(var(--start-color), var(--end-color));
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

@media (hover: hover) {
  .periodic-element:hover {
    transform: scale(1.10);
    z-index: 10;
  }
  .periodic-element:hover .periodic-element-inner {
    background: transparent;
  }
  .periodic-element:hover .title,
  .periodic-element:hover .description {
    -webkit-text-fill-color: var(--main-bg-color);
  }

  .periodic-element::after {
    --description: 1em;
    --horizontal-padding: 1em;
    --width: 10em;

    background: var(--main-text-color);
    border: 1px solid var(--main-bg-color);
    border-radius: var(--border-radius);
    color: var(--main-bg-color);
    content: attr(data-description);
    font-size: var(--description);
    height: auto;
    left: calc(((var(--element-size) - var(--width)) / 2) - var(--horizontal-padding));
    opacity: 0;
    padding: 0.5em var(--horizontal-padding);
    pointer-events: none;
    position: absolute;
    text-align: center;
    top: 50%;
    transition: opacity var(--animation-time) ease var(--delay-time),
                top var(--animation-time) var(--cubic-bezier) var(--delay-time);
    width: var(--width);
    z-index: 10;
  }
  .periodic-element:hover::after {
    opacity: 1;
    pointer-events: auto;
    top: 100%;
  }
}

.legend {
  display: inline-flex;
  font-size: 1.5em;
  justify-content: center;
  margin: 1em auto 0;
  text-align: center;
  width: 100%;
}
.legend-element {
  margin: 0 0.75em;
}
.legend-marker {
  --marker-size: 1.5em;

  display: inline-block;
  height: var(--marker-size);
  vertical-align: middle;
  width: var(--marker-size);
}
.legend-text {
  vertical-align: middle;
}
