This could easily be done as a self-contained HTML+CSS+JavaScript page. No network connection needed, just open the single file in a browser. Would work the same on all OSes. (You can use media selectors to optimize the layout on a phone vs. desktop browser, or have multiple CSS layouts the user can select between.)
The pattern you'll want to use, is a global timeout variable and a helper function that when called, clears any already pending timeout and sets a new one in say 10ms, with the timeout calling your recalculating function. Then, use the
.addEventListener("input",helper) method on all text inputs and textareas (
oninput event). This way, the event only
triggers your calculation (after the timeout), instead of
blocking the UI for the duration of the event. It makes the interface much more responsive, especially on slower machines, even though it sounds complicated.
You can do tabs, or many different calculators on the same page, whatever strikes your fancy.
As to the tracking mentioned by CatalinaWOW, one useful trick is to use an ordered list of elements changed. Then, the unknown is the oldest or not-yet-changed element in the set.
Also note that the entire visual style in such static tool pages is controllable via inline CSS. There is nothing forcing say text input boxes to be distinguishable from the background, if you don't want them to. Simply put, it can look exactly like you want, albeit inside the browser window.
If you don't want a browser window, you can do the same in Python. Tk is built-in, but ugly as hell. Qt5 is easy and nice, you can even use an external XML .ui and .css files to optimize how they look (so you can fine-tune the look-and-feel in Qt Designer or by hand without having to recompile anything), but you do need to have Python 3 and Qt5 and PySide2/PyQt5 (Qt 5 Python bindings) installed. No problem in Linux or BSDs, but I hear it can be a bit annoying on Windows. As long as those are installed, the app would be completely portable between OSes, though. I haven't tested Python3+Qt5 on Android, but
this example might help.