.hotspot {
  font-size: 2.65vh;
  --hotspot-line-length: 0;
  position: absolute;
}

.hotspot__inner {
  align-items: center;
  background: #002536;
  border-radius: 5px;
  color: #ffffff;
  display: flex;
  font-size: 2vmin;
  font-weight: 700;
  justify-content: center;
  line-height: 1.25;
  padding: 1.4vmin;
  position: absolute;
  text-align: center;
  text-decoration: none;
  transition: background-color .3s, box-shadow .3s;
}

.hotspot__inner:after {
  border: .5px dashed #002536;
  content: '';
  position: absolute;
}

.hotspot__inner:before {
  background: #ffffff;
  border: .5rem solid #002536;
  border-radius: 50%;
  content: '';
  height: .5rem;
  margin: auto;
  position: absolute;
  transition: border .3s;
  width: .5rem;
}

.hotspot.-down .hotspot__inner, .hotspot.-up .hotspot__inner {
  transform: translate3d(-50%, 0, 0);
}

.hotspot.-down .hotspot__inner:after, .hotspot.-up .hotspot__inner:after {
  height: 200px;
  height: var(--hotspot-line-length);
  left: calc(50% - .5px);
  width: 0;
}

.hotspot.-left .hotspot__inner, .hotspot.-right .hotspot__inner {
  transform: translate3d(0, -50%, 0);
}

.hotspot.-left .hotspot__inner:after, .hotspot.-right .hotspot__inner:after {
  bottom: 1px;
  height: 0;
  top: calc(50% - .5px);
  width: 200px;
  width: var(--hotspot-line-length);
}

.hotspot.-up .hotspot__inner {
  top: calc(100% + 1.75vmin + var(--hotspot-line-length));
}

.hotspot.-up .hotspot__inner:before {
  left: 0;
  right: 0;
  top: -1.15vh;
}

.hotspot.-up .hotspot__inner:after {
  bottom: calc(100% + 1.75vmin);
}

.hotspot.-right .hotspot__inner {
  right: calc(100% + 1.75vmin + var(--hotspot-line-length));
}

.hotspot.-right .hotspot__inner:before {
  bottom: 0;
  right: -1.15vh;
  top: 0;
}

.hotspot.-right .hotspot__inner:after {
  left: calc(100% + 1.75vmin);
}

.hotspot.-down .hotspot__inner {
  bottom: calc(100% + 1.75vmin + var(--hotspot-line-length));
}

.hotspot.-down .hotspot__inner:before {
  bottom: -1.15vh;
  left: 0;
  right: 0;
}

.hotspot.-down .hotspot__inner:after {
  top: calc(100% + 1.75vmin);
}

.hotspot.-left .hotspot__inner {
  left: calc(100% + 1.75vmin + var(--hotspot-line-length));
}

.hotspot.-left .hotspot__inner:before {
  bottom: 0;
  left: -1.15vh;
  top: 0;
}

.hotspot.-left .hotspot__inner:after {
  right: calc(100% + 1.75vmin);
}