diff --git a/CLAUDE.md b/CLAUDE.md
index 8410bf2..e3dab88 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -60,7 +60,7 @@ Do not break these behaviours:
- **`addLine()` must `return i`** — `loadLines()` depends on the returned ID.
- **`saveStorage()`** is triggered by `change` events on all `[data-ls]` elements; do not remove that listener.
- **Invoice number bump:** occurs on the next page load after Generate via the `inv_generated_v1` flag; do not bump on Generate itself.
-- **FX rate convention:** 1 foreign unit = X local units (market-standard quote). `price_local = price_foreign * exchange_rate`.
+- **FX rate convention:** User picks which currency goes in the numerator via `rcur` dropdown. If `rcur === lcy`: `price_local = per * rate`. If `rcur === fcy`: `price_local = per / rate`.
## Config structure (`config.yml`)
diff --git a/app/index.html b/app/index.html
index 5b4bd44..0c38434 100644
--- a/app/index.html
+++ b/app/index.html
@@ -636,7 +636,7 @@ function buildForm() {
document.querySelectorAll("[data-ls]").forEach(el => el.addEventListener("change", saveStorage));
document.getElementById("icur").addEventListener("change", () => {
Object.keys(lines).forEach(k => {
- if (document.getElementById(`frate-lbl-${k}`)) updateFxLabels(+k);
+ if (document.getElementById(`rcur-${k}`)) updateFxLabels(+k);
});
});
calcPayBy(); // compute initial pay-by from default 7-day term
@@ -881,8 +881,16 @@ function toggleFx(i) {