+
+
+ { hasInteracted.current = true; setTasksPerHour(parseFloat(e.target.value)); }} />
+
+
+
+ { hasInteracted.current = true; setSessionDurationMinutes(parseFloat(e.target.value)); }} />
+
+
+
+
+
+
+
+
+
+ {showAdvanced && (
+
+
+ setRate(e.target.value)} />
+
+ )}
+
+
+ Assumes reuse: false on release. Bursty mode applies a 2× multiplier to handle peaks above the hourly average.
+
+
+
+
+
+ Concurrency floor:
+ {concurrencyFloor}
+
+
+ Refill floor:
+ {refillFloor}
+
+
+ Pool size:
+ {poolSize}
+
+
+
+ Binding constraint: {bindingConstraint}.
+ {bindingConstraint === 'refill'
+ ? ' Shorter sessions or higher throughput push refill above concurrency — the 25% fill ceiling sets the floor.'
+ : ' Longer-held browsers dominate — pool size scales with throughput × duration.'}
+
+
+
+