+
+
+ { hasInteracted.current = true; setAcquisitionRate(parseFloat(e.target.value)); }} />
+
+
+
+ { hasInteracted.current = true; setSessionDurationMinutes(parseFloat(e.target.value)); }} />
+
+
+
+ setRate(e.target.value)} />
+
+
+
+ Assumes reuse: false on release (every acquisition triggers a refill). Safety factor 1.25× covers the recommended 10–20% headroom.
+
+
+
+
+
+ Concurrency floor:
+ {concurrencyFloor}
+
+
+ Refill floor:
+ {refillFloor}
+
+
+ Pool size:
+ {poolSize}
+
+
+
+ Binding constraint: {bindingConstraint}.
+ {bindingConstraint === 'refill'
+ ? ' Shorter sessions or higher acquisition rates push refill above concurrency — the 25% fill ceiling sets the floor.'
+ : ' Longer-held browsers dominate — pool size scales with acquisitions × duration.'}
+
+
+
+