d2699ce17a
Market scan state was still tracked as separate nullable payload and status strings. This moves the hook internals to RemoteData<MarketScan> so loading and error paths can preserve previous data while keeping the existing marketScan and marketStatus return values for current card consumers. Constraint: Preserve the existing useCityMarketScan public compatibility fields. Rejected: Update all card UI to consume marketRemote immediately | keeping the compatibility bridge avoids a broad rendering diff while the request state model lands. Confidence: high Scope-risk: narrow Reversibility: clean Tested: npm run build Not-tested: Forced live market-scan failure with stale previous quote.