- Consume nerve before energy in CrimeService so energy is never lost when nerve is insufficient
- Initialize nerve/max_nerve from config in CharacterController::store (same pattern as energy/health)
- Add nerve_cost to all CrimeSeeder entries proportional to difficulty (1-5 range)
- Remove nerve_regen_at from Character $fillable/$casts/@property — column exists but is not yet wired up
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements gym training logic with daily session tracking:
- GymSession model manages training sessions per stat per day
- TrainingService handles training validation, energy consumption, and stat gains
- Lazy daily reset: session count resets when reset_date is before today
- Validates: sufficient energy, daily cap (5 sessions per stat), valid stats
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add nerve system configuration to config/game.php with start_amount,
max, regen_rate, regen_interval, and midnight_refill settings. Add gym
configuration with energy_cost, daily_cap, and stat_gain. Add nerve
methods to Character model: hasNerve(), consumeNerve(), addNerve(), and
getNervePercentageAttribute(). Update levelUp() to increment max_nerve
by 2. Add nerve_cost to fillable arrays in Crime and CrimeAttempt models.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>