diff --git a/ui/src/components/OperationPanel.jsx b/ui/src/components/OperationPanel.jsx
index fcdb223..917bd5e 100644
--- a/ui/src/components/OperationPanel.jsx
+++ b/ui/src/components/OperationPanel.jsx
@@ -453,6 +453,29 @@ function ScaleLedger({ currentTotals, scaleInputs, setScaleInputs, scalePlug, se
+ {/* What cannot move comes first: it is the constraint the rest is
+ worked out against. Then the walk, which sums to Adjustable, and
+ the two together make the selected total. */}
+ {exclLines.map(seg => (
+
+ |
+ {seg.name}
+
+ final
+
+ |
+ {measures.map(m => (
+
+ {m.key === 'price' ? fmtNum(priceOf(seg), m.dp) : fmtNum(seg[m.key], m.dp)}
+ |
+ ))}
+
+ ))}
+
+ {exclLines.length > 0 && (
+ {rule}{measures.map(m => | )}
+ )}
+
{/* the walk from baseline to current, by initiative */}
{lines.map(e => (
@@ -480,23 +503,6 @@ function ScaleLedger({ currentTotals, scaleInputs, setScaleInputs, scalePlug, se
))}
- {/* Rows the pivot shows but operations cannot write. Listed so the
- panel's figures reconcile with what the grid displays. */}
- {exclLines.map(seg => (
-
- |
- {seg.name}
-
- final
-
- |
- {measures.map(m => (
-
- {m.key === 'price' ? fmtNum(priceOf(seg), m.dp) : fmtNum(seg[m.key], m.dp)}
- |
- ))}
-
- ))}
{hasExcl && (