<main class="overflow-hidden vh-100 flex items-center justify-center" style="background-color: #2C2D3D;">

  <svg class="w-100 mw7 center" viewBox="0 0 800 600" fill="#EEB65A">

    <defs>
      <clipPath id="left-slice-mask">
        <path
          d="M 441.6 405 A 113 113 0 1 1 441.6 195 Z" fill="#fff" />
      </clipPath>
      <clipPath id="right-slice-mask">
        <path
          d="M 441.6 195  A 113 113 0 0 1 441.6 405 Z" fill="#fff" />
      </clipPath>
    </defs>


    <g stroke="#EEB65A" stroke-width="2">
      
      <!-- Arc Strokes -->
      <path class="js-left-slice" transform="translate(-2 0)"
        d="M 441.6 405 A 113 113 0 1 1 441.6 195 Z" fill="none"  />

      <path class="js-right-slice" transform="translate(2 0)"
        d="M 441.6 195  A 113 113 0 0 1 441.6 405 Z" fill="none" />

      <!-- Arc Fills -->
      <rect id="js-left-fill" transform="translate(-2 0)"
        x="287" y="187" width="154" height="226" fill="#EEB65A" clip-path="url(#left-slice-mask)" />

      <rect id="js-right-fill" transform="translate(2 0)"
        x="441.6" y="187" width="72" height="226" fill="#EEB65A" clip-path="url(#right-slice-mask)" />
      
      <!-- Burst ball -->
      <circle id="js-burst" cx="348" cy="300" r="75" fill="#EEB65A" opacity="0" />

    </g>
  </svg>
</main>
.squiggle {
  -webkit-animation: squigglevision 0.3s infinite;
  animation: squigglevision 0.3s infinite;
}

/**
 * from: https://tympanus.net/codrops/2016/03/21/animated-animals-css-svg/
 */
@keyframes squigglevision {
  0 {
    filter: url("#squiggly-0");
  }
  25% {
    filter: url("#squiggly-1");
  }
  50% {
    filter: url("#squiggly-2");
  }
  75% {
    filter: url("#squiggly-3");
  }
  100% {
    filter: url("#squiggly-4");
  }
}
const EL = {
  LEFT: '.js-left-slice',
  RIGHT: '.js-right-slice',
  LEFT_FILL: '#js-left-fill',
  RIGHT_FILL: '#js-right-fill',
  BURST: '#js-burst',
};

const DURATIONS = {
  JOIN: 800,
  SLIDE: 350,
  BURST: 1200,
  COMBINE: 300,
  SLIDE_OFF: 300,
};

const TIME = {
  get SLIDE() {
    return DURATIONS.SLIDE;
  },
  get BURST() {
    return this.SLIDE + DURATIONS.BURST;
  },
  get COMBINE() {
    return this.BURST + DURATIONS.COMBINE;
  },
  get PULL_Y() {
    return this.COMBINE + DURATIONS.JOIN;
  },
};

const timeline = anime.timeline({
  loop: true,
  elasticity: 0,
});

const at = (offset, obj) => ({ ...obj, offset });

const leftSlice = {
  easing: 'easeInOutQuint',
  targets: EL.LEFT,
  opacity: [
    { value: 0, duration: 1 },
    { delay: DURATIONS.BURST, value: 1, duration: 1 },
  ],
};

const leftFill = {
  easing: 'easeInOutQuint',
  targets: EL.LEFT_FILL,
  opacity: [
    { value: 0, duration: 1 },
    { delay: DURATIONS.BURST, value: 1, duration: 1 },
  ],
};

const burst = {
  easing: 'easeOutCubic',
  targets: EL.BURST,
  opacity: [{ value: 1, duration: 1 }, { delay: 1200, value: 0, duration: 1 }],
  scaleX: {
    value: 1.25,
    duration: DURATIONS.BURST / 2,
    delay: DURATIONS.BURST / 2,
    easing: 'easeInCubic',
  },
  translateX: [
    { value: '-=200', duration: DURATIONS.BURST / 2, easing: 'easeOutCubic' },
    { value: '+=182', duration: DURATIONS.BURST / 2, easing: 'easeInCubic' },
  ],
  r: { value: 22.5, duration: 400 },
};

timeline
  .add(at(1200, leftSlice))
  .add(at(1200, leftFill))
  .add(at(1200, burst));
View Compiled

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/tachyons/4.6.2/tachyons.min.css

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/animejs/2.0.0/anime.min.js