.la-icon-wrap {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.1em;
  height: 1.1em;
  line-height: 1;
}

.la-icon-wrap .la-icon,
.la-icon-wrap .la-fallback {
  position: absolute;
  inset: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.la-icon-wrap .la-fallback {
  opacity: 1;
  transition: opacity 180ms ease;
  /* Fallback icon remains static until hover/focus interaction. */
  animation: none;
}

.la-icon-wrap.la-ready .la-fallback {
  opacity: 0;
  animation: none;
}

.la-icon-wrap svg.lucide {
  width: 100%;
  height: 100%;
  stroke-width: 2;
  transform-origin: center;
  transition: transform 220ms ease, filter 220ms ease;
}

/* Hover/focus accelerates the same motion. */
.la-icon-wrap.la-ready.la-hovered svg.lucide,
svg.lucide.la-direct-icon.la-hovered {
  animation: la-auto-breathe 1.1s ease-in-out 1;
}

/* Click/tap triggers a short one-shot pulse. */
.la-icon-wrap.la-ready.la-clicked svg.lucide,
svg.lucide.la-direct-icon.la-clicked {
  animation: la-auto-breathe 1.1s ease-in-out 1;
}

/* Wrench icon: use lucide-animated-like rotation sequence (wrench.json). */
.la-icon-wrap.la-ready.la-lucide-wrench svg.lucide-wrench {
  transform-origin: 90% 10%;
  transform-box: fill-box;
}

.la-icon-wrap.la-ready.la-lucide-wrench.la-hovered svg.lucide-wrench,
svg.lucide.la-direct-icon.la-lucide-wrench.la-hovered {
  animation: la-wrench-tilt 1.05s ease-in-out 1;
}

.la-icon-wrap.la-ready.la-lucide-wrench.la-clicked svg.lucide-wrench,
svg.lucide.la-direct-icon.la-lucide-wrench.la-clicked {
  animation: la-wrench-tilt 1.05s ease-in-out 1;
}

.la-icon-wrap.la-hovered .la-fallback {
  animation: la-pulse 1.35s ease-in-out 1;
}

.la-icon-wrap.la-clicked .la-fallback {
  animation: la-pulse 1.35s ease-in-out 1;
}

.module-toggle .la-icon-wrap {
  transition: transform 180ms ease;
}

/* Activity icon: flowing electrocardiogram style (similar to lucide-animated activity). */
.la-icon-wrap.la-ready.la-lucide-activity svg.lucide-activity polyline {
  stroke-dasharray: 9 5;
}

.la-icon-wrap.la-ready.la-lucide-activity svg.lucide-activity {
  filter: drop-shadow(0 0 0 rgba(13, 148, 136, 0));
}

.la-icon-wrap.la-ready.la-lucide-activity.la-hovered svg.lucide-activity,
svg.lucide.la-direct-icon.la-lucide-activity.la-hovered {
  animation: la-activity-bob 0.95s ease-in-out 1, la-activity-glow 1.1s ease-in-out 1;
}

.la-icon-wrap.la-ready.la-lucide-activity.la-hovered svg.lucide-activity polyline,
svg.lucide.la-direct-icon.la-lucide-activity.la-hovered polyline {
  animation: la-activity-flow 0.85s linear 1;
}

.la-icon-wrap.la-ready.la-lucide-activity.la-clicked svg.lucide-activity,
svg.lucide.la-direct-icon.la-lucide-activity.la-clicked {
  animation: la-activity-bob 0.95s ease-in-out 1, la-activity-glow 1.1s ease-in-out 1;
}

.la-icon-wrap.la-ready.la-lucide-activity.la-clicked svg.lucide-activity polyline,
svg.lucide.la-direct-icon.la-lucide-activity.la-clicked polyline {
  animation: la-activity-flow 0.85s linear 1;
}

/* Bell icon: slight ring swing. */
.la-icon-wrap.la-ready.la-lucide-bell svg.lucide-bell {
  transform-origin: 50% 10%;
}

.la-icon-wrap.la-ready.la-lucide-bell.la-hovered svg.lucide-bell,
svg.lucide.la-direct-icon.la-lucide-bell.la-hovered {
  animation: la-bell-ring 1.8s ease-in-out 1;
}

.la-icon-wrap.la-ready.la-lucide-bell.la-clicked svg.lucide-bell,
svg.lucide.la-direct-icon.la-lucide-bell.la-clicked {
  animation: la-bell-ring 1.8s ease-in-out 1;
}

/* Flask icon: subtle sway similar to lucide-animated flask mood. */
.la-icon-wrap.la-ready.la-lucide-flask-conical svg.lucide-flask-conical {
  transform-origin: 50% 82%;
}

.la-icon-wrap.la-ready.la-lucide-flask-conical.la-hovered svg.lucide-flask-conical,
svg.lucide.la-direct-icon.la-lucide-flask-conical.la-hovered {
  animation: la-flask-sway 1.1s ease-in-out 1;
}

.la-icon-wrap.la-ready.la-lucide-flask-conical.la-clicked svg.lucide-flask-conical,
svg.lucide.la-direct-icon.la-lucide-flask-conical.la-clicked {
  animation: la-flask-sway 1.1s ease-in-out 1;
}

@keyframes la-activity-flow {
  from {
    stroke-dashoffset: 24;
  }
  to {
    stroke-dashoffset: 0;
  }
}

@keyframes la-auto-breathe {
  0%,
  100% {
    transform: translateY(0) scale(1);
    filter: drop-shadow(0 0 0 rgba(13, 148, 136, 0));
  }
  50% {
    transform: translateY(-1px) scale(1.16);
    filter: drop-shadow(0 0 2px rgba(13, 148, 136, 0.35));
  }
}

@keyframes la-pulse {
  0%,
  100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.1);
  }
}

@keyframes la-activity-bob {
  0%,
  100% {
    transform: translateY(0) scale(1);
  }
  50% {
    transform: translateY(-0.8px) scale(1.12);
  }
}

@keyframes la-activity-glow {
  0%,
  100% {
    filter: drop-shadow(0 0 0 rgba(13, 148, 136, 0));
  }
  50% {
    filter: drop-shadow(0 0 3px rgba(13, 148, 136, 0.55));
  }
}

@keyframes la-bell-ring {
  0%,
  100% {
    transform: rotate(0deg);
  }
  10% {
    transform: rotate(10deg);
  }
  20% {
    transform: rotate(-8deg);
  }
  30% {
    transform: rotate(6deg);
  }
  40% {
    transform: rotate(-4deg);
  }
  50% {
    transform: rotate(0deg);
  }
}

@keyframes la-wrench-tilt {
  0% {
    transform: rotate(0deg);
  }
  42% {
    transform: rotate(12deg);
  }
  68% {
    transform: rotate(-14deg);
  }
  88% {
    transform: rotate(4deg);
  }
  100% {
    transform: rotate(0deg);
  }
}

@keyframes la-flask-sway {
  0%,
  100% {
    transform: rotate(0deg) translateY(0);
  }
  25% {
    transform: rotate(4deg) translateY(-0.5px);
  }
  50% {
    transform: rotate(-4deg) translateY(-0.5px);
  }
  75% {
    transform: rotate(2deg) translateY(0);
  }
}

@media (prefers-reduced-motion: reduce) {
  .la-icon-wrap .la-fallback,
  .la-icon-wrap svg.lucide,
  .la-icon-wrap.la-ready.la-lucide-activity svg.lucide-activity,
  .la-icon-wrap.la-ready.la-lucide-activity svg.lucide-activity polyline,
  .la-icon-wrap.la-ready.la-lucide-bell svg.lucide-bell,
  .la-icon-wrap.la-ready.la-lucide-wrench svg.lucide-wrench,
  .la-icon-wrap.la-ready.la-lucide-flask-conical svg.lucide-flask-conical {
    animation-duration: 3.2s !important;
    transition-duration: 320ms !important;
  }
}
