[data-tippy] {
  position: relative;
}

[data-tippy]:before,
[data-tippy]:after {
  position: absolute;
  display: block;
  opacity: 0;
  font-family: sans-serif;
  transform: translate(-50%, 0);
  transform-origin: top;
  top: 100%;
  left: 50%;
  pointer-events: none;
}

[data-tippy]:before {
  content: attr(data-tippy);
  color: #fff;
  font-size: 14px;
  background-color: #000;
  z-index: 1;
  padding: 3px 6px;
  border-radius: 3px;
  white-space: nowrap;
  margin-top: 10px;
  font-weight: normal;
}

[data-tippy]:after {
  content: '';
  border: 5px solid transparent;
  border-bottom-color: #000;
}

[data-tippy]:hover:before,
[data-tippy]:hover:after {
  transform: translate(-50%, 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: translate(-50%, 0);
}

[data-tippy][data-tippy-pos='up']:before {
  margin-bottom: 10px;
}

[data-tippy][data-tippy-pos='up']:after {
  border-top-color: #000;
  border-bottom-color: transparent;
}

/* down */

[data-tippy][data-tippy-pos='down']:before,
[data-tippy][data-tippy-pos='down']:after {
  top: 100%;
  transform: translate(-50%, 0);
}

[data-tippy][data-tippy-pos='down']:before {
  margin-top: 10px;
}

[data-tippy][data-tippy-pos='down']:after {
	border-bottom-color: #000;
  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: translate(0, -50%);
}

[data-tippy][data-tippy-pos='left']:before {
  margin-right: 10px;
}

[data-tippy][data-tippy-pos='left']:after {
  border-left-color: #000;
}

/* right */

[data-tippy][data-tippy-pos='right']:before,
[data-tippy][data-tippy-pos='right']:after {
  left: 100%;
  transform: translate(0, -50%);
}

[data-tippy][data-tippy-pos='right']:before {
  margin-left: 10px;
}

[data-tippy][data-tippy-pos='right']:after {
  border-right-color: #000;
}

/* hover */

[data-tippy]:hover:before,
[data-tippy]:hover:after {
  opacity: 1;
}

/* animated - fade (default) */

[data-tippy][data-tippy-animate]:before,
[data-tippy][data-tippy-animate]:after {
  transition: all 150ms ease-out;
  transition-delay: 0s;
}

[data-tippy][data-tippy-animate]:hover:before,
[data-tippy][data-tippy-animate]:hover:after {
  transition-delay: 150ms;
}

/* animated - slide */

[data-tippy][data-tippy-animate='slide']:before,
[data-tippy][data-tippy-animate='slide']:after {
  transform: translate(-50%, -10px);
}

[data-tippy][data-tippy-animate='slide']:hover:before,
[data-tippy][data-tippy-animate='slide']:hover:after {
  transform: translate(-50%, 0);
}

[data-tippy][data-tippy-pos='up'][data-tippy-animate='slide']:before,
[data-tippy][data-tippy-pos='up'][data-tippy-animate='slide']:after {
  transform: translate(-50%, 10px);
}

[data-tippy][data-tippy-pos='down'][data-tippy-animate='slide']:before,
[data-tippy][data-tippy-pos='down'][data-tippy-animate='slide']:after {
  transform: translate(-50%, -10px);
}

[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: translate(-50%, 0);
}

[data-tippy][data-tippy-pos='left'][data-tippy-animate='slide']:before,
[data-tippy][data-tippy-pos='left'][data-tippy-animate='slide']:after {
  transform: translate(10px, -50%);
}

[data-tippy][data-tippy-pos='right'][data-tippy-animate='slide']:before,
[data-tippy][data-tippy-pos='right'][data-tippy-animate='slide']:after {
  transform: translate(-10px, -50%);
}

[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: translate(0, -50%);
}

/* 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%);
}

/* force display */

[data-tippy][data-tippy-visible]:before,
[data-tippy][data-tippy-visible]:after {
  opacity: 1;
  visibility: visible;
}

/* sizes */

[data-tippy][data-tippy-size='tiny']:before {
  font-size: 10px;
}

[data-tippy][data-tippy-size='small']:before {
  font-size: 12px;
}

[data-tippy][data-tippy-size='large']:before {
  font-size: 16px;
}

[data-tippy][data-tippy-size='jumbo']:before {
  font-size: 20px;
}
