<!-- inspired by https://adobe.ly/37qesyd -->
<h1>Tubes</h1>
<div class="tubes">
  
    <div class="tube" style="--percent: 0; --fill-color: #e7b409 ">
        <i class="cap"></i><i class="fill"></i>
        <div class="base">
            <div class="text">0<sup>%</sup></div>
            <div class="icon"><i class="fa-duotone fa-chart-pie-simple"></i></div>
        </div>
    </div>
  
    <div class="tube" style="--percent: 25; --fill-color: #E96413">
        <i class="cap"></i><i class="fill"></i>
        <div class="base">
            <div class="text">25<sup>%</sup></div>
            <div class="icon"><i class="fa-duotone fa-chart-bar"></i></div>
        </div>
    </div>
  
    <div class="tube" style="--percent: 50; --fill-color: #ec1241">
        <i class="cap"></i><i class="fill"></i>
        <div class="base">
            <div class="text">50<sup>%</sup></div>
            <div class="icon"><i class="fa-duotone fa-chart-scatter-3d"></i></div>
        </div>
    </div>
  
    <div class="tube" style="--percent: 75; --fill-color: #af1b76">
        <i class="cap"></i><i class="fill"></i>
        <div class="base">
            <div class="text">75<sup>%</sup></div>
            <div class="icon"><i class="fa-duotone fa-chart-pyramid"></i></div>
        </div>
    </div>
  
    <div class="tube" style="--percent: 100; --fill-color: #a541ac">
        <i class="cap"></i><i class="fill"></i>
        <div class="base">
            <div class="text">100<sup>%</sup></div>
            <div class="icon"><i class="fa-duotone fa-chart-area"></i></div>
        </div>
    </div>
</div>
.tubes { 
  margin-inline: auto; 
  display: flex; 
  flex-wrap: wrap; 
  gap: 2rem; 
  justify-content: center 
}

.tube {
    --width: 4rem;
    --skew: .5rem;
    --tube-color: #fff;
    --anim-duration: 3s;
    width: var(--width);
    aspect-ratio: 1/4.5;
    margin-top: var(--skew);
    border-top-left-radius: 50% var(--skew);
    border-top-right-radius: 50% var(--skew);
    border-bottom-left-radius: 50% var(--skew);
    border-bottom-right-radius: 50% var(--skew);
    display: grid;
    grid-template-rows: max-content auto max-content;
    position: relative;
}
.tube::before{
    --blur: 4px;
    content: '';
    position: absolute;
    width: calc(100% + var(--width) * 0.25);
    z-index: -1;
    right: var(--blur);
    bottom: 0;
    height: calc(var(--skew) * 2);
    background: rgb(0 0 0 / .25);
    border-radius: inherit;
    filter: blur(var(--blur));
}

.tube>.cap{
    --cap-height: calc(var(--width) * .5);
    height: calc(var(--cap-height) + var(--skew));
    border-bottom-left-radius: inherit;
    border-bottom-right-radius: inherit;
    background-color: var(--tube-color);
    background-image: linear-gradient(to right, rgb(0 0 0 / .25), transparent 50%);
    position: relative;
    z-index: 2;
}
.tube>.cap::after{
    content: "";
    position: absolute;
    width: 100%;
    height: calc(var(--skew) * 2);
    background-color: var(--tube-color);
    background-image: linear-gradient(to left, rgb(0 0 0 / .25), transparent);
    border-radius: 50%;
    top: calc(var(--skew) * -1);
}

.tube>.base{
    border-bottom-left-radius: inherit;
    border-bottom-right-radius: inherit;
    background-color: var(--tube-color);
    background-image: linear-gradient(to right, rgb(0 0 0 / .25), transparent 50%);
    position: relative;
    display: grid;
    justify-items: center;
    text-align: center;
    padding-top: calc(var(--width) * 0.1 + var(--skew));
    padding-bottom: calc(var(--width) * .1);
    overflow: hidden;
}


.tube>.base>.text{
    color: var(--fill-color);
    font-family: sans-serif;
    line-height: 1;
    font-size: calc(var(--width) * .4);
    position: relative;
}
.tube>.base>.text > *{
    position: absolute;
    font-size: .5em;
}
.tube>.base>.icon{
    width: 100%;
    color: var(--fill-color);
    background-color: rgb(0 0 0 / .1);
    padding-top: calc(var(--skew) + var(--width) * .1);
    padding-bottom: calc(var(--width) * .1);
    display: grid;
    place-content: center;
    margin-top: calc(var(--skew) * -.5);
    border-bottom-left-radius: 50% var(--skew);
    border-bottom-right-radius: 50% var(--skew);
    --mask-image: radial-gradient( ellipse 100% calc(var(--skew) * 2) at center top, transparent calc(50% - 1px), black calc(50% + 1px));
    -webkit-mask-image: var(--mask-image);
    mask-image: var(--mask-image);
    font-size: calc(var(--width) * .25);
}


.tube>.fill{
    margin-top: calc(var(--skew) * -1);
    position: relative;
    z-index: 1;
    --glas-gradient:
        linear-gradient(
            to right,
            rgb(0 0 0 / .25),
            transparent 10% 15%,
            rgb(255 255 255 / .5) 20%,
            transparent 50% 90%,
            rgb(0 0 0 / .125) 
        );
    background-image: var(--glas-gradient);
}

.tube>.fill::before{
    position: absolute;
    content: "";
    width: 100%;
    --fill-start: var(--skew);
    --fill-end: calc(var(--percent) * 1% + var(--skew));
    height: var(--fill-start);
    background-color: var(--fill-color);
    bottom: calc(var(--skew) * -1);
    border-bottom-left-radius: 50% var(--skew);
    border-bottom-right-radius: 50% var(--skew);
    background-image: 
        var(--glas-gradient),
        radial-gradient(
            ellipse 100% calc(var(--skew) * 2) at center calc(100% - var(--skew)), 
            rgb(255 255 255 /.125) calc(50% - 1px), 
            transparent 50%),
        linear-gradient(
            to right, 
            rgb(0 0 0 / .25), 
            transparent 50% 70%, 
            rgb(0 0 0 / .25));
  animation: fill-before var(--anim-duration) linear forwards
}

.tube>.fill::after{
    content: "";
    position: absolute;
    width: 100%;
    height: calc(var(--skew) * 2);
    background-color: var(--fill-color);
    border-radius: 50%;
    --fill-start: calc(var(--skew) * -1);
    --fill-end: calc(var(--percent) * 1% - var(--skew));
    bottom: var(--fill-start);
    background-image: 
        var(--glas-gradient),
        linear-gradient(to left, rgb(0 0 0 / .25), transparent 50%);
  animation: fill-after var(--anim-duration) linear forwards
}

@keyframes fill-before{ to { height: var(--fill-end)}}
@keyframes fill-after { to { bottom: var(--fill-end)}}

/* for demo */
*, *::before, *::after { box-sizing: border-box; padding: 0; margin: 0 }
body { 
  min-height: 100vh;  
  background-color: #C2C9CF; 
  font-family: 'Poppins', sans-serif; 
  padding: 1rem 
}
h1{ 
  text-align: center; 
  margin-bottom: 1rem 
}
.tubes {
  gap: calc(2vw + 0.2rem); /* (320,8)(1920,32) */;
}
.tube {
  --width: calc(8vw + 0.6rem); /* (320,24)(1920,96) */;
  --skew: calc(1vw + 0.1rem); /* (320,4)(1920,16) */;
}

External CSS

  1. https://pro.fontawesome.com/releases/v6.0.0-beta1/css/all.css
  2. https://fonts.googleapis.com/css2?family=Poppins:wght@300;500&amp;display=swap

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/gsap/3.0.4/gsap.min.js