About this snippet

Recreate the look of advanced smart speakers with a morphing voice assistant orb. We manipulated complex border-radius properties to create a fluid, glowing blob that breathes as it listens.

Size
1.8 KB
Uses
HTML, CSS
Loads
Nothing external
Views
828
<div class="orb-container">
  <div class="listening-text">Listening...</div>
  <div class="voice-orb"></div>
</div>
*, *::before, *::after {
  box-sizing: border-box;
}

body {
  font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
  margin: 0;
  background: #000000;
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

.orb-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 40px;
}

.listening-text {
  color: #ffffff;
  font-size: 1.25rem;
  letter-spacing: 4px;
  text-transform: uppercase;
  font-weight: 600;
  opacity: 0.8;
  animation: fade-text 2s infinite alternate;
}

@keyframes fade-text {
  0% { opacity: 0.4; }
  100% { opacity: 1; text-shadow: 0 0 10px rgba(255, 255, 255, 0.5); }
}

.voice-orb {
  width: 200px;
  height: 200px;
  background: linear-gradient(135deg, #00f2fe, #4facfe, #00f2fe);
  background-size: 200% 200%;
  box-shadow: 0 0 40px rgba(79, 172, 254, 0.6), inset 0 0 20px rgba(255, 255, 255, 0.5);
  animation: fluid-morph 4s ease-in-out infinite, gradient-shift 3s infinite linear;
}

/* The magic of complex border-radius morphing */
@keyframes fluid-morph {
  0% {
    border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%;
    transform: scale(1);
  }
  33% {
    border-radius: 30% 60% 70% 40% / 50% 60% 30% 60%;
    transform: scale(1.05);
    box-shadow: 0 0 60px rgba(79, 172, 254, 0.8), inset 0 0 30px rgba(255, 255, 255, 0.8);
  }
  66% {
    border-radius: 70% 30% 50% 50% / 30% 30% 70% 70%;
    transform: scale(0.95);
  }
  100% {
    border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%;
    transform: scale(1);
  }
}

@keyframes gradient-shift {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}
Esc
↑↓ moveEnter select

Start from a template

Open an .html file, or HTML, CSS, JS, Markdown, Less or TypeScript files. You can also drop them here. Styles and scripts go into their panes.

Share

Source

Keyboard shortcuts

Save