:root {
  --background-color: #000;
  --color: #fff;
  --timing: .18s;
}

[data-tippy] {
  position: relative;
}

[data-tippy]::before,
[data-tippy]::after {
  position: absolute;
  display: block;
  opacity: 0;
  transition: all var(--timing) ease-out;
  font-family: sans-serif;
  transform: translate3d(-50%, 0, 0);
  transform-origin: top;
  top: 100%;
  left: 50%;
  pointer-events: none;
}

[data-tippy]::before {
  content: attr(data-tippy);
  color: var(--color);
  font-size: 13px;
  background-color: var(--background-color);
  z-index: 1;
  padding: 3px 6px;
  border-radius: 3px;
  white-space: nowrap;
  margin-top: 10px;
}

[data-tippy]::after {
  content: '';
  border: 5px solid transparent;
  border-bottom-color: var(--background-color);
}

[data-tippy]:hover::before,
[data-tippy]:hover::after {
  transform: translate3d(-50%, 0, 0);
}

/* reset for other positions */

[data-tippy][data-tippy-pos]::before {
  top: auto;
  left: auto;
  margin-top: auto;
  transform: none;
}

[data-tippy][data-tippy-pos]::after {
  top: auto;
  left: auto;
  margin-top: auto;
  border-bottom-color: transparent;
  transform: none;
}

/* end reset */

/* up and down */

[data-tippy][data-tippy-pos='up']::before,
[data-tippy][data-tippy-pos='up']::after,
[data-tippy][data-tippy-pos='down']::before,
[data-tippy][data-tippy-pos='down']::after {
  left: 50%;
}

/* up */

[data-tippy][data-tippy-pos='up']::before,
[data-tippy][data-tippy-pos='up']::after {
  bottom: 100%;
  transform: translate3d(-50%, 0, 0);
}

[data-tippy][data-tippy-pos='up']::before {
  margin-bottom: 10px;
}

[data-tippy][data-tippy-pos='up']::after {
  border-top-color: var(--background-color);
  border-bottom-color: transparent;
}

/* down */

[data-tippy][data-tippy-pos='down']::before,
[data-tippy][data-tippy-pos='down']::after {
  top: 100%;
  transform: translate3d(-50%, 0, 0);
}

[data-tippy][data-tippy-pos='down']::before {
  margin-top: 10px;
}

[data-tippy][data-tippy-pos='down']::after {
	border-bottom-color: var(--background-color);
  border-top-color: transparent;
}

/* left and right */

[data-tippy][data-tippy-pos='left']::before,
[data-tippy][data-tippy-pos='left']::after,
[data-tippy][data-tippy-pos='right']::before,
[data-tippy][data-tippy-pos='right']::after {
  top: 50%;
}

/* left */

[data-tippy][data-tippy-pos='left']::before,
[data-tippy][data-tippy-pos='left']::after {
  right: 100%;
  transform: translate3d(0, -50%, 0);
}

[data-tippy][data-tippy-pos='left']::before {
  margin-right: 10px;
}

[data-tippy][data-tippy-pos='left']::after {
  border-left-color: var(--background-color);
}

/* right */

[data-tippy][data-tippy-pos='right']::before,
[data-tippy][data-tippy-pos='right']::after {
  left: 100%;
  transform: translate3d(0, -50%, 0);
}

[data-tippy][data-tippy-pos='right']::before {
  margin-left: 10px;
}

[data-tippy][data-tippy-pos='right']::after {
  border-right-color: var(--background-color);
}

/* hover */

[data-tippy]:hover::before,
[data-tippy]:hover::after {
  opacity: 1;
}

/* animated - slide */

[data-tippy][data-tippy-animate='slide']::before,
[data-tippy][data-tippy-animate='slide']::after {
  transform: translate3d(-50%, -10px, 0);
}

[data-tippy][data-tippy-animate='slide']:hover::before,
[data-tippy][data-tippy-animate='slide']:hover::after {
  transform: translate3d(-50%, 0, 0);
}

[data-tippy][data-tippy-pos='up'][data-tippy-animate='slide']::before,
[data-tippy][data-tippy-pos='up'][data-tippy-animate='slide']::after {
  transform: translate3d(-50%, 10px, 0);
}

[data-tippy][data-tippy-pos='down'][data-tippy-animate='slide']::before,
[data-tippy][data-tippy-pos='down'][data-tippy-animate='slide']::after {
  transform: translate3d(-50%, -10px, 0);
}

[data-tippy][data-tippy-pos='up'][data-tippy-animate='slide']:hover::before,
[data-tippy][data-tippy-pos='up'][data-tippy-animate='slide']:hover::after,
[data-tippy][data-tippy-pos='down'][data-tippy-animate='slide']:hover::before,
[data-tippy][data-tippy-pos='down'][data-tippy-animate='slide']:hover::after {
  transform: translate3d(-50%, 0, 0);
}

[data-tippy][data-tippy-pos='left'][data-tippy-animate='slide']::before,
[data-tippy][data-tippy-pos='left'][data-tippy-animate='slide']::after {
  transform: translate3d(10px, -50%, 0);
}

[data-tippy][data-tippy-pos='right'][data-tippy-animate='slide']::before,
[data-tippy][data-tippy-pos='right'][data-tippy-animate='slide']::after {
  transform: translate3d(-10px, -50%, 0);
}

[data-tippy][data-tippy-pos='left'][data-tippy-animate='slide']:hover::before,
[data-tippy][data-tippy-pos='left'][data-tippy-animate='slide']:hover::after,
[data-tippy][data-tippy-pos='right'][data-tippy-animate='slide']:hover::before,
[data-tippy][data-tippy-pos='right'][data-tippy-animate='slide']:hover::after {
  transform: translate3d(0, -50%, 0);
}

/* animated - bubble */

[data-tippy][data-tippy-animate='bubble']::before,
[data-tippy][data-tippy-animate='bubble']::after {
  opacity: 1;
  visibility: hidden;
}

[data-tippy][data-tippy-animate='bubble']:hover::before,
[data-tippy][data-tippy-animate='bubble']:hover::after {
  visibility: visible;
}

[data-tippy][data-tippy-animate='bubble']::before {
  clip-path: circle(10% at 50% 0);
}

[data-tippy][data-tippy-animate='bubble']:hover::before {
  clip-path: circle(100% at 50%);
}

[data-tippy][data-tippy-pos='up'][data-tippy-animate='bubble']::before {
  clip-path: circle(10% at 50% 100%);
}

[data-tippy][data-tippy-pos='up'][data-tippy-animate='bubble']:hover::before {
  clip-path: circle(100% at 50%);
}

[data-tippy][data-tippy-pos='down'][data-tippy-animate='bubble']::before {
  clip-path: circle(10% at 50% 0);
}

[data-tippy][data-tippy-pos='down'][data-tippy-animate='bubble']:hover::before {
  clip-path: circle(100% at 50%);
}

[data-tippy][data-tippy-pos='left'][data-tippy-animate='bubble']::before {
  clip-path: circle(10% at 100% 50%);
}

[data-tippy][data-tippy-pos='left'][data-tippy-animate='bubble']:hover::before {
  clip-path: circle(100% at 50%);
}

[data-tippy][data-tippy-pos='right'][data-tippy-animate='bubble']::before {
  clip-path: circle(10% at 0 50%);
}

[data-tippy][data-tippy-pos='right'][data-tippy-animate='bubble']:hover::before {
  clip-path: circle(100% at 50%);
}
