JSFiddle - React, Tailwind, and code Playground

HTML

<div class="calc">
  <div class="calc__head">
    <h2 class="calc__title">How match can you earn?</h2>
    <h3 class="calc__price">
      <span class="calc__price-curr">$</span>
      <span class="calc__price-total">1800</span>
      <span class="calc__price-time">/&nbsp;wk</span>
    </h3>
  </div>
  <form action="#" class="calc__form" method="POST">
    <div class="calc__item">
      <div class="range">
        <input type="range" class="range__control" name="range-1" min="1" max="50" value="15" aria-label="Amount per class">
        <div class="range__content">
          <div class="range__caption">Amount per class</div>
          <div class="range__num range__num--curr"></div>
        </div>
      </div>
    </div>
    <div class="calc__item">
      <div class="range">
        <input type="range" class="range__control" name="range-2" min="1" max="30" value="20" aria-label="No. of attendees">
        <div class="range__content">
          <div class="range__caption">No. of attendees</div>
          <div class="range__num range__num--simple"></div>
        </div>
      </div>
    </div>
    <div class="calc__item">
      <div class="range">
        <input type="range" class="range__control" name="range-3" min="1" max="16" value="6" aria-label="No. of classes per week">
        <div class="range__content">
          <div class="range__caption">No. of classes per week</div>
          <div class="range__num range__num--simple"></div>
        </div>
      </div>
    </div>
  </form>
  <div class="calc__foot">
    <div class="calc__info">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Officiis aperiam aut officia
      voluptates. Id aliquam qui consequatur alias.</div>
  </div>
</div>

CSS

@charset "UTF-8";

/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}



*,
*:before,
*:after {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
 ...

JavaScript

(function () {

  'use strict'

  // range
  const form = document.querySelector('.calc__form');
  const controls = document.querySelectorAll('.range__control');

  function updateRangeInputBg(el) {
    el.style.background = 'linear-gradient(to right, #F7CC6B 0%, #F7CC6B ' + ((el.value * 100 / (el.max - 1)) - (100 / el.max)) + '%, #F9ECCD ' + ((el.value * 100 / (el.max - 1)) - (100 / el.max)) + '%, #F9ECCD 100%)'
  }

  function updateRangeNum(el) {
    el.closest('.range').querySelector('.range__num').textContent = parseFloat(el.value, 10);
  }

  function updateTotalPrice(el) {
    console.log(el.value)
    el.closest('.calc').querySelector('.calc__price-total').textContent = parseFloat(el.value, 10);
  }

  controls.forEach(control => {
    updateRangeNum(control);
    updateRangeInputBg(control);
    updateTotalPrice(control);
  });

  function onChange(e) {
    updateRangeNum(e.target);
    updateRangeInputBg(e.target);
    updateTotalPrice(e.target);
  }

  form.addEventListener('input', (e) => {
    e.preventDefault();
    onChange(e);
  });


})();