diff --git a/frontend/views/plugins/ProfissionaisPlugin.tsx b/frontend/views/plugins/ProfissionaisPlugin.tsx
index 53c108e..462faaf 100644
--- a/frontend/views/plugins/ProfissionaisPlugin.tsx
+++ b/frontend/views/plugins/ProfissionaisPlugin.tsx
@@ -123,6 +123,26 @@ const PropostaModal: React.FC<{ prof: Profissional; onClose: () => void; onSent:
// ─── Main view ───────────────────────────────────────────────────────────────
type Tab = 'buscar' | 'perfil' | 'propostas';
+// Bloqueio quando falta endereço/CEP da origem (clínica ou perfil) — a busca é por proximidade.
+const GateEndereco: React.FC<{ isClinic: boolean; onCompletarPerfil: () => void }> = ({ isClinic, onCompletarPerfil }) => (
+
+
+
+
+
Complete seu endereço
+
+ A busca de profissionais é por proximidade. Preencha {isClinic
+ ? 'a localização e o CEP da sua clínica/consultório (em Configurações)'
+ : 'a localização e o CEP do seu perfil'} para continuar.
+
diff --git a/frontend/views/plugins/SalasPlugin.tsx b/frontend/views/plugins/SalasPlugin.tsx
index e8c7969..6312a5e 100644
--- a/frontend/views/plugins/SalasPlugin.tsx
+++ b/frontend/views/plugins/SalasPlugin.tsx
@@ -440,6 +440,26 @@ const ReservaRow: React.FC<{ r: Reserva; recebida?: boolean; onAction: (acao: 'c
// ─── Main view ───────────────────────────────────────────────────────────────
type Tab = 'marketplace' | 'minhas' | 'reservas';
+// Bloqueio quando falta endereço/CEP da origem (clínica ou perfil) — a busca é por proximidade.
+const GateEndereco: React.FC<{ isClinic: boolean }> = ({ isClinic }) => (
+
+
+
+
+
Complete seu endereço
+
+ A busca de salas é por proximidade. Preencha {isClinic
+ ? 'a localização e o CEP da sua clínica/consultório (em Configurações)'
+ : 'a localização e o CEP do seu perfil (em Profissionais → Meu Perfil)'} para continuar.
+