const { Button: RcButton, Icon: RcIcon, Card: RcCard, TextField: RcTextField, Alert: RcAlertC, StateMessage: RcStateMsg } = window.IPEPNexusDesignSystem_0e390f;

const RC_TENANTS = {
  rppsconsig: { id: 'rppsconsig', nome: 'RPPSConsig', host: 'rppsconsig.org.br', logo: 'assets/rppsconsig-logo.png', whatsapp: '+55 13 95543-5366', email: 'credito@rppsconsig.org.br', horario: 'Segunda a sexta, 9:00 às 17:00',
    seo: { titulo: 'RPPSConsig – Crédito consignado para RPPS e servidores públicos', descricao: 'Plataforma de crédito consignado para Regimes Próprios de Previdência Social: simulação, contratação digital, gestão da carteira e educação financeira com a marca do seu RPPS.', imagem: 'assets/og-rppsconsig.png', icone: 'assets/favicon-rppsconsig', google: '' },
    vars: { '--rc-primary': '#04DB00', '--rc-primary-hover': '#00B000', '--rc-on': '#1D1D1B', '--rc-dark': '#1D1D1B', '--rc-accent-dark': '#04DB00', '--rc-link': '#007A00', '--rc-subtle': '#E3FFE3', '--rc-subtle-fg': '#004400' } },
  guarujaprev: { id: 'guarujaprev', nome: 'GuarujáPrev', host: 'guarujaprev.rppsconsig.org.br', logo: 'assets/guarujaprev-logo.png', whatsapp: '13 95543-5366', email: 'credito@rppsconsig.org.br', horario: 'Segunda a sexta, 9:00 às 17:00', como: { foto: 'assets/guarujaprev-como.webp', nome: 'Consignado GuarujáPrev', cargo: '' },
    seo: { titulo: 'Consignado GuarujáPrev – Crédito para servidores de Guarujá', descricao: 'Empréstimo consignado do GuarujáPrev para servidores, aposentados e pensionistas de Guarujá/SP. Desconto em folha, taxas menores e contratação 100% digital.', imagem: 'assets/og-guarujaprev.png', icone: 'assets/favicon-guarujaprev', google: '' },
    vars: { '--rc-primary': '#0B5FA5', '--rc-primary-hover': '#094E88', '--rc-on': '#FFFFFF', '--rc-dark': '#0E2A47', '--rc-accent-dark': '#8CC8FF', '--rc-link': '#0B5FA5', '--rc-subtle': '#E6F0FA', '--rc-subtle-fg': '#0A3D6B' } },
};

function rcLum(hex) {
  const h = (hex || '#000000').replace('#', ''); const c = [0, 2, 4].map(i => parseInt(h.substr(i, 2), 16) / 255).map(v => v <= .03928 ? v / 12.92 : Math.pow((v + .055) / 1.055, 2.4));
  return .2126 * c[0] + .7152 * c[1] + .0722 * c[2];
}
function rcVarsFrom(cor) {
  const p = cor.primaria, onDark = rcLum(p) > .18;
  return { '--rc-primary': p, '--rc-primary-hover': `color-mix(in oklch, ${p} 85%, black)`, '--rc-on': onDark ? '#1D1D1B' : '#FFFFFF', '--rc-dark': cor.escura, '--rc-accent-dark': cor.destaque,
    '--rc-link': `color-mix(in oklch, ${p} ${onDark ? 55 : 100}%, black)`, '--rc-subtle': `color-mix(in oklch, ${p} 12%, white)`, '--rc-subtle-fg': `color-mix(in oklch, ${p} 40%, black)` };
}
function rcSiteCfg(tenant) {
  let s = null; const draft = new URLSearchParams(location.search).get('previa') === '1';
  try { s = (draft && JSON.parse(sessionStorage.getItem('rc-site-' + tenant.id + '-rascunho'))) || JSON.parse(localStorage.getItem('rc-site-' + tenant.id)); } catch (e) {}
  if (!s) return tenant;
  return { ...tenant, nome: s.nome || tenant.nome, logo: s.logo || tenant.logo, host: s.sub ? s.sub + '.rppsconsig.org.br' : tenant.host,
    whatsapp: s.whatsapp || tenant.whatsapp, email: s.email || tenant.email, horario: s.horario || tenant.horario,
    vars: s.cor ? { ...tenant.vars, ...rcVarsFrom(s.cor) } : tenant.vars, hero: s.hero, como: s.como ? { ...(tenant.como || {}), ...Object.fromEntries(Object.entries(s.como).filter(([, v]) => v !== '' && v != null)) } : tenant.como, menuOff: s.menuV ? (s.menuOff || []) : (s.menuOff || []).filter(x => x !== 'prefeituras'), menuLbl: s.menuLbl || {}, links: { ...(tenant.links || {}), ...(s.links || {}) }, seo: { ...(tenant.seo || {}), ...(s.seo || {}) }, rodape: s.rodape || {} };
}
const RC_RODAPE = [['privacidade', 'Política de Privacidade'], ['termos', 'Termos de Uso'], ['lgpd', 'Canal do Titular de Dados (LGPD)'], ['regulamento', 'Regulamento de Crédito']];
const RC_DOC_PADRAO = { rppsconsig: ['privacidade', 'termos', 'lgpd', 'regulamento'], guarujaprev: ['privacidade', 'termos', 'lgpd', 'regulamento'] };
function rcRodapeHref(t, k, l) { const v = (t.rodape || {})[k]; if (!v && (RC_DOC_PADRAO[t.id] || []).includes(k)) return 'assets/publicado/' + t.id + '-' + k + '.pdf'; return v || 'mailto:' + t.email + '?subject=' + encodeURIComponent(l); }
function rcPdfVer(src, nome) {
  const old = document.getElementById('rc-pdf-ver'); if (old) old.remove();
  const d = document.createElement('div'); d.id = 'rc-pdf-ver'; d.setAttribute('role', 'dialog'); d.setAttribute('aria-modal', 'true'); d.setAttribute('aria-label', nome || 'Documento');
  d.style.cssText = 'position:fixed;inset:0;z-index:9999;background:rgba(21,32,51,.48);display:grid;place-items:center;padding:24px';
  d.innerHTML = '<div style="width:min(1000px,100%);height:min(90vh,100%);background:#fff;border-radius:12px;box-shadow:0 24px 60px rgba(16,43,92,.24);display:grid;grid-template-rows:auto 1fr;overflow:hidden"><div style="display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid #D9E1EC;font:600 16px/1.3 var(--ipep-font)"><span style="flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap"></span><a class="ipep-btn ipep-btn--secondary ipep-btn--sm" download><span class="mdi mdi-tray-arrow-down" aria-hidden="true"></span>Baixar</a><button type="button" class="ipep-btn ipep-btn--neutral ipep-btn--sm">Fechar</button></div><iframe title="Documento" style="width:100%;height:100%;border:0"></iframe></div>';
  d.querySelector('span').textContent = nome || 'Documento'; const a = d.querySelector('a'); a.href = src; a.setAttribute('download', (nome || 'documento') + '.pdf'); d.querySelector('iframe').src = src;
  const fechar = () => { d.remove(); document.removeEventListener('keydown', esc); }; const esc = ev => { if (ev.key === 'Escape') fechar(); };
  d.querySelector('button').onclick = fechar; d.onclick = ev => { if (ev.target === d) fechar(); }; document.addEventListener('keydown', esc);
  document.body.appendChild(d); d.querySelector('button').focus();
}
function rcAbrirPdf(e, v, nome) {
  if (!v || /^mailto:/i.test(v)) return;
  if (/^data:application\/pdf/.test(v)) { e.preventDefault(); const b = atob(v.split(',')[1]); const u = new Uint8Array(b.length); for (let i = 0; i < b.length; i++) u[i] = b.charCodeAt(i); rcPdfVer(URL.createObjectURL(new Blob([u], { type: 'application/pdf' })), nome); return; }
  if (!/^https?:/i.test(v) && /\.pdf([?#].*)?$/i.test(v)) { e.preventDefault(); rcPdfVer(v, nome); }
}
window.rcPdfVer = rcPdfVer;
const RC_TITULOS = { exclusao: 'Solicitar Exclusão de Conta', login: 'Área do Cliente', hub: 'Hub de módulos', segurado: 'Área do segurado' };
function rcAplicarSeo(t, pg) {
  const s = t.seo || {}; const lbl = RC_TITULOS[pg] || (RC_PAGES.find(p => p.id === pg) || {}).l;
  document.title = pg && pg !== 'consignado' && lbl ? lbl + ' | ' + t.nome : (s.titulo || t.nome);
  const abs = u => !u ? '' : /^https?:/.test(u) ? u : 'https://' + t.host + '/' + u.replace(/^\//, '');
  const url = 'https://' + t.host + (RC_SLUG[pg] || '/');
  const meta = (attr, k, v) => { if (!v) return; let el = document.head.querySelector('meta[' + attr + '="' + k + '"]'); if (!el) { el = document.createElement('meta'); el.setAttribute(attr, k); document.head.appendChild(el); } el.setAttribute('content', v); };
  const link = (rel, href, sizes) => { let el = document.head.querySelector('link[rel="' + rel + '"]' + (sizes ? '[sizes="' + sizes + '"]' : '')); if (!el) { el = document.createElement('link'); el.rel = rel; if (sizes) el.setAttribute('sizes', sizes); document.head.appendChild(el); } el.href = href; };
  meta('name', 'description', s.descricao); meta('property', 'og:title', document.title); meta('property', 'og:description', s.descricao); meta('property', 'og:url', url); meta('property', 'og:image', abs(s.imagem)); meta('property', 'og:site_name', t.nome);
  meta('name', 'twitter:title', document.title); meta('name', 'twitter:description', s.descricao); meta('name', 'twitter:image', abs(s.imagem)); meta('name', 'google-site-verification', s.google);
  link('canonical', url);
  if (s.iconeImg) { link('icon', s.iconeImg, '32x32'); link('icon', s.iconeImg, '512x512'); link('apple-touch-icon', s.iconeImg); } else if (s.icone) { link('icon', s.icone + '-32.png', '32x32'); link('icon', s.icone + '-512.png', '512x512'); link('apple-touch-icon', s.icone + '-180.png'); }
  if (t.vars && t.vars['--rc-dark']) meta('name', 'theme-color', t.vars['--rc-dark']);
}

const brl = v => v.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL', maximumFractionDigits: 0 });
const brlShort = v => v >= 1e9 ? 'R$ ' + (v / 1e9).toLocaleString('pt-BR', { maximumFractionDigits: 2 }) + ' bi' : 'R$ ' + (v / 1e6).toLocaleString('pt-BR', { maximumFractionDigits: 0 }) + ' mi';
const rcScrollTo = id => { const el = document.getElementById(id); if (el) window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - 76, behavior: 'smooth' }); };

function RcBrandMark({ tenant, onClick }) {
  if (tenant.logo) return <img className="rc-logo" src={tenant.logo} alt={tenant.nome} onClick={onClick}></img>;
  return <div style={{ display: 'flex', alignItems: 'center', gap: 12 }} onClick={onClick}>
    <image-slot id="logo-guarujaprev" shape="rounded" radius="6" placeholder="Logo do RPPS" style={{ width: 44, height: 44 }}></image-slot>
    <span className="rc-tenant-name">{tenant.nome}</span>
  </div>;
}

const RC_PAGES = [
  { id: 'consignado', l: 'Consignado' },
  { id: 'prefeituras', l: 'Prefeitura', selo: 'Consignante', t: 'O papel da prefeitura como consignante', d: 'Como a prefeitura participa da operação com o desconto em folha e o repasse ao RPPS.' },
  { id: 'rpps', l: 'RPPS', selo: 'Consignatária', t: 'O papel do RPPS como consignatária', d: 'Como o regime próprio concede o crédito com recursos do fundo e acompanha a carteira.' },
  { id: 'servidores', l: 'Servidores', selo: 'Vantagens', t: 'Vantagens para o servidor', d: 'O que o servidor ganha ao contratar o consignado do seu RPPS.' },
  { id: 'planejamento', l: 'Educação Financeira', selo: 'Vantagens financeiras', t: 'Planejamento financeiro', d: 'Como o consignado contribui para a saúde financeira do fundo e do segurado.' },
  { id: 'plataforma', l: 'Plataforma', selo: 'Tecnologia', t: 'A plataforma RPPSConsig', d: 'Simulação, contratação digital, gestão da carteira e atendimento em um só lugar.' },
  { id: 'blog', l: 'Blog' },
  { id: 'contato', l: 'Contato' },
];

const RC_SLUG = { consignado: '/', prefeituras: '/prefeitura', rpps: '/rpps', servidores: '/servidores', planejamento: '/educacao-financeira', plataforma: '/plataforma', blog: '/blog', contato: '/contato', exclusao: '/solicitar-exclusao-conta', login: '/area-do-cliente' };
const RC_PROD = /(^|\.)rppsconsig\.org\.br$/i.test(location.hostname);
const rcRota = path => { const p = (decodeURIComponent(path || '/').replace(/\/+$/, '') || '/').toLowerCase(); return Object.keys(RC_SLUG).find(k => RC_SLUG[k] === p) || null; };

function RcHeader({ tenant, go, page, setPage }) {
  const [open, setOpen] = React.useState(false);
  React.useEffect(() => { setOpen(false); }, [page]);
  React.useEffect(() => {
    if (!open) return;
    const k = e => e.key === 'Escape' && setOpen(false);
    const r = () => innerWidth > 1150 && setOpen(false);
    addEventListener('keydown', k); addEventListener('resize', r);
    document.body.style.overflow = 'hidden';
    return () => { removeEventListener('keydown', k); removeEventListener('resize', r); document.body.style.overflow = ''; };
  }, [open]);
  const nav = id => { setOpen(false); setPage(id); };
  return <header className={'rc-head' + (open ? ' is-open' : '')}><div className="rc-wrap rc-head-in">
    <RcBrandMark tenant={tenant} onClick={() => nav('consignado')}></RcBrandMark>
    <nav className="rc-nav" id="rc-nav" aria-label="Páginas do site">
      {RC_PAGES.filter(pg => pg.id !== 'contato' && !(tenant.menuOff || []).includes(pg.id)).map(pg => <button key={pg.id} aria-current={page === pg.id ? 'page' : undefined} onClick={() => nav(pg.id)}>{(tenant.menuLbl || {})[pg.id] || pg.l}<RcIcon name="chevron-right" size={20}></RcIcon></button>)}
      <div className="rc-nav-cta"><RcButton variant="primary" icon="account-outline" onClick={() => { setOpen(false); go('login'); }}>Área do Cliente</RcButton></div>
    </nav>
    <div className="rc-actions rc-head-act">
      <RcButton variant="primary" icon="account-outline" onClick={() => go('login')}>Área do Cliente</RcButton>
    </div>
    <button type="button" className="rc-burger" aria-expanded={open} aria-controls="rc-nav" aria-label={open ? 'Fechar menu' : 'Abrir menu'} onClick={() => setOpen(!open)}><RcIcon name={open ? 'close' : 'menu'} size={24}></RcIcon></button>
  </div>{open && <div className="rc-scrim" onClick={() => setOpen(false)}></div>}</header>;
}

function RcChips({ label, options, value, onChange }) {
  return <div className="rc-q" role="group" aria-label={label}>
    <span className="rc-ql">{label}</span>
    <div className="rc-chips">{options.map(o =>
      <button key={o.v} className="rc-chip" aria-pressed={value === o.v} onClick={() => onChange(o.v)}>
        {value === o.v && <RcIcon name="check" size={16}></RcIcon>}{o.l}
      </button>)}
    </div>
  </div>;
}

const RC_MIN = 10e6, RC_MAX = 5e9;
const posToVal = p => { const raw = RC_MIN * Math.pow(RC_MAX / RC_MIN, p / 1000); const step = raw < 1e8 ? 1e6 : raw < 1e9 ? 5e6 : 5e7; return Math.min(RC_MAX, Math.max(RC_MIN, Math.round(raw / step) * step)); };
const valToPos = v => Math.round(1000 * Math.log(v / RC_MIN) / Math.log(RC_MAX / RC_MIN));

function RcSimulador({ setPage }) {
  const [pro, setPro] = React.useState('sim');
  const [pat, setPat] = React.useState(300e6);
  const [pct, setPct] = React.useState(50);
  const limite = pat * (pro === 'sim' ? 0.10 : 0.05);
  const carteira = limite * pct / 100;
  return <div className="rc-sim" id="simulador">
    <div>
      <h3>Simule a carteira do seu RPPS</h3>
      <p className="rc-note" style={{ fontSize: 14 }}>Sem cadastro. Informe três dados e veja o limite estimado.</p>
    </div>
    <RcChips label="Possui Pró-Gestão?" value={pro} onChange={setPro} options={[{ v: 'sim', l: 'Sim (nível I ou superior)' }, { v: 'nao', l: 'Não' }]}></RcChips>
    <div className="rc-q">
      <label htmlFor="rc-pat">Patrimônio líquido do RPPS</label>
      <div className="rc-val">{brlShort(pat)}</div>
      <input id="rc-pat" className="rc-range" type="range" min="0" max="1000" value={valToPos(pat)} onChange={e => setPat(posToVal(+e.target.value))} aria-valuetext={brlShort(pat)}></input>
      <div className="rc-scale"><span>R$ 10 mi</span><span>R$ 5 bi</span></div>
    </div>
    <RcChips label="Quanto deseja alocar do limite" value={pct} onChange={setPct} options={[25, 50, 75, 100].map(v => ({ v, l: v + '%' }))}></RcChips>
    <div className="rc-result" aria-live="polite">
      <div className="rc-result-grid">
        <div><small>Limite máximo para consignado</small><strong key={'l' + limite} className="rc-pulse">{brl(limite)}</strong></div>
        <div><small>Carteira planejada</small><strong key={'c' + carteira} className="rc-pulse">{brl(carteira)}</strong></div>
      </div>
      <button className="rc-btn-green" onClick={() => setPage('contato')}>Quero um estudo para o meu RPPS<RcIcon name="arrow-right" size={18}></RcIcon></button>
    </div>
    <p className="rc-note">Estimativa ilustrativa com base no limite da Resolução CMN nº 5.272/2025 (art. 12). O valor efetivo depende da Política de Investimentos e do estudo atuarial do RPPS.</p>
  </div>;
}

function RcHero({ tenant, setPage, go }) {
  return <section className="rc-hero"><div className="rc-wrap rc-hero-grid">
    <div className="rc-hero-txt">
      <span className="rc-seal"><RcIcon name="shield-check-outline" size={14}></RcIcon>{(tenant.hero && tenant.hero.selo) || 'Crédito consignado para RPPS'}</span>
      <h1 className="rc-h1">{(tenant.hero && tenant.hero.titulo) || 'O consignado que rende para o fundo e cabe no bolso do segurado.'}</h1>
      <p className="rc-lead">{tenant.hero && tenant.hero.texto ? tenant.hero.texto : tenant.id === 'rppsconsig' ? 'Conceda empréstimos com recursos do próprio regime, desconto em folha e toda a operação em uma única plataforma.' : `Crédito consignado do ${tenant.nome} para seus segurados, com desconto em folha e contratação digital.`}</p>
      <div className="rc-actions rc-hero-act">
        <button className="rc-btn-green" style={{ padding: '0 20px', background: 'var(--rc-primary)', color: 'var(--rc-on)' }} onClick={() => go('login')}>Simular empréstimo</button>
        <RcButton variant="neutral" onClick={() => setPage('contato')}>Fale Conosco</RcButton>
      </div>
    </div>
    <RcSimSegurado></RcSimSegurado>
  </div></section>;
}

const RC_STEPS = ['Diagnóstico do RPPS e estudo atuarial da carteira.', 'Regulamento de crédito e ajuste da Política de Investimentos.', 'Convênio com a prefeitura para desconto em folha.', 'Portal e aplicativo com a marca do seu RPPS.', 'Operação, atendimento e cobrança acompanhados pela plataforma.'];

function RcComoFunciona({ tenant, setPage }) {
  const cm = (tenant && tenant.como) || {};
  const foto = cm.foto || 'assets/pamela-machado.png', nomeP = cm.nome || 'Pamela Machado', cargoP = cm.cargo ?? 'Coordenadora';
  const steps = cm.passos && cm.passos.filter(x => x && x.trim()).length ? cm.passos.filter(x => x && x.trim()) : RC_STEPS;
  const ref = React.useRef(null);
  const photo = React.useRef(null);
  React.useEffect(() => {
    const el = ref.current; if (!el) return;
    const io = new IntersectionObserver(es => es.forEach(e => { if (e.isIntersecting) { el.classList.add('rc-in'); io.disconnect(); } }), { threshold: 0.25 });
    io.observe(el);
    let raf = 0;
    const onScroll = () => { cancelAnimationFrame(raf); raf = requestAnimationFrame(() => {
      const r = el.getBoundingClientRect(); const p = Math.max(-1, Math.min(1, (r.top + r.height / 2 - innerHeight / 2) / innerHeight));
      if (photo.current) photo.current.style.setProperty('--py', (p * 28).toFixed(1) + 'px');
    }); };
    addEventListener('scroll', onScroll, { passive: true }); onScroll();
    return () => { io.disconnect(); removeEventListener('scroll', onScroll); cancelAnimationFrame(raf); };
  }, []);
  return <section className="rc-sec rc-sec--white rc-how" id="como-funciona" ref={ref}><div className="rc-wrap rc-steps-grid">
    <figure style={{ margin: 0, display: 'grid', gap: 16, justifyItems: 'center' }}>
      <div className="rc-photo-fx">
        <span className="rc-photo-frame" aria-hidden="true"></span>
        <div className="rc-photo-clip"><div className="rc-photo-par" ref={photo}>
          <img src={foto} alt={nomeP} style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block', borderRadius: 12 }}></img>
        </div></div>
      </div>
      <figcaption className="rc-photo-cap" style={{ font: '600 16px/1.3 var(--ipep-font)', color: 'var(--ipep-text)', textAlign: 'center' }}>{nomeP}{cargoP && <span style={{ display: 'block', font: '400 14px/1.4 var(--ipep-font)', color: 'var(--ipep-text-secondary)' }}>{cargoP}</span>}</figcaption>
      {cm.btnOn !== false && <RcButton variant="secondary" icon="calendar-account-outline" onClick={() => setPage && setPage('contato')}>{(cm.btn || '').trim() || 'Solicitar demonstração'}</RcButton>}
    </figure>
    <div>
      <span className="rc-seal">{cm.selo || 'Implantação'}</span>
      <h2 className="rc-h2">{cm.titulo || 'Implantar é mais simples do que parece.'}</h2>
      <p className="rc-p">{cm.texto || 'Veja como seu RPPS começa a operar:'}</p>
      <ol className="rc-steps rc-how-steps">{steps.map((s, i) => <li key={i} style={{ '--i': i }}><span className="rc-num">{i + 1}</span><span>{s}</span></li>)}</ol>
    </div>
  </div></section>;
}

const RC_BEN = [
  { ic: 'chart-line', t: 'Rentabilidade', d: 'Retorno que contribui para a meta atuarial do fundo.' },
  { ic: 'shield-lock-outline', t: 'Segurança', d: 'Desconto em folha, fundo garantidor e seguro prestamista.' },
  { ic: 'scale-balance', t: 'Conformidade', d: 'Regras alinhadas à Portaria MTP 1.467/2022 e à Resolução CMN nº 5.272/2025.' },
  { ic: 'forum-outline', t: 'Relacionamento', d: 'Atendimento por WhatsApp, e-mail, portal e aplicativo.' },
];

function RcBeneficios({ setPage }) {
  const ref = React.useRef(null);
  React.useEffect(() => {
    const el = ref.current; if (!el || !('IntersectionObserver' in window)) return;
    el.classList.add('rc-reveal');
    const io = new IntersectionObserver(es => es.forEach(e => { if (e.isIntersecting) { el.classList.add('rc-in'); io.disconnect(); } }), { threshold: 0.2 });
    io.observe(el); return () => io.disconnect();
  }, []);
  return <section className="rc-sec rc-ben" id="beneficios" ref={ref}><div className="rc-wrap">
    <div className="rc-ben-head">
      <div>
        <span className="rc-seal">Benefícios para o RPPS</span>
        <h2 className="rc-h2">Por que o consignado fortalece o seu RPPS</h2>
      </div>
      <div>
        <p className="rc-p">O crédito é concedido com recursos do próprio regime e retorna ao fundo com juros para fundo garantidor das aposentadorias.</p>
        <a href="#" onClick={e => { e.preventDefault(); setPage('plataforma'); }}>Ver a solução completa →</a>
      </div>
    </div>
    <div className="rc-cards">{RC_BEN.map((b, n) => <RcCard key={b.t} className="rc-card rc-card--fx" padding={24} style={{ '--d': 200 + n * 110 + 'ms' }}>
      <div className="rc-card-ic"><RcIcon name={b.ic} size={24}></RcIcon></div>
      <h3>{b.t}</h3><p>{b.d}</p>
    </RcCard>)}</div>
    <div className="rc-strip"><RcIcon name="information-outline" size={20} color="var(--ipep-info)"></RcIcon><span>Parâmetros como prazos, valores e taxas são definidos no regulamento de cada RPPS, com base em estudo atuarial.</span></div>
  </div></section>;
}

function RcFinal({ go, setPage }) {
  const ref = React.useRef(null);
  React.useEffect(() => {
    const el = ref.current; if (!el || !('IntersectionObserver' in window)) return;
    el.classList.add('rc-reveal');
    const io = new IntersectionObserver(es => es.forEach(e => { if (e.isIntersecting) { el.classList.add('rc-in'); io.disconnect(); } }), { threshold: 0.2 });
    io.observe(el); return () => io.disconnect();
  }, []);
  const items = [
    { t: 'Fale com um Especialista', s: 'Uma plataforma certificada', ic: 'arrow-right', on: () => setPage('contato') },
    { t: 'Área do Cliente', s: 'Acesso para gestores e equipes', ic: 'account-outline', on: () => go('login') },
    { t: 'Educação financeira', s: 'Material para seus segurados', ic: 'book-open-variant-outline', on: () => {} },
  ];
  return <section className="rc-sec rc-sec--white rc-fin" ref={ref}><div className="rc-wrap rc-final">
    <div>
      <span className="rc-seal">Crédito responsável</span>
      <h2 className="rc-h2">Um consignado que cuida do fundo e do segurado.</h2>
      <p className="rc-p">O <strong style={{ color: 'var(--ipep-text)' }}>RPPSConsig</strong> é a plataforma de crédito consignado para Regimes Próprios de Previdência Social. Reúne simulação, contratação digital, gestão da carteira, atendimento e educação financeira em um só lugar.</p>
      <a href="#" onClick={e => { e.preventDefault(); setPage('contato'); }}>Fale com um especialista →</a>
    </div>
    <div className="rc-short">{items.map((it, n) => <button key={it.t} onClick={it.on} style={{ '--d': 250 + n * 130 + 'ms' }}>
      <span style={{ flex: 1 }}><b>{it.t}</b><small>{it.s}</small></span>
      <RcIcon name={it.ic} size={24} color="var(--rc-accent-dark)"></RcIcon>
    </button>)}</div>
  </div></section>;
}

function RcFooter({ tenant }) {
  return <footer className="rc-foot"><div className="rc-wrap" style={{ display: 'grid', gap: 24 }}>
    <div className="rc-foot-grid">
      <div style={{ display: 'grid', gap: 12 }}>
        <RcBrandMark tenant={tenant}></RcBrandMark>
        <span className="rc-meta">{tenant.host}</span>
        <div className="rc-foot-apps" aria-label="Baixe o aplicativo">
          <a className="rc-fstore" href="https://apps.apple.com/br/app/rppsconsig/id6749464652" target="_blank" rel="noopener" onClick={e => { e.preventDefault(); window.open('https://apps.apple.com/br/app/rppsconsig/id6749464652', '_blank', 'noopener'); }} aria-label="Baixar na App Store — abre em nova aba"><RcIcon name="apple" size={22}></RcIcon><span><small>Baixar na</small>App Store</span></a>
          <a className="rc-fstore" href="https://play.google.com/store/apps/details?id=br.org.ipepbrasil.rppsconsig" target="_blank" rel="noopener" onClick={e => { e.preventDefault(); window.open('https://play.google.com/store/apps/details?id=br.org.ipepbrasil.rppsconsig', '_blank', 'noopener'); }} aria-label="Disponível no Google Play — abre em nova aba"><RcIcon name="google-play" size={20}></RcIcon><span><small>Disponível no</small>Google Play</span></a>
        </div>
      </div>
      <div style={{ display: 'flex', flexWrap: 'wrap', gap: 24, alignItems: 'center' }}>
      <img src="assets/selos-iso-27001-27701.png" alt="Certificações ISO/IEC 27001 e ISO/IEC 27701 – QMS Certification" style={{ height: 84, width: 'auto', display: 'block' }}></img>
      <div style={{ display: 'grid', gap: 6, fontSize: 14 }}>
        <a className="rc-foot-wa" href={'https://wa.me/' + (String(tenant.whatsapp).replace(/\D/g, '').replace(/^(?!55)/, '55')) + '?text=Ol%C3%A1%20como%20pode%20te%20ajudar%20%3F'} target="_blank" rel="noopener" aria-label={'Abrir conversa no WhatsApp ' + tenant.whatsapp}><RcIcon name="whatsapp" size={16}></RcIcon><span className="rc-num-t">{tenant.whatsapp}</span></a>
        <span style={{ display: 'flex', gap: 8, alignItems: 'center' }}><RcIcon name="email-outline" size={16}></RcIcon>{tenant.email}</span>
        <span style={{ display: 'flex', gap: 8, alignItems: 'center' }}><RcIcon name="clock-outline" size={16}></RcIcon>{tenant.horario}</span>
      </div>
      </div>
    </div>
    <div className="rc-foot-grid" style={{ borderTop: '1px solid var(--ipep-border)', paddingTop: 20, alignItems: 'center' }}>
      <nav className="rc-foot-links" aria-label="Links institucionais">
        {RC_RODAPE.map(([k, l]) => { const h = rcRodapeHref(tenant, k, l); const doc = !/^mailto:/.test(h); return <a key={k} href={/^data:/.test(h) ? '#' : h} target={doc ? '_blank' : undefined} rel={doc ? 'noopener' : undefined} onClick={e => rcAbrirPdf(e, h, l)}>{l}</a>; })}
        {(() => { const R = tenant.rodape || {}; const em = R.ajudaEmail, tel = R.ajudaTel; if (!em && !tel) return null; return <span style={{ display: 'flex', flexWrap: 'wrap', gap: '4px 12px', alignItems: 'center' }}><b style={{ fontWeight: 600 }}>Ajuda:</b>{em && <a href={'mailto:' + em}>{em}</a>}{tel && <a className="rc-num-t" href={'tel:+' + String(tel).replace(/\D/g, '').replace(/^(?!55)/, '55')}>{tel}</a>}</span>; })()}
      </nav>
      <span className="rc-meta">{tenant.id === 'rppsconsig' ? '© 2026 RPPSConsig · tecnologia IPEP' : 'Plataforma RPPSConsig · tecnologia IPEP'}</span>
    </div>
  </div></footer>;
}

function RcPageHero({ pg }) {
  return <section className="rc-hero" style={{ padding: '56px 0' }}><div className="rc-wrap">
    <span className="rc-seal">{pg.selo}</span>
    <h1 className="rc-h1" style={{ fontSize: 40 }}>{pg.t}</h1>
    <p className="rc-lead" style={{ margin: 0 }}>{pg.d}</p>
  </div></section>;
}

function RcPaginaTema({ pg }) {
  return <>
    <RcPageHero pg={pg}></RcPageHero>
    <section className="rc-sec"><div className="rc-wrap">
      <RcStateMsg kind="empty" title="Conteúdo em elaboração">O texto desta página será incluído após a definição do conteúdo.</RcStateMsg>
    </div></section>
  </>;
}

function RcContato({ tenant }) {
  const [enviado, setEnviado] = React.useState(false);
  const pg = { selo: 'Contato', t: 'Fale com um especialista', d: 'Solicite uma demonstração ou um estudo da carteira de consignado para o seu RPPS.' };
  return <>
    <RcPageHero pg={pg}></RcPageHero>
    <section className="rc-sec"><div className="rc-wrap">
      <div style={{ display: 'grid', gap: 12, gridTemplateColumns: 'repeat(auto-fit,minmax(min(100%,280px),1fr))' }}>
        {[['whatsapp', 'WhatsApp', tenant.whatsapp], ['email-outline', 'E-mail', tenant.email], ['clock-outline', 'Horário de atendimento', tenant.horario]].map(c =>
          <RcCard key={c[1]} padding={20}><div style={{ display: 'flex', gap: 16, alignItems: 'center' }}>
            <div className="rc-card-ic" style={{ margin: 0 }}><RcIcon name={c[0]} size={24}></RcIcon></div>
            <div><div className="rc-meta">{c[1]}</div><div className="rc-num-t" style={{ font: '600 16px/1.4 var(--ipep-font)' }}>{c[2]}</div></div>
          </div></RcCard>)}
      </div>
    </div></section>
  </>;
}

function RcExclusao({ tenant }) {
  const [mat, setMat] = React.useState('');
  const [erro, setErro] = React.useState('');
  const [enviado, setEnviado] = React.useState(false);
  const pg = { selo: 'Privacidade', t: 'Solicitar Exclusão de Conta', d: 'Para solicitar a exclusão da sua conta, informe sua matrícula abaixo. A solicitação será enviada ao nosso atendimento pelo WhatsApp, e a equipe validará os seus dados antes de concluir a exclusão.' };
  const wa = m => 'https://wa.me/' + String(tenant.whatsapp).replace(/\D/g, '').replace(/^(?!55)/, '55') + '?text=' + encodeURIComponent('Olá, desejo excluir a minha conta no ' + tenant.nome + '. Matrícula do beneficiário: ' + m);
  const enviar = e => {
    e.preventDefault();
    const m = mat.trim();
    if (m.length < 3) { setErro('Informe a matrícula do beneficiário.'); return; }
    setErro(''); setEnviado(true);
    const w = window.open(wa(m), '_blank', 'noopener');
    if (!w) location.href = wa(m);
  };
  return <>
    <RcPageHero pg={pg}></RcPageHero>
    <section className="rc-sec"><div className="rc-wrap" style={{ maxWidth: 560 }}>
      <RcCard padding={24}>
        <form onSubmit={enviar} noValidate style={{ display: 'grid', gap: 16 }}>
          <RcTextField label="Matrícula do Beneficiário" required autoComplete="off" inputMode="numeric" icon="card-account-details-outline" value={mat} disabled={enviado}
            onChange={e => { setMat(e.target.value); setErro(''); }} error={erro || undefined}></RcTextField>
          <RcButton type="submit" variant="primary" icon="whatsapp" disabled={enviado}>Solicitar Exclusão</RcButton>
        </form>
        {enviado && <div style={{ marginTop: 16 }}><RcAlertC tone="success" title="Solicitação registrada">Enviamos a mensagem com a sua matrícula para o WhatsApp do atendimento. Confirme o envio na conversa e siga as instruções recebidas para concluir a exclusão da conta. Se o WhatsApp não abriu, <a href={wa(mat.trim())} target="_blank" rel="noopener">toque aqui para abrir a conversa</a>.</RcAlertC></div>}
        {!enviado && <p className="rc-meta" style={{ margin: '16px 0 0' }}>Ao continuar, o WhatsApp abrirá com a mensagem pronta. Basta confirmar o envio na conversa.</p>}
      </RcCard>
    </div></section>
  </>;
}

function RcPortal({ tenant, go, page = 'consignado', setPage }) {
  const nav = id => { setPage(id); window.scrollTo(0, 0); };
  const postId = String(page).startsWith('blog:') ? String(page).slice(5) : null;
  const pg = page === 'exclusao' ? { id: 'exclusao' } : RC_PAGES.find(x => x.id === (postId ? 'blog' : page)) || RC_PAGES[0];
  let body;
  if (pg.id === 'exclusao') body = <RcExclusao tenant={tenant}></RcExclusao>;
  else if (pg.id === 'blog') body = postId && window.RcBlogPost ? <window.RcBlogPost id={postId} setPage={nav}></window.RcBlogPost> : window.RcBlogLista ? <window.RcBlogLista setPage={nav}></window.RcBlogLista> : null;
  else if (pg.id === 'consignado') body = <>
    <RcHero tenant={tenant} setPage={nav} go={go}></RcHero>
    <RcComoFunciona tenant={tenant} setPage={nav}></RcComoFunciona>
    <RcBeneficios setPage={nav}></RcBeneficios>
    <RcFinal go={go} setPage={nav}></RcFinal>
    {window.RcBlogHome && <window.RcBlogHome setPage={nav}></window.RcBlogHome>}
  </>;
  else if (pg.id === 'contato') body = <RcContato tenant={tenant}></RcContato>;
  else {
    const M = { rpps: window.RcPaginaRPPS, prefeituras: window.RcPaginaPrefeituras, servidores: window.RcPaginaServidores, planejamento: window.RcPaginaPlanejamento, plataforma: window.RcPaginaPlataforma }[pg.id];
    body = M ? <M setPage={nav} go={go}></M> : <RcPaginaTema pg={pg}></RcPaginaTema>;
  }
  return <>
    <RcHeader tenant={tenant} go={go} page={pg.id} setPage={nav}></RcHeader>
    {body}
    <RcFooter tenant={tenant}></RcFooter>
  </>;
}

Object.assign(window, { rcSiteCfg, rcVarsFrom, rcLum, RC_PAGES, RC_TENANTS, RcPortal, RcBrandMark, RcFooter, RcPageHero });
