const DS = window.IPEPNexusDesignSystem_0e390f;
if (!document.getElementById('rc-pass-css')) document.head.insertAdjacentHTML('beforeend', '<style id="rc-pass-css">.rc-pass{position:relative}.rc-pass .ipep-input{padding-right:44px}.rc-pass-eye{all:unset;box-sizing:border-box;position:absolute;right:4px;bottom:4px;width:36px;height:36px;display:grid;place-items:center;border-radius:6px;cursor:pointer;color:var(--ipep-text-secondary,#526277)}.rc-pass-eye:hover{background:var(--ipep-primary-subtle,#E8F0FF);color:var(--ipep-text,#152033)}.rc-pass-eye:focus-visible{outline:2px solid var(--rc-link,#2563EB);outline-offset:2px}.rc-pass-eye:disabled{cursor:not-allowed;opacity:.5}</style>');
const { Button, IconButton, Icon, Card, Badge, Alert, Banner, TextField, TopBar, ContextMenu, StateMessage } = DS;

const cpfMask = v => v.replace(/\D/g, '').slice(0, 11).replace(/(\d{3})(\d)/, '$1.$2').replace(/(\d{3})(\d)/, '$1.$2').replace(/(\d{3})(\d{1,2})$/, '$1-$2');
const emailValid = v => /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(v.trim());
const cpfValid = v => {
  const d = v.replace(/\D/g, ''); if (d.length !== 11 || /^(\d)\1+$/.test(d)) return false;
  const calc = n => { let s = 0; for (let i = 0; i < n; i++) s += +d[i] * (n + 1 - i); const r = (s * 10) % 11; return r === 10 ? 0 : r; };
  return calc(9) === +d[9] && calc(10) === +d[10];
};

const RC_LOGIN = { rppsconsig: { email: 'dpo@rppsconsig.org.br', hash: 'cb77466aeb2d099f7f66549809a685922175368a78a7a3ad99b865c9e980bff2' }, guarujaprev: { email: 'gestor@rppsconsig.org.br', hash: '532de786c58a4b81c9dd427251c01b5754d0f9ec52f21cb9e98b49f4911b3b19' } };
const rcLoginDe = id => RC_LOGIN[id] || RC_LOGIN.rppsconsig;
const RC_SENHA_PADRAO = RC_LOGIN.rppsconsig.hash;
async function rcHash(s) { const b = await crypto.subtle.digest('SHA-256', new TextEncoder().encode('rppsconsig:' + s)); return Array.from(new Uint8Array(b)).map(x => x.toString(16).padStart(2, '0')).join(''); }
async function rcSenhaOk(s) { let h = null; try { const id = window.__rcTenantId || 'guarujaprev'; h = localStorage.getItem(id === 'guarujaprev' ? 'rc-senha-gestor' : 'rc-senha-gestor-' + id); } catch (e) {} return (await rcHash(s)) === (h || rcLoginDe(window.__rcTenantId).hash); }
window.rcHash = rcHash; window.rcSenhaOk = rcSenhaOk;
const LOGIN_MSG = {
  senha: ['error', 'E-mail ou senha incorretos.'],
  bloqueada: ['error', 'Acesso bloqueado após várias tentativas. Tente em 15 minutos ou fale com o atendimento.'],
  codigo: ['warning', 'Código expirado. Solicite um novo.', 'Solicitar novo código'],
  link: ['warning', 'Este link expirou. Peça um novo no primeiro acesso.', 'Ir para primeiro acesso'],
  sessao: ['info', 'Por segurança, sua sessão foi encerrada por inatividade.'],
  permissao: ['warning', 'Você não tem acesso a este módulo. Fale com o gestor do seu RPPS.'],
};

const RC_LINKS = {"segurado":"https://guarujaprev.consig.org.br/login","consignante":"https://guarujaprev.consig.org.br/consignante/login","consignataria":"https://guarujaprev.consig.org.br/consignataria/login","atendeai":"https://wa.me/5513955435366?text=Ol%C3%A1%20como%20pode%20te%20ajudar%20%3F","suporte":"https://wa.me/5513955435366?text=Ol%C3%A1%20como%20pode%20te%20ajudar%20%3F","googlePlay":"https://play.google.com/store/apps/details?id=br.org.ipepbrasil.rppsconsig","appStore":"https://apps.apple.com/br/app/rppsconsig/id6749464652"};
const rcLink = (tenant, k) => ((tenant.links || {})[k]) || RC_LINKS[k];

function RcAppPromo({ tenant }) {
  const ios = rcLink(tenant, 'appStore'), and = rcLink(tenant, 'googlePlay');
  const nome = tenant.appNome || (tenant.id === 'rppsconsig' ? 'RPPSConsig' : tenant.nome);
  return <div className="rc-app">
    <div className="rc-phone-m" aria-hidden="true">
      <div className="rc-phone-scr">
        <div className="rc-pm-bar"><span>9:41</span><span className="rc-pm-dots"><i></i><i></i><i></i></span></div>
        <div className="rc-pm-head">{tenant.logo ? <img src={tenant.logo} alt=""></img> : <b>{nome}</b>}</div>
        <div className="rc-pm-hi">Olá, Maria</div>
        <div className="rc-pm-card"><small>Margem disponível</small><strong>R$ 1.240,00</strong><span className="rc-pm-track"><span></span></span></div>
        <div className="rc-pm-row"><span><small>Próxima parcela</small><b>R$ 312,40</b></span><span><small>Vencimento</small><b>10/11</b></span></div>
        <div className="rc-pm-btn">Simular empréstimo</div>
        <div className="rc-pm-list"><span></span><span></span></div>
      </div>
    </div>
    <div className="rc-app-txt">
      <b>Aplicativo {nome}</b>
      <p>Simule, contrate e acompanhe suas parcelas pelo celular.</p>
      <div className="rc-stores">
        <a className="rc-store" href={and} target="_blank" rel="noopener" aria-label={'Disponível no Google Play — ' + nome}><Icon name="google-play" size={20}></Icon><span><small>Disponível no</small>Google Play</span></a>
        <a className="rc-store" href={ios} target="_blank" rel="noopener" aria-label={'Baixar na App Store — ' + nome}><Icon name="apple" size={22}></Icon><span><small>Baixar na</small>App Store</span></a>
      </div>
    </div>
  </div>;
}

function RcLogin({ tenant, go, forced, soLogin }) {
  const [tipo, setTipo] = React.useState('equipe');
  const [portal, setPortal] = React.useState(null);
  const [cpf, setCpf] = React.useState(forced === 'cpf' ? 'gestor@guarujaprev' : '');
  const [senha, setSenha] = React.useState('');
  const [verSenha, setVerSenha] = React.useState(false);
  const [aberto, setAberto] = React.useState(!!forced && forced !== 'normal');
  const [st, setSt] = React.useState(forced);
  React.useEffect(() => { setSt(forced); if (forced === 'cpf') setCpf('gestor@guarujaprev'); if (forced && forced !== 'normal') setAberto(true); }, [forced]);
  const locked = st === 'bloqueada' || st === 'manutencao';
  const loading = st === 'carregando';
  const submit = async e => {
    e.preventDefault(); if (locked || loading) return;
    if (!emailValid(cpf)) { setSt('cpf'); return; }
    if (!senha) { setSt('senha'); return; }
    if (tipo !== 'equipe') { setSt('senha'); return; }
    { const N = window.rcNuvem; const ok = N && N.ativo ? await N.entrar(cpf.trim().toLowerCase(), senha).catch(() => false) : cpf.trim().toLowerCase() === rcLoginDe(tenant.id).email && await rcSenhaOk(senha); if (!ok) { setSt('senha'); return; } }
    setSt('carregando');
    setTimeout(() => {
      if (tipo === 'consignante') { try { sessionStorage.setItem('gp-sessao', JSON.stringify({ email: cpf, perfil: 'Consignante', consignante: 'CSG-0001', rpps: tenant.id, em: Date.now() })); } catch (e) {} location.href = RC_PROD ? '/gestor' : 'Portal Gestor RPPS.html?rpps=' + tenant.id; return; }
      if (tipo === 'equipe') { try { sessionStorage.setItem('gp-sessao', JSON.stringify({ email: cpf, perfil: 'Gestor RPPS', rpps: tenant.id, em: Date.now() })); } catch (e) {} location.href = RC_PROD ? '/gestor' : 'Portal Gestor RPPS.html?rpps=' + tenant.id; return; }
      go(tipo === 'segurado' ? 'segurado' : 'hub');
    }, 1200);
  };
  const msg = LOGIN_MSG[st];
  return <>
    <header className="rc-head"><div className="rc-wrap rc-head-in" style={{ justifyContent: 'space-between' }}>
      <RcBrandMark tenant={tenant} onClick={() => go('home')}></RcBrandMark>
      {!soLogin && <Button variant="ghost" icon="arrow-left" onClick={() => go('home')}>Voltar ao site</Button>}
    </div></header>
    {st === 'manutencao' && <Banner tone="warning">Estamos em manutenção programada até 22:00.</Banner>}
    <div className="rc-login">
      <aside className="rc-login-side">
        <span className="rc-seal" style={{ background: 'rgba(255,255,255,.1)', color: 'var(--rc-accent-dark)', justifySelf: 'start', width: 'fit-content' }}><Icon name="lock-outline" size={14}></Icon>Acesso seguro</span>
        <h1 className="rc-h2" style={{ fontSize: 36, margin: 0 }}>Área do Cliente</h1>
        <p style={{ margin: 0, font: '400 16px/1.6 var(--ipep-font)', color: 'rgba(255,255,255,.86)', textWrap: 'pretty' }}>Gestores e equipes do RPPS acessam atendimento, carteira e integrações. Segurados acompanham simulações, contratos e parcelas.</p>
        <ul style={{ listStyle: 'none', padding: 0, margin: '8px 0 0', display: 'grid', gap: 10, font: '400 14px/1.5 var(--ipep-font)', color: 'rgba(255,255,255,.86)' }}>
          <li style={{ display: 'flex', gap: 10 }}><Icon name="shield-account-outline" size={20} color="var(--rc-accent-dark)"></Icon>Cada pessoa vê apenas os módulos do próprio perfil.</li>
          <li style={{ display: 'flex', gap: 10 }}><Icon name="history" size={20} color="var(--rc-accent-dark)"></Icon>Entradas, falhas e trocas de RPPS ficam registradas.</li>
        </ul>
        <RcAppPromo tenant={tenant}></RcAppPromo>
      </aside>
      <main className="rc-login-main">
        <form className="rc-login-card" onSubmit={submit} noValidate>
          <div>
            <h2 style={{ margin: '0 0 4px', font: '700 24px/1.3 var(--ipep-font)' }}>{portal === 'consignante' ? 'Portal do Consignante' : portal === 'consignataria' ? 'Portal da Consignatária' : 'Entrar'}</h2>
            <p className="rc-note" style={{ fontSize: 14 }}>{portal ? <>Acesso da equipe {portal === 'consignante' ? 'da prefeitura (RH e folha)' : 'do RPPS consignatário'}. <button type="button" className="rc-link-btn" onClick={() => setPortal(null)}>Voltar ao acesso geral</button></> : aberto ? 'Informe seu e-mail e senha para continuar.' : 'Escolha o tipo de acesso.'}</p>
          </div>
          <div className="rc-seg" role="group" aria-label="Tipo de acesso" hidden={!!portal}>
            <button type="button" aria-pressed="false" aria-label="Beneficiário — abre o login do beneficiário em nova aba" onClick={() => window.open(rcLink(tenant, 'segurado'), '_blank', 'noopener')}>Beneficiário</button>
            <button type="button" aria-pressed="false" aria-label="AtendeAI — abre em nova aba" onClick={() => window.open(rcLink(tenant, 'atendeai'), '_blank', 'noopener')}>AtendeAI</button>
            <button type="button" aria-pressed="false" aria-label="Suporte — abre em nova aba" onClick={() => window.open(rcLink(tenant, 'suporte'), '_blank', 'noopener')}>Suporte</button>
            <button type="button" aria-pressed={aberto} aria-expanded={aberto} aria-controls="rc-login-gestor" onClick={() => { setTipo('equipe'); if (/^consignante@/.test(cpf)) setCpf(''); setAberto(v => !v); }}>Gestor RPPS</button>
          </div>
          {aberto && <div id="rc-login-gestor" style={{ display: 'grid', gap: 18 }}>
          {msg && <Alert tone={msg[0]} actions={msg[2] && <Button size="sm" variant="secondary" type="button" onClick={() => setSt('normal')}>{msg[2]}</Button>}>{msg[1]}</Alert>}
          <TextField label="E-mail" required type="email" autoComplete="username" icon="email-outline" inputMode="email" placeholder="nome@exemplo.com.br" value={cpf} disabled={locked || loading}
            onChange={e => { setCpf(e.target.value.trim()); if (st === 'cpf') setSt('normal'); }}
            error={st === 'cpf' ? 'E-mail inválido. Confira o endereço.' : undefined}></TextField>
          <div className="rc-pass"><TextField label="Senha" required type={verSenha ? 'text' : 'password'} autoComplete="current-password" icon="lock-outline" value={senha} disabled={locked || loading} onChange={e => setSenha(e.target.value)}></TextField><button type="button" className="rc-pass-eye" aria-label={verSenha ? 'Ocultar senha' : 'Mostrar senha'} title={verSenha ? 'Ocultar senha' : 'Mostrar senha'} aria-pressed={verSenha} disabled={locked || loading} onClick={() => setVerSenha(v => !v)}><Icon name={verSenha ? 'eye-off-outline' : 'eye-outline'} size={20}></Icon></button></div>
          <div className="rc-row"><a href="#" onClick={e => e.preventDefault()}>Esqueci minha senha</a><a href="#" onClick={e => e.preventDefault()}>Primeiro acesso</a></div>
          <Button type="submit" variant="primary" disabled={locked || loading} style={{ width: '100%', height: 44 }}>
            {loading ? <><Icon name="loading" size={18} className="ipep-spin"></Icon>Entrando...</> : 'Entrar'}
          </Button>
          </div>}
          <p className="rc-note">Dúvidas sobre o acesso: {tenant.horario}.</p>
          <div className="rc-short rc-portais">
            {[['segurado', 'Portal do Beneficiário', 'Simulação, contratos e parcelas', 'account-outline'], ['consignante', 'Portal do Consignante', 'Margem, averbação e repasse da folha', 'domain'], ['consignataria', 'Portal da Consignatária', 'Contratos, carteira e conciliação', 'bank-outline'], ['atendeai', 'AtendeAI', 'Dúvidas e suporte pelo WhatsApp', 'whatsapp', 'https://api.whatsapp.com/send/?phone=5513955435366&text=Ol%C3%A1+como+pode+te+ajudar+%3F&type=phone_number&app_absent=0']].map(x =>
              <button type="button" key={x[0]} onClick={() => window.open(x[4] || rcLink(tenant, x[0]), '_blank', 'noopener')} aria-label={x[1] + ' — abre em nova aba'}><span style={{ flex: 1 }}><b>{x[1]}</b><small>{x[2]}</small></span><Icon name={x[3]} size={24} color="var(--rc-accent-dark)"></Icon></button>)}
          </div>
        </form>
      </main>
    </div>
  </>;
}

const RC_FILES = { crm: 'CRM - Paniel Interno - Login.dc.html', segurado: 'Paniel Segurado Interno - Login.dc.html', projetos: 'Controle dos Projetos - Login.dc.html', integracoes: 'Centro de Integrações -Loign.dc.html' };
const RC_MODULES = [
  { id: 'crm', nome: 'CRM – Painel Interno', desc: 'Atendimentos, campanhas, contratos e cobrança', ic: 'headset' },
  { id: 'segurado', nome: 'Painel do Segurado', desc: 'Simulação, contratos, parcelas e documentos', ic: 'account-cash-outline' },
  { id: 'projetos', nome: 'Controle dos Projetos', desc: 'Implantação e acompanhamento de cada RPPS cliente', ic: 'clipboard-check-outline' },
  { id: 'integracoes', nome: 'Centro de Integrações', desc: 'Folha, margem, assinatura, WhatsApp e demais conexões', ic: 'transit-connection-variant' },
];
const RC_PERFIS = {
  admin: { rotulo: 'Administrador IPEP Nexus', nome: 'Rafael Lima', acesso: { crm: '', segurado: 'Visualizar', projetos: '', integracoes: '' } },
  gestor: { rotulo: 'Gestor', nome: 'Marina Couto', acesso: { crm: '', segurado: 'Visualizar', projetos: 'Só o seu RPPS', integracoes: 'Visualizar' } },
  atendente: { rotulo: 'Atendente', nome: 'Paulo Souza', acesso: { crm: '', segurado: 'Visualizar' } },
  consignante: { rotulo: 'Consignante', nome: 'Ana Ribeiro', acesso: { integracoes: 'Margem e repasse' } },
};
const RC_RPPS = [{ id: 'guarujaprev', nome: 'GuarujáPrev' }, { id: 'demo', nome: 'RPPS de demonstração' }];
const RC_AVISOS = [
  { ic: 'calendar-clock', t: 'Fechamento da folha em 15/10', m: 'Envie os descontos do mês até 14/10/2026.' },
  { ic: 'file-document-edit-outline', t: 'Nova versão do regulamento disponível', m: 'Publicada em 28/09/2026 pelo gestor do RPPS.' },
  { ic: 'wrench-clock', t: 'Manutenção programada em 05/10', m: 'Plataforma indisponível das 22:00 às 23:00.' },
];
const RC_ACESSOS = [
  ['30/09/2026', '08:12', 'Chrome · Windows'],
  ['29/09/2026', '17:40', 'Safari · iPhone'],
  ['29/09/2026', '09:03', 'Chrome · Windows'],
];

function RcHub({ tenant, perfilId, go }) {
  const perfil = RC_PERFIS[perfilId];
  const [rpps, setRpps] = React.useState('guarujaprev');
  const ativo = RC_RPPS.find(r => r.id === rpps);
  const podeTrocar = perfilId === 'admin';
  const h = new Date().getHours();
  const saud = h < 12 ? 'Bom dia' : h < 18 ? 'Boa tarde' : 'Boa noite';
  const mods = RC_MODULES.filter(m => m.id in perfil.acesso);
  const switcher = <button className="rc-tbtn" aria-label="Trocar de RPPS">
    <span className="rc-tlogo">{tenant.logo && ativo.id === 'guarujaprev' && tenant.id === 'rppsconsig' ? <span>{ativo.nome}</span> : <span>{ativo.nome}</span>}</span>
    {podeTrocar && <Icon name="swap-horizontal" size={18}></Icon>}
  </button>;
  return <>
    <TopBar product={tenant.nome} environment="demonstracao" user={{ name: perfil.nome, role: perfil.rotulo }}>
      {podeTrocar ? <ContextMenu label="Trocar de RPPS" align="right" trigger={switcher}
        items={RC_RPPS.map(r => ({ label: r.nome + (r.id === rpps ? ' (atual)' : ''), icon: r.id === rpps ? 'check' : 'bank-outline', onSelect: () => setRpps(r.id) }))}></ContextMenu> : switcher}
      <button className="rc-tbtn" aria-label="Avisos: 3 novos" title="Avisos"><Icon name="bell-outline" size={20}></Icon><Badge tone="info" icon="circle-small">3</Badge></button>
    </TopBar>
    <div className="rc-hub">
      <main style={{ display: 'grid', gap: 24 }}>
        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-end', gap: 16, flexWrap: 'wrap' }}>
          <div>
            <h1 style={{ margin: '0 0 4px', font: '700 24px/1.3 var(--ipep-font)' }}>{saud}, {perfil.nome.split(' ')[0]}.</h1>
            <p className="rc-note" style={{ fontSize: 14 }}>{perfil.rotulo} · {ativo.nome}</p>
          </div>
          <Button variant="neutral" icon="logout" onClick={() => go('login')}>Sair</Button>
        </div>
        <section aria-label="Módulos disponíveis">
          <div className="rc-mods">{mods.map(m => {
            const esc = perfil.acesso[m.id];
            return <Card key={m.id} padding={24}><div className="rc-mod">
              <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', gap: 8 }}>
                <div className="rc-card-ic" style={{ margin: 0 }}><Icon name={m.ic} size={24}></Icon></div>
                {esc && <Badge tone="neutral" icon={esc === 'Visualizar' ? 'eye-outline' : 'filter-outline'}>{esc}</Badge>}
              </div>
              <h3>{m.nome}</h3><p>{m.desc}</p>
              <div><Button variant="primary" iconRight="arrow-right" onClick={() => { window.location.href = encodeURI(RC_FILES[m.id]); }}>Abrir</Button></div>
            </div></Card>;
          })}</div>
          <p className="rc-note" style={{ marginTop: 12 }}>Exibindo {mods.length} de {RC_MODULES.length} módulos, conforme o perfil {perfil.rotulo}.</p>
        </section>
      </main>
      <aside style={{ display: 'grid', gap: 16 }}>
        <Card title="Avisos" padding={20}>
          <ul className="rc-list">{RC_AVISOS.map(a => <li key={a.t}><Icon name={a.ic} size={20} color="var(--ipep-accent)"></Icon><span><strong style={{ fontWeight: 600, display: 'block' }}>{a.t}</strong><span className="rc-meta rc-num-t">{a.m}</span></span></li>)}</ul>
        </Card>
        <Card title="Últimos acessos" description="Fonte: registro de auditoria" padding={20}>
          <ul className="rc-list">{RC_ACESSOS.map((a, i) => <li key={i}><Icon name={a[2].includes('iPhone') ? 'cellphone' : 'monitor'} size={20} color="var(--ipep-icon)"></Icon><span><strong className="rc-num-t" style={{ fontWeight: 600, display: 'block' }}>{a[0]} · {a[1]}</strong><span className="rc-meta">{a[2]}</span></span></li>)}</ul>
          <p className="rc-note" style={{ marginTop: 12 }}>Não reconhece algum acesso? <a href="#" onClick={e => e.preventDefault()}>Alterar senha</a></p>
        </Card>
      </aside>
    </div>
  </>;
}

function RcSeguradoRedirect({ tenant, go }) {
  return <>
    <header className="rc-head"><div className="rc-wrap rc-head-in"><RcBrandMark tenant={tenant} onClick={() => go('home')}></RcBrandMark></div></header>
    <div className="rc-wrap" style={{ padding: '80px 24px' }}>
      <StateMessage kind="loading" title="Abrindo o Painel do Segurado…" actions={<Button variant="primary" iconRight="arrow-right" onClick={() => { window.location.href = encodeURI(RC_FILES.segurado); }}>Ir para o Painel do Segurado</Button>}>
        O segurado não passa pelo hub de módulos: após o login, segue direto para os próprios dados.
      </StateMessage>
    </div>
  </>;
}

const RC_SO_LOGIN = [];

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "tela": "home",
  "pagina": "consignado",
  "tenant": "rppsconsig",
  "perfil": "gestor",
  "estado": "normal"
}/*EDITMODE-END*/;

function RcApp() {
  const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
  const [, setTick] = React.useState(0);
  React.useEffect(() => { const f = () => setTick(n => n + 1); addEventListener('storage', f); addEventListener('focus', f); return () => { removeEventListener('storage', f); removeEventListener('focus', f); }; }, []);
  const tid = new URLSearchParams(location.search).get('rpps') || (() => { const m = location.hostname.match(/^([a-z0-9-]+)\.rppsconsig\.org\.br$/i); return m && m[1] !== 'www' ? m[1].toLowerCase() : null; })();
  // ?entrar=1: vindo de /gestor ou /console sem sessão, abre direto no login.
  const [entrar, setEntrar] = React.useState(() => new URLSearchParams(location.search).get('entrar') === '1');
  // /homologacao: site completo para teste e aprovação, mesmo quando o RPPS está só com a Área do Cliente.
  // Lido uma vez: na homologação a navegação não troca o endereço, para não sair de /homologacao.
  const homolog = React.useRef(/^\/homologacao\/?$/.test(location.pathname)).current;
  const rota0 = React.useRef(RC_PROD && !homolog ? rcRota(location.pathname) : undefined);
  const [pgOv, setPgOv] = React.useState(() => new URLSearchParams(location.search).get('pagina') || (rota0.current && rota0.current !== 'login' ? rota0.current : null));
  // Ao voltar do painel (sem sessão), abre o site público e não o hub/segurado que ficou gravado.
  React.useEffect(() => { if (!entrar && (t.tela === 'hub' || t.tela === 'segurado')) { let s = null; try { s = sessionStorage.getItem('gp-sessao'); } catch (e) {} if (!s) setTweak('tela', 'home'); } }, []);
  // Guarda a última página pública vista, para o "Sair e voltar ao site" do painel voltar a ela.
  React.useEffect(() => { if (t.tela !== 'home') return; try { sessionStorage.setItem('rc-ultima-pagina', JSON.stringify({ p: pgOv || t.pagina, url: location.pathname + location.search })); } catch (e) {} });
  React.useEffect(() => {
    if (!RC_PROD || homolog) return;
    const r = rota0.current; if (r === 'login' || entrar) { if (t.tela !== 'login') setTweak('tela', 'login'); } else if (t.tela !== 'home') setTweak('tela', 'home');
    const pop = () => { const x = rcRota(location.pathname); if (x === 'login') setTweak('tela', 'login'); else { setTweak('tela', 'home'); setPgOv(x || 'consignado'); } window.scrollTo(0, 0); };
    addEventListener('popstate', pop); return () => removeEventListener('popstate', pop);
  }, []);
  const urlPronta = React.useRef(false);
  React.useEffect(() => {
    if (!RC_PROD || homolog) return; if (!urlPronta.current) { urlPronta.current = true; return; }
    const want = t.tela === 'login' ? RC_SLUG.login : t.tela === 'home' ? (RC_SLUG[pgOv || t.pagina] || '/') : null;
    if (want && location.pathname !== want) history.pushState(null, '', want);
  });
  const tenant = rcSiteCfg(RC_TENANTS[tid && RC_TENANTS[tid] ? tid : t.tenant]);
  window.__rcTenantId = tenant.id;
  React.useEffect(() => { rcAplicarSeo(tenant, t.tela === 'home' ? (pgOv || t.pagina) : t.tela); });
  // RPPS com o site público fora do ar: o endereço abre direto na Área do Cliente. A prévia do painel (?previa=1) mostra o site completo.
  const soLogin = RC_SO_LOGIN.includes(tenant.id) && new URLSearchParams(location.search).get('previa') !== '1' && !homolog;
  const go = tela => { setEntrar(false); setTweak('tela', soLogin && tela === 'home' ? 'login' : tela); window.scrollTo(0, 0); };
  window.__rcGo = go;
  let screen;
  if (t.tela === 'login' || entrar || (soLogin && t.tela !== 'hub' && t.tela !== 'segurado')) screen = <RcLogin tenant={tenant} go={go} forced={t.estado} soLogin={soLogin}></RcLogin>;
  else if (t.tela === 'hub') screen = <RcHub tenant={tenant} perfilId={t.perfil} go={go}></RcHub>;
  else if (t.tela === 'segurado') screen = <RcSeguradoRedirect tenant={tenant} go={go}></RcSeguradoRedirect>;
  else screen = <RcPortal tenant={tenant} go={go} page={pgOv || t.pagina} setPage={v => { setPgOv(null); setTweak('pagina', v); }}></RcPortal>;
  return <div className="rc" style={tenant.vars} data-screen-label={t.tela}>
    {homolog && <div className="rc-homolog" role="note"><Icon name="flask-outline" size={16}></Icon><span><b>Homologação</b> · versão de teste do site {tenant.nome}. Não divulgue este endereço.</span></div>}
    {screen}
    <TweaksPanel>
      <TweakSection label="Navegação"></TweakSection>
      <TweakSelect label="Tela" value={t.tela} onChange={v => go(v)} options={[{ value: 'home', label: 'Portal público' }, { value: 'login', label: 'Login' }, { value: 'hub', label: 'Hub de módulos' }, { value: 'segurado', label: 'Redirecionamento do segurado' }]}></TweakSelect>
      <TweakRadio label="Endereço" value={t.tenant} onChange={v => setTweak('tenant', v)} options={[{ value: 'rppsconsig', label: 'RPPSConsig' }, { value: 'guarujaprev', label: 'GuarujáPrev' }]}></TweakRadio>
      <TweakSection label="Hub"></TweakSection>
      <TweakSelect label="Perfil" value={t.perfil} onChange={v => setTweak('perfil', v)} options={Object.entries(RC_PERFIS).map(([k, p]) => ({ value: k, label: p.rotulo }))}></TweakSelect>
      <TweakSection label="Login"></TweakSection>
      <TweakSelect label="Estado" value={t.estado} onChange={v => { setTweak('estado', v); if (t.tela !== 'login') go('login'); }} options={[
        { value: 'normal', label: 'Padrão' }, { value: 'carregando', label: 'Carregando' }, { value: 'cpf', label: 'E-mail inválido' }, { value: 'senha', label: 'Senha incorreta' }, { value: 'bloqueada', label: 'Conta bloqueada' }, { value: 'codigo', label: 'Código expirado' }, { value: 'link', label: 'Link de e-mail vencido' }, { value: 'sessao', label: 'Sessão encerrada' }, { value: 'permissao', label: 'Sem permissão' }, { value: 'manutencao', label: 'Manutenção' }]}></TweakSelect>
    </TweaksPanel>
  </div>;
}

ReactDOM.createRoot(document.getElementById('root')).render(<RcApp></RcApp>);
