Bugfix: setup no longer fails with a raw CancelledError when the BLE proxy/device is briefly unreachable.
The initial connection is bounded by DEVICE_TIMEOUT (30s) via asyncio.timeout(), so a slow connect raises ConfigEntryNotReady (clean retry) before Home Assistant's bootstrap stage timeout cancels setup. CancelledError is never swallowed. establish_connection now uses max_attempts=3 so failures surface promptly. Matches the core led_ble/yalexs_ble pattern.
CI green (hassfest, HACS, ruff, 44 pytest tests).