.td-contact {
  --td-contact-size: 58px;
  position: fixed;
  left: max(var(--td-contact-left, 20px), env(safe-area-inset-left, 0px));
  bottom: max(var(--td-contact-bottom, 24px), env(safe-area-inset-bottom, 0px));
  z-index: 1000;
  font-family: inherit;
  text-align: left;
}

.td-contact .td-contact__toggle {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--td-contact-size);
  height: var(--td-contact-size);
  min-height: 0;
  margin: 0;
  padding: 15px;
  border: 0;
  border-radius: 50%;
  background: var(--td-contact-color, #063b8f);
  background-image: radial-gradient(circle at 28% 15%, #ffffff40, transparent 55%),
    linear-gradient(155deg, #ffffff12 30%, #00000030);
  color: #fff;
  box-shadow: 0 8px 22px #0003, 0 2px 4px #0002,
    inset 0 1px 1px #ffffff70, inset 0 -2px 3px #0002;
  isolation: isolate;
  overflow: visible;
  cursor: pointer;
  line-height: 1;
  letter-spacing: normal;
  text-transform: none;
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
  transition: transform .3s cubic-bezier(.2, .8, .2, 1.3), box-shadow .3s ease;
}

.td-contact__toggle::before,
.td-contact__toggle::after {
  content: "";
  position: absolute;
  inset: -4px;
  z-index: -1;
  border-radius: 50%;
  opacity: 0;
  pointer-events: none;
}

.td-contact__toggle::before {
  inset: -14px;
  background: radial-gradient(circle, transparent 35%, var(--td-contact-color, #063b8f) 48%, transparent 72%);
  animation: td-contact-glow 3.6s ease-in-out infinite;
}

.td-contact__toggle::after {
  border: 1px solid var(--td-contact-color, #063b8f);
  animation: td-contact-ripple 3.6s ease-out infinite;
}

/* Keep the moving highlight clipped to the button, not its caption or halo. */
.td-contact__shine {
  position: absolute;
  inset: 0;
  overflow: hidden;
  border-radius: inherit;
  pointer-events: none;
}

.td-contact__shine::before {
  content: "";
  position: absolute;
  inset: -30%;
  background: linear-gradient(110deg, transparent 35%, #ffffff08 40%, #ffffff50 50%, #ffffff08 60%, transparent 65%);
  transform: translateX(-110%);
  animation: td-contact-shine 7.2s ease-in-out infinite;
}

.td-contact:not(.is-open) .td-contact__toggle-open > svg,
.td-contact:not(.is-open) .td-contact__toggle-open > img {
  transform-origin: 50% 65%;
  animation: td-contact-ring 1.6s ease-in-out infinite;
}

.td-contact.is-open .td-contact__toggle::before,
.td-contact.is-open .td-contact__toggle::after,
.td-contact.is-open .td-contact__shine::before {
  animation: none;
  opacity: 0;
}

@keyframes td-contact-ripple {
  0%, 12% { transform: scale(.98); opacity: 0; }
  20% { opacity: .35; }
  75%, 100% { transform: scale(1.5); opacity: 0; }
}

@keyframes td-contact-glow {
  0%, 100% { transform: scale(.94); opacity: .12; }
  45% { transform: scale(1.08); opacity: .28; }
}

@keyframes td-contact-shine {
  0%, 58% { transform: translateX(-110%); }
  78%, 100% { transform: translateX(110%); }
}

@keyframes td-contact-ring {
  0%, 65%, 100% { transform: translateY(0) rotate(0) scale(1); }
  12%, 36% { transform: translateY(-2px) rotate(-8deg) scale(1.06); }
  24%, 48% { transform: translateY(-2px) rotate(7deg) scale(1.06); }
  56% { transform: translateY(-1px) rotate(-3deg) scale(1.02); }
}

.td-contact__toggle-open,
.td-contact__toggle-close {
  display: flex;
  position: relative;
  width: 28px;
  height: 28px;
  flex-shrink: 0;
  filter: drop-shadow(0 1px 2px #0002);
  transition: transform .4s cubic-bezier(.2, .8, .2, 1.2), opacity .2s ease;
}

.td-contact__toggle-close {
  position: absolute;
  opacity: 0;
  transform: rotate(-90deg) scale(.6);
}

.td-contact.is-open .td-contact__toggle-open {
  opacity: 0;
  transform: rotate(90deg) scale(.6);
}

.td-contact.is-open .td-contact__toggle-close {
  opacity: 1;
  transform: rotate(0) scale(1);
}

.td-contact__caption {
  position: absolute;
  left: calc(100% + 10px);
  max-width: calc(100vw - var(--td-contact-left) - var(--td-contact-size) - 30px);
  padding: 8px 12px;
  border-radius: 8px;
  background: var(--td-contact-color, #063b8f);
  color: #fff;
  font-size: 13px;
  font-weight: 600;
  line-height: 1.4;
  width: max-content;
  overflow-wrap: anywhere;
  pointer-events: none;
  animation: td-contact-caption-nudge 2.4s ease-in-out infinite;
}

.td-contact__caption::before {
  content: "";
  position: absolute;
  top: 50%;
  right: 100%;
  width: 0;
  height: 0;
  border-top: 6px solid transparent;
  border-bottom: 6px solid transparent;
  border-right: 7px solid var(--td-contact-color, #063b8f);
  transform: translateY(-50%);
  pointer-events: none;
}

.td-contact.is-open .td-contact__caption {
  animation: none;
}

@keyframes td-contact-caption-nudge {
  0%, 100% { transform: translateX(0); }
  50% { transform: translateX(6px); }
}

.td-contact__panel {
  position: absolute;
  left: -6px;
  bottom: calc(100% + 12px);
  width: max-content;
  max-width: calc(100vw - var(--td-contact-left) - 12px);
  max-height: max(60px, calc(100vh - var(--td-contact-bottom) - var(--td-contact-size) - 80px));
  max-height: max(60px, calc(100dvh - var(--td-contact-bottom) - var(--td-contact-size) - 80px));
  padding: 6px;
  overflow-y: auto;
  overscroll-behavior: contain;
  visibility: hidden;
  opacity: 0;
  transform: translateY(22px);
  pointer-events: none;
  transition: opacity .25s ease, transform .25s ease, visibility .25s;
}

.td-contact.is-open .td-contact__panel {
  visibility: visible;
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

.td-contact .td-contact__list {
  display: flex;
  flex-direction: column;
  gap: 10px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.td-contact .td-contact__item { margin: 0; padding: 0; }

.td-contact .td-contact__link {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 4px 14px 4px 4px;
  border: 1px solid #e8edf4;
  border-radius: 28px;
  background: #fff;
  color: #17324d;
  text-decoration: none;
  box-shadow: 0 2px 5px #0001;
  transition: background .2s ease;
}

.td-contact .td-contact__link:hover { background: #eef4fb; color: #063b8f; }
@media (hover: hover) {
  .td-contact .td-contact__toggle:hover {
    transform: translateY(-3px) scale(1.04);
    box-shadow: 0 12px 28px #0004, 0 3px 6px #0002,
      inset 0 1px 1px #ffffff70, inset 0 -2px 3px #0002;
  }
}
.td-contact .td-contact__toggle:active { transform: scale(.94); }
.td-contact__toggle:focus-visible,
.td-contact__link:focus-visible { outline: 3px solid #f5a623; outline-offset: 3px; }

.td-contact__icon {
  display: flex;
  flex: 0 0 42px;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  padding: 10px;
  border-radius: 50%;
  background: var(--td-contact-item-color, #063b8f);
  color: #fff;
}

.td-contact svg,
.td-contact img { display: block; width: 100%; height: 100%; object-fit: contain; }
.td-contact__label { font-size: 14px; font-weight: 600; line-height: 1.4; overflow-wrap: anywhere; min-width: 0; }
.td-contact__zalo { font-size: 11px; font-weight: 800; letter-spacing: -.5px; }

@media (max-width: 549px) {
  .td-contact { --td-contact-size: 52px; }
  .td-contact__caption { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .td-contact *, .td-contact *::before, .td-contact *::after {
    transition: none !important;
    animation: none !important;
  }
}
