campaigns
PR1 of campaigns refactor: reduced BroadcastsView.vue from ~2620 lines to ~300 lines by extracting broadcast wizard (4 steps), list, detail, and edit modal into components under frontend/src/components/campaigns/broadcast/. Added shared messaging primitives: WizardStepper, WizardFooter, PreflightBanner, TemplateParamMappingEditor, RecipientSourcePills, EstimatedAudienceBadge; composables useIntervalPoll, usePreflight, useCampaignFormAssets, useCsvRecipients; campaign composables useCampaignList, useCampaignWizard, useCampaignDetail, useCampaignPolling, useCampaignEditModal. Extended waTemplateParams.ts (validation, init, preview) and types/campaign.ts. Renamed step validators to stepRecipientsValid / stepTemplateMappingValid. Migrated broadcasts to waTemplateParameterSlots for template vars. All 18 BroadcastsView.spec.ts + new unit tests pass; npm run build clean.