web/settings: reserve layout with skeletons instead of a load spinner
Renders each settings tab's structure immediately and swaps same-size skeleton
placeholders for the real controls while data loads, so a hard refresh doesn't
flash a spinner or shift the bounding box. Adds a shared Skeleton component.