.tooltipped {
  position: relative;
}

// This is the tooltip bubble
.tooltipped::after {
  position: absolute;
  z-index: 1000000;
  display: none;
  padding: 5px 8px;
  font: normal normal 11px/1.5 $body-font;
  -webkit-font-smoothing: subpixel-antialiased;
  color: $tooltip-text-color;
  text-align: center;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  letter-spacing: normal;
  word-wrap: break-word;
  white-space: pre;
  pointer-events: none;
  content: attr(aria-label);
  background: $tooltip-background-color;
  border-radius: 3px;
  opacity: 0;
}

// This is the tooltip arrow
.tooltipped::before {
  position: absolute;
  z-index: 1000001;
  display: none;
  width: 0;
  height: 0;
  color: $tooltip-background-color;
  pointer-events: none;
  content: "";
  border: 5px solid transparent;
  opacity: 0;
}

// delay animation for tooltip
@keyframes tooltip-appear {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

// This will indicate when we'll activate the tooltip
.tooltipped:hover,
.tooltipped:active,
.tooltipped:focus {
  &::before,
  &::after {
    display: inline-block;
    text-decoration: none;
    animation-name: tooltip-appear;
    animation-duration: $tooltip-duration;
    animation-fill-mode: forwards;
    animation-timing-function: ease-in;
    animation-delay: $tooltip-delay;
  }
}

.tooltipped-no-delay:hover,
.tooltipped-no-delay:active,
.tooltipped-no-delay:focus {
  &::before,
  &::after {
    opacity: 1;
    animation: none;
  }
}

.tooltipped-multiline:hover,
.tooltipped-multiline:active,
.tooltipped-multiline:focus {
  &::after {
    display: table-cell;
  }
}

// Tooltipped south
.tooltipped-s,
.tooltipped-se,
.tooltipped-sw {
  &::after {
    top: 100%;
    right: 50%;
    margin-top: 5px;
  }

  &::before {
    top: auto;
    right: 50%;
    bottom: -5px;
    margin-right: -5px;
    border-bottom-color: $tooltip-background-color;
  }
}

.tooltipped-se {
  &::after {
    right: auto;
    left: 50%;
    margin-left: -15px;
  }
}

.tooltipped-sw::after {
  margin-right: -15px;
}

// Tooltips above the object
.tooltipped-n,
.tooltipped-ne,
.tooltipped-nw {
  &::after {
    right: 50%;
    bottom: 100%;
    margin-bottom: 5px;
  }

  &::before {
    top: -5px;
    right: 50%;
    bottom: auto;
    margin-right: -5px;
    border-top-color: $tooltip-background-color;
  }
}

.tooltipped-ne {
  &::after {
    right: auto;
    left: 50%;
    margin-left: -15px;
  }
}

.tooltipped-nw::after {
  margin-right: -15px;
}

// Move the tooltip body to the center of the object.
.tooltipped-s::after,
.tooltipped-n::after {
  transform: translateX(50%);
}

// Tooltipped to the left
.tooltipped-w {
  &::after {
    right: 100%;
    bottom: 50%;
    margin-right: 5px;
    transform: translateY(50%);
  }

  &::before {
    top: 50%;
    bottom: 50%;
    left: -5px;
    margin-top: -5px;
    border-left-color: $tooltip-background-color;
  }
}

// tooltipped to the right
.tooltipped-e {
  &::after {
    bottom: 50%;
    left: 100%;
    margin-left: 5px;
    transform: translateY(50%);
  }

  &::before {
    top: 50%;
    right: -5px;
    bottom: 50%;
    margin-top: -5px;
    border-right-color: $tooltip-background-color;
  }
}

// Multiline tooltips
//
// `.tooltipped-multiline` Add this class when you have long content.
// The downside is you cannot preformat the text with newlines and `[w,e]`
// are always `$tooltip-max-width` wide.
.tooltipped-multiline {
  &::after {
    width: max-content;
    max-width: $tooltip-max-width;
    word-wrap: break-word;
    white-space: pre-line;
    border-collapse: separate;
  }

  &.tooltipped-s::after,
  &.tooltipped-n::after {
    right: auto;
    left: 50%;
    transform: translateX(-50%);
  }

  &.tooltipped-w::after,
  &.tooltipped-e::after {
    right: 100%;
  }
}

@media screen and (min-width: 0\0) {
  // IE11
  .tooltipped-multiline::after {
    width: $tooltip-max-width;
  }
}

// Sticky tooltips
//
// Always show the tooltip.
.tooltipped-sticky {
  &::before,
  &::after {
    display: inline-block;
  }

  &.tooltipped-multiline {
    &::after {
      display: table-cell;
    }
  }
}

// Alert tooltips
//
// Colors for different alert states.
@mixin colorizeTooltip($text-color, $background-color) {
  &::after {
    color: $text-color;
    background: $background-color;
  }

  &.tooltipped-s,
  &.tooltipped-se,
  &.tooltipped-sw {
    &::before {
      border-bottom-color: $background-color;
    }
  }

  &.tooltipped-n,
  &.tooltipped-ne,
  &.tooltipped-nw {
    &::before {
      border-top-color: $background-color;
    }
  }

  &.tooltipped-e::before {
    border-right-color: $background-color;
  }

  &.tooltipped-w::before {
    border-left-color: $background-color;
  }
}

@include retina-media-query {
  .tooltipped-w::after {
    // weird bug on retina
    margin-right: 4.5px;
  }
}
