function fixLightButtonContrast() {
const targets = [
['a[href="/planos"] > button', 'Ver planos'],
['a[href="https://erpclinicatea.com/planos"] > button', 'Ver planos'],
['a[href="/suporte"] > button', 'Ver canais de suporte'],
['a[href="https://erpclinicatea.com/suporte"] > button', 'Ver canais de suporte'],
];
targets.forEach(([selector, label]) => {
document.querySelectorAll(selector).forEach(button => {
const text = (button.textContent || '').replace(/\s+/g, ' ').trim();
if (!text.includes(label)) return;
button.style.setProperty('color', '#020617', 'important');
button.querySelectorAll('svg').forEach(icon => {
icon.style.setProperty('color', '#020617', 'important');
});
});
});
if (window.location.pathname === '/planos') {
document.querySelectorAll('button[type="submit"][data-slot="button"]').forEach(button => {
const text = (button.textContent || '').replace(/\s+/g, ' ').trim();
if (!text.includes('Criar conta e continuar')) return;
button.style.setProperty('color', '#020617', 'important');
button.querySelectorAll('svg').forEach(icon => {
icon.style.setProperty('color', '#020617', 'important');
icon.style.setProperty('stroke', '#020617', 'important');
});
});
}
}
window.addEventListener('load', () => {
fixLightButtonContrast();
const root = document.getElementById('root');
if (root) {
new MutationObserver(fixLightButtonContrast).observe(root, { childList: true, subtree: true });
}
});
function fixPortalAccentuation() {
const allowedPaths = new Set(['/portal', '/login/admin', '/login/terapeuta']);
if (!allowedPaths.has(window.location.pathname)) return;
const replacements = new Map([
['Administracao', 'Administração'],
['Gestao administrativa com IA', 'Gestão administrativa com IA'],
['Controle a operacao da clinica com agenda inteligente, cadastros, financeiro, documentos e relatorios para decisao.', 'Controle a operação da clínica com agenda inteligente, cadastros, financeiro, documentos e relatórios para decisão.'],
['Profissionais, cargos e permissoes', 'Profissionais, cargos e permissões'],
['Financeiro e previsao de receita', 'Financeiro e previsão de receita'],
['Area do profissional clinico', 'Área do profissional clínico'],
['Use agenda do dia, registros clinicos, relatorios, propostas terapeuticas, controle de horas e apoio de IA na documentacao.', 'Use agenda do dia, registros clínicos, relatórios, propostas terapêuticas, controle de horas e apoio de IA na documentação.'],
['Relatorios com apoio de IA', 'Relatórios com apoio de IA'],
['Propostas e objetivos terapeuticos', 'Propostas e objetivos terapêuticos'],
['Comunicacao com coordenacao', 'Comunicação com coordenação'],
['Horas, ausencias e previsao de pagamento', 'Horas, ausências e previsão de pagamento'],
['Portal clinico', 'Portal clínico'],
['Familia', 'Família'],
['Acompanhe agenda liberada, relatorios autorizados pela clinica, orientacoes, mensagens e registros familiares.', 'Acompanhe agenda liberada, relatórios autorizados pela clínica, orientações, mensagens e registros familiares.'],
['Agenda liberada pela clinica', 'Agenda liberada pela clínica'],
['Relatorios e documentos autorizados', 'Relatórios e documentos autorizados'],
['Evolucao compartilhada', 'Evolução compartilhada'],
['Diario de observacoes da familia', 'Diário de observações da família'],
['Canal com a equipe clinica', 'Canal com a equipe clínica'],
['Portal da familia', 'Portal da família'],
['Use o portal web configurado para esta clinica.', 'Use o portal web configurado para esta clínica.'],
['Instalacao e PWA', 'Instalação e PWA'],
['Downloads reais aparecem aqui somente apos publicacao do instalador ou PWA.', 'Downloads reais aparecem aqui somente após publicação do instalador ou PWA.'],
['Portal de Administracao', 'Portal de Administração'],
['Gestao da clinica', 'Gestão da clínica'],
['Acesso para administradores e equipe autorizada. Os dados precisam estar vinculados ao banco da clinica.', 'Acesso para administradores e equipe autorizada. Os dados precisam estar vinculados ao banco da clínica.'],
['Dashboard executivo da clinica', 'Dashboard executivo da clínica'],
['Profissionais, pacientes e responsaveis', 'Profissionais, pacientes e responsáveis'],
['Controle financeiro configuravel', 'Controle financeiro configurável'],
['Filiais, salas e operacao', 'Filiais, salas e operação'],
['Registros clinicos e documentos', 'Registros clínicos e documentos'],
['Defina a conta principal da clinica', 'Defina a conta principal da clínica'],
['Nao tem acesso? Solicite ao administrador da clinica.', 'Não tem acesso? Solicite ao administrador da clínica.'],
['Login Google ainda nao configurado. Cadastre GOOGLE_CLIENT_ID e GOOGLE_CLIENT_SECRET no ambiente.', 'Login Google ainda não configurado. Cadastre GOOGLE_CLIENT_ID e GOOGLE_CLIENT_SECRET no ambiente.'],
['Este e-mail Google ainda nao esta cadastrado no sistema. Cadastre o usuario antes de liberar o acesso.', 'Este e-mail Google ainda não está cadastrado no sistema. Cadastre o usuário antes de liberar o acesso.'],
['Este e-mail Google ainda nao esta vinculado a um profissional. Use o link de convite enviado pela clinica no primeiro acesso.', 'Este e-mail Google ainda não está vinculado a um profissional. Use o link de convite enviado pela clínica no primeiro acesso.'],
['Nao foi possivel validar a autorizacao do Google.', 'Não foi possível validar a autorização do Google.'],
['Nao foi possivel ler o perfil Google autorizado.', 'Não foi possível ler o perfil Google autorizado.'],
['Sessao de login Google expirada. Tente novamente.', 'Sessão de login Google expirada. Tente novamente.'],
['Este acesso esta bloqueado. Entre em contato com o administrador da clinica.', 'Este acesso está bloqueado. Entre em contato com o administrador da clínica.'],
['Nao foi possivel entrar', 'Não foi possível entrar'],
['Login aceito, mas a sessao nao foi confirmada pelo navegador. Recarregue a pagina e tente novamente.', 'Login aceito, mas a sessão não foi confirmada pelo navegador. Recarregue a página e tente novamente.'],
['Nao foi possivel conectar ao servidor', 'Não foi possível conectar ao servidor'],
['Pacientes vinculados e historico', 'Pacientes vinculados e histórico'],
['Objetivos e propostas terapeuticas', 'Objetivos e propostas terapêuticas'],
['Portal clinico do profissional', 'Portal clínico do profissional'],
['Acesse agenda, pacientes, relatorios, propostas terapeuticas e o copiloto IA para organizar registros clinicos com mais rapidez.', 'Acesse agenda, pacientes, relatórios, propostas terapêuticas e o copiloto IA para organizar registros clínicos com mais rapidez.'],
['O acesso por credenciais Google sera liberado apos a configuracao final', 'O acesso por credenciais Google será liberado após a configuração final'],
['A clinica informara o link de acesso quando a autenticacao estiver ativa', 'A clínica informará o link de acesso quando a autenticação estiver ativa'],
['Email cadastrado pela clinica', 'Email cadastrado pela clínica'],
['As senhas informadas nao conferem.', 'As senhas informadas não conferem.'],
['Nao foi possivel criar a senha.', 'Não foi possível criar a senha.'],
['Email ou senha incorretos.', 'Email ou senha incorretos.'],
['Nao foi possivel entrar.', 'Não foi possível entrar.'],
['Tempo limite ao encerrar sessao', 'Tempo limite ao encerrar sessão'],
['Nao foi possivel confirmar o encerramento da sessao anterior. Recarregue a pagina e tente novamente.', 'Não foi possível confirmar o encerramento da sessão anterior. Recarregue a página e tente novamente.'],
['Encerrando sessao anterior...', 'Encerrando sessão anterior...'],
['Sessao ativa', 'Sessão ativa'],
['Para proteger o acesso, escolha continuar com a sessao atual ou encerrar e entrar com outra conta.', 'Para proteger o acesso, escolha continuar com a sessão atual ou encerrar e entrar com outra conta.'],
['Inicio', 'Início'],
['Primeiro acesso: use o link enviado pela clinica para criar sua senha.', 'Primeiro acesso: use o link enviado pela clínica para criar sua senha.'],
]);
function replaceExact(value) {
return replacements.get(value) || value;
}
function fixTextNode(node) {
const raw = node.nodeValue;
const trimmed = raw.trim();
const fixed = replaceExact(trimmed);
if (fixed !== trimmed) {
node.nodeValue = raw.replace(trimmed, fixed);
}
}
function walk(node) {
if (node.nodeType === Node.TEXT_NODE) {
fixTextNode(node);
return;
}
if (node.nodeType !== Node.ELEMENT_NODE) return;
const element = node;
['placeholder', 'title', 'aria-label'].forEach(attribute => {
const value = element.getAttribute(attribute);
if (!value) return;
const fixed = replaceExact(value.trim());
if (fixed !== value.trim()) element.setAttribute(attribute, fixed);
});
element.childNodes.forEach(walk);
}
const root = document.getElementById('root');
if (root) walk(root);
}
window.addEventListener('load', () => {
fixPortalAccentuation();
const root = document.getElementById('root');
if (root) {
new MutationObserver(fixPortalAccentuation).observe(root, {
childList: true,
subtree: true,
characterData: true,
attributes: true,
attributeFilter: ['placeholder', 'title', 'aria-label'],
});
}
});
// A instalação pública do ERP foi encerrada. Remove o PWA antigo ao visitar o site.