<div class="section-steps__content">
  <svg class="section-steps__arrow" width="14" height="14" fill="#7b8794" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 13" id="slider-arrow">
    <path d="M0.333252 12.0417L9.04159 6.50004L0.333252 0.958374V12.0417Z"></path>
  </svg>
  <ol class="section-steps__list">
    <li class="section-steps__item">
      <div class="section-steps__number">
        1
        <svg class="section-steps__circle circle-1" width="48" height="48" fill="none">
          <circle cx="24" cy="24" r="22" stroke="#32B978" stroke-width="2" />
        </svg>
      </div>
      <p class="section-steps__text">Заявка на необходимую Вам услугу Digital Express.</p>
    </li>
    <li class="section-steps__item">
      <div class="section-steps__number">
        2
        <svg class="section-steps__circle circle-2" width="48" height="48" fill="none">
          <circle cx="24" cy="24" r="22" stroke="#32B978" stroke-width="2" />
        </svg>
      </div>
      <p class="section-steps__text">Звонок/сообщение Вам от нас. Обсуждение проекта.</p>
    </li>
    <li class="section-steps__item">
      <div class="section-steps__number">
        3
        <svg class="section-steps__circle circle-3" width="48" height="48" fill="none">
          <circle cx="24" cy="24" r="22" stroke="#32B978" stroke-width="2" />
        </svg>
      </div>
      <p class="section-steps__text">Ваша оплата – наша работа.</p>
    </li>
    <li class="section-steps__item">
      <div class="section-steps__number">
        4
        <svg class="section-steps__circle circle-4" width="48" height="48" fill="none">
          <circle cx="24" cy="24" r="22" stroke="#32B978" stroke-width="2" />
        </svg>
      </div>
      <p class="section-steps__text">Информирование о промежуточных результатах.</p>
    </li>
    <li class="section-steps__item">
      <div class="section-steps__number">
        5
        <svg class="section-steps__circle circle-5" width="48" height="48" fill="none">
          <circle cx="24" cy="24" r="22" stroke="#32B978" stroke-width="2" />
        </svg>
      </div>
      <p class="section-steps__text">Выполнение проекта и сдача его строго в срок. ГОТОВО!</p>
    </li>
  </ol>
</div>
body {
  background-color: #1f2933;
}

.section-steps {
  &__content {
    position: relative;
  }

  &__list {
    list-style: none;
    padding: 0;
    margin: 56px 0 40px;
    display: flex;
    position: relative;
    &::before {
      content: "";
      position: absolute;
      width: 80%;
      height: 1px;
      top: 24px;
      left: 50%;
      transform: translateX(-50%);
      z-index: -1;
      background-image: linear-gradient(
        90deg,
        #52606d,
        #52606d 50%,
        transparent 50%,
        transparent 100%
      );
      background-size: 30px 1px;
    }
  }

  &__item {
    display: flex;
    flex-direction: column;
    align-items: center;
    flex: 1;
    text-align: center;
    line-height: 1.24;
    color: #cbd2d9;
    margin: 0 12px;
  }

  $total: 5;
  $play: 1s;
  $stay: 2s;
  $frame-len: 100% / ($total);
  $play-part: $play / ($play + $stay);
  @for $n from 1 through $total {
    $i: $n - 1;
    &__item:nth-child(#{$n}) circle {
      animation-name: line-anim-#{$n};

      $frame-wait: $i * $frame-len;
      $frame-play: $n * $frame-len;
      @keyframes line-anim-#{$n} {
        0%,
        #{$frame-wait} {
          stroke-dashoffset: 138;
        }

        #{$frame-play - $frame-len * $play-part} {
          stroke-dashoffset: 138 - $n * 138 / $total;
        }

        #{$frame-play + $frame-len},
        100% {
          stroke-dashoffset: 138 - $n * 138 / $total;
        }
      }
    }
  }

  &__arrow {
    display: block;
    position: absolute;
    left: 10%;
    top: 24px;
    margin-top: -7px;
    animation: arrowMove ease infinite;
    animation-duration: ($play + $stay) * $total;
  }

  $from: 10%;
  $to: 90%;
  $offset: -38px;

  @keyframes arrowMove {
    0% {
      left: calc(#{$from} + #{$offset});
    }
    @for $n from 1 through $total {
      $i: $n - 1;
      $left: #{$from + $i * ($to - $from) / ($total - 1)};
      $frame-play: $n * $frame-len;
      #{$frame-play - $frame-len * $play-part},
      #{$frame-play - $frame-len} {
        left: calc(#{$left} + #{$offset});
      }
    }
    100% {
      left: calc(#{$to} + #{$offset});
    }
  }

  &__circle {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    width: 100%;
    height: 100%;
    transform: rotate(90deg);

    & circle {
      stroke-dasharray: 138;
      stroke-dasharray: 138;
      animation: ease infinite;
      animation-duration: ($play + $stay) * $total;
    }
  }

  &__number {
    flex: none;
    margin-bottom: 24px;
    width: 48px;
    height: 48px;
    position: relative;
    background-color: #323f4b;
    border-radius: 50%;
    color: #f5f7fa;
    font-size: 28px;
    line-height: 48px;
    font-weight: 500;
    text-align: center;
  }
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.