docs: @Override
      public void accept(long current) {
          if (isDone()) return;
  
          long now = clock.millis();
          if (current > total) current = total;
          int pts_w = terminalWidthSupplier.getAsInt() - 23 - title.length();
  
          fraction = ((double) current) / ((double) total);
          int pct = (int) (fraction * 100);
          int pts = (int) (fraction * pts_w);
  
          if (current < total) {
              if (now - last_update < 73 && pct == last_pct && pts == last_pts) {
                  return;
              }
  
              int remaining_pts = pts_w - pts;
  
              long     duration_ms = now - start;
              Duration remaining   = null;
              // Progress has actually gone forward, recalculate total time.
              if (duration_ms > 3000) {
                  long remaining_ms;
                  if (expected_done_ts == 0L || pct > last_pct) {
                      long assumed_total = (long) (((double) duration_ms) / fraction);
                      remaining_ms = max(0L, assumed_total - duration_ms);
                      expected_done_ts = now + remaining_ms;
                  } else {
                      remaining_ms = max(0L, expected_done_ts - now);
                  }
                  remaining = Duration.of(remaining_ms, ChronoUnit.MILLIS);
              }
  
              if (now >= (spinner_update + 100)) {
                  spinner_pos = (spinner_pos + 1) % spinner.spinner.length;
                  spinner_update = now;
              }
  
              if (pts < pts_w) {
                  updater.formatln("%s: [%s%s%s%s%s] %3d%% %s%s%s%s",
                                   title,
  
                                   Color.GREEN,
                                   Strings.times(spinner.done.toString(), pts),
                                   Color.YELLOW,
                                   Strings.times(spinner.remain.toString(), remaining_pts),
                                   Color.CLEAR,
  
                                   pct,
  
                                   new Color(Color.YELLOW, Color.BOLD),
                                   spinner.spinner[spinner_pos],
                                   Color.CLEAR,
                                   remaining == null ? "" : " + " + format(remaining));
              } else {
                  updater.formatln("%s: [%s%s%s] 100%% %s%s%s%s",
                                   title,
  
                                   Color.GREEN,
                                   Strings.times(spinner.done.toString(), pts),
                                   Color.CLEAR,
  
                                   new Color(Color.YELLOW, Color.BOLD),
                                   spinner.spinner[spinner_pos],
                                   Color.CLEAR,
                                   remaining == null ? "" : " + " + format(remaining));
              }
              last_pct = pct;
              last_pts = pts;
              last_update = now;
          } else {
              updater.formatln("%s: [%s%s%s] 100%% %s%s%s @ %s",
                               title,
  
                               Color.GREEN,
                               Strings.times(spinner.done.toString(), pts_w),
                               Color.CLEAR,
  
                               new Color(Color.GREEN, Color.BOLD),
                               spinner.complete,
                               Color.CLEAR,
                               format(Duration.of(now - start, ChronoUnit.MILLIS)));
              last_update = Long.MAX_VALUE;
              last_pct = 100;
          }
      }