evaluateColorFunctions function
Evaluates every supported colour function in expr, innermost first.
A color-mix() that cannot be evaluated is rebuilt around its own resolved
body, so its inner var() references still come out substituted.
Implementation
String evaluateColorFunctions(String expr) {
const marker = 'color-mix(';
final idx = expr.indexOf(marker);
if (idx == -1) return expr;
final openIndex = idx + 'color-mix'.length;
final closeIndex = _findMatchingParen(expr, openIndex);
if (closeIndex == -1) return expr;
final body = evaluateColorFunctions(
expr.substring(openIndex + 1, closeIndex),
);
final replacement = evaluateColorMix(body) ?? 'color-mix($body)';
return expr.substring(0, idx) +
replacement +
evaluateColorFunctions(expr.substring(closeIndex + 1));
}