:root{
  --canvas:#F1F1FA; --canvas-2:#E9E9F5;
  --surface:#FFFFFF; --surface-2:#FAFAFE;
  /* --row-hover: hover de linha da DataTable PERCEPTÍVEL (o --surface-2 #FAFAFE é quase invisível no light). Cinza-azulado
     sutil mas visível — token dedicado para o hover não depender do surface-2 (que serve fundos, não realce). */
  --row-hover:#EDECF7;
  --ink:#16152A; --ink-soft:#56546F; --ink-faint:#8B89A6;
  --line:rgba(22,21,42,.08); --line-2:rgba(22,21,42,.13);
  --hub:#5B5BF5; --hub-2:#8B5CF6; --hub-soft:rgba(91,91,245,.10);
  --ok:#0FA968; --warn:#E6920B; --danger:#EF4560;
  --ok-ink:#076B3C; --warn-ink:#7A5000; --danger-ink:#A81230; --info-ink:#0A6B7A;
  --acc:#0B7C8F; --acc-2:#0FA3B8; --acc-soft:rgba(11,124,143,.10);
  --acc-ink:#095866;
  --pf:#6D5AE0; --pf-2:#9B7BFF; --pf-soft:rgba(109,90,224,.12); --pf-ink:#4B3BB0;
  --shadow-sm:0 1px 2px rgba(22,21,42,.06),0 2px 6px rgba(22,21,42,.05);
  --shadow-md:0 4px 12px rgba(22,21,42,.07),0 12px 30px rgba(22,21,42,.08);
  --shadow-lg:0 8px 24px rgba(22,21,42,.10),0 24px 60px rgba(22,21,42,.12);
  --overlay-scrim:rgba(15,16,32,.55);
  --r-lg:22px; --r-md:15px; --r-sm:10px; --r-pill:999px;
}
:root[data-theme="dark"]{
  --canvas:#0E0E19; --canvas-2:#0A0A13;
  --surface:#191827; --surface-2:#201F31;
  --row-hover:#2A2940;   /* hover de linha visível no dark: um passo mais claro que o surface-2 (#201F31) */
  --ink:#F3F2FB; --ink-soft:#ABA9C6; --ink-faint:#6E6C8B;
  --line:rgba(255,255,255,.08); --line-2:rgba(255,255,255,.14);
  --hub-soft:rgba(139,92,246,.16);
  --acc-soft:rgba(15,163,184,.16);
  --pf:#9F8CFF; --pf-2:#B9A6FF; --pf-soft:rgba(159,140,255,.18); --pf-ink:#C3B4FF;
  --ok-ink:#34D399; --warn-ink:#F6B84B; --danger-ink:#FF8598; --info-ink:#35C4D6;
  --acc-ink:#4CD4E6;
  --shadow-sm:0 1px 2px rgba(0,0,0,.4);
  --shadow-md:0 6px 20px rgba(0,0,0,.45);
  --shadow-lg:0 12px 40px rgba(0,0,0,.55);
  --overlay-scrim:rgba(6,6,12,.64);
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:"Hanken Grotesk",system-ui,-apple-system,sans-serif;background:var(--canvas);color:var(--ink);
  -webkit-font-smoothing:antialiased;line-height:1.5;transition:background .2s,color .2s}
h1,h2,h3,.display{font-family:"Bricolage Grotesque",system-ui,sans-serif;letter-spacing:-.01em}
.mono,.money{font-family:"JetBrains Mono",ui-monospace,monospace}
a{color:inherit;text-decoration:none}
:focus-visible{outline:none}
button:focus-visible,a:focus-visible,[tabindex]:focus-visible,input:focus-visible{box-shadow:0 0 0 3px var(--acc-soft),0 0 0 1.5px var(--acc);border-radius:var(--r-sm)}
.money .cur{opacity:.7;font-size:.82em;margin-right:1px}

/* casca do app: o Aurora AppNav (window.AuroraAppNav · aurora-shell.js) DESENHA o rail + os 3 modos; o app só
   HOSPEDA o componente — #lastroAppNav vira a casca-grid do componente (.anav-shell) e o miolo segue estilizado abaixo.
   Fase-2 Onda 2 (o rail à mão + .entsw/.ctxstrip/.navitem/.rail-foot foram SUBSTITUÍDOS pelo componente · R-APPNAV-012). */
:root{--aurora-bar-h:58px}
.app{min-height:100vh;padding-top:var(--aurora-bar-h)}
:root[data-shell-max]{--aurora-bar-h:0px}
/* host do AppNav — reserva a altura da topbar fixa do shell (embed=0) e deixa o painel de conteúdo rolar sozinho,
   mantendo o rail sempre visível. O componente injeta os estilos .anav-* (grid 260px · peek 60↔248 · mobile barra+sheet). */
#lastroAppNav{height:calc(100dvh - var(--aurora-bar-h));min-height:0}
#lastroAppNav .anav-content{overflow-y:auto;min-height:0;-webkit-overflow-scrolling:touch}
/* 🔴 FIX scroll-trap mobile iOS EMBED (PO 2026-09-03, 3ª rodada — DEFINITIVO): medição headed WebKit provou que em
   mobile o conteúdo (scrollH ~1824) fica num scroller INTERNO (.anav-content overflow:auto) dentro do iframe de
   altura fixa (664) com container .app-embed{overflow:hidden}. O iOS Mobile Safari NÃO rola scroll aninhado dentro
   de iframe por toque → conteúdo preso. Cura: no MOBILE o app renderiza em ALTURA NATURAL (host height:auto, conteúdo
   overflow:visible) e o HUB redimensiona o iframe p/ a altura do conteúdo (AppEmbed.razor · same-origin) → a PÁGINA
   de topo do Hub vira o ÚNICO contexto de scroll, que o iOS SEMPRE rola. Zero scroll aninhado. Ver
   feedback_ios_100vh_nested_scroller_traps_content (addendum 3). */
@media (max-width:700px){ #lastroAppNav{height:auto;min-height:0} #lastroAppNav .anav-content{overflow:visible} }
/* PF recolore o AppNav TODO pra violeta (accent por perfil) — o componente lê os tokens --acc* do host. */
body[data-entity="pf"] #lastroAppNav{--acc:var(--pf);--acc-2:#9B7BFF;--acc-soft:var(--pf-soft);--acc-ink:var(--pf-ink)}
.main{padding:24px 30px 90px;max-width:1160px;min-width:0}

/* ---- HOJE · a cena do ALÍVIO ---- */
.hoje{max-width:940px}
.brief{position:relative;overflow:hidden;border-radius:var(--r-lg);padding:26px 28px;margin-bottom:18px;
  background:linear-gradient(135deg,var(--acc-soft),transparent 62%),var(--surface);
  border:1px solid rgba(11,124,143,.22);box-shadow:var(--shadow-sm)}
body[data-entity="pf"] .brief{background:linear-gradient(135deg,var(--pf-soft),transparent 62%),var(--surface);border-color:rgba(109,90,224,.24)}
.brief .sun{position:absolute;right:-40px;top:-40px;width:200px;height:200px;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,var(--acc-soft),transparent 70%);opacity:.9;animation:breathe 7s ease-in-out infinite}
body[data-entity="pf"] .brief .sun{background:radial-gradient(circle,var(--pf-soft),transparent 70%)}
@keyframes breathe{0%,100%{transform:scale(1);opacity:.8}50%{transform:scale(1.08);opacity:1}}
@media (prefers-reduced-motion: reduce){.brief .sun{animation:none}}
.brief .greet{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-size:26px;font-weight:800;letter-spacing:normal;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.brief .gdate{margin-left:auto;font-size:12px;font-weight:700;color:var(--ink-soft);background:var(--surface);border:1px solid var(--line);padding:4px 11px;border-radius:var(--r-pill)}
.brief .gsub{font-size:14.5px;color:var(--ink-soft);margin-top:6px;max-width:58ch}
.brief .gsub b{color:var(--ink)}
.did{display:flex;flex-direction:column;gap:9px;margin-top:18px}
.did .dline{display:flex;align-items:center;gap:12px;font-size:14px}
.did .dchk{width:26px;height:26px;border-radius:9px;flex:none;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--ok),#34D399)}
.did .dchk svg{width:15px;height:15px}
.did .dline b{font-weight:700}
.did .dline .dtxt{flex:1;min-width:0}
.did .dline .damt{font-weight:700;white-space:nowrap}
.reassure{display:flex;align-items:center;gap:10px;margin-top:18px;padding:12px 15px;border-radius:var(--r-md);
  background:var(--surface);border:1px solid var(--line-2);font-size:13.5px;font-weight:600}
.reassure svg{width:18px;height:18px;color:var(--ok);flex:none}
.reassure b{color:var(--ink)}

/* fila "pra você olhar" — D-IA-6 como ALÍVIO (a IA propõe, você decide) */
.section{background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-lg);padding:20px 22px;margin-bottom:18px;box-shadow:var(--shadow-sm)}
.section-head{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.section-label{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-size:15px;font-weight:700;display:flex;align-items:center;gap:9px;margin-bottom:4px}
.section-head .section-label{margin-bottom:0}
.section-label svg{width:17px;height:17px;color:var(--ink-faint)}
.section-head .grow{flex:1}
.foryou{display:flex;flex-direction:column;gap:11px}
.fy{display:grid;grid-template-columns:44px 1fr auto;gap:14px;align-items:center;padding:14px 16px;border-radius:var(--r-md);background:var(--surface);border:1px solid var(--line-2);box-shadow:var(--shadow-sm)}
.fy .fyi{width:44px;height:44px;border-radius:12px;flex:none;display:grid;place-items:center;color:#fff}
.fy .fyi svg{width:20px;height:20px}
.fy .fyt{font-weight:700;font-size:14px}
.fy .fyd{font-size:12.5px;color:var(--ink-soft);margin-top:3px;line-height:1.45}
.fy .fyd b{color:var(--ink)}
.fy .fya{display:flex;flex-direction:column;gap:7px;align-items:stretch;min-width:150px}

.split{display:grid;grid-template-columns:1.4fr 1fr;gap:18px}
.weekbar{display:flex;align-items:flex-end;gap:8px;height:64px;margin-top:4px}
.weekbar .wc{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;height:100%;justify-content:flex-end}
.weekbar .wb{width:100%;max-width:34px;border-radius:6px 6px 0 0;background:linear-gradient(180deg,var(--acc-2),var(--acc))}
body[data-entity="pf"] .weekbar .wb{background:linear-gradient(180deg,#9B7BFF,var(--pf))}
.weekbar .wl{font-size:10.5px;font-weight:700;color:var(--ink-soft)}
.calm{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px}
.calm .calm-ico{width:56px;height:56px;border-radius:16px;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--ok),#34D399)}
.calm .calm-ico svg{width:28px;height:28px}
.calm p{font-size:13px;color:var(--ink-soft);max-width:40ch}

.mnote{display:flex;gap:9px;align-items:flex-start;padding:11px 13px;border-radius:var(--r-md);background:var(--pf-soft);border:1px solid rgba(109,90,224,.22);font-size:12.5px;color:var(--ink-soft)}
.mnote svg{width:16px;height:16px;color:var(--pf);flex:none;margin-top:1px}
.mnote b{color:var(--ink)}

/* pills + botões */
.pill{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:700;padding:3px 10px;border-radius:var(--r-pill);white-space:nowrap}
.pill svg{width:12px;height:12px;opacity:.95}
.pill.ok{color:var(--ok-ink);background:rgba(15,169,104,.14)}
.pill.info{color:var(--info-ink);background:var(--acc-soft)}
.pill.pf{color:var(--pf-ink);background:var(--pf-soft)}
.btn{font:inherit;font-weight:700;font-size:14px;cursor:pointer;border:none;padding:10px 18px;border-radius:var(--r-pill);display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:transform .16s,box-shadow .16s,background .16s;min-height:42px;text-align:center}
.btn:active{transform:scale(.97)}
.btn svg{width:17px;height:17px}
.btn-primary{color:#fff;background:linear-gradient(135deg,var(--acc),var(--acc-2));box-shadow:0 6px 18px -5px var(--acc)}
body[data-entity="pf"] .btn-primary{background:linear-gradient(135deg,var(--pf),#9B7BFF);box-shadow:0 6px 18px -5px var(--pf)}
.btn-ghost{color:var(--ink-soft);background:transparent}
.btn-ghost:hover{color:var(--ink);background:var(--line)}
.btn-soft{color:var(--acc-ink);background:var(--acc-soft);border:1px solid rgba(11,124,143,.22)}
.btn-sm{font-size:12.5px;padding:7px 13px;min-height:34px}
.btn-sm svg{width:15px;height:15px}

/* placeholder honesto das telas das próximas ondas */
.soon{max-width:640px;margin:8px 0}
.soon .soon-ico{width:52px;height:52px;border-radius:15px;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--acc),var(--acc-2));margin-bottom:14px}
.soon .soon-ico svg{width:26px;height:26px}
.soon h1{font-size:22px;margin-bottom:6px}
.soon p{color:var(--ink-soft);font-size:14px;max-width:52ch}

.toast-wrap{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:80}
.toast{display:flex;align-items:center;gap:9px;background:var(--surface);border:1px solid var(--line-2);box-shadow:var(--shadow-md);border-radius:var(--r-md);padding:11px 15px;font-size:13.5px;font-weight:600;color:var(--ink)}
.toast .ti{color:var(--ok);display:inline-flex}
.toast.error .ti{color:var(--danger)}
.toast .ico{width:17px;height:17px}

/* ≤960px: o AppNav (componente) já colapsa o rail sozinho pelos container-queries do host (peek ≤1100 · mobile ≤700).
   Aqui só reduzimos o padding do MIOLO no viewport pequeno. */
@media(max-width:960px){
  .main{padding:20px 18px 80px}
}
@media (max-width:820px){
  .split{grid-template-columns:1fr}
  .fy{grid-template-columns:44px 1fr;gap:10px}
  .fy .fya{grid-column:1 / -1;flex-direction:row;flex-wrap:wrap;min-width:0}
  .brief .gdate{margin-left:0}
  .main{padding:18px 16px 70px}
}
/* AppNav mobile-float (R-APPNAV-MF-011) — "Trocar contexto" PF×PJ no TOPO do sheet "Navegar" (o rail/switcher some no
   mobile). O card usa as classes .anav-ctx-* do componente (injetadas no mount); aqui só o espaçamento + a divisória. */
.anav-sheet .lastro-sheet-ctx{padding:2px 6px 10px;margin-bottom:6px;border-bottom:1px solid var(--line)}
.anav-sheet .lastro-sheet-ctx .anav-ctx-opt{min-height:48px}
/* Bug B (R-APPNAV-MF-031) — no mobile estreito o KPI R$ (mono/nowrap) NÃO divide a linha com o texto que quebra
   ("caíram no seu Inter") pra NÃO sobrepor: o valor cai em LINHA PRÓPRIA como CHIP, alinhado sob o texto (grid). Gate: 0 overlap. */
@media (max-width:440px){
  .did .dline{display:grid;grid-template-columns:26px 1fr;column-gap:12px;row-gap:6px;align-items:center}
  .did .dline .dchk{grid-row:1;grid-column:1}
  .did .dline .dtxt{grid-row:1;grid-column:2}
  .did .dline .damt{grid-row:2;grid-column:2;justify-self:start;
    background:var(--acc-soft);color:var(--acc-ink);padding:3px 11px;border-radius:var(--r-pill);font-size:12.5px;line-height:1.5}
}

/* ═══════════════ COBRANÇA (Onda B · fiel ao proto fase-2 · s-cobranca) ═══════════════ */
/* cabeçalho de página (crumb + h1 + lead) */
.phead{margin-bottom:20px}
.phead .crumb{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--ink-soft);font-weight:600;margin-bottom:9px;flex-wrap:wrap}
.phead .crumb svg{width:13px;height:13px}
.phead h1{font-size:25px;display:flex;align-items:center;gap:11px;flex-wrap:wrap}
.phead .lead{color:var(--ink-soft);font-size:13.5px;margin-top:5px;max-width:76ch}
.phead .lead b{color:var(--ink)}
.section .lead{color:var(--ink-soft);font-size:13px;max-width:74ch;margin-bottom:16px}
.section .lead b{color:var(--ink)}

/* dinheiro — tamanhos/tons do proto (o símbolo já vem do MoneyFormatter, nunca hardcode) */
.money.big{font-size:20px;font-weight:700;letter-spacing:-.01em}
.money.neg{color:var(--ink)} .money.pos{color:var(--ok-ink)}
.money.big.neg{color:var(--danger-ink)}

/* pills que faltavam (danger/warn/mut) — cânone do proto */
.pill.warn{color:var(--warn-ink);background:rgba(230,146,11,.16)}
.pill.danger{color:var(--danger-ink);background:rgba(239,69,96,.14)}
.pill.mut{color:var(--ink-soft);background:var(--line)}

/* formulário — .field/.fgrp/.grid2 do proto (nunca <select> nativo: só inputs da casa) */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px 18px}
.fgrp{display:flex;flex-direction:column;gap:6px}
.fgrp>label{font-size:12px;font-weight:700;color:var(--ink-soft)}
.field{font:inherit;font-weight:600;font-size:14px;padding:9px 12px;border-radius:var(--r-sm);
  border:1px solid var(--line-2);background:var(--surface);color:var(--ink);width:100%}
.field:focus{outline:none;border-color:var(--acc);box-shadow:0 0 0 3px var(--acc-soft)}
body[data-entity="pf"] .field:focus{border-color:var(--pf);box-shadow:0 0 0 3px var(--pf-soft)}
/* P3 · placeholder por-tema (não o cinza default ~2.35:1 do WebKit): --ink-faint tunado, opacity:1 p/ o Firefox. */
.field::placeholder{color:var(--ink-faint);opacity:1}
/* P3 · setinhas nativas de type=number destoam no WebKit (chrome cinza fora do tom Aurora) → removidas; o campo
   segue tipado (min/max/inputmode=decimal), digita-se o valor como nos demais inputs da casa. */
.field[type=number]::-webkit-outer-spin-button,
.field[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.field[type=number]{-moz-appearance:textfield;appearance:textfield}
.form-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:16px}
.conv-fold{margin-top:16px;padding-top:16px;border-top:1px dashed var(--line-2)}
.conv-fold>.section-label{margin-bottom:10px}

/* notas (amber) + banners de erro/ok */
.secnote{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:var(--r-md);
  font-size:12.5px;color:var(--ink-soft);background:rgba(230,146,11,.10);border:1px solid rgba(230,146,11,.28);margin-top:6px}
.secnote svg{width:16px;height:16px;color:var(--warn);flex:none;margin-top:1px}
.secnote b{color:var(--ink)}
.errbox,.okbox{display:flex;gap:10px;align-items:center;padding:12px 15px;border-radius:var(--r-md);font-size:13.5px;font-weight:600;margin-bottom:18px}
.errbox{color:var(--danger-ink);background:rgba(239,69,96,.10);border:1px solid rgba(239,69,96,.30)}
.okbox{color:var(--ok-ink);background:rgba(15,169,104,.10);border:1px solid rgba(15,169,104,.28)}
.errbox svg,.okbox svg{width:17px;height:17px;flex:none}
/* secnote em variante VERDE (promessa · Coffer #8) — fiel ao proto #s-contas-pf */
.secnote.secnote-ok{background:rgba(15,169,104,.10);border-color:rgba(15,169,104,.28)}
.secnote.secnote-ok svg{color:var(--ok)}

/* contas e assinaturas · lista .bills/.bill (Coffer #8 · proto #s-contas-pf) */
.bills{display:flex;flex-direction:column;gap:9px}
.bill{display:grid;grid-template-columns:40px 1fr auto auto;gap:14px;align-items:center;padding:13px 15px;border-radius:var(--r-md);border:1px solid var(--line-2);background:var(--surface)}
.bill .bi{width:40px;height:40px;border-radius:11px;flex:none;display:grid;place-items:center;color:var(--pf-ink)}
.bill .bi svg{width:18px;height:18px}
.bill .bn{font-weight:700;font-size:13.5px;display:inline-flex;align-items:center;flex-wrap:wrap;gap:2px}
.bill .bd{font-size:11.5px;color:var(--ink-soft)}
.bill .money{font-weight:700}
.bill-cancel{margin:0;display:flex}

/* cartão do pagador (stu-card) */
.stu-card{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--line-2);
  border-radius:var(--r-lg);padding:15px 18px;margin-bottom:18px;box-shadow:var(--shadow-sm)}
.avatar{width:32px;height:32px;border-radius:10px;flex:none;display:grid;place-items:center;font-size:12px;font-weight:800;color:#fff;font-family:"Bricolage Grotesque",system-ui,sans-serif}
.stu-card .sn{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-weight:700;font-size:17px}
.stu-card .ss{font-size:12.5px;color:var(--ink-soft);margin-top:2px}
.stu-card .ss b{color:var(--ink)}

/* Conexões e banco (Coffer #9) — dois caminhos + status da conexão Inter (classes do proto #s-conexoes) */
.paths{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.pathc{border-radius:var(--r-lg);padding:20px;border:1px solid var(--line-2);background:var(--surface);position:relative;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:12px}
.pathc.active{border-color:var(--acc);box-shadow:0 0 0 1px var(--acc),var(--shadow-md)}
.pathc.invite{background:linear-gradient(150deg,var(--acc-soft),transparent 60%)}
.pathc .ph{display:flex;align-items:center;gap:11px}
.pathc .pico{width:42px;height:42px;border-radius:12px;flex:none;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--acc),var(--acc-2))}
.pathc.active .pico{background:linear-gradient(135deg,var(--ok),#34D399)}
.pathc .pico svg{width:21px;height:21px}
.pathc .ptt{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-weight:800;font-size:16px}
.pathc .pst{font-size:12px;color:var(--ink-soft);margin-top:1px}
.pathc ul{list-style:none;display:flex;flex-direction:column;gap:8px;margin:0;padding:0}
.pathc li{display:flex;gap:9px;align-items:flex-start;font-size:13px;color:var(--ink-soft)}
.pathc li svg{width:15px;height:15px;flex:none;margin-top:2px;color:var(--acc)}
[data-theme="dark"] .pathc li svg{color:var(--acc-2)}
.pathc li b{color:var(--ink)}
.pathc .pcta{margin-top:auto}
.rails-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:2px}
.railchip{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;color:var(--ink-soft);
  background:var(--surface);border:1px solid var(--line-2);padding:5px 11px;border-radius:var(--r-pill)}
.railchip svg{width:14px;height:14px;color:var(--acc)}
[data-theme="dark"] .railchip svg{color:var(--acc-2)}
/* painel de status (chave→valor) da credencial conectada — só PRESENÇA, nunca o segredo */
.conn-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px;margin:14px 0 4px}
.conn-row{display:flex;align-items:center;gap:10px;padding:10px 13px;border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--line)}
.conn-k{font-size:12px;font-weight:700;color:var(--ink-soft)}
.conn-v{margin-left:auto;font-size:12.5px;font-weight:700;font-variant-numeric:tabular-nums}
.conn-v.on{color:var(--ok-ink)}
.conn-v.pend{color:var(--warn-ink)}
.conn-meta{font-size:12px;color:var(--ink-soft);margin:6px 0 2px}
.conn-meta b{color:var(--ink)}
textarea.conn-ta{min-height:74px;resize:vertical;line-height:1.5;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}
@media(max-width:720px){.paths{grid-template-columns:1fr}.conn-grid{grid-template-columns:1fr}}

/* plan-chips (plano do contrato) */
.plan-chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.plan-chip{font-size:12px;padding:7px 12px;border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--line);display:flex;flex-direction:column;gap:2px}
.plan-chip .pl{font-size:10.5px;font-weight:700;color:var(--ink-soft);text-transform:uppercase}
.plan-chip .ps{font-size:11px;color:var(--ink-soft)}

/* split de pagamento (domínio-ouro) */
.splitpay{border:1px solid var(--line-2);border-radius:var(--r-md);overflow:hidden;margin-top:6px}
.splitpay .sp-h{display:flex;align-items:center;gap:8px;padding:9px 13px;background:var(--surface-2);border-bottom:1px solid var(--line);font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft)}
.splitpay .sp-h svg{width:14px;height:14px;color:var(--acc)}
body[data-entity="pf"] .splitpay .sp-h svg{color:var(--pf)}
.sp-row{display:grid;grid-template-columns:34px 1fr auto auto;gap:12px;align-items:center;padding:11px 13px;border-bottom:1px solid var(--line)}
.sp-row:last-child{border-bottom:none}
.sp-row .spa{width:34px;height:34px;border-radius:10px;flex:none;display:grid;place-items:center;font-size:12px;font-weight:800;color:#fff;font-family:"Bricolage Grotesque",system-ui,sans-serif}
.sp-row .spn{font-weight:700;font-size:13px}.sp-row .sps{font-size:11px;color:var(--ink-soft)}
.sp-row .sppct{font-size:11.5px;font-weight:700;color:var(--ink-soft)}

/* breakdown de cálculo (principal/multa/juros/total) */
.calc{display:flex;flex-direction:column;gap:6px;margin-top:10px;padding:12px 14px;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line);font-size:12.5px}
.calc .cr{display:flex;align-items:center}
.calc .cr .cll{color:var(--ink-soft)}.calc .cr .grow{flex:1}
.calc .cr .cll b{color:var(--ink)}
.calc .cr.tot{border-top:1px dashed var(--line-2);padding-top:8px;margin-top:2px;font-weight:800}
.calc .cr.tot .cll{color:var(--ink)}

/* PIX copia-e-cola + linha digitável (resultado REAL do rail) */
.pix-box{border:1px dashed var(--acc);background:var(--acc-soft);border-radius:var(--r-md);padding:14px;margin-top:6px}
body[data-entity="pf"] .pix-box{border-color:var(--pf);background:var(--pf-soft)}
.pix-box .pl{font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--info-ink);display:flex;align-items:center;gap:6px}
.pix-box .pl svg{width:14px;height:14px}
.pix-code{font-family:"JetBrains Mono",ui-monospace,monospace;font-size:11px;color:var(--ink-soft);word-break:break-all;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);padding:9px 11px;margin:10px 0;line-height:1.5}
.paychip{font:inherit;font-size:11px;font-weight:700;padding:6px 11px;border-radius:var(--r-pill);display:inline-flex;align-items:center;gap:5px;cursor:pointer;border:1px solid var(--line-2);background:var(--surface);color:var(--ink-soft)}
.paychip:hover{border-color:var(--acc);color:var(--acc-ink)}
body[data-entity="pf"] .paychip:hover{border-color:var(--pf);color:var(--pf-ink)}
.paychip svg{width:13px;height:13px}
.paychips{display:flex;gap:7px;margin-top:12px;flex-wrap:wrap;align-items:center}

/* ---- Portal do responsável (#6 · visão pública token-gated · mobile-first) ---- */
.portal{max-width:560px;margin:0 auto}
.portal .pcard{background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-lg);box-shadow:var(--shadow-md);overflow:hidden;margin-top:14px}
.portal .phdr{padding:18px 20px;background:linear-gradient(135deg,var(--acc),var(--acc-2));color:#fff}
.portal .phdr .pl{font-size:12px;opacity:.92;font-weight:600}
.portal .phdr .amt{font-family:"JetBrains Mono",ui-monospace,monospace;font-size:30px;font-weight:700;margin-top:5px;letter-spacing:-.01em}
.portal .phdr .amt .cur{font-size:.6em;opacity:.9;font-weight:500;margin-right:.3em}
.portal .phdr .due{font-size:12px;margin-top:6px;display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.2);padding:3px 10px;border-radius:var(--r-pill)}
.portal .phdr .due svg{width:13px;height:13px}
.portal .pbody{padding:18px 20px}
.portal .pt-title{font-weight:700;font-size:13.5px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:2px}
.portal .pt-sub{font-size:11.5px;color:var(--ink-soft);margin-bottom:10px}
.portal .pix-box{text-align:center}
.portal .pix-box .pl{justify-content:center}
.portal .pt-block{border-top:1px solid var(--line);padding-top:16px;margin-top:16px}
.portal .pt-block:first-child{border-top:none;padding-top:0;margin-top:0}
.hist{margin-top:18px}
.hist-item{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--line)}
.hist-item:last-child{border-bottom:none}
.hist-item .hi{width:32px;height:32px;border-radius:9px;flex:none;display:grid;place-items:center;background:rgba(15,169,104,.13);color:var(--ok)}
.hist-item .hi svg{width:16px;height:16px}
.hist-item .ht{font-weight:700;font-size:13px}.hist-item .hd{font-size:11.5px;color:var(--ink-soft)}
.legacy-vs{display:flex;align-items:flex-start;gap:9px;font-size:12px;color:var(--ink-soft);margin-top:14px;padding:10px 12px;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line)}
.legacy-vs svg{width:15px;height:15px;color:var(--ok);flex:none;margin-top:1px}
.legacy-vs b{color:var(--ink)}
.portal-foot{text-align:center;font-size:11.5px;color:var(--ink-soft);margin-top:12px;display:flex;align-items:center;justify-content:center;gap:6px}
.portal-foot svg{width:13px;height:13px}
/* corpo LEVE da página pública (sem casca Hub) — o pai no celular */
body.portal-public{background:var(--canvas)}
body.portal-public .app{max-width:600px;margin:0 auto;padding:20px 16px 40px}
.portal-neutral{max-width:420px;margin:12vh auto 0;text-align:center;padding:0 20px}
.portal-neutral .pn-ico{width:56px;height:56px;border-radius:16px;margin:0 auto 14px;display:grid;place-items:center;background:var(--surface-2);border:1px solid var(--line-2);color:var(--ink-faint)}
.portal-neutral .pn-ico svg{width:26px;height:26px}
.portal-neutral h1{font-size:19px;margin:0 0 8px}
.portal-neutral p{font-size:13.5px;color:var(--ink-soft);line-height:1.6}
/* geração do link (visão ADMIN autenticada) */
.linkgen{display:flex;flex-direction:column;gap:2px}
.linkrow{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.linkrow:last-child{border-bottom:none}
.linkrow .lr-n{font-weight:700;font-size:13.5px}
.linkrow .lr-s{font-size:11.5px;color:var(--ink-soft)}
.linkout{display:flex;gap:8px;align-items:center;margin-top:10px;flex-wrap:wrap}
.linkout .linkurl{flex:1;min-width:220px;font-family:"JetBrains Mono",ui-monospace,monospace;font-size:11px;color:var(--ink-soft);word-break:break-all;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:9px 11px}

/* carnê — a lista REAL de títulos em aberto (ListOpenReceivablesAsync) */
.carne{display:flex;flex-direction:column;gap:10px}
.cnrow{display:grid;grid-template-columns:38px 1fr auto auto;gap:14px;align-items:center;padding:12px 14px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface)}
.cnrow.late{border-color:rgba(239,69,96,.3);background:rgba(239,69,96,.04)}
.cnrow .pnum{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:700;font-size:13px;background:var(--acc-soft);color:var(--acc-ink)}
.cnrow.late .pnum{background:rgba(239,69,96,.13);color:var(--danger-ink)}
.cnrow .cnn{font-weight:700;font-size:13.5px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.cnrow .cns{font-size:11.5px;color:var(--ink-soft);margin-top:2px}
.cnrow>.calc{grid-column:1 / -1}
.carne-empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;padding:26px 20px;color:var(--ink-soft);font-size:13.5px}
.carne-empty svg{width:34px;height:34px;color:var(--ink-faint)}
.cn-form{display:inline}

/* ---- Trilha de auditoria (#10 · fiel ao proto fase-2) ---- */
.trail{display:flex;flex-direction:column;gap:0;position:relative;margin-left:4px}
.tr{display:grid;grid-template-columns:30px 1fr;gap:14px;padding-bottom:16px;position:relative}
.tr:not(:last-child)::before{content:"";position:absolute;left:14px;top:30px;bottom:-2px;width:2px;background:var(--line-2)}
.tr .trd{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;flex:none;z-index:1;color:#fff}
.tr .trd svg{width:15px;height:15px}
.tr .trc{font-size:13px;min-width:0}
.tr .trt{font-weight:700;line-height:1.4}
.tr .trm{font-size:12px;color:var(--ink-soft);margin-top:2px;line-height:1.5}
.tr .trm code{background:var(--line);padding:1px 5px;border-radius:5px;color:var(--ink);font-size:11px;word-break:break-word}
.tr .trm svg{width:12px;height:12px;vertical-align:middle;color:var(--ink-faint)}
.tr .trw{font-size:11px;color:var(--ink-soft);margin-top:3px}
@media (max-width:640px){
  .grid2{grid-template-columns:1fr}
  .sp-row{grid-template-columns:34px 1fr auto}
  .cnrow{grid-template-columns:34px 1fr auto;gap:10px}
  .cnrow .cn-form{grid-column:2 / -1;justify-self:start}
}

/* ═══════════════ PAINEL (Onda B · KPIs data-driven · fiel ao proto fase-2 · s-painel-pj/pf) ═══════════════ */
/* moat da soberania (BYO Inter) */
.moat{display:flex;align-items:center;gap:14px;padding:14px 18px;border-radius:var(--r-lg);margin-bottom:18px;
  background:linear-gradient(120deg,var(--acc-soft),transparent 70%);border:1px solid rgba(11,124,143,.22)}
.moat .mi{width:38px;height:38px;border-radius:11px;flex:none;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--acc),var(--acc-2))}
.moat .mi svg{width:20px;height:20px}
.moat .mt{font-size:13px;color:var(--ink-soft);line-height:1.5}
.moat .mt b{color:var(--ink);font-weight:800}
.moat .chips{display:flex;gap:7px;flex-wrap:wrap;margin-top:6px}
.moat .chip{font-size:11px;font-weight:700;color:var(--acc);background:var(--surface);border:1px solid rgba(11,124,143,.25);padding:3px 9px;border-radius:var(--r-pill);display:inline-flex;align-items:center;gap:5px}
[data-theme="dark"] .moat .chip{color:var(--acc-2)}
.moat .chip svg{width:12px;height:12px}

/* KPIs — os 4 cartões do proto (a receber · inadimplência · previsão · ticket) */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px}
/* min-width:0 deixa o card do grid ENCOLHER; a manchete usa fonte FLUÍDA (clamp) + wrap — NUNCA clipa números reais
   (R$…,00 inteiro · ano completo no "cruza o teto"). Nada de overflow:hidden na manchete (escondia a coluna-núcleo). */
.kpi{background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-lg);padding:16px 17px;box-shadow:var(--shadow-sm);position:relative;min-width:0}
.kpi .kt{font-size:12px;font-weight:700;color:var(--ink-soft);display:flex;align-items:center;gap:7px}
.kpi .kt svg{width:15px;height:15px;color:var(--ink-faint)}
.kpi .kv{margin-top:9px;min-width:0}
.kpi .kv .money{font-size:clamp(18px,3.4vw,25px);font-weight:800;letter-spacing:-.01em;overflow-wrap:anywhere;line-height:1.15;display:inline-block;max-width:100%}
.kpi .kbig{font-family:"JetBrains Mono",ui-monospace,monospace;font-size:clamp(18px,3.4vw,25px);font-weight:800;letter-spacing:-.01em;overflow-wrap:anywhere;line-height:1.15;display:inline-block;max-width:100%}
.kpi .kbig.neg{color:var(--danger-ink)}
.kpi .kbig .kpct{font-size:.6em;font-weight:500;margin-left:1px}
.kpi .kd{font-size:11.5px;color:var(--ink-soft);margin-top:7px;display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.kpi .kd .money{font-size:11.5px;font-weight:700}
.kpi .kd .money.neg{color:var(--danger-ink)}
.kpi .kd .up{color:var(--ok-ink);font-weight:700}.kpi .kd .down{color:var(--danger-ink);font-weight:700}
.kpi.accent{background:linear-gradient(150deg,var(--acc-soft),transparent 65%)}
body[data-entity="pf"] .kpi.accent{background:linear-gradient(150deg,var(--pf-soft),transparent 65%)}

/* botão-link (Ver todos) */
.btn-link{font:inherit;font-weight:700;font-size:13px;color:var(--acc-ink);background:none;border:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.btn-link svg{width:14px;height:14px}
body[data-entity="pf"] .btn-link{color:var(--pf-ink)}

/* mini-lista (maiores em atraso) */
.mini-list{display:flex;flex-direction:column;gap:2px}
.mini-row{display:flex;align-items:center;gap:11px;padding:9px 4px;border-bottom:1px solid var(--line)}
.mini-row:last-child{border-bottom:none}
.mini-row .mr-t{font-weight:700;font-size:13px}.mini-row .mr-s{font-size:11.5px;color:var(--ink-soft)}
.mini-row .grow{flex:1}
.mini-row .money{color:var(--danger-ink);font-weight:700}

/* gráfico previsto × realizado */
.chart{display:flex;align-items:flex-end;gap:10px;height:130px;padding:8px 4px 0}
.chart .col{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;height:100%;justify-content:flex-end}
.chart .bars{display:flex;gap:3px;align-items:flex-end;width:100%;justify-content:center;height:100%}
.chart .bar{width:14px;border-radius:5px 5px 0 0}
.chart .bar.prev{background:var(--line-2)}
.chart .bar.real{background:linear-gradient(180deg,var(--acc-2),var(--acc))}
body[data-entity="pf"] .chart .bar.real{background:linear-gradient(180deg,#9B7BFF,var(--pf))}
.chart .cl{font-size:10.5px;color:var(--ink-soft);font-weight:700}
.chart-legend{display:flex;gap:16px;font-size:11.5px;color:var(--ink-soft);margin-top:10px}
.chart-legend span{display:inline-flex;align-items:center;gap:6px}
.chart-legend i{width:11px;height:11px;border-radius:3px;display:inline-block}
.chart-legend .leg-prev{background:var(--line-2)}
.chart-legend .leg-real{background:var(--acc)}
body[data-entity="pf"] .chart-legend .leg-real{background:var(--pf)}

@media(max-width:960px){ .kpis{grid-template-columns:repeat(2,1fr)} }
@media(max-width:560px){ .kpis{grid-template-columns:1fr} }

/* ═══════════════ RÉGUA DE COBRANÇA (Coffer #3 · Onda B · fiel ao proto fase-2 · s-regua) ═══════════════ */
.btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}
.mnote code{font-family:"JetBrains Mono",ui-monospace,monospace;font-size:11px;background:var(--surface);border:1px solid var(--line);border-radius:5px;padding:1px 5px;color:var(--ink-soft)}

/* switch (ativar régua) — toggle da casa, sem checkbox nativo visível */
.switch{display:flex;align-items:center;gap:10px;cursor:pointer;user-select:none;min-height:42px}
.switch input{position:absolute;opacity:0;width:0;height:0}
.switch .switch-track{width:42px;height:24px;border-radius:var(--r-pill);background:var(--line-2);position:relative;transition:.16s;flex:none}
.switch .switch-track::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:.16s;box-shadow:0 1px 2px rgba(0,0,0,.3)}
.switch input:checked+.switch-track{background:var(--acc)}
.switch input:checked+.switch-track::after{transform:translateX(18px)}
.switch input:focus-visible+.switch-track{box-shadow:0 0 0 3px var(--acc-soft),0 0 0 1.5px var(--acc)}
.switch .switch-lab{font-size:13px;font-weight:600;color:var(--ink-soft)}
body[data-entity="pf"] .switch input:checked+.switch-track{background:var(--pf)}
/* disclosure switch (seções opt-in "Desconto e encargos" / "Convênio") — <button role=switch>, sem checkbox nativo:
   reset do chrome do botão + estado pela aria-expanded (não há input:checked) + foco visível na trilha. */
button.switch{border:0;background:none;padding:0;font:inherit;color:inherit;width:100%}
button.switch[aria-expanded="true"] .switch-track{background:var(--acc)}
button.switch[aria-expanded="true"] .switch-track::after{transform:translateX(18px)}
button.switch:focus-visible{outline:none}
button.switch:focus-visible .switch-track{box-shadow:0 0 0 3px var(--acc-soft),0 0 0 1.5px var(--acc)}
button.switch.conv-head .switch-lab svg{width:17px;height:17px;color:var(--ink-faint);vertical-align:-3px;margin-right:7px}
body[data-entity="pf"] button.switch[aria-expanded="true"] .switch-track{background:var(--pf)}

/* templates (galeria de modelos prontos) */
.tpl-gal{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.tpl{text-align:left;padding:16px;border-radius:var(--r-md);border:1px solid var(--line-2);background:var(--surface);color:inherit;
  transition:.15s;display:flex;flex-direction:column;gap:9px;box-shadow:var(--shadow-sm)}
.tpl:hover{border-color:var(--acc);transform:translateY(-2px);box-shadow:var(--shadow-md)}
body[data-entity="pf"] .tpl:hover{border-color:var(--pf)}
.tpl .tpi{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;color:#fff}
.tpl .tpi svg{width:19px;height:19px}
.tpl .tpn{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-weight:700;font-size:14.5px}
.tpl .tpd{font-size:12px;color:var(--ink-soft);line-height:1.45;flex:1}
.tpl .tpsteps{display:flex;gap:5px;flex-wrap:wrap}
.tpl .tps{font-size:10px;font-weight:700;color:var(--ink-soft);background:var(--surface-2);border:1px solid var(--line);padding:2px 7px;border-radius:var(--r-pill)}
.tpl .tpuse{font-size:12.5px;font-weight:700;color:var(--acc);display:inline-flex;align-items:center;gap:5px;background:none;border:none;cursor:pointer;padding:0;margin-top:auto;font-family:inherit}
.tpl .tpuse svg{width:14px;height:14px}
[data-theme="dark"] .tpl .tpuse{color:var(--acc-2)}
body[data-entity="pf"] .tpl .tpuse{color:var(--pf-ink)}

/* editor de régua */
.redit{display:flex;flex-direction:column;gap:12px}
.rstepc{border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface);overflow:hidden}
.rstepc .rsh{display:flex;align-items:center;gap:11px;padding:12px 15px;background:var(--surface-2);border-bottom:1px solid var(--line);flex-wrap:wrap}
.rstepc .rsdot{width:30px;height:30px;border-radius:9px;flex:none;display:grid;place-items:center;color:#fff}
.rstepc .rsdot svg{width:16px;height:16px}
.rstepc .rsn{font-weight:700;font-size:13.5px}
.rstepc .rswhen{font-size:11.5px;font-weight:700;color:var(--ink-soft);background:var(--surface);border:1px solid var(--line);padding:3px 10px;border-radius:var(--r-pill)}
.rstepc .rsh .grow{flex:1}
.rsoff{display:inline-flex;align-items:center;gap:7px}
.rsoff-l{font-size:10.5px;font-weight:700;color:var(--ink-faint)}
.field-xs{width:66px;padding:6px 8px;font-size:12.5px;text-align:center}
.rstepc .rsdel{margin-left:8px;color:var(--ink-faint);background:none;border:none;cursor:pointer;padding:5px;border-radius:var(--r-sm)}
.rstepc .rsdel:hover{color:var(--danger-ink);background:rgba(239,69,96,.12)}
.rstepc .rsdel svg{width:16px;height:16px}
.rsbody{padding:14px 15px;display:grid;grid-template-columns:1fr 300px;gap:16px}
.rsmsg-wrap{display:flex;flex-direction:column;gap:8px}
.rsmsg-lab{font-size:11.5px;font-weight:700;color:var(--ink-soft)}
.rsmsg{font:inherit;font-size:13.5px;line-height:1.55;padding:11px 13px;border-radius:var(--r-sm);
  border:1px solid var(--line-2);background:var(--surface-2);color:var(--ink);width:100%;resize:vertical;min-height:76px}
.rsmsg:focus{outline:none;border-color:var(--acc);box-shadow:0 0 0 3px var(--acc-soft)}
body[data-entity="pf"] .rsmsg:focus{border-color:var(--pf);box-shadow:0 0 0 3px var(--pf-soft)}
.chips{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.chips .cl{font-size:11px;font-weight:700;color:var(--ink-soft);margin-right:2px}
.vchip{font:inherit;font-size:11.5px;font-weight:700;color:var(--acc-ink);background:var(--acc-soft);border:1px solid rgba(11,124,143,.25);
  padding:4px 9px;border-radius:var(--r-pill);cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:.12s}
.vchip:hover{background:var(--acc);color:#fff}
body[data-entity="pf"] .vchip{color:var(--pf-ink);background:var(--pf-soft);border-color:rgba(109,90,224,.28)}
body[data-entity="pf"] .vchip:hover{background:var(--pf);color:#fff}
.vchip svg{width:11px;height:11px}
.rspreview{border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface-2);padding:12px;display:flex;flex-direction:column;gap:8px}
.rspreview .pvl{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);display:flex;align-items:center;gap:6px}
.rspreview .pvl svg{width:13px;height:13px;color:var(--ok)}
.rspreview .pv-note{font-size:11px;color:var(--ink-soft);margin:0}
.wa-bubble{background:#DCF8C6;color:#0b3d1a;border-radius:12px 12px 12px 3px;padding:9px 11px;font-size:12.5px;line-height:1.5;box-shadow:0 1px 2px rgba(0,0,0,.12);align-self:flex-start;max-width:100%}
[data-theme="dark"] .wa-bubble{background:#075E54;color:#e9ffe4}
.wa-bubble .wt{font-size:9.5px;color:#0b3d1a;opacity:.55;text-align:right;margin-top:3px}
[data-theme="dark"] .wa-bubble .wt{color:#cfeecb;opacity:.6}
.rschan{display:flex;align-items:center;gap:9px;margin-top:2px;flex-wrap:wrap}
.chan-seg{display:inline-flex;gap:3px;padding:3px;border-radius:var(--r-pill);background:var(--surface-2);border:1px solid var(--line)}
.chan-seg button{font:inherit;font-weight:700;font-size:11.5px;padding:5px 11px;border:none;border-radius:var(--r-pill);background:transparent;color:var(--ink-soft);cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:.13s}
.chan-seg button svg{width:13px;height:13px}
.chan-seg button.on{background:var(--acc);color:#fff}
body[data-entity="pf"] .chan-seg button.on{background:var(--pf)}
.addstep{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px;border-radius:var(--r-md);margin-top:12px;
  border:1.5px dashed var(--line-2);background:transparent;color:var(--ink-soft);font:inherit;font-weight:700;font-size:13px;cursor:pointer;transition:.14s}
.addstep:hover{border-color:var(--acc);color:var(--acc)}
body[data-entity="pf"] .addstep:hover{border-color:var(--pf);color:var(--pf-ink)}
.addstep svg{width:16px;height:16px}

/* últimos lembretes emitidos (o log) */
.rlog{display:flex;flex-direction:column;gap:8px}
.rlog-row{display:grid;grid-template-columns:34px 1fr auto;gap:12px;align-items:start;padding:11px 13px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface)}
.rlog-ch{width:34px;height:34px;border-radius:10px;flex:none;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--acc),var(--acc-2))}
body[data-entity="pf"] .rlog-ch{background:linear-gradient(135deg,var(--pf),#9B7BFF)}
.rlog-ch svg{width:16px;height:16px}
.rlog-top{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:13.5px}
.rlog-msg{font-size:12.5px;color:var(--ink-soft);margin-top:4px;line-height:1.5}
.rlog-meta{display:flex;flex-direction:column;align-items:flex-end;gap:3px;text-align:right}
.rlog-when{font-size:11px;font-weight:700;color:var(--ink-soft);white-space:nowrap}
.rlog-id{font-family:"JetBrains Mono",ui-monospace,monospace;font-size:10px;color:var(--ink-faint)}

/* gate honesto (add-on multicanal) */
.gate{display:flex;flex-direction:column;align-items:center;text-align:center;gap:13px;
  padding:30px 26px;border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--line-2)}
.gate .lock{width:52px;height:52px;border-radius:15px;display:grid;place-items:center;flex:none;color:var(--acc);background:var(--acc-soft)}
[data-theme="dark"] .gate .lock{color:var(--acc-2)}
.gate .lock svg{width:24px;height:24px}
.gate .g-tag{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--warn-ink);
  background:rgba(230,146,11,.13);padding:3px 11px;border-radius:var(--r-pill);display:inline-flex;align-items:center;gap:6px}
.gate .g-tag svg{width:12px;height:12px}
.gate h3{font-size:17px}
.gate .g-body{color:var(--ink-soft);font-size:13px;max-width:56ch;line-height:1.6}
.gate .g-body b{color:var(--ink)}
.gate .g-cta{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-top:3px}

@media(max-width:1000px){ .rsbody{grid-template-columns:1fr} .tpl-gal{grid-template-columns:1fr 1fr} }
@media(max-width:560px){ .tpl-gal{grid-template-columns:1fr} .rlog-row{grid-template-columns:34px 1fr} .rlog-meta{grid-column:2;align-items:flex-start;text-align:left} }

/* ═══════════════ INADIMPLÊNCIA (Coffer #5 · Onda C · fiel ao proto fase-2 · s-inad) ═══════════════ */
/* aging (1–30 / 31–60 / 60+) — distribuição do valor vencido por antiguidade */
.aging{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:18px}
.aging-card{background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-lg);padding:15px 16px;box-shadow:var(--shadow-sm);border-left-width:3px}
.aging-card.warn{border-left-color:var(--warn)} .aging-card.danger{border-left-color:var(--danger)}
.aging-card .ac-t{font-size:12px;font-weight:800;color:var(--ink-soft)}
.aging-card .ac-v{margin-top:8px} .aging-card .ac-v .money{font-size:22px;font-weight:800}
.aging-card .ac-d{font-size:11.5px;color:var(--ink-soft);margin-top:6px}

/* .inad-tbl — tabela custom LEGADA, hoje só a LEGENDA da matriz da emenda (.inad-tbl.mtx-tbl) a usa; a Inadimplência
   ('Responsáveis em atraso') migrou pro cânone DataTable (.dtable abaixo). .tbl-wrap = scroll-container do mobile. */
.tbl-wrap{overflow-x:auto;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface)}
.inad-tbl{width:100%;border-collapse:collapse;font-size:13px;min-width:560px}
.inad-tbl thead th{text-align:left;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint);padding:11px 14px;border-bottom:1px solid var(--line-2);white-space:nowrap}
.inad-tbl th.num,.inad-tbl td.num{text-align:right}
.inad-tbl tbody td{padding:11px 14px;border-bottom:1px solid var(--line);vertical-align:middle}
.inad-tbl tbody tr:last-child td{border-bottom:none}
.who{display:flex;align-items:center;gap:10px}
.who .wn{font-weight:700;font-family:"Bricolage Grotesque",system-ui,sans-serif}
.inad-tbl td .money{font-weight:700}
.inad-tbl td .money.neg{color:var(--danger-ink)}

/* ─── DataTable — o cânone REAL da casa (hub.css .dtable/.dtable-scroll/card-stack 720) PORTADO pro Coffer, que é
   string-rendered e NÃO herda hub.css. É o padrão de tabela da casa (a .inad-tbl acima é a tabela custom legada, hoje só
   na legenda da matriz da emenda). O piso de largura vem de `--dt-min` inline NO WRAPPER (.dtable-scroll), NUNCA no <table>:
   inline no <table> venceria o @media do card-mode e travaria o empilhamento mobile. Tokens da casa (0 #hex). */
.dtable{width:100%;border-collapse:collapse}
.dtable th{text-align:left;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-faint);padding:10px 22px;border-top:1px solid var(--line)}
.dtable td{padding:13px 22px;border-top:1px solid var(--line);font-size:14.5px;vertical-align:middle}
.dtable th.num,.dtable td.num{text-align:right}
.dtable tbody tr{transition:background .15s}
/* hover de linha PERCEPTÍVEL (o cânone do Hub usa --surface-2, mas #FAFAFE é quase invisível): token dedicado --row-hover
   (light: cinza-azulado sutil e visível · dark: um passo mais claro que o surface-2). Muda a cor VISIVELMENTE em ambos os temas. */
.dtable tbody tr:hover{background:var(--row-hover)}
/* ─── célula de PESSOA (avatar circular + nome/subtítulo) — o cânone do Hub (hub.css §700-707) PORTADO pro Coffer, que é
   string-rendered e não herda hub.css. Sem o avatar, a coluna "Pagador" parecia OUTRA tabela (o PO rejeitou). O gradiente
   segue PF/PJ da casa via modificador (.ava.pf violeta · .ava.pj teal) usando SÓ tokens (--pf/--pf-2 · --acc/--acc-2);
   o #fff do texto é o padrão aceito da casa (idêntico ao hub.css). O subtítulo (.muted) é o rótulo PF/PJ em var(--ink-faint). */
.dtable .who{display:flex;align-items:center;gap:11px}
.dtable .ava{width:32px;height:32px;border-radius:var(--r-pill);flex:none;display:grid;place-items:center;color:#fff;font-weight:700;font-size:13px;background:linear-gradient(135deg,var(--acc),var(--acc-2))}
.dtable .ava.pf{background:linear-gradient(135deg,var(--pf),var(--pf-2))}
.dtable .ava.pj{background:linear-gradient(135deg,var(--acc),var(--acc-2))}
.dtable .who .nm{display:block;font-weight:700;font-family:"Bricolage Grotesque",system-ui,sans-serif;line-height:1.25}
/* subtítulo: --ink-soft (não --ink-faint) — contraste ≥4.5:1 em 13px sobre --surface (WCAG 1.4.3 · achado Léo). */
.dtable .who .muted{display:block;color:var(--ink-soft);font-size:13px}
.dtable-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface)}
.dtable-scroll>.dtable{min-width:var(--dt-min,640px)}
.dtable-scroll::-webkit-scrollbar{height:9px}
.dtable-scroll::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:var(--r-pill)}
.dtable-scroll::-webkit-scrollbar-track{background:transparent}
/* card-stack (variante StackBelow=720 · a única portada): ≤720 cada linha vira um CARD rótulo:valor — thead some, tr=card,
   td=flex space-between, td[data-label]::before pinta o rótulo; a td de AÇÃO (sem data-label) ocupa a largura toda. Acima
   de 720, tabela real que rola sem estourar. Fiel a hub.css §5649-5731 (só a banda ≤720). */
@media(max-width:720px){
  .dtable-scroll.dt-cards[data-dt-stack="720"]{overflow-x:visible;border:none;background:transparent}
  .dtable-scroll.dt-cards[data-dt-stack="720"]>.dtable,.dtable-scroll.dt-cards[data-dt-stack="720"]>.dtable tbody{display:block;width:100%;min-width:0}
  .dtable-scroll.dt-cards[data-dt-stack="720"]>.dtable thead{display:none}
  .dtable-scroll.dt-cards[data-dt-stack="720"]>.dtable tr{display:block;margin:0 0 12px;padding:4px 2px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface)}
  .dtable-scroll.dt-cards[data-dt-stack="720"]>.dtable td{display:flex;align-items:baseline;justify-content:space-between;gap:16px;border:none;padding:8px 14px;text-align:right}
  .dtable-scroll.dt-cards[data-dt-stack="720"]>.dtable td[data-label]::before{content:attr(data-label);flex:none;text-align:left;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint)}
  .dtable-scroll.dt-cards[data-dt-stack="720"]>.dtable td:not([data-label]){justify-content:flex-start;text-align:left;padding-top:10px}
}

/* ─── Modal (.cover/.dialog) — cânone da casa (hub.css §5536) PORTADO pro Coffer. O scrim (tint+blur) vive no
   .cover::before z-index:-1, NUNCA no próprio .cover: `backdrop-filter` no .cover o tornaria containing-block de
   descendentes position:fixed (prenderia popovers dentro da caixa do overlay). O .dialog é largo o bastante pro form da
   cobrança (que é alto) e rola por dentro (max-height:90vh). Tokens da casa (0 #hex; o rgba do scrim é intencional). */
.cover{position:fixed;inset:0;z-index:120;display:grid;place-items:center;padding:20px}
.cover[hidden]{display:none}
.cover::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--overlay-scrim);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
.dialog{width:min(680px,100%);max-height:90vh;overflow-y:auto;background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);border:1px solid var(--line-2)}
.dlg-head{display:flex;align-items:center;gap:12px;padding:18px 22px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--surface);z-index:1;border-radius:var(--r-lg) var(--r-lg) 0 0}
.dlg-head h2{flex:1;min-width:0;font-family:"Bricolage Grotesque",system-ui,sans-serif;font-size:17px;font-weight:800;display:flex;align-items:center;gap:9px}
.dlg-head h2 svg{width:18px;height:18px;color:var(--ink-faint);flex:none}
.dlg-x{flex:none;display:grid;place-items:center;width:34px;height:34px;border-radius:var(--r-pill);border:1px solid var(--line-2);background:var(--surface);color:var(--ink-soft);cursor:pointer;transition:.13s}
.dlg-x:hover{color:var(--ink);border-color:var(--acc)}
body[data-entity="pf"] .dlg-x:hover{border-color:var(--pf)}
/* foco de teclado explícito (WCAG 2.4.7) — anel de token accent-aware, sem depender só do reset global */
.dlg-x:focus-visible{outline:none;color:var(--ink);border-color:var(--acc);box-shadow:0 0 0 3px var(--acc-soft),0 0 0 1.5px var(--acc)}
body[data-entity="pf"] .dlg-x:focus-visible{border-color:var(--pf);box-shadow:0 0 0 3px var(--pf-soft),0 0 0 1.5px var(--pf)}
.dlg-x svg{width:16px;height:16px}
.dlg-body{padding:20px 22px 22px}
/* dentro do .dialog o #cobForm reusa a classe .section (layout interno fgrp/grid2) mas PERDE a casca de cartão — a
   moldura já é o próprio .dialog: sem borda/sombra/fundo/margem/padding próprios. */
.dialog .section{margin:0;border:none;box-shadow:none;background:transparent;border-radius:0;padding:0}

/* score de risco (número + barra + faixa) — botão-toggle explicável (nunca caixa cinza WebKit: fundo/borda explícitos) */
.score-btn{display:inline-flex;align-items:center;gap:9px;background:none;border:none;padding:3px 4px;margin:-3px -4px;border-radius:var(--r-sm);cursor:pointer;font:inherit;color:inherit}
.score-btn:hover{background:var(--line)}
.score-btn .sn{font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:800;font-size:15px;min-width:22px;text-align:right}
.score-btn .sbar{width:52px;height:7px;border-radius:var(--r-pill);background:var(--line-2);overflow:hidden;flex:none}
.score-btn .sbar i{display:block;height:100%;border-radius:var(--r-pill)}
.score-btn .chev{width:11px;height:11px;transition:transform .16s}
.score-btn[aria-expanded="true"] .chev{transform:rotate(180deg)}

/* linha de explicação do risco (fatores + aging + ações propostas) */
.expl-row>td{background:var(--surface-2);padding:0!important}
.expl-card{padding:16px 18px;display:flex;flex-direction:column;gap:12px}
.expl-h{display:flex;align-items:center;gap:11px}
.expl-h .eh-n{font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:800;font-size:22px}
.expl-h .eh-t{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-weight:700;font-size:14px}
.expl-h .grow{flex:1}
.factors{display:flex;flex-direction:column;gap:7px}
.factor{display:flex;gap:11px;align-items:baseline;font-size:12.5px;color:var(--ink-soft);line-height:1.5}
.factor .fw{font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:800;font-size:12px;flex:none;min-width:34px;text-align:right}
.factor .fw.up{color:var(--danger-ink)} .factor .fw.down{color:var(--ok-ink)}
.factor .ft b{color:var(--ink)}
.expl-sum{display:flex;gap:9px;align-items:center;font-size:12.5px;color:var(--ink-soft);padding:9px 12px;border-radius:var(--r-sm);background:var(--surface);border:1px solid var(--line)}
.expl-sum svg{width:16px;height:16px;color:var(--ok);flex:none} .expl-sum b{color:var(--ink)}
.expl-aging{display:flex;gap:8px;flex-wrap:wrap}
.ag-chip{font-size:11.5px;color:var(--ink-soft);background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-pill);padding:4px 11px;display:inline-flex;align-items:center;gap:5px}
.ag-chip b{color:var(--ink)} .ag-chip .agc{color:var(--ink-faint)}
.expl-actions{display:flex;gap:9px;align-items:center;flex-wrap:wrap;padding-top:3px;border-top:1px solid var(--line);margin-top:2px;padding-top:12px}
.expl-actions .cl{font-size:12px;font-weight:700;color:var(--ink-soft);margin-right:2px}
.expl-actions .cl b{color:var(--ink)}
.pf-inline{display:inline-flex;margin:0}

@media(max-width:960px){ .aging{grid-template-columns:1fr} }
/* card-stack (≤720): a linha de EXPLICAÇÃO (.inad-expl) da Inadimplência é DETALHE do responsável — cola no card acima
   (sem borda-topo, puxada pra cima o gap do card, cantos-topo retos), como o cob-grp faz na gestão. O <td> colspan já é
   reduzido a padding:0 pela .expl-row>td; o .expl-card mantém seu padding interno. Sem isso viraria um card solto. */
@media(max-width:720px){
  .dtable-scroll.dt-cards[data-dt-stack="720"]>.dtable tr.inad-expl{margin-top:-12px;border-top:none;border-top-left-radius:0;border-top-right-radius:0}
  .dtable-scroll.dt-cards[data-dt-stack="720"]>.dtable tr.inad-expl>td{display:block;padding:0}
  .dtable-scroll.dt-cards[data-dt-stack="720"]>.dtable tr.inad-expl>td::before{display:none}
}

/* ═══════════════ COPILOTO FINANCEIRO (Coffer #7 · Onda C · honesto · fiel ao proto s-copilot) ═══════════════ */
.copilot{max-width:800px}
/* estado honesto — quem responde é o copiloto do Hub */
.cop-hero{background:linear-gradient(150deg,var(--acc-soft),transparent 62%),var(--surface)}
.cop-hero .cop-mk{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;color:#fff;margin-bottom:12px;
  background:linear-gradient(135deg,var(--acc),var(--acc-2));box-shadow:0 8px 22px -8px var(--acc)}
.cop-hero .cop-mk svg{width:24px;height:24px}
.cop-hero h2{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-size:19px;margin-bottom:6px}
.cop-hero .cop-sub{font-size:13.5px;color:var(--ink-soft);line-height:1.6;max-width:70ch}
.cop-hero .cop-sub b{color:var(--ink)}
.cop-flow{list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:16px}
.cop-flow li{display:flex;gap:11px;align-items:flex-start;padding:12px 13px;border-radius:var(--r-md);background:var(--surface);border:1px solid var(--line-2)}
.cop-flow .cf-n{width:24px;height:24px;border-radius:8px;flex:none;display:grid;place-items:center;font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:800;font-size:12px;color:var(--acc-ink);background:var(--acc-soft)}
.cop-flow .cf-b{display:flex;flex-direction:column;gap:2px}
.cop-flow .cf-t{font-weight:700;font-size:13px}
.cop-flow .cf-d{font-size:12px;color:var(--ink-soft);line-height:1.5}
.cop-flow .cf-d b{color:var(--ink)}
/* o que ele sabe fazer — as tools MCP */
.cop-tools{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.cop-tool{display:flex;gap:12px;align-items:flex-start;padding:14px;border-radius:var(--r-md);border:1px solid var(--line-2);background:var(--surface)}
.cop-tool .ct-ic{width:38px;height:38px;border-radius:11px;flex:none;display:grid;place-items:center;color:var(--acc);background:var(--acc-soft)}
[data-theme="dark"] .cop-tool .ct-ic{color:var(--acc-2)}
.cop-tool .ct-ic.prop{color:var(--info-ink);background:var(--acc-soft)}
.cop-tool .ct-ic svg{width:19px;height:19px}
.cop-tool .ct-b{display:flex;flex-direction:column;gap:5px;min-width:0}
.cop-tool .ct-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cop-tool .ct-t{font-weight:700;font-size:13.5px;font-family:"Bricolage Grotesque",system-ui,sans-serif}
.cop-tool .ct-d{font-size:12px;color:var(--ink-soft);line-height:1.55}
/* exemplos de perguntas (chips estáticos) */
.suggest{display:flex;gap:8px;flex-wrap:wrap}
.suggest .sug{font-size:12px;font-weight:600;color:var(--ink-soft);background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-pill);padding:7px 13px}
.cop-hint{display:flex;gap:9px;align-items:flex-start;font-size:12px;color:var(--ink-soft);margin-top:12px;line-height:1.55}
.cop-hint svg{width:15px;height:15px;color:var(--ink-faint);flex:none;margin-top:1px}
.cop-hint b{color:var(--ink)}
/* card ilustrativo do formato de proposta (não é resposta real) */
.act-card{border:1px solid var(--acc);border-radius:var(--r-md);overflow:hidden;background:var(--surface)}
.act-card.is-example{border-style:dashed}
.act-card .ah{display:flex;align-items:center;gap:9px;padding:10px 14px;background:var(--acc-soft);border-bottom:1px solid rgba(11,124,143,.2)}
.act-card .ah>svg{width:16px;height:16px;color:var(--acc);flex:none}
[data-theme="dark"] .act-card .ah>svg{color:var(--acc-2)}
.act-card .ah .at{font-weight:800;font-size:12.5px}
.act-card .ah .prov{margin-left:auto;font-size:10.5px;font-weight:700;color:var(--ink-soft);display:inline-flex;align-items:center;gap:5px}
.act-card .ah .prov svg{width:13px;height:13px}
.act-card .ab{padding:13px 14px}
.act-card .ab .adesc{font-size:13px;font-weight:600;margin-bottom:4px}
.act-card .ab .ameta{font-size:12px;color:var(--ink-soft);line-height:1.55}
.act-card .ab .ameta code{background:var(--line);padding:1px 5px;border-radius:5px;font-size:11px;color:var(--ink);font-family:"JetBrains Mono",ui-monospace,monospace}
.act-card .af{display:flex;gap:9px;align-items:center;padding:11px 14px;border-top:1px solid var(--line);flex-wrap:wrap}
.act-card .af .gate-note{font-size:11px;color:var(--ink-soft);display:inline-flex;align-items:center;gap:5px;margin-left:auto}
.act-card .af .gate-note svg{width:13px;height:13px;flex:none}
.act-card .btn.is-static{pointer-events:none;opacity:.85;box-shadow:none}
/* caixa honesta de "onde perguntar" (o copiloto do Hub · TODO wiring) */
.cop-ask{background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-lg);padding:14px 16px;margin-bottom:18px;box-shadow:var(--shadow-sm)}
.cop-ask .cop-ask-in{display:flex;gap:10px;align-items:center;background:var(--surface-2);border:1px solid var(--line-2);border-radius:var(--r-md);padding:12px 14px;color:var(--ink-faint)}
.cop-ask .cop-ask-in svg{width:18px;height:18px;color:var(--acc);flex:none}
[data-theme="dark"] .cop-ask .cop-ask-in svg{color:var(--acc-2)}
.cop-ask .cop-ask-ph{font-size:14px}
.cop-ask .cop-hint{margin-top:10px}

@media(max-width:760px){ .cop-flow,.cop-tools{grid-template-columns:1fr} }

/* ============================================================
   MEU MÊS (Coffer Onda 1 · orçamento pessoal PF) — fiel ao proto-meu-mes-pf-fase2 (violeta PF)
   ============================================================ */
.phead .crumb .tb.pf{padding:1px 7px;border-radius:var(--r-pill);text-transform:uppercase;letter-spacing:.04em;font-size:9px;font-weight:800;color:var(--pf-ink);background:var(--pf-soft)}
[data-theme="dark"] .phead .crumb .tb.pf{color:var(--pf)}

/* HERÓI · sobra livre — a cena do alívio pessoal */
.hero{position:relative;overflow:hidden;border-radius:var(--r-lg);padding:30px 32px;margin-bottom:18px;
  background:linear-gradient(135deg,var(--pf-soft),transparent 60%),var(--surface);
  border:1px solid rgba(109,90,224,.24);box-shadow:var(--shadow-sm)}
.hero .sun{position:absolute;right:-50px;top:-50px;width:230px;height:230px;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,var(--pf-soft),transparent 70%);animation:breathe 7s ease-in-out infinite}
@media (prefers-reduced-motion: reduce){.hero .sun{animation:none}}
.hero .htone{position:relative;display:inline-flex;align-items:center;gap:9px;font-family:"Bricolage Grotesque",system-ui,sans-serif;
  font-weight:800;font-size:18px;color:var(--pf-ink)}
[data-theme="dark"] .hero .htone{color:var(--pf)}
.hero .htone svg{width:20px;height:20px}
.hero .hnum{position:relative;font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:700;letter-spacing:-.02em;
  font-size:64px;line-height:1.02;margin-top:8px;color:var(--ok-ink)}
.hero .hnum .cur{font-size:.42em;font-weight:500;color:var(--ink-soft);margin-right:.28em;vertical-align:.14em}
.hero .hlabel{position:relative;font-size:14px;color:var(--ink-soft);margin-top:4px;max-width:66ch}
.hero .hlabel b{color:var(--ink)}
.hero .heq{position:relative;display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:20px}
.eqchip{display:inline-flex;flex-direction:column;gap:2px;padding:9px 14px;border-radius:var(--r-md);
  background:var(--surface);border:1px solid var(--line-2);box-shadow:var(--shadow-sm);min-width:132px}
.eqchip .eqk{font-size:11px;font-weight:700;color:var(--ink-soft);display:flex;align-items:center;gap:6px}
.eqchip .eqk svg{width:13px;height:13px;color:var(--ink-faint)}
.eqchip .money{font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:700;font-size:16px}
.eqchip.entrou .eqk svg{color:var(--ok)}
.eqchip.saiu .eqk svg{color:var(--danger)}
.eqop{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-weight:800;font-size:20px;color:var(--ink-faint)}
.hero .hcompare{position:relative;display:inline-flex;align-items:center;gap:6px;margin-top:16px;
  font-size:12.5px;font-weight:700;color:var(--ok-ink);background:rgba(15,169,104,.13);padding:4px 11px;border-radius:var(--r-pill)}
.hero .hcompare svg{width:13px;height:13px}
/* composição do "Entrou" (fiel: renda manual + recebível PF liquidado) */
.entrou-detail{position:relative;display:flex;gap:8px;flex-wrap:wrap;margin-top:14px;font-size:12px}
.ed-chip{display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:var(--r-pill);
  background:var(--surface);border:1px solid var(--line-2);color:var(--ink-soft);font-weight:600}
.ed-chip svg{width:13px;height:13px;color:var(--ok);flex:none}
.ed-chip b{color:var(--ink);font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:700}
.ed-op{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-weight:800;color:var(--ink-faint);align-self:center}
/* hero VAZIO */
.hero.empty .hnum{color:var(--ink-faint)}
.hero .hempty-cta{position:relative;display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}
/* hero CUIDADO (sobra negativa — tom de cuidado, não pânico) */
.hero.care{background:linear-gradient(135deg,rgba(230,146,11,.12),transparent 60%),var(--surface);border-color:rgba(230,146,11,.30)}
.hero.care .sun{background:radial-gradient(circle,rgba(230,146,11,.14),transparent 70%)}
.hero.care .htone{color:var(--warn-ink)}
.hero.care .hnum{color:var(--warn-ink)}
.hero.care .hcompare{color:var(--warn-ink);background:rgba(230,146,11,.14)}

/* PRA ONDE O DINHEIRO FOI · categorias com barra (Coffer Onda 2 · fiel ao proto #s-cheio .cats/.catrow) */
.cats{display:flex;flex-direction:column;gap:3px}
.catrow{display:grid;grid-template-columns:34px 1fr auto;gap:12px;align-items:center;padding:11px 4px;border-bottom:1px solid var(--line)}
.catrow:last-child{border-bottom:none}
.catrow .cbody{min-width:0}
.catrow .ct{font-weight:700;font-size:13px}
.catrow .ctop{display:flex;align-items:baseline;gap:8px}
.catrow .cs{font-size:11.5px;color:var(--ink-soft);margin-left:auto;font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:600}
.catbar{height:7px;border-radius:var(--r-pill);background:var(--line);overflow:hidden;margin-top:7px}
.catbar i{display:block;height:100%;border-radius:var(--r-pill);transition:width .7s cubic-bezier(.2,.8,.3,1)}
.catrow .cval{font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:700;font-size:14px;white-space:nowrap;align-self:center}
.catrow .cval .money{font-weight:700}

/* MINHA META · anel de progresso + projeção com opinião (Coffer Onda 3 · fiel ao proto #s-cheio/#s-meta .goal/.ring) */
.goal{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:12px;margin-bottom:16px}
.ring{width:132px;height:132px;border-radius:50%;display:grid;place-items:center;position:relative;
  background:conic-gradient(var(--pf) var(--gpct,0%),var(--line) 0)}
.ring.done{background:conic-gradient(var(--ok) 100%,var(--ok) 0)}
.ring::before{content:"";position:absolute;inset:11px;border-radius:50%;background:var(--surface)}
.ring .rc{position:relative;text-align:center}
.ring .rc .rp{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-weight:800;font-size:26px;line-height:1}
.ring.done .rc .rp{color:var(--ok-ink)}
.ring .rc .rl{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);margin-top:2px}
.goal .gname{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-weight:700;font-size:16px;display:flex;align-items:center;gap:7px}
.goal .gamt{font-family:"JetBrains Mono",ui-monospace,monospace;font-weight:700;font-size:14px}
.goal .gamt .of{color:var(--ink-soft);font-weight:500}
.goal .gproj{font-size:12.5px;color:var(--ink-soft);max-width:44ch;line-height:1.55}
.goal .gproj b{color:var(--ink)}
/* meta VAZIA — anel neutro + alvo faint */
.goal.empty .ring{background:conic-gradient(var(--line) 0%,var(--line) 0)}
.goal.empty .ring .rp{font-size:30px;color:var(--ink-faint)}
/* campos do assistente de meta (criar/editar) + aporte */
.meta-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:end;margin-bottom:12px}
.meta-fields:has(.fgrp:only-child){grid-template-columns:1fr;max-width:280px}
.meta-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}

/* ENTRADA RÁPIDA · lançar em 1 linha */
.entry-seg{display:inline-flex;gap:3px;padding:3px;border-radius:var(--r-pill);background:var(--surface-2);border:1px solid var(--line);margin-bottom:14px}
.entry-seg button{font:inherit;font-weight:700;font-size:12px;padding:6px 14px;border:none;border-radius:var(--r-pill);
  background:transparent;color:var(--ink-soft);cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:.13s}
.entry-seg button svg{width:13px;height:13px}
.entry-seg button.on{background:var(--pf);color:#fff}
.manual-entry{display:grid;grid-template-columns:1fr 1.6fr 1fr;gap:12px;align-items:end;margin-bottom:12px}
.manual-entry .btn{min-height:42px}
/* seletor de categoria por CHIPS (cânone: nunca <select> nativo) — semente + o que você já usou + nova (texto livre) */
.catpick{display:flex;gap:7px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.catpick .cl{font-size:11px;font-weight:700;color:var(--ink-soft)}
.catchip{font:inherit;font-size:12px;font-weight:700;padding:5px 12px;border-radius:var(--r-pill);cursor:pointer;
  border:1px solid var(--line-2);background:var(--surface);color:var(--ink-soft);display:inline-flex;align-items:center;gap:6px;transition:.13s}
.catchip:hover{border-color:var(--pf);color:var(--pf-ink)}
[data-theme="dark"] .catchip:hover{color:var(--pf)}
.catchip svg{width:13px;height:13px}
.catchip.on{background:var(--pf);color:#fff;border-color:var(--pf)}
.catchip.on .dot{outline:1.5px solid rgba(255,255,255,.7)}
.catchip.sugg{border-color:rgba(109,90,224,.4);color:#fff}
.catchip .dot{width:9px;height:9px;border-radius:3px;flex:none}
.me-cat-nova{margin-bottom:12px}
.me-cat-nova .field{max-width:320px}
.me-actions{margin-bottom:2px}
.hint{font-size:11.5px;color:var(--ink-soft);margin-top:10px;display:flex;align-items:center;gap:7px}
.hint svg{width:14px;height:14px;color:var(--pf);flex:none}
.hint b{color:var(--ink)}

@media(max-width:560px){
  .hero{padding:24px 20px}
  .hero .hnum{font-size:46px}
  .heq .eqchip{flex:1;min-width:0}
  .manual-entry{grid-template-columns:1fr}
  .catrow{grid-template-columns:34px 1fr auto}
  .meta-fields{grid-template-columns:1fr}
}

/* ═══════════════ CONCILIAÇÃO & BAIXA EM LOTE (Coffer Recebimento fase-2 · coração da Área 2 · proto Tela 2) ═══════════════
   Extrato ↔ título: o que bate certinho vem pré-marcado (lote · 1 aprovação); as exceções ficam na faixa separada, 1-a-1.
   Cânone Aurora — só tokens (accent PJ teal / PF violeta via body[data-entity]), ícones de linha, card-stack ≤720. */
.recon-fld{display:flex;flex-direction:column;gap:6px}
.recon-fld>span{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-faint)}
.recon-set{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-end}
.recon-set .field-sm{width:120px}
.recon-drop{display:flex;flex-wrap:wrap;gap:12px;align-items:center;padding:16px 18px;border:1.5px dashed var(--line-2);border-radius:var(--r-md);background:var(--surface-2)}
.recon-drop input[type=file]{font:inherit;font-size:13px;color:var(--ink-soft);max-width:100%}
.recon-drop input[type=file]::file-selector-button{font:inherit;font-weight:700;font-size:12.5px;color:var(--acc-ink);background:var(--acc-soft);border:1px solid var(--line-2);border-radius:var(--r-pill);padding:7px 13px;margin-right:12px;cursor:pointer}
body[data-entity="pf"] .recon-drop input[type=file]::file-selector-button{color:var(--pf-ink);background:var(--pf-soft)}
.recon-batch{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 16px;border-radius:var(--r-md);background:var(--acc-soft);border:1px solid var(--line-2);margin-bottom:8px}
.recon-batch .rb-t{font-weight:700;font-size:14px;color:var(--acc-ink)}
.recon-batch .grow{flex:1}
body[data-entity="pf"] .recon-batch{background:var(--pf-soft)}
body[data-entity="pf"] .recon-batch .rb-t{color:var(--pf-ink)}
.recon-list{border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface);overflow:hidden;margin-bottom:14px}
.recon-row{display:grid;grid-template-columns:26px 1fr 40px 1fr;gap:12px;align-items:center;padding:12px 16px;border-top:1px solid var(--line)}
.recon-row:first-child{border-top:none}
.recon-row.exc{background:var(--surface-2);border-left:3px solid var(--warn)}
.recon-side{border:1px solid var(--line-2);border-radius:var(--r-sm);padding:9px 12px;background:var(--surface);min-width:0}
.recon-side.bank{background:var(--surface-2)}
.recon-side .rs-t{font-size:11px;color:var(--ink-faint);display:flex;align-items:center;gap:6px}
.recon-side .rs-t svg{width:12px;height:12px;flex:none;color:var(--ink-faint)}
.recon-side .rs-v{font-weight:700;font-size:13.5px;margin-top:3px;line-height:1.4;word-break:break-word}
.recon-side .rs-v .money{font-weight:800}
.recon-arrow{display:grid;place-items:center;color:var(--ink-faint)}
.recon-arrow svg{width:20px;height:20px}
.recon-arrow.ok{color:var(--ok)}
.recon-arrow.warn{color:var(--warn)}
.recon-conf{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;margin-top:5px;display:inline-block}
.recon-conf.ok{color:var(--ok-ink)}
.recon-conf.warn{color:var(--warn-ink)}
.recon-chk{width:20px;height:20px;accent-color:var(--acc);cursor:pointer;justify-self:center}
body[data-entity="pf"] .recon-chk{accent-color:var(--pf)}
.recon-exc-note{grid-column:2/5;display:flex;gap:9px;align-items:center;flex-wrap:wrap;font-size:12.5px;color:var(--ink-soft);padding-top:2px}
.recon-exc-note b{color:var(--ink)}
.recon-exc-note .grow{flex:1}
.recon-exc-note form{display:inline-flex;margin:0}
@media(max-width:720px){
  .recon-row{grid-template-columns:1fr;gap:8px}
  .recon-arrow{justify-self:start;transform:rotate(90deg)}
  .recon-exc-note{grid-column:1}
  .recon-chk{justify-self:start}
  .recon-set .field-sm{width:100%}
}