f07df79f94
When ip_range changes, Docker cannot modify a network subnet in-place. _set_pending_restart now accepts network_recreate=True; apply endpoint runs `docker compose down` before `up -d` in that case so the bridge network is fully recreated with the new subnet. Service page fixes: - GET /api/config includes service_ips (dns, vip_mail, vip_calendar, vip_files, vip_webdav) computed via ip_utils - Email/Calendar/Files pages read IPs and ports from useConfig() instead of hardcoded 172.20.0.x constants and default port literals - Apply feedback: spinner → success/timeout/error banners via health polling Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>