Skip to content

Gear Mesh Loop

A copy-paste animated icons component in pure HTML & CSS. Zero dependencies, framework-agnostic, MIT-licensed.

Animated IconsHTMLCSSany framework

Copy into your project

HTML
<div class="nuda-ai2-gear-mesh" role="img" aria-label="Gears turning">
  <svg class="nuda-ai2-gear-mesh__svg" viewBox="0 0 34 24" aria-hidden="true">
    <defs>
      <path id="ai2-gear-mesh-shape" fill-rule="evenodd"
        d="M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" />
    </defs>
    <g transform="translate(0,0) scale(0.92)">
      <g class="nuda-ai2-gear-mesh__gear-a">
        <use href="#ai2-gear-mesh-shape" />
      </g>
    </g>
    <g transform="translate(16,7) scale(0.5)">
      <g class="nuda-ai2-gear-mesh__gear-b">
        <use href="#ai2-gear-mesh-shape" />
      </g>
    </g>
  </svg>
</div>
CSS
.nuda-ai2-gear-mesh {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 72px;
  height: 48px;
  background: #09090b;
  border: 1px solid rgba(255,255,255,.1);
  border-radius: 10px;
  color: #e4ff54;
}

.nuda-ai2-gear-mesh__svg {
  width: 40px;
  height: 32px;
  fill: currentColor;
  stroke: none;
}

.nuda-ai2-gear-mesh__gear-a {
  transform-origin: 12px 12px;
  animation: nuda-ai2-gear-mesh-cw 6s linear infinite;
}

.nuda-ai2-gear-mesh__gear-b {
  transform-origin: 12px 12px;
  animation: nuda-ai2-gear-mesh-ccw 3.6s linear infinite;
}

@keyframes nuda-ai2-gear-mesh-cw {
  from {
    transform: rotate(0);
  }
  to {
    transform: rotate(360deg);
  }
}

@keyframes nuda-ai2-gear-mesh-ccw {
  from {
    transform: rotate(0);
  }
  to {
    transform: rotate(-360deg);
  }
}

@media (prefers-reduced-motion:reduce) {
  .nuda-ai2-gear-mesh__gear-a,.nuda-ai2-gear-mesh__gear-b {
    animation: none !important;
  }
}

How to use Gear Mesh Loop

Paste the HTML where you need it and the CSS into a global stylesheet (or a <style> tag). Every class is prefixed nuda- so it never collides with Tailwind or your own styles. Tweak the CSS custom properties to match your design system.

Works in React, Vue, Svelte, Astro, Next.js, Nuxt, Laravel Blade, Django, Rails — or a single .html file. No npm install, no build step.

More animated icons components

← Browse all NudaUI components