:root {
  --fab-size: 56px;
  --fab-gap: 40px;
}
.fab-stack {
  position: fixed;
  right: 24px;
  top: 50%;
  transform: translateY(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--fab-gap);
  z-index: 10000;
  pointer-events: none;
  opacity: 0;
  transform-origin: right center;
  transition: opacity .35s ease, transform .35s ease;
}
.fab-stack.fab-enter {
  opacity: 1;
  transform: translateY(-50%) scale(1);
}
.fab {
  width: var(--fab-size);
  height: var(--fab-size);
  border-radius: 50%;
  box-shadow: 0 10px 24px rgba(0,0,0,.12);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  border: 2px solid rgba(37,59,80,.08);
  transition: transform .25s ease, box-shadow .25s ease, opacity .25s ease;
  pointer-events: auto;
  cursor: pointer;
  background-color: #fff;
  color: var(--dark-blue);
  overflow: hidden;
  position: relative;
}

.fab i {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  line-height: 1;
}

.fab--wechat i {
  color: #fff;
  font-size: 24px;
  line-height: 0;
}
.fab:hover {
  transform: translateY(-2px) scale(1.06);
  box-shadow: 0 16px 28px rgba(0,0,0,.16);
}
.fab:active {
  transform: scale(.96);
}
.fab.hidden { display: none }
.fab--top {
  background-color: var(--primary-custom);
  color: #fff;
  border-color: transparent;
}
.fab--top.pulse {
  animation: fab-pulse 2s ease-in-out infinite;
}
@keyframes fab-pulse {
  0% { box-shadow: 0 0 0 0 rgba(96,165,250,.5) }
  70% { box-shadow: 0 0 0 14px rgba(96,165,250,0) }
  100% { box-shadow: 0 0 0 0 rgba(96,165,250,0) }
}
.fab--wechat {
  background-color: #07c160;
  color: #fff;
  border-color: transparent;
}
.fab i {
  line-height: 1;
}
@media (max-width: 991.98px) {
  :root { --fab-size: 52px }
  .fab-stack { right: 16px }
}
@media (max-width: 575.98px) {
  :root { --fab-size: 48px; --fab-gap: 32px }
  .fab-stack { right: 12px }
}
