claim method
Returns the earned amount and resets "last claimed" to now. Does not itself apply any ad-doubling — the caller decides whether to double it.
Implementation
Future<double> claim(double productionRatePerSecond) async {
final now = _now();
final earned = _earningsAt(now, productionRatePerSecond);
await StorageService.to.setInt(StorageKeys.offlineLastClaimedMs, now);
return earned;
}