Webpage values wont update
When the client sends you a request, you should answer only once. Your
root() function attempts to answer twice whenever the request contains
the argument “duty”. The client will not handle a duplicate response to
a single request.

Here is your root() function:



void root()
{
  iso();
  ser.send(200, "text/html", iso());  // ← first response

  if (ser.hasArg("duty"))
  {
      iso();
      s=ser.arg("duty").toInt();
      ledcWrite(4, s);
      iso();
      ser.send(200, "text/html", iso());  // ← second response
  }
}


You may notice that the first response was sent before updating the
duty cycle.

The proper way to handle the request is to first handle the request
parameters, if any, then send the response:

void root()
{
  if (ser.hasArg("duty")) {
    s = ser.arg("duty").toInt();
    ledcWrite(4, s);
  }
  ser.send(200, "text/html", iso());  // ← only sent once
}


As a side note, there is absolutely no need to build the response five
times (you have five calls to iso() within root()) when you only
need it once!