On the iPhone 8 the env(safe-area-inset-left) value is 0px but on the iPhone 11 it's (around) 40px. To use this information to offset elements correctly, I wanted to use calc to generate 10px and 40px respectively.

The first thing: calc does not let you divide with a unit, like px (and multiplication requires one side to have a unit).

For the maths, I ended up with this (sorting the desired value in --env-margin):

:root {
  --tmp-a: calc(env(safe-area-inset-left) / 13.3333333);
  --tmp-b: calc(var(--tmp-a) + 1px);
  --env-margin: calc(var(--tmp-b) * 10);
}

This ensures that the source value is never a denominator and gets pretty close to my values.

But there's more. CSS has max (and min) and in fact all I needed was:

:root {
  --env-margin: max(env(safe-area-inset-left), 10px);
}

Took me about 4 hours to work that one out.