/* ============================================================================
   PORTA v4 — vitrine clara (réplica do padrão PULSAR-FINANCE, 25/08/2026)
   ----------------------------------------------------------------------------
   Fonte da verdade: PULSAR-FINANCE/src/index.css (:root da vitrine, .pt-*) +
   PADRAO-VISUAL.md (3 pesquisas de 24/08: anti-IA, animações, praticidade).
   Card no kit: fundamentos/tokens-porta.html.

   ESCOPO: a PORTA (páginas públicas e portal do cliente) é SEMPRE clara.
   O interior (app.html) segue o Sóbrio — esta camada NÃO entra lá.
   OPT-IN por página: linkar por último no <head> da página que aderir.
   Nomes idênticos aos do Finance de propósito (--lp-*, .pt-*, .lp-btn): um
   padrão, dois produtos — quem aprende um, lê o outro.

   Fontes (25/08): a porta usa as MESMAS famílias já carregadas por todas as
   páginas — Space Grotesk (display) + Inter (UI/corpo) + JetBrains Mono
   (números). Nenhum <link> extra é necessário. Fallbacks abaixo seguram o
   layout se a rede bloquear — lição do Finance: fonte por CDN cai, app fica.
   ========================================================================== */

:root {
  /* Paleta da porta — papéis NOMEADOS (cor sem papel é confete):
     25/08 (pedido Ricaliff): "branco menos forte" — fundo e cartão desceram
     um tom em relação aos originais do Finance (#f7f6fa/#fdfcff). */
  --lp-gelo: #f1eff6;       /* fundo da página */
  --lp-branco: #f8f7fb;     /* cartão */
  --lp-lavanda: #f1edfa;    /* banda de seção */
  --lp-roxo: #401c7f;       /* banner e CTA sólido */
  --lp-roxo-vivo: #7048e8;  /* marca e ação viva */
  --lp-lilas: #a78bfa;      /* detalhe */
  --lp-ardosia: #3e3b54;    /* texto */
  --lp-cinza: #736d8f;      /* apoio */
  --lp-verde: #37795b;      /* dinheiro/estado que ENTRA (semântico) */
  --lp-vermelho: #b6524a;   /* dinheiro/estado que SAI (semântico) */
  --lp-bd: #e5e1ef;         /* borda de cartão no claro */

  /* 4 famílias, papel FIXO — IGUAIS às do Finance (régua 25/08: "exatamente
     igual ao do site"; a troca por Space Grotesk foi revertida): */
  --f-editorial: 'Fraunces', Georgia, 'Times New Roman', serif;    /* títulos INTEIROS da porta */
  --f-vitrine: 'Public Sans', 'Inter', system-ui, sans-serif;      /* UI da vitrine */
  --f-corpo: 'Inter', system-ui, sans-serif;                       /* corpo */
  --f-num: 'JetBrains Mono', ui-monospace, monospace;              /* números e rótulos técnicos */

  --lp-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --lp-t: 0.18s;
}

/* ---- Tipografia utilitária (mesmos nomes do Finance) ---- */
.lp-h { font-family: var(--f-editorial); font-weight: 600; letter-spacing: -0.01em; }
.f-vitrine { font-family: var(--f-vitrine); }
.f-num { font-family: var(--f-num); font-variant-numeric: tabular-nums; }

/* ---- Botões da casa: CTA SÓLIDO, sem gradiente (tell nº1 de IA) ---- */
.lp-btn { display: inline-flex; align-items: center; gap: 8px; border-radius: 12px; padding: 11px 20px; font-size: 14px; font-weight: 600; border: 1px solid transparent; cursor: pointer; transition: background var(--lp-t) var(--lp-ease), border-color var(--lp-t) var(--lp-ease), color var(--lp-t) var(--lp-ease); }
.lp-btn--solido { background: var(--lp-roxo); color: #fff; }
.lp-btn--solido:hover { background: var(--lp-roxo-vivo); }
.lp-btn--claro { background: var(--lp-branco); color: var(--lp-roxo); border-color: var(--lp-bd); }
.lp-btn--claro:hover { background: var(--lp-lavanda); }
.lp-btn--borda { background: transparent; color: var(--lp-ardosia); border-color: var(--lp-bd); }
.lp-btn--borda:hover { border-color: var(--lp-roxo-vivo); color: var(--lp-roxo); }

/* ---- Semáforo dos 5s (regra: UMA frase diz se está tudo bem; clicável abre a fila).
        Pares texto/tint MEDIDOS no claro (WCAG AA): verde 5,8:1 · âmbar 5,5:1. ---- */
.pt-semaforo { display: flex; align-items: center; gap: 10px; border-radius: 12px; padding: 12px 16px; font-size: 14px; font-weight: 500; text-align: left; border: 1px solid transparent; font-family: var(--f-corpo); cursor: pointer; }
.pt-semaforo .dot { width: 9px; height: 9px; border-radius: 999px; background: currentColor; flex-shrink: 0; }
.pt-semaforo[data-tom='ok'] { background: rgb(55 121 91 / 0.12); color: #2a5d46; }
.pt-semaforo[data-tom='atencao'] { background: rgb(201 162 39 / 0.12); color: #6b5526; }
.pt-semaforo[data-tom='erro'] { background: rgb(182 82 74 / 0.1); color: var(--lp-vermelho); }
.pt-semaforo[data-tom='neutro'] { background: var(--lp-lavanda); color: var(--lp-cinza); }

/* ---- KPI com barra de acento (herda a cor do white-label via --lp-roxo*) ---- */
.pt-kpi { position: relative; overflow: hidden; background: var(--lp-branco); border: 1px solid var(--lp-bd); border-radius: 12px; padding: 14px 14px 12px 18px; text-align: left; transition: border-color var(--lp-t) var(--lp-ease); }
.pt-kpi::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: linear-gradient(180deg, var(--lp-roxo-vivo), var(--lp-roxo)); }
.pt-kpi .rotulo { display: block; font-family: var(--f-num); font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--lp-cinza); }
.pt-kpi .valor { font-family: var(--f-num); font-variant-numeric: tabular-nums; font-size: 22px; line-height: 1.15; color: var(--lp-ardosia); }
.pt-kpi:hover { border-color: var(--lp-roxo-vivo); }

/* ---- Chip de atalho (toda ação corresponde à função: chip ABRE a função) ---- */
.pt-chip { display: inline-flex; align-items: center; gap: 7px; border: 1px solid var(--lp-bd); border-radius: 999px; background: var(--lp-branco); padding: 8px 14px; font-size: 13px; font-weight: 500; color: var(--lp-ardosia); font-family: var(--f-corpo); cursor: pointer; transition: border-color var(--lp-t) var(--lp-ease), background var(--lp-t) var(--lp-ease); }
.pt-chip svg, .pt-chip i { color: var(--lp-roxo-vivo); }
.pt-chip:hover { border-color: var(--lp-roxo-vivo); background: var(--lp-lavanda); }

/* ---- Chip de ícone de cartão ---- */
.pt-cartao-icone { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; color: var(--lp-roxo-vivo); background: rgb(112 72 232 / 0.1); flex-shrink: 0; }

/* ---- Regras de movimento da porta (números do PADRAO §3) ----
   reveal 0.55s ease-out · stagger 60–90ms · saída ~20% mais rápida ·
   só transform/opacity · nada infinito fora da marca · hover NUNCA move layout. */
@keyframes lp-revela { from { opacity: 0; transform: translateY(10px); } }
.lp-revela { animation: lp-revela 0.55s var(--lp-ease) backwards; }
html[data-static] .lp-revela { animation: none !important; }

/* ---- Galeria de gráficos do TOPO (25/08, réplica do Finance): linha de 3 sempre à
        vista; a seta expande o RESTO (acordeão por grid-rows — anima altura, largura
        constante, nada re-mede). JS: PortaV4.initGaleria() no porta-v4.js. ---- */
.pt-galeria { display: flex; flex-direction: column; gap: 14px; }
.pt-galeria-topo { display: grid; gap: 14px; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
@media (min-width: 900px) { .pt-galeria-topo { grid-template-columns: repeat(3, 1fr); } }
.pt-galeria-resto { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 0.3s var(--lp-ease); }
.pt-galeria-resto.aberta { grid-template-rows: 1fr; }
.pt-galeria-resto > .miolo { overflow: hidden; min-height: 0; display: grid; gap: 14px; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
@media (min-width: 900px) { .pt-galeria-resto > .miolo { grid-template-columns: repeat(3, 1fr); } }
.pt-galeria-seta {
  margin: 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--lp-bd);
  border-radius: 999px;
  background: var(--lp-branco);
  padding: 7px 14px;
  font-size: 12px;
  font-weight: 500;
  color: var(--lp-cinza);
  cursor: pointer;
  transition: border-color var(--lp-t) var(--lp-ease), color var(--lp-t) var(--lp-ease);
}
.pt-galeria-seta:hover { border-color: var(--lp-roxo-vivo); color: var(--lp-ardosia); }
.pt-galeria-seta svg { transition: transform var(--lp-t) var(--lp-ease); }
.pt-galeria-seta[aria-expanded='true'] svg { transform: rotate(180deg); }
[data-theme='dark'] .pt-galeria-seta { background: transparent; color: var(--fg-muted, #9aa3bd); border-color: rgb(255 255 255 / 0.14); }
[data-theme='dark'] .pt-galeria-seta:hover { color: var(--fg, #e8eeff); border-color: var(--lp-roxo-vivo); }
html[data-static] .pt-galeria-resto, html[data-static] .pt-galeria-seta svg { transition: none; }
/* Expansão individual in-place: o card toma a linha; o wrap cresce (height inline pede !important). */
.pt-galeria .chart-card { position: relative; }
.pt-card-expandir {
  position: absolute;
  top: 10px;
  right: 10px;
  width: 26px;
  height: 26px;
  display: grid;
  place-items: center;
  border: 1px solid var(--lp-bd);
  border-radius: 7px;
  background: transparent;
  color: var(--lp-cinza);
  cursor: pointer;
  transition: border-color var(--lp-t) var(--lp-ease), color var(--lp-t) var(--lp-ease);
}
.pt-card-expandir:hover { border-color: var(--lp-roxo-vivo); color: var(--lp-ardosia); }
[data-theme='dark'] .pt-card-expandir { border-color: rgb(255 255 255 / 0.14); color: var(--fg-muted, #9aa3bd); }
[data-theme='dark'] .pt-card-expandir:hover { border-color: var(--lp-roxo-vivo); color: var(--fg, #e8eeff); }
.pt-card-expandido { grid-column: 1 / -1; }
.pt-card-expandido .chart-wrap { height: 420px !important; }

/* ---- Variantes DARK (o client.html do RH ainda é dark por padrão): os pares claros
        acima ficam ilegíveis sobre fundo escuro — aqui o texto clareia mantendo o tom. */
[data-theme='dark'] .pt-semaforo[data-tom='ok'] { background: rgb(55 121 91 / 0.16); color: #7fc8a4; }
[data-theme='dark'] .pt-semaforo[data-tom='atencao'] { background: rgb(201 162 39 / 0.14); color: #e2c26a; }
[data-theme='dark'] .pt-semaforo[data-tom='erro'] { background: rgb(182 82 74 / 0.14); color: #e59a93; }
[data-theme='dark'] .pt-semaforo[data-tom='neutro'] { background: rgb(255 255 255 / 0.05); color: var(--fg-muted, #9aa3bd); }
[data-theme='dark'] .pt-chip { background: transparent; color: var(--fg, #e8eeff); border-color: rgb(255 255 255 / 0.14); }
[data-theme='dark'] .pt-chip:hover { background: rgb(255 255 255 / 0.06); border-color: var(--lp-roxo-vivo); }
[data-theme='dark'] .pt-kpi { background: rgb(255 255 255 / 0.03); border-color: rgb(255 255 255 / 0.1); }
[data-theme='dark'] .pt-kpi .valor { color: var(--fg, #e8eeff); }
[data-theme='dark'] .pt-kpi .rotulo { color: var(--fg-muted, #9aa3bd); }

/* ============================================================================
   PRATICIDADE (25/08 — paridade Finance): overlays da paleta/ajuda, tour,
   bottom-tabs e o botão "?" — claro por padrão, variantes dark abaixo.
   ========================================================================== */
.ptp-fundo { position: fixed; inset: 0; z-index: 90; background: rgb(0 0 0 / 0.55); display: flex; align-items: flex-start; justify-content: center; padding: 6vh 16px 16px; }
.ptp-card { width: 100%; max-width: 560px; max-height: 80vh; display: flex; flex-direction: column; overflow: hidden; background: var(--lp-branco); border: 1px solid var(--lp-bd); border-radius: 16px; outline: none; box-shadow: 0 24px 60px rgb(0 0 0 / 0.3); }
.ptp-paleta { max-width: 460px; }
.ptp-input { border: 0; border-bottom: 1px solid var(--lp-bd); background: transparent; padding: 14px 16px; font: inherit; font-size: 14px; color: var(--lp-ardosia); outline: none; }
.ptp-lista { list-style: none; margin: 0; padding: 8px; overflow: auto; }
.ptp-lista li.vazio { padding: 10px 12px; font-size: 13px; color: var(--lp-cinza); }
.ptp-lista button { display: flex; align-items: baseline; gap: 10px; width: 100%; border: 0; background: transparent; text-align: left; padding: 9px 12px; border-radius: 9px; font: inherit; font-size: 13.5px; color: var(--lp-cinza); cursor: pointer; }
.ptp-lista button.ativo, .ptp-lista button:hover { background: rgb(112 72 232 / 0.1); color: var(--lp-ardosia); }
.ptp-lista .grupo { flex-shrink: 0; width: 64px; font-size: 9px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--lp-cinza); font-family: var(--f-num); }
.ptp-miolo { padding: 12px 14px; overflow: auto; }
.ptp-miolo .sugestoes p { font-size: 12px; color: var(--lp-cinza); margin: 0 0 8px; }
.ptp-miolo .chip { border: 1px solid var(--lp-bd); background: var(--lp-gelo); border-radius: 999px; padding: 6px 12px; margin: 0 6px 6px 0; font: inherit; font-size: 12px; color: var(--lp-cinza); cursor: pointer; }
.ptp-miolo .chip:hover { border-color: var(--lp-roxo-vivo); color: var(--lp-ardosia); }
.ptp-miolo .foco { border: 1px solid rgb(112 72 232 / 0.3); background: rgb(112 72 232 / 0.05); border-radius: 12px; padding: 0 14px; }
.ptp-miolo .foco:empty { display: none; }
.ptp-miolo .foco .tag { display: inline-block; margin-top: 12px; font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.1em; color: var(--lp-roxo-vivo); font-weight: 700; }
.ptp-miolo .foco h3 { font-size: 15px; margin: 2px 0 6px; color: var(--lp-ardosia); }
.ptp-miolo .foco code { display: inline-block; font-family: var(--f-num); font-size: 12px; background: var(--lp-branco); border: 1px solid var(--lp-bd); border-radius: 8px; padding: 5px 10px; margin-bottom: 6px; color: var(--lp-ardosia); }
.ptp-miolo .foco p { font-size: 13px; color: var(--lp-cinza); line-height: 1.5; margin: 0 0 10px; }
.ptp-miolo .foco ol { margin: 0 0 10px 18px; padding: 0; font-size: 13px; color: var(--lp-cinza); display: grid; gap: 4px; }
.ptp-miolo .foco .abrir { border: 0; border-radius: 9px; background: var(--lp-roxo); color: #fff; font: inherit; font-size: 13px; font-weight: 600; padding: 8px 14px; margin-bottom: 12px; cursor: pointer; }
.ptp-miolo .foco .abrir:hover { background: var(--lp-roxo-vivo); }
.ptp-miolo .vazio { font-size: 13px; color: var(--lp-cinza); padding: 10px 0; }
.ptp-rodape { border-top: 1px solid var(--lp-bd); margin: 0; padding: 8px 16px; font-size: 10.5px; color: var(--lp-cinza); }
.ptp-tour { position: fixed; inset: 0; z-index: 95; }
.ptp-tour .veu { position: absolute; inset: 0; background: rgb(0 0 0 / 0.6); }
.ptp-tour .foco { position: absolute; left: 0; top: 0; border: 2px solid var(--lp-roxo-vivo); border-radius: 14px; box-shadow: 0 0 0 9999px rgb(0 0 0 / 0.62); transition: transform 0.3s var(--lp-ease); pointer-events: none; }
.ptp-tour .cartao { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: min(372px, calc(100vw - 32px)); background: var(--lp-branco); border: 1px solid var(--lp-bd); border-radius: 16px; padding: 18px 20px; box-shadow: 0 24px 60px rgb(0 0 0 / 0.35); outline: none; }
.ptp-tour .cartao[style] { transform: none; }
.ptp-tour .passo { font-family: var(--f-num); font-size: 10px; text-transform: uppercase; letter-spacing: 0.12em; color: var(--lp-cinza); margin: 0; }
.ptp-tour h2 { font-size: 17px; margin: 4px 0 6px; color: var(--lp-ardosia); }
.ptp-tour .texto { font-size: 13.5px; color: var(--lp-cinza); line-height: 1.55; margin: 0 0 14px; }
.ptp-tour .acoes { display: flex; align-items: center; gap: 10px; }
.ptp-tour .acoes .pular { border: 0; background: none; font: inherit; font-size: 12px; color: var(--lp-cinza); cursor: pointer; }
.ptp-tour .dots { display: flex; gap: 5px; margin: 0 auto; }
.ptp-tour .dots i { width: 6px; height: 6px; border-radius: 999px; background: var(--lp-bd); }
.ptp-tour .dots i.on { width: 16px; border-radius: 3px; background: var(--lp-roxo-vivo); }
.ptp-tour .acoes .voltar { border: 1px solid var(--lp-bd); background: none; border-radius: 9px; font: inherit; font-size: 13px; color: var(--lp-cinza); padding: 7px 12px; cursor: pointer; }
.ptp-tour .acoes .avancar { border: 0; border-radius: 9px; background: var(--lp-roxo); color: #fff; font: inherit; font-size: 13px; font-weight: 600; padding: 8px 16px; cursor: pointer; }
.ptp-tour .acoes .avancar:hover { background: var(--lp-roxo-vivo); }
.ptp-botao-ajuda { position: fixed; right: 18px; bottom: 18px; z-index: 60; width: 40px; height: 40px; border-radius: 999px; border: 1px solid var(--lp-bd); background: var(--lp-branco); color: var(--lp-cinza); font: inherit; font-size: 17px; font-weight: 700; cursor: pointer; box-shadow: 0 8px 24px rgb(0 0 0 / 0.14); }
.ptp-botao-ajuda:hover { border-color: var(--lp-roxo-vivo); color: var(--lp-roxo); }
.ptp-bottom-tabs { position: fixed; inset: auto 0 0 0; z-index: 55; display: flex; border-top: 1px solid var(--lp-bd); background: rgb(253 252 255 / 0.96); backdrop-filter: blur(8px); padding-bottom: env(safe-area-inset-bottom); }
.ptp-bottom-tabs button { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 2px; border: 0; background: none; font: inherit; font-size: 10px; font-weight: 500; color: var(--lp-cinza); padding: 8px 0; cursor: pointer; }
.ptp-bottom-tabs button i { font-style: normal; font-size: 15px; color: var(--lp-roxo-vivo); }
body.tem-bottom-tabs { padding-bottom: 58px; }
body.tem-bottom-tabs .ptp-botao-ajuda { bottom: 74px; }

[data-theme='dark'] .ptp-card, [data-theme='dark'] .ptp-tour .cartao { background: var(--surface, #141428); border-color: rgb(255 255 255 / 0.12); }
[data-theme='dark'] .ptp-input, [data-theme='dark'] .ptp-tour h2, [data-theme='dark'] .ptp-miolo .foco h3 { color: var(--fg, #e8eeff); }
[data-theme='dark'] .ptp-miolo .foco { background: rgb(112 72 232 / 0.1); }
[data-theme='dark'] .ptp-miolo .foco code { background: rgb(255 255 255 / 0.05); border-color: rgb(255 255 255 / 0.12); color: var(--fg, #e8eeff); }
[data-theme='dark'] .ptp-miolo .chip { background: rgb(255 255 255 / 0.04); border-color: rgb(255 255 255 / 0.12); }
[data-theme='dark'] .ptp-botao-ajuda { background: var(--surface, #141428); border-color: rgb(255 255 255 / 0.14); color: var(--fg-muted, #9aa3bd); }
[data-theme='dark'] .ptp-bottom-tabs { background: rgb(20 20 40 / 0.95); border-color: rgb(255 255 255 / 0.12); }
[data-theme='dark'] .ptp-bottom-tabs button { color: var(--fg-muted, #9aa3bd); }

/* ── ZOOM SEMÂNTICO (réplica GraficoExpansivel, 25/08): modal que REDESENHA ── */
.pt-card-zoom { position: absolute; top: 8px; right: 34px; width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); border-radius: 7px; background: transparent; color: var(--lp-cinza, #6b7280); cursor: pointer; opacity: 0.65; transition: opacity 0.15s, color 0.15s; }
.chart-card { position: relative; }
.chart-card:hover .pt-card-zoom { opacity: 1; }
.pt-card-zoom:hover { color: var(--lp-roxo-vivo, #7048e8); border-color: var(--lp-roxo-vivo, #7048e8); }
.zg-fundo { position: fixed; inset: 0; z-index: 90; background: rgb(10 8 20 / 0.55); backdrop-filter: blur(3px); display: flex; align-items: center; justify-content: center; padding: 24px; }
.zg-card { width: min(1060px, 100%); height: min(640px, 100%); display: flex; flex-direction: column; background: var(--lp-branco, #fff); border: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); border-radius: 16px; padding: 16px 18px; box-shadow: 0 30px 80px rgb(0 0 0 / 0.4); }
.zg-topo { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; }
.zg-titulo { font-size: 12px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--lp-cinza, #6b7280); }
.zg-fechar { border: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); background: none; border-radius: 8px; width: 28px; height: 28px; font: inherit; font-size: 13px; color: var(--lp-cinza, #6b7280); cursor: pointer; }
.zg-fechar:hover { color: var(--lp-roxo, #401c7f); border-color: var(--lp-roxo-vivo, #7048e8); }
.zg-wrap { flex: 1; min-height: 0; position: relative; cursor: grab; touch-action: none; }
.zg-wrap:active { cursor: grabbing; }
.zg-dica { margin-top: 8px; font-family: var(--f-num, monospace); font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--lp-cinza, #6b7280); text-align: center; }
[data-theme='dark'] .zg-card { background: var(--surface, #141428); border-color: rgb(255 255 255 / 0.12); }
[data-theme='dark'] .pt-card-zoom { border-color: rgb(255 255 255 / 0.14); color: var(--fg-muted, #9aa3bd); }

/* ── NOVIDADES (réplica Novidades.tsx, 25/08): botão com dot + drawer por mês ── */
.nv-botao { position: relative; width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; border: none; border-radius: 7px; background: none; color: var(--muted, #6b7280); cursor: pointer; transition: 0.15s; flex-shrink: 0; }
.nv-botao:hover { color: var(--text, #1c1917); background: var(--tint-primary-08, rgb(112 72 232 / 0.08)); }
.nv-botao .nv-dot { position: absolute; top: 4px; right: 4px; width: 7px; height: 7px; border-radius: 999px; background: var(--lp-roxo-vivo, #7048e8); box-shadow: 0 0 0 2px var(--surface, #fff); }
.nv-fundo { position: fixed; inset: 0; z-index: 80; background: rgb(10 8 20 / 0.4); opacity: 0; transition: opacity 0.2s; }
.nv-fundo.aberto { opacity: 1; }
.nv-drawer { position: absolute; top: 0; right: 0; bottom: 0; width: min(400px, 92vw); background: var(--lp-branco, #fff); border-left: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); box-shadow: -18px 0 50px rgb(0 0 0 / 0.18); display: flex; flex-direction: column; transform: translateX(24px); transition: transform 0.22s var(--lp-ease, ease); }
.nv-fundo.aberto .nv-drawer { transform: none; }
.nv-topo { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px 12px; border-bottom: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); }
.nv-topo h3 { margin: 0; font-family: var(--f-editorial, Georgia, serif); font-size: 19px; color: var(--lp-ardosia, #1c1917); }
.nv-fechar { border: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); background: none; border-radius: 8px; width: 28px; height: 28px; font: inherit; font-size: 13px; color: var(--lp-cinza, #6b7280); cursor: pointer; }
.nv-lista { flex: 1; overflow-y: auto; padding: 14px 20px 20px; }
.nv-mes { font-family: var(--f-num, monospace); font-size: 10px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--lp-cinza, #6b7280); margin: 14px 0 8px; }
.nv-mes:first-child { margin-top: 0; }
.nv-item { border: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); border-radius: 12px; padding: 12px 14px; margin-bottom: 10px; background: var(--lp-gelo, #f7f6fa); }
.nv-item h4 { margin: 6px 0 4px; font-size: 13.5px; color: var(--lp-ardosia, #1c1917); }
.nv-item p { margin: 0; font-size: 12.5px; line-height: 1.55; color: var(--lp-cinza, #6b7280); }
.nv-badge { display: inline-block; font-family: var(--f-num, monospace); font-size: 9px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; padding: 2px 7px; border-radius: 999px; }
.nv-badge[data-tipo='novo'] { background: rgb(112 72 232 / 0.12); color: var(--lp-roxo, #401c7f); }
.nv-badge[data-tipo='melhoria'] { background: rgb(42 93 70 / 0.12); color: #2a5d46; }
.nv-badge[data-tipo='correcao'] { background: rgb(107 85 38 / 0.14); color: #6b5526; }
[data-theme='dark'] .nv-drawer { background: var(--surface, #141428); border-color: rgb(255 255 255 / 0.12); }
[data-theme='dark'] .nv-topo h3, [data-theme='dark'] .nv-item h4 { color: var(--fg, #e8eeff); }
[data-theme='dark'] .nv-item { background: rgb(255 255 255 / 0.04); border-color: rgb(255 255 255 / 0.1); }
[data-theme='dark'] .nv-badge[data-tipo='novo'] { background: rgb(112 72 232 / 0.25); color: #c4b5fd; }
[data-theme='dark'] .nv-badge[data-tipo='melhoria'] { color: #7fd1ab; background: rgb(42 93 70 / 0.3); }

/* ── SELO SYNC (réplica SeloSync, 25/08): estado de salvamento honesto ── */
.ss-selo { position: fixed; left: 16px; bottom: 16px; z-index: 70; display: none; align-items: center; gap: 7px; padding: 7px 12px; border-radius: 999px; border: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); background: var(--lp-branco, #fff); box-shadow: 0 8px 24px rgb(0 0 0 / 0.14); font-family: var(--f-num, monospace); font-size: 11px; color: var(--lp-cinza, #6b7280); }
.ss-selo.vivo { display: inline-flex; }
.ss-dot { width: 7px; height: 7px; border-radius: 999px; background: var(--lp-cinza, #9ca3af); flex-shrink: 0; }
.ss-selo[data-estado='salvando'] .ss-dot { background: var(--lp-roxo-vivo, #7048e8); animation: ss-pulsa 1s ease-in-out infinite; }
.ss-selo[data-estado='salvo'] .ss-dot { background: #2a5d46; }
.ss-selo[data-estado='erro'] { border-color: rgb(190 60 60 / 0.5); color: #a13030; }
.ss-selo[data-estado='erro'] .ss-dot { background: #c0392b; }
.ss-retry { border: 0; background: none; font: inherit; color: var(--lp-roxo, #401c7f); text-decoration: underline; cursor: pointer; padding: 0; }
@keyframes ss-pulsa { 50% { opacity: 0.35; } }
@media (prefers-reduced-motion: reduce) { .ss-selo[data-estado='salvando'] .ss-dot { animation: none; } }
body.tem-bottom-tabs .ss-selo { bottom: 74px; }
[data-theme='dark'] .ss-selo { background: var(--surface, #141428); border-color: rgb(255 255 255 / 0.14); color: var(--fg-muted, #9aa3bd); }

/* ── FAIXA DE CONTEXTO DO ESCOPO (réplica ResumoPeriodo, 25/08) ── */
.pt-faixa-escopo { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 9px 14px; border-radius: 11px; border: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); margin-bottom: 16px; font-size: 12.5px; color: var(--lp-cinza, #6b7280); }
.pt-faixa-escopo[data-tom='aviso'] { background: rgb(107 85 38 / 0.07); border-color: rgb(107 85 38 / 0.25); }
.pt-faixa-escopo[data-tom='periodo'] { background: rgb(112 72 232 / 0.06); border-color: rgb(112 72 232 / 0.22); }
.pt-faixa-escopo .fx-tag { font-family: var(--f-num, monospace); font-size: 10px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; padding: 2px 8px; border-radius: 999px; }
.pt-faixa-escopo[data-tom='aviso'] .fx-tag { background: rgb(107 85 38 / 0.14); color: #6b5526; }
.pt-faixa-escopo[data-tom='periodo'] .fx-tag { background: rgb(112 72 232 / 0.14); color: var(--lp-roxo, #401c7f); }
.pt-faixa-escopo .fx-par b { color: var(--lp-ardosia, #1c1917); font-weight: 700; }
.pt-faixa-escopo .fx-sep { opacity: 0.5; }
.fx-comparar { margin-left: auto; border: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); background: none; border-radius: 8px; font: inherit; font-size: 11.5px; color: var(--lp-roxo, #401c7f); padding: 4px 10px; cursor: pointer; }
.fx-comparar:hover { border-color: var(--lp-roxo-vivo, #7048e8); }
[data-theme='dark'] .pt-faixa-escopo .fx-par b { color: var(--fg, #e8eeff); }
[data-theme='dark'] .fx-comparar { color: #c4b5fd; border-color: rgb(255 255 255 / 0.14); }

/* ── MANCHETE (réplica MancheteCliente, 25/08): número-mestre do mês ── */
.pt-manchete { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; padding: 18px 22px; border-radius: 14px; border: 1px solid var(--lp-bd, rgb(0 0 0 / 0.12)); background: var(--lp-branco, #fff); margin-bottom: 16px; }
.pt-manchete .mc-frase { flex: 1; min-width: 220px; }
.pt-manchete .mc-frase h3 { margin: 0 0 2px; font-family: var(--f-editorial, Georgia, serif); font-size: 18px; font-weight: 600; color: var(--lp-ardosia, #1c1917); }
.pt-manchete .mc-frase p { margin: 0; font-size: 12px; color: var(--lp-cinza, #6b7280); }
.pt-manchete .mc-num { font-family: var(--f-num, monospace); font-size: 44px; font-weight: 700; line-height: 1; letter-spacing: -0.02em; }
.pt-manchete .mc-num small { font-size: 15px; font-weight: 600; color: var(--lp-cinza, #6b7280); margin-left: 2px; }
.pt-manchete .mc-ancoras { display: flex; gap: 18px; }
.pt-manchete .mc-ancora { text-align: right; }
.pt-manchete .mc-ancora b { display: block; font-family: var(--f-num, monospace); font-size: 17px; color: var(--lp-ardosia, #1c1917); }
.pt-manchete .mc-ancora span { font-size: 10.5px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--lp-cinza, #6b7280); }
[data-theme='dark'] .pt-manchete { background: var(--surface, #141428); border-color: rgb(255 255 255 / 0.12); }
[data-theme='dark'] .pt-manchete .mc-frase h3, [data-theme='dark'] .pt-manchete .mc-ancora b { color: var(--fg, #e8eeff); }

/* ── SPARKLINE nos KPIs (réplica MiniSerie, 25/08): SVG leve, sem Chart.js ── */
.kpi-spark { display: block; width: 100%; height: 26px; margin-top: 8px; }
.kpi-spark polyline { fill: none; stroke: var(--lp-roxo-vivo, #7048e8); stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; opacity: 0.75; }
.kpi-spark circle { fill: var(--lp-roxo-vivo, #7048e8); }

/* ── PORTAL-CASA (réplica literal do Portal.tsx do Finance, 25/08) ── */
body.rh-portal .sidebar, body.rh-portal .main-wrap, body.rh-portal .ptp-bottom-tabs, body.rh-portal .ptp-botao-ajuda { display: none !important; }
#portal-rh { min-height: 100vh; background: var(--lp-gelo, #f7f6fa); color: var(--lp-ardosia, #1c1917); font-family: var(--f-corpo, Inter, sans-serif); }
.prt-topo { position: sticky; top: 0; z-index: 30; border-bottom: 1px solid var(--lp-bd, #e5e1ef); background: var(--lp-branco, #fdfcff); }
.prt-topo-miolo { margin: 0 auto; max-width: 960px; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 12px 20px; }
.prt-logo { height: 34px; width: auto; max-width: 180px; object-fit: contain; display: block; }
.prt-nav { display: flex; align-items: center; gap: 26px; flex-wrap: wrap; }
.prt-aba { border: 0; background: none; font: inherit; font-family: var(--f-vitrine); font-size: 14.5px; font-weight: 600; color: var(--lp-cinza, #736d8f); cursor: pointer; padding: 6px 0; border-bottom: 2px solid transparent; }
.prt-aba:hover { color: var(--lp-ardosia, #1c1917); }
.prt-aba.ativo { color: var(--lp-roxo, #401c7f); border-bottom-color: var(--lp-roxo-vivo, #7048e8); }
.prt-perfil { position: relative; }
.prt-perfil-btn { width: 34px; height: 34px; border-radius: 999px; border: 1px solid var(--lp-bd, #e5e1ef); background: var(--lp-lavanda, #f1edfa); color: var(--lp-roxo, #401c7f); font: inherit; font-weight: 700; cursor: pointer; }
.prt-popover { position: absolute; right: 0; top: calc(100% + 8px); z-index: 40; width: 220px; display: flex; flex-direction: column; gap: 8px; border: 1px solid var(--lp-bd, #e5e1ef); border-radius: 14px; background: var(--lp-branco, #fdfcff); padding: 14px; box-shadow: 0 18px 50px rgb(0 0 0 / 0.16); }
.prt-popover .lp-btn { width: 100%; text-align: center; }
.prt-popover-email { margin: 0; font-size: 11.5px; color: var(--lp-cinza, #736d8f); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.prt-sair:hover { border-color: #c0392b !important; color: #a13030 !important; }
.prt-miolo { margin: 0 auto; max-width: 960px; display: flex; flex-direction: column; gap: 22px; padding: 36px 20px 60px; }
.prt-miolo--estreito { max-width: 640px; gap: 12px; }
.prt-cabeca { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.prt-h1 { margin: 4px 0 0; font-size: 28px; }
.prt-sub { margin: 4px 0 0; font-size: 13px; color: var(--lp-cinza, #736d8f); }
.prt-resumo { display: grid; gap: 14px; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
.prt-kpi { text-align: left; cursor: pointer; }
.prt-grade { display: grid; gap: 18px; }
@media (min-width: 860px) { .prt-grade { grid-template-columns: 1fr 1fr; } }
.prt-cartao { display: flex; flex-direction: column; gap: 12px; border: 1px solid var(--lp-bd, #e5e1ef); border-radius: 16px; background: var(--lp-branco, #fdfcff); padding: 18px 20px; }
.prt-cartao-topo { display: flex; align-items: center; justify-content: space-between; gap: 12px; border-bottom: 1px solid var(--lp-bd, #e5e1ef); padding-bottom: 12px; }
.prt-cartao-titulo { display: flex; align-items: center; gap: 10px; min-width: 0; }
.prt-cartao-titulo h2 { margin: 0; font-size: 15px; font-weight: 600; color: var(--lp-ardosia, #1c1917); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.prt-cartao-icone { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 9px; background: var(--lp-lavanda, #f1edfa); color: var(--lp-roxo, #401c7f); flex-shrink: 0; }
.prt-acao { border: 0; background: none; font: inherit; font-size: 12px; font-weight: 600; color: var(--lp-roxo-vivo, #7048e8); cursor: pointer; }
.prt-acao:hover { text-decoration: underline; }
.prt-lista { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.prt-linha { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; width: 100%; border: 0; border-bottom: 1px solid var(--lp-bd, #e5e1ef); background: none; font: inherit; text-align: left; padding: 9px 0; cursor: pointer; }
.prt-lista li:last-child .prt-linha { border-bottom: 0; }
.prt-linha-titulo { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13.5px; color: var(--lp-ardosia, #1c1917); }
.prt-linha-meta { flex-shrink: 0; font-size: 11.5px; color: var(--lp-cinza, #736d8f); }
.prt-vazio { margin: 0; font-size: 13px; color: var(--lp-cinza, #736d8f); line-height: 1.55; }
.prt-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.prt-filtro { border: 1px solid var(--lp-bd, #e5e1ef); background: none; border-radius: 9px; font: inherit; font-size: 12px; font-weight: 500; color: var(--lp-cinza, #736d8f); padding: 6px 12px; cursor: pointer; }
.prt-filtro.ativo { background: var(--lp-roxo, #401c7f); border-color: var(--lp-roxo, #401c7f); color: #fff; }
.prt-notif { display: flex; align-items: center; justify-content: space-between; gap: 14px; border: 1px solid var(--lp-bd, #e5e1ef); border-radius: 13px; background: var(--lp-branco, #fdfcff); font: inherit; text-align: left; padding: 12px 16px; cursor: pointer; transition: border-color 0.15s; }
.prt-notif:hover { border-color: var(--lp-roxo-vivo, #7048e8); }
.prt-notif-corpo { display: flex; align-items: center; gap: 12px; min-width: 0; }
.prt-notif-dot { width: 6px; height: 6px; border-radius: 999px; background: rgb(112 72 232 / 0.6); flex-shrink: 0; }
.prt-notif-texto { display: block; font-size: 13.5px; color: var(--lp-ardosia, #1c1917); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.prt-notif-detalhe { display: block; font-size: 11px; color: var(--lp-cinza, #736d8f); }
.prt-notif-acao { flex-shrink: 0; font-size: 12px; font-weight: 700; color: var(--lp-roxo-vivo, #7048e8); }
.prt-cena { position: fixed; inset: 0; z-index: 95; display: grid; place-items: center; background: var(--lp-gelo, #f7f6fa); animation: prt-entra 0.25s ease-out; }
.prt-cena-miolo { display: flex; flex-direction: column; align-items: center; gap: 14px; }
.prt-cena-miolo p { margin: 0; font-family: var(--f-vitrine); font-size: 13.5px; color: var(--lp-cinza, #736d8f); }
@keyframes prt-entra { from { opacity: 0; } }
@media (prefers-reduced-motion: reduce) { .prt-cena { animation: none; } }
.sb-portal-btn { display: flex; align-items: center; gap: 6px; width: 100%; border: 1px solid var(--border, #e5e1ef); border-radius: 9px; background: none; font: inherit; font-size: 12px; color: var(--muted, #736d8f); padding: 7px 10px; cursor: pointer; margin-bottom: 8px; }
.sb-portal-btn:hover { color: var(--text, #1c1917); border-color: var(--primary, #7048e8); }
