<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"
        d="M 441.6 405 A 113 113 0 1 1 441.6 195 Z" fill="none"  />

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

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

      <rect id="js-right-fill"
        x="441.6" y="187" width="72" height="226" fill="#EEB65A" clip-path="url(#right-slice-mask)" />
    </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 = {
  JOIN_X: DURATIONS.JOIN,
  get JOIN() {
    return this.JOIN_X + DURATIONS.JOIN - 100;
  },
  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,
  translateX: [
    { value: -10, duration: 1 },
    { value: 0, duration: DURATIONS.JOIN },
    {
      value: -10,
      duration: DURATIONS.COMBINE,
      delay: TIME.BURST - DURATIONS.JOIN,
      easing: 'easeOutQuint',
    },
  ],
  translateY: [
    { value: -28, duration: 1 },
    { delay: TIME.JOIN_X, value: 0, duration: DURATIONS.JOIN },
    {
      delay: TIME.COMBINE - TIME.JOIN,
      value: -28,
      duration: DURATIONS.JOIN,
    },
  ],
};

const leftFill = {
  easing: 'easeInOutQuint',
  targets: EL.LEFT_FILL,
  translateX: [
    { value: -10, duration: 1 },
    { value: 0, duration: DURATIONS.JOIN },
    {
      value: -10,
      duration: DURATIONS.COMBINE,
      delay: TIME.BURST - DURATIONS.JOIN,
      easing: 'easeOutQuint',
    },
  ],
  translateY: [
    { value: -28, duration: 1 },
    { delay: TIME.JOIN_X, value: 0, duration: DURATIONS.JOIN },
    {
      delay: TIME.COMBINE - TIME.JOIN,
      value: -28,
      duration: DURATIONS.JOIN,
    },
  ],
};

const rightSlice = {
  easing: 'easeInOutQuint',
  targets: EL.RIGHT,
  translateX: [
    { value: 10, duration: 1 },
    { value: 0, duration: DURATIONS.JOIN },
    {
      value: 10,
      duration: DURATIONS.COMBINE,
      delay: TIME.BURST - DURATIONS.JOIN,
      easing: 'easeOutQuint',
    },
  ],
  translateY: [
    { value: 28, duration: 1 },
    { delay: TIME.JOIN_X, value: 0, duration: DURATIONS.JOIN },
    {
      delay: TIME.COMBINE - TIME.JOIN,
      value: 28,
      duration: DURATIONS.JOIN,
    },
  ],
};

const rightFill = {
  easing: 'easeInOutQuint',
  targets: EL.RIGHT_FILL,
  translateX: [
    { value: 10, duration: 1 },
    { value: 0, duration: DURATIONS.JOIN },
    {
      value: 10,
      duration: DURATIONS.COMBINE,
      delay: TIME.BURST - DURATIONS.JOIN,
      easing: 'easeOutQuint',
    },
  ],
  translateY: [
    { value: 28, duration: 1 },
    { delay: TIME.JOIN_X, value: 0, duration: 800 },
    {
      delay: TIME.COMBINE - TIME.JOIN,
      value: 28,
      duration: DURATIONS.JOIN,
    },
  ],
};

timeline
  .add(at(0, leftSlice))
  .add(at(0, leftFill))
  .add(at(0, rightSlice))
  .add(at(0, rightFill));
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