Task T5 resolution order evidence

ServiceImageResolver implements lazy raw-filename resolution for service imagery:

- keyVisualFor(Service $service): checks $service->key_visual_filename first.
- backgroundFor(Service $service): checks $service->background_filename first.
- If the per-service filename is null or missing on Storage::disk('public'), the resolver checks the matching global Setting key.
- Global keys: current_key_visual, current_background.
- Return contract: raw relative filename such as slides/kv.jpg, never /storage/... URL.
- Pure behavior: no model updates, no Setting writes, no Storage writes.

Verification:
- ddev exec php artisan test tests/Feature/ServiceImageResolverTest.php: PASS (5 tests)
- ddev exec php artisan test: PASS (519 tests, 2627 assertions)
- ddev exec ./vendor/bin/pint app/Services/ServiceImageResolver.php tests/Feature/ServiceImageResolverTest.php: PASS
