<div class="container">
  <label><input type="radio" name="e"> First</label>
  <label><input type="radio" name="e"> Second</label>
  <label><input type="radio" name="e"> Third</label>
  <label><input type="radio" name="e"> Fourth</label>
  <label><input type="radio" name="e"> Five</label>
  <label><input type="radio" name="e" disabled> And so on ..</label>
</div>
.container {
  --s: 1em;     /* control the size */
  --g: 10px;    /* the gap */
  --c: #009688; /* the active color */
  
  display: grid;
  grid-auto-rows: 1fr;
  gap: var(--g);
  position: relative;
}
.container:before {
  content:"";
  position: absolute;
  height: calc(var(--s)/2);
  left: calc(var(--s)/4 + var(--_x,0px));
  top: calc(var(--s)/4);
  background: var(--c);
  border-radius: 50%;
  aspect-ratio: 1;
  transition: .4s,left cubic-bezier(.1,-2000,.7,-2000) .4s;
}
label {
  display: inline-flex;
  line-height: var(--s);
  align-items: center;
  gap: 10px;
  cursor: pointer;
}
input {
  height: var(--s);
  aspect-ratio: 1;
  border: calc(var(--s)/8) solid var(--_c,#939393);
  border-radius: 50%;
  outline-offset: calc(var(--s)/10);
  padding: calc(var(--s)/8);
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  cursor: pointer;
  font-size: inherit;
  margin: 0;
  transition: .3s;
}
input:checked {
  --_c: var(--c);
}
.container:not(:has(input:checked)):before {
  --_i: -1;
  opacity: 0;
}
.container:has(input:checked):before {
  opacity: 1;
  transform: translateY(calc(var(--_i)*(var(--s) + var(--g))))
}
.container:has(label:nth-child(1) input:checked):before {--_i:0;--_x:.02px}
.container:has(label:nth-child(2) input:checked):before {--_i:1;--_x:.04px}
.container:has(label:nth-child(3) input:checked):before {--_i:2;--_x:.06px}
.container:has(label:nth-child(4) input:checked):before {--_i:3;--_x:.08px}
.container:has(label:nth-child(5) input:checked):before {--_i:4;--_x:.1px}
/* and so on ..*/

input:disabled {
  background: 
     linear-gradient(#939393 0 0) 
     50%/100% 20% no-repeat content-box;
  opacity: .5;
  cursor: not-allowed;
}
@media print {
  input[type=radio] {
    -webkit-appearance: auto;
    -moz-appearance: auto;
    appearance: auto;
    background: none;
  }
}
@supports not selector(:has(*)) {
  .container:before {
    display: none;
  }
  input:checked {
    --_c: var(--c);
    background: var(--c) content-box;
  }
}


body {
  margin:0;
  min-height:100vh;
  display: grid;
  place-content: center;
  font-family: system-ui, sans-serif;
  font-size: 40px;
}

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.