/* GE2studio V1.10.14 — Dual Launcher: Assistant + Micro.
 * Adds an optional voice shortcut beside the existing assistant launcher.
 * The microphone remains progressive enhancement and is hidden when the
 * browser does not expose Web Speech Recognition in a secure context.
 */

.ge2-contact-launchers {
  position: relative;
  z-index: 3;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  pointer-events: auto;
}

.ge2-contact-launchers .ge2-contact-launcher {
  flex: 0 0 auto;
}

/* Tooltips move above the two-button group so they never cover the neighbour. */
.ge2-contact-launchers .ge2-contact-launcher::after {
  right: 50%;
  top: auto;
  bottom: calc(100% + 10px);
  transform: translate(50%, 5px);
}

@media (hover: hover) and (pointer: fine) {
  .ge2-contact-launchers .ge2-contact-launcher:hover::after,
  .ge2-contact-launchers .ge2-contact-launcher:focus-visible::after {
    opacity: 1;
    transform: translate(50%, 0);
  }
}

/* Slightly quieter than the main assistant button at rest. */
.ge2-contact-launchers .ge2-voice-launcher {
  border-color: rgba(221, 100, 44, .38);
  background: rgba(18, 19, 20, .93);
  box-shadow:
    0 16px 44px rgba(16, 17, 18, .27),
    0 0 0 1px rgba(221, 100, 44, .045),
    0 0 20px rgba(221, 100, 44, .10),
    inset 0 1px rgba(255, 255, 255, .04);
  animation: ge2-voice-launcher-idle 6.4s ease-in-out infinite;
}

.ge2-contact-launchers .ge2-voice-launcher::before {
  inset: -5px;
  border-color: rgba(221, 100, 44, .35);
  box-shadow: 0 0 14px rgba(221, 100, 44, .11);
  opacity: .17;
  transform: scale(1.03);
  animation: none;
}

.ge2-contact-launchers .ge2-voice-launcher .ge2-contact-launcher-icon {
  color: rgba(221, 100, 44, .88);
  filter: drop-shadow(0 0 4px rgba(221, 100, 44, .20));
}

.ge2-contact-launchers .ge2-voice-launcher:hover,
.ge2-contact-launchers .ge2-voice-launcher:focus-visible {
  border-color: rgba(221, 100, 44, .82);
  background: rgba(12, 13, 14, .99);
  box-shadow:
    0 18px 52px rgba(16, 17, 18, .30),
    0 0 0 1px rgba(221, 100, 44, .12),
    0 0 30px rgba(221, 100, 44, .22),
    inset 0 1px rgba(255, 255, 255, .045);
  animation: none;
}

.ge2-contact-launchers .ge2-voice-launcher:hover::before,
.ge2-contact-launchers .ge2-voice-launcher:focus-visible::before {
  opacity: .45;
  transform: scale(1.08);
}

.ge2-contact-launchers .ge2-voice-launcher.is-listening {
  color: #fffaf4;
  border-color: rgba(221, 100, 44, .96);
  background: var(--orange, #b94a1b);
  box-shadow:
    0 18px 52px rgba(16, 17, 18, .31),
    0 0 0 5px rgba(221, 100, 44, .12),
    0 0 34px rgba(221, 100, 44, .32),
    inset 0 1px rgba(255, 255, 255, .10);
  animation: ge2-voice-launcher-listening 1.35s ease-in-out infinite;
}

.ge2-contact-launchers .ge2-voice-launcher.is-listening .ge2-contact-launcher-icon {
  color: #fffaf4;
  filter: drop-shadow(0 0 7px rgba(255, 250, 244, .28));
}

.ge2-contact-launchers .ge2-voice-launcher.is-listening::before {
  border-color: rgba(221, 100, 44, .78);
  opacity: .58;
  animation: ge2-voice-launcher-ring 1.35s ease-out infinite;
}

.ge2-contact-widget.is-open .ge2-contact-launchers {
  pointer-events: none;
}

@keyframes ge2-voice-launcher-idle {
  0%, 52%, 100% {
    border-color: rgba(221, 100, 44, .38);
    box-shadow:
      0 16px 44px rgba(16, 17, 18, .27),
      0 0 0 1px rgba(221, 100, 44, .045),
      0 0 20px rgba(221, 100, 44, .10),
      inset 0 1px rgba(255, 255, 255, .04);
  }
  10% {
    border-color: rgba(221, 100, 44, .58);
    box-shadow:
      0 16px 44px rgba(16, 17, 18, .27),
      0 0 0 1px rgba(221, 100, 44, .08),
      0 0 26px rgba(221, 100, 44, .16),
      inset 0 1px rgba(255, 255, 255, .04);
  }
}

@keyframes ge2-voice-launcher-listening {
  0%, 100% {
    box-shadow:
      0 18px 52px rgba(16, 17, 18, .31),
      0 0 0 4px rgba(221, 100, 44, .11),
      0 0 28px rgba(221, 100, 44, .27),
      inset 0 1px rgba(255, 255, 255, .10);
  }
  50% {
    box-shadow:
      0 18px 52px rgba(16, 17, 18, .31),
      0 0 0 7px rgba(221, 100, 44, .15),
      0 0 40px rgba(221, 100, 44, .39),
      inset 0 1px rgba(255, 255, 255, .10);
  }
}

@keyframes ge2-voice-launcher-ring {
  0% { opacity: .58; transform: scale(1.02); }
  70%, 100% { opacity: 0; transform: scale(1.22); }
}

@media (max-width: 620px) {
  .ge2-contact-launchers {
    gap: 8px;
  }
}

@media (max-width: 340px) {
  .ge2-contact-launchers {
    gap: 7px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .ge2-contact-launchers .ge2-voice-launcher,
  .ge2-contact-launchers .ge2-voice-launcher.is-listening,
  .ge2-contact-launchers .ge2-voice-launcher.is-listening::before {
    animation: none !important;
  }

  .ge2-contact-launchers .ge2-voice-launcher.is-listening {
    box-shadow:
      0 18px 52px rgba(16, 17, 18, .31),
      0 0 0 5px rgba(221, 100, 44, .13),
      0 0 32px rgba(221, 100, 44, .30),
      inset 0 1px rgba(255, 255, 255, .10);
  }
}
