.three-bubble-loader { display: inline-flex; align-items: center; gap: 0.65rem; color: var(--color-text-muted); opacity: 0.58; transition: opacity var(--transition-speed) ease; } .three-bubble-loader.is-active { opacity: 1; } .three-bubble-loader-dot { --three-bubble-loader-delay: 0s; width: 0.75rem; height: 0.75rem; border-radius: 50%; background: currentColor; opacity: 0.35; } .three-bubble-loader.is-active > .three-bubble-loader-dot { animation: three-bubble-loader-jump 1.2s ease-in-out infinite; animation-delay: var(--three-bubble-loader-delay); } .three-bubble-loader-dot:nth-child(2) { --three-bubble-loader-delay: 0.16s; } .three-bubble-loader-dot:nth-child(3) { --three-bubble-loader-delay: 0.32s; } .loading-indicator-label { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } @keyframes three-bubble-loader-jump { 0%, 55%, 100% { opacity: 0.35; transform: translateY(0); } 20% { opacity: 1; transform: translateY(-0.4rem); } } @media (prefers-reduced-motion: reduce) { .three-bubble-loader.is-active > .three-bubble-loader-dot { animation: none; opacity: 0.7; } }