Introduce useWidgetSize() hook and WidgetSizeProvider context that exposes grid dimensions (gridWidth, gridHeight) to every widget, enabling responsive rendering based on how many grid cells a widget occupies. Weather widget updated as proof of concept: when placed in a 1x1 or 1xN cell with forecast enabled, it switches to a compact layout that hides the forecast row, wind speed, and city name to prevent clipping.