/* financas.css — NoMoney
 * Segue o design system do site (conta.css / app.css):
 * fundo #0a0a08, acento #07C42C, Space Grotesk, cantos 8/14px.
 *
 * Tokens de gráfico validados com o validador do skill dataviz
 * contra a superfície escura #111110 (modo dark):
 *   categórica (6 slots, pares adjacentes) ......... ALL PASS
 *   receitas x despesas (#0ca30c x #e66767) ........ CVD ΔE 7.1 (banda 6–8)
 *      → só é legal com codificação secundária: legenda sempre visível,
 *        rótulo direto em cada grupo, posição fixa (receita à esquerda)
 *        e 2px de respiro entre as barras. Não mexer sem revalidar.
 */

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}

:root{
  /* ── superfícies e texto (idênticos a conta.css) ── */
  --bg:#0a0a08;--bg2:#111110;--bg3:#161614;--bg4:#1c1c19;
  --tx:#f0ede6;--tx2:#6b6b67;--tx3:#9a9990;
  --bd:rgba(255,255,255,.07);--bd2:rgba(255,255,255,.12);
  --ac:#07C42C;--ac2:#09d930;--acd:rgba(7,196,44,.12);
  --yl:#f5c400;--yld:rgba(245,196,0,.12);
  --r:8px;--rl:14px;--rf:100px;

  /* ── tokens de gráfico ── */
  --c-in:#0ca30c;          /* receitas  */
  --c-out:#e66767;         /* despesas  */
  --c-1:#3987e5;--c-2:#d95926;--c-3:#199e70;
  --c-4:#c98500;--c-5:#d55181;--c-6:#9085e9;
  --c-other:#6b6b67;
  --st-good:#0ca30c;--st-warn:#fab219;--st-crit:#d03b3b;
  --grid:#2c2c2a;--axis:#383835;--ink-mute:#898781;--ink-2:#c3c2b7;
}
/* tema claro (assets/css/theme.css cuida da paleta): tokens de gráfico/texto só desta página */
:root[data-theme="light"]{--grid:#DCD8D1;--axis:#C8C4BC;--ink-mute:#6E6C66;--ink-2:#3A3934}

html{scrollbar-color:#333 var(--bg)}
body{font-family:'Space Grotesk',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--tx);min-height:100vh;-webkit-font-smoothing:antialiased}
a{color:inherit}
button,input,select,textarea{font-family:inherit}

/* ── AUTH LOADING ─────────────────────────────────────────────────────── */
#auth-loading{position:fixed;inset:0;background:var(--bg);z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px}
#auth-loading.hidden{display:none}
.spin{width:36px;height:36px;border:2px solid rgba(7,196,44,.15);border-top-color:var(--ac);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── NAV ──────────────────────────────────────────────────────────────── */
/* `:not(.tabbar)` porque a barra inferior do celular também é um <nav>, e
   este seletor de elemento vazava `top:0`, `height:56px` e `border-bottom`
   dentro dela. O `.tabbar` sobrescrevia `position` e `bottom` mas não o
   `top` — e `position:fixed` com top e bottom ao mesmo tempo ignora o
   bottom, então a barra do celular nascia grudada no TOPO da tela. */
nav:not(.tabbar){position:sticky;top:0;z-index:100;background:rgba(var(--paper),.85);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--bd);padding:0 24px;display:flex;align-items:center;justify-content:space-between;height:56px}
.nav-logo{display:flex;align-items:center;padding:6px;border-radius:50%;box-shadow:0 0 14px rgba(7,196,44,calc(.45*var(--ga))),0 0 32px rgba(7,196,44,calc(.15*var(--ga)));flex-shrink:0}
.nav-links{display:flex;gap:22px;list-style:none}
.nav-links a{color:var(--fg-50);font-size:11px;font-weight:600;letter-spacing:.1em;text-decoration:none;text-transform:uppercase;transition:color .2s}
.nav-links a:hover,.nav-links a.active{color:var(--ac-tx)}
@media(max-width:900px){.nav-links{display:none!important}}

/* ── USER BAR ─────────────────────────────────────────────────────────── */
.user-bar{background:var(--bg2);border-bottom:1px solid var(--bd);padding:8px 24px;display:flex;align-items:center;gap:14px;font-size:12px;flex-wrap:wrap}
.user-bar-name{font-weight:600;color:var(--tx)}
.plan-badge{display:inline-flex;align-items:center;padding:2px 10px;border-radius:var(--rf);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.plan-pro{background:var(--yld);color:color-mix(in srgb,var(--yl) var(--dk),#735C00);border:1px solid rgba(245,196,0,.3)}
.plan-basic{background:var(--acd);color:var(--ac-tx);border:1px solid rgba(7,196,44,.3)}
.plan-free{background:rgba(var(--ink),.07);color:var(--tx2);border:1px solid var(--bd2)}
.uses-pill{font-size:11px;color:var(--tx2)}
.uses-pill.warn{color:color-mix(in srgb,var(--yl) var(--dk),#735C00)}
.uses-pill.out{color:color-mix(in srgb,#ff6060 var(--dk),#A33D3D)}
.user-bar-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.user-bar-right a{font-size:11px;font-weight:600;color:var(--tx2);text-decoration:none;letter-spacing:.05em;transition:color .2s}
.user-bar-right a:hover{color:var(--tx)}
.btn-signout{background:none;border:1px solid var(--bd2);border-radius:var(--rf);color:var(--tx2);font-size:11px;font-weight:600;padding:5px 14px;cursor:pointer;letter-spacing:.06em;transition:all .2s}
.btn-signout:hover{border-color:rgba(var(--ink),.25);color:var(--tx)}

/* ══════════════════════════════════════════════════════════════════════
   LANDING (visitante deslogado)
   ══════════════════════════════════════════════════════════════════════ */
.land{max-width:1080px;margin:0 auto;padding:4.5rem 1.5rem 5rem}
.land-hero{text-align:center;margin-bottom:4rem}
.land-eyebrow{display:inline-flex;align-items:center;gap:8px;background:var(--acd);border:1px solid rgba(7,196,44,.25);color:var(--ac-tx);font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;padding:6px 14px;border-radius:var(--rf);margin-bottom:22px}
.land-hero h1{font-size:clamp(30px,5.4vw,54px);font-weight:800;line-height:1.06;letter-spacing:-1.4px;margin-bottom:18px}
.land-hero h1 span{color:var(--ac-tx)}
.land-hero p{font-size:clamp(14px,1.7vw,17px);color:var(--tx3);line-height:1.65;max-width:600px;margin:0 auto 30px}
.land-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.btn-hero{background:var(--ac);color:#0a0a08;border:none;border-radius:var(--rf);padding:14px 30px;font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;text-decoration:none;display:inline-flex;align-items:center;gap:8px;cursor:pointer;transition:transform .18s,box-shadow .18s;box-shadow:0 0 0 rgba(7,196,44,calc(0*var(--ga)))}
.btn-hero:hover{transform:translateY(-2px);box-shadow:0 8px 26px rgba(7,196,44,calc(.28*var(--ga)))}
.btn-hero.ghost{background:none;color:var(--tx2);border:1px solid var(--bd2);box-shadow:none}
.btn-hero.ghost:hover{color:var(--tx);border-color:rgba(var(--ink),.28);box-shadow:none}
.land-note{font-size:12px;color:var(--tx2);margin-top:16px}

.land-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1px;background:var(--bd);border:1px solid var(--bd);border-radius:var(--rl);overflow:hidden;margin-bottom:4.5rem}
.land-strip div{background:var(--bg2);padding:22px 18px;text-align:center}
.land-strip .n{font-size:24px;font-weight:800;color:var(--ac-tx);letter-spacing:-.5px;font-variant-numeric:tabular-nums}
.land-strip .l{font-size:11px;color:var(--tx2);margin-top:4px;letter-spacing:.04em}

.land-sec-title{font-size:clamp(21px,3vw,30px);font-weight:800;letter-spacing:-.6px;text-align:center;margin-bottom:10px}
.land-sec-sub{font-size:14px;color:var(--tx2);text-align:center;max-width:540px;margin:0 auto 2.5rem;line-height:1.6}

.feat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:14px;margin-bottom:4.5rem}
.feat{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--rl);padding:22px;transition:border-color .2s,transform .2s}
.feat:hover{border-color:var(--bd2);transform:translateY(-2px)}
.feat-ico{width:38px;height:38px;border-radius:10px;background:var(--acd);display:flex;align-items:center;justify-content:center;margin-bottom:14px}
.feat-ico svg{width:19px;height:19px;stroke:var(--ac-tx);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.feat h3{font-size:15px;font-weight:700;margin-bottom:7px}
.feat p{font-size:13px;color:var(--tx2);line-height:1.6}

.plans{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px;margin-bottom:3rem}
.plan{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--rl);padding:26px 22px;display:flex;flex-direction:column}
.plan.hi{border-color:rgba(7,196,44,.3);background:rgba(7,196,44,.03);position:relative}
.plan-tag{position:absolute;top:-10px;left:50%;transform:translateX(-50%);background:var(--ac);color:#0a0a08;font-size:9px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;padding:4px 12px;border-radius:var(--rf);white-space:nowrap}
.plan h3{font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--tx2);margin-bottom:12px}
.plan .price{font-size:32px;font-weight:800;letter-spacing:-1px;margin-bottom:2px;font-variant-numeric:tabular-nums}
.plan .price small{font-size:13px;font-weight:600;color:var(--tx2);letter-spacing:0}
.plan .price-sub{font-size:12px;color:var(--tx2);margin-bottom:18px}
.plan ul{list-style:none;display:flex;flex-direction:column;gap:9px;margin-bottom:22px;flex:1}
.plan li{font-size:13px;color:var(--tx3);display:flex;align-items:flex-start;gap:9px;line-height:1.45}
.plan li::before{content:'';width:14px;height:14px;flex-shrink:0;margin-top:2px;background:var(--acd);border-radius:50%;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2307C42C' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");background-size:10px;background-repeat:no-repeat;background-position:center}
.plan li.off{color:var(--tx2);opacity:.55}
.plan li.off::before{background-color:rgba(var(--ink),.06);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b6b67' stroke-width='3.5' stroke-linecap='round'%3E%3Cline x1='6' y1='12' x2='18' y2='12'/%3E%3C/svg%3E")}
.plan .btn-plan{display:block;text-align:center;text-decoration:none;border-radius:var(--rf);padding:12px;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;border:1px solid var(--bd2);color:var(--tx2);transition:all .2s}
.plan .btn-plan:hover{border-color:rgba(var(--ink),.28);color:var(--tx)}
.plan .btn-plan.green{background:var(--ac);color:#0a0a08;border-color:var(--ac)}
.plan .btn-plan.green:hover{opacity:.85;color:#0a0a08}
.plan .btn-plan.yellow{background:var(--yl);color:#0a0a08;border-color:var(--yl)}
.plan .btn-plan.yellow:hover{opacity:.85;color:#0a0a08}

.faq{max-width:720px;margin:0 auto}
.faq-item{border-bottom:1px solid var(--bd)}
.faq-q{width:100%;background:none;border:none;color:var(--tx);font-size:14px;font-weight:600;text-align:left;padding:18px 30px 18px 0;cursor:pointer;position:relative}
.faq-q::after{content:'+';position:absolute;right:4px;top:50%;transform:translateY(-50%);color:var(--ac-tx);font-size:19px;font-weight:400;transition:transform .2s}
.faq-item.open .faq-q::after{transform:translateY(-50%) rotate(45deg)}
.faq-a{display:none;font-size:13px;color:var(--tx2);line-height:1.7;padding:0 0 18px}
.faq-item.open .faq-a{display:block}

/* ══════════════════════════════════════════════════════════════════════
   APP
   ══════════════════════════════════════════════════════════════════════ */
.app-wrap{max-width:1120px;margin:0 auto;padding:1.6rem 1.5rem 6rem}

/* ── barra de mês + abas ── */
.app-top{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:1.4rem}
.month-nav{display:flex;align-items:center;gap:2px;background:var(--bg2);border:1px solid var(--bd);border-radius:var(--rf);padding:3px}
.month-btn{background:none;border:none;color:var(--tx2);width:30px;height:30px;border-radius:50%;cursor:pointer;font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center;transition:all .15s}
.month-btn:hover{background:rgba(var(--ink),.06);color:var(--tx)}
.month-label{font-size:13px;font-weight:700;min-width:132px;text-align:center;letter-spacing:.02em;text-transform:capitalize}
.btn-hoje{background:none;border:1px solid var(--bd2);border-radius:var(--rf);color:var(--tx2);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:7px 14px;cursor:pointer;transition:all .15s}
.btn-hoje:hover{border-color:rgba(var(--ink),.25);color:var(--tx)}
.app-top-right{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}

.tabs{display:flex;gap:4px;overflow-x:auto;border-bottom:1px solid var(--bd);margin-bottom:1.6rem;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--tx2);font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;padding:11px 14px;cursor:pointer;white-space:nowrap;transition:color .15s,border-color .15s;margin-bottom:-1px}
.tab:hover{color:var(--tx3)}
.tab.active{color:var(--ac-tx);border-bottom-color:var(--ac)}
.panel{display:none}
.panel.active{display:block;animation:fade-in .22s ease}
@keyframes fade-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}

/* ── seções e cards ── */
.sec-label{font-size:10px;font-weight:700;letter-spacing:.12em;color:var(--tx2);text-transform:uppercase;margin:1.8rem 0 .75rem;display:flex;align-items:center;gap:10px}
.sec-label:first-child{margin-top:0}
.sec-label::after{content:'';flex:1;height:1px;background:var(--bd)}
.sec-label .sec-act{background:none;border:1px solid var(--bd2);border-radius:var(--rf);color:var(--tx2);font-size:10px;font-weight:700;letter-spacing:.06em;padding:4px 12px;cursor:pointer;text-transform:none;transition:all .15s;order:3;white-space:nowrap}
.sec-label .sec-act:hover{border-color:var(--ac);color:var(--ac-tx)}

.card{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--rl);padding:1.4rem;margin-bottom:12px}
.card.pad0{padding:0;overflow:hidden}

/* ── KPI tiles ── */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:1.5rem}
.kpi{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--rl);padding:16px 18px;position:relative;overflow:hidden}
.kpi::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--bd2)}
.kpi.in::before{background:var(--c-in)}
.kpi.out::before{background:var(--c-out)}
.kpi.bal::before{background:var(--ac)}
.kpi.bal.neg::before{background:var(--st-crit)}
.kpi.plan::before{background:var(--c-1)}
.kpi-l{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--tx2);display:flex;align-items:center;gap:6px;margin-bottom:7px;flex-wrap:wrap}
.kpi-v{font-size:23px;font-weight:800;letter-spacing:-.7px;font-variant-numeric:tabular-nums;line-height:1.15}
.kpi-v.in{color:color-mix(in srgb,var(--c-in) var(--dk),#087008)}
.kpi-v.out{color:color-mix(in srgb,var(--c-out) var(--dk),#9A4545)}
.kpi-v.neg{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.kpi-s{font-size:11px;color:var(--tx2);margin-top:5px;line-height:1.4}
.delta{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:700;font-variant-numeric:tabular-nums}
.delta.up{color:color-mix(in srgb,var(--st-good) var(--dk),#087008)}
.delta.down{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.delta.flat{color:var(--tx2)}

/* ══════════════════════════════════════════════════════════════════════
   QUANTO POSSO GASTAR (safe-to-spend)
   ══════════════════════════════════════════════════════════════════════ */
.sts{background:linear-gradient(150deg,rgba(7,196,44,.07),rgba(7,196,44,.015) 46%,transparent);border:1px solid rgba(7,196,44,.22);border-radius:18px;padding:24px;margin-bottom:1.5rem}
.sts.tight{border-color:rgba(250,178,25,.28);background:linear-gradient(150deg,rgba(250,178,25,.07),rgba(250,178,25,.015) 46%,transparent)}
.sts.over{border-color:rgba(208,59,59,.3);background:linear-gradient(150deg,rgba(208,59,59,.08),rgba(208,59,59,.015) 46%,transparent)}
.sts-grid{display:grid;grid-template-columns:minmax(220px,320px) 1fr;gap:28px;align-items:start}
@media(max-width:820px){.sts-grid{grid-template-columns:1fr;gap:22px}}

.sts-lbl{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--tx2);margin-bottom:8px;display:flex;align-items:center;gap:7px}
.sts-hero{font-size:clamp(34px,5.2vw,46px);font-weight:800;letter-spacing:-1.6px;line-height:1;color:var(--ac-tx);font-variant-numeric:tabular-nums}
.sts.tight .sts-hero{color:color-mix(in srgb,var(--st-warn) var(--dk),#7D590C)}
.sts.over  .sts-hero{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.sts-sub{font-size:12.5px;color:var(--tx3);line-height:1.55;margin-top:10px}
.sts-sub b{color:var(--tx)}
.sts-day{display:inline-flex;align-items:baseline;gap:6px;background:rgba(var(--ink),.05);border:1px solid var(--bd2);border-radius:var(--rf);padding:7px 14px;margin-top:14px;font-size:12px;color:var(--tx3)}
.sts-day b{font-size:15px;font-weight:800;color:var(--tx);font-variant-numeric:tabular-nums}

/* barra empilhada do orçamento */
.sts-bar{height:14px;border-radius:var(--rf);overflow:hidden;display:flex;gap:2px;background:rgba(var(--ink),.05)}
.sts-seg{height:100%;transition:width .5s cubic-bezier(.4,0,.2,1)}
.sts-seg:first-child{border-radius:var(--rf) 0 0 var(--rf)}
.sts-seg:last-child{border-radius:0 var(--rf) var(--rf) 0}
.sts-legend{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:10px 16px;margin-top:16px}
.sts-li{display:flex;align-items:flex-start;gap:8px}
.sts-li .sw{width:9px;height:9px;border-radius:2px;flex-shrink:0;margin-top:4px}
.sts-li .k{font-size:11px;color:var(--tx2);line-height:1.4}
.sts-li .v{font-size:13.5px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--tx);display:block}

/* o que o plano deixa de fora do cálculo — borda tracejada porque é ausência,
   não uma fatia de valor zero */
.sts-falta{margin-top:14px;padding-top:12px;border-top:1px dashed var(--bd,rgba(var(--ink),.1));display:grid;gap:8px}

/* avisos do motor */
.sts-alerts{display:flex;flex-direction:column;gap:8px;margin-top:18px}
.sts-alert{display:flex;align-items:flex-start;gap:9px;font-size:12.5px;line-height:1.5;padding:10px 13px;border-radius:var(--r);border:1px solid transparent}
.sts-alert svg{width:14px;height:14px;flex-shrink:0;margin-top:1px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.sts-alert.good{background:rgba(12,163,12,.07);border-color:rgba(12,163,12,.22);color:color-mix(in srgb,#7fd97f var(--dk),#3E6A3E)}
.sts-alert.warn{background:rgba(250,178,25,.07);border-color:rgba(250,178,25,.22);color:color-mix(in srgb,#f0c463 var(--dk),#715C2F)}
.sts-alert.crit{background:rgba(208,59,59,.08);border-color:rgba(208,59,59,.26);color:color-mix(in srgb,#ff8f8f var(--dk),#8C4F4F)}
.sts-alert b{color:var(--fg)}

/* regra 50/30/20 */
.rule-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}
.rule{background:var(--bg3);border:1px solid var(--bd);border-radius:var(--r);padding:14px}
.rule-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:9px}
.rule-n{font-size:11.5px;font-weight:700;color:var(--tx3)}
.rule-p{font-size:15px;font-weight:800;font-variant-numeric:tabular-nums}
.rule-track{height:6px;background:rgba(var(--ink),.06);border-radius:var(--rf);overflow:hidden;margin-bottom:8px}
.rule-fill{height:100%;border-radius:var(--rf);transition:width .5s cubic-bezier(.4,0,.2,1)}
.rule-m{font-size:11px;color:var(--tx2);line-height:1.45}

/* ── grid de gráficos ── */
.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(max-width:820px){.chart-grid{grid-template-columns:1fr}}
.chart-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:2px}
.chart-title{font-size:13px;font-weight:700;letter-spacing:-.1px}
.chart-sub{font-size:11px;color:var(--tx2);margin-bottom:16px;line-height:1.45}
.chart-box{position:relative}
.chart-box svg{display:block;width:100%;height:auto;overflow:visible}
/* a rosca tem viewBox quadrado: sem teto ela estica junto com o card e o
   texto central vira um número gigante ao lado das barras. */
#donut-box svg{max-width:290px;margin:0 auto}

/* legenda — sempre presente com 2+ séries */
.legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:14px}
.legend-item{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;color:var(--ink-2)}
.legend-swatch{width:9px;height:9px;border-radius:2px;flex-shrink:0}
.legend-val{color:var(--tx2);font-variant-numeric:tabular-nums;margin-left:2px}

/* tooltip de gráfico */
.viz-tip{position:absolute;pointer-events:none;background:var(--bg4);border:1px solid var(--bd2);border-radius:var(--r);padding:8px 11px;font-size:11.5px;line-height:1.5;color:var(--tx);box-shadow:0 10px 30px rgba(0,0,0,calc(.55*var(--sa)));opacity:0;transition:opacity .12s;z-index:60;white-space:nowrap;transform:translate(-50%,-100%)}
.viz-tip.on{opacity:1}
.viz-tip b{font-variant-numeric:tabular-nums}
.viz-tip .tip-k{color:var(--tx2)}

/* fallback tabular acessível */
.viz-table{margin-top:12px}
.viz-table summary{font-size:11px;color:var(--tx2);cursor:pointer;letter-spacing:.04em}
.viz-table summary:hover{color:var(--tx3)}
.viz-table table{width:100%;border-collapse:collapse;margin-top:10px}
.viz-table th{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--tx2);font-weight:600;padding:6px 8px;text-align:left;border-bottom:1px solid var(--bd)}
.viz-table td{padding:7px 8px;font-size:12px;border-bottom:1px solid rgba(var(--ink),.04);font-variant-numeric:tabular-nums}
.viz-table td:not(:first-child),.viz-table th:not(:first-child){text-align:right}

/* ── barras de limite ── */
.lim-list{display:flex;flex-direction:column;gap:15px}
.lim{display:block}
.lim-top{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.lim-dot{width:9px;height:9px;border-radius:2px;flex-shrink:0}
.lim-name{font-size:12.5px;font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lim-val{font-size:11.5px;color:var(--tx2);font-variant-numeric:tabular-nums;flex-shrink:0}
.lim-track{height:7px;background:rgba(var(--ink),.06);border-radius:var(--rf);overflow:hidden}
.lim-fill{height:100%;border-radius:var(--rf);transition:width .5s cubic-bezier(.4,0,.2,1)}
.lim-note{font-size:11px;margin-top:5px;display:flex;align-items:center;gap:5px}
.lim-note.good{color:color-mix(in srgb,var(--st-good) var(--dk),#087008)}
.lim-note.warn{color:color-mix(in srgb,var(--st-warn) var(--dk),#7D590C)}
.lim-note.crit{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.lim-note svg{width:12px;height:12px;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}

/* ── tabelas ── */
.tbl-scroll{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse;min-width:660px}
.tbl th{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--tx2);font-weight:600;padding:11px 14px;text-align:left;border-bottom:1px solid var(--bd);white-space:nowrap;background:var(--bg2);position:sticky;top:0}
.tbl td{padding:12px 14px;border-bottom:1px solid rgba(var(--ink),.04);font-size:13px;vertical-align:middle}
.tbl tr:last-child td{border-bottom:none}
.tbl tbody tr:hover td{background:rgba(var(--ink),.022)}
.tbl .num{text-align:right;font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap}
.tbl .num.in{color:color-mix(in srgb,var(--c-in) var(--dk),#087008)}
.tbl .num.out{color:color-mix(in srgb,var(--c-out) var(--dk),#9A4545)}
.td-desc{font-weight:600}
.td-meta{font-size:11px;color:var(--tx2);margin-top:2px}
.td-act{text-align:right;white-space:nowrap}
.icon-btn{background:none;border:1px solid transparent;border-radius:6px;color:var(--tx2);cursor:pointer;padding:5px;line-height:0;transition:all .15s}
.icon-btn:hover{border-color:var(--bd2);color:var(--tx)}
.icon-btn.danger:hover{border-color:rgba(208,59,59,.4);color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.icon-btn svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

.chip{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:var(--rf);font-size:10px;font-weight:700;letter-spacing:.05em;white-space:nowrap;border:1px solid transparent}
.chip-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.chip.pago{background:rgba(12,163,12,.1);color:color-mix(in srgb,var(--st-good) var(--dk),#087008);border-color:rgba(12,163,12,.25)}
.chip.pend{background:rgba(250,178,25,.1);color:color-mix(in srgb,var(--st-warn) var(--dk),#7D590C);border-color:rgba(250,178,25,.25)}
.chip.venc{background:rgba(208,59,59,.1);color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232);border-color:rgba(208,59,59,.28)}
.chip.nat{background:rgba(var(--ink),.05);color:var(--tx3);border-color:var(--bd2)}
.chip.ok{background:rgba(12,163,12,.1);color:color-mix(in srgb,var(--st-good) var(--dk),#087008);border-color:rgba(12,163,12,.25)}

/* ── filtros ── */
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.f-input,.f-select{background:var(--bg3);border:1px solid var(--bd2);border-radius:var(--r);padding:8px 11px;font-size:12px;color:var(--tx);outline:none;transition:border-color .15s}
.f-input:focus,.f-select:focus{border-color:var(--ac)}
.f-input::placeholder{color:var(--tx2)}
.f-select{cursor:pointer;appearance:none;padding-right:28px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b6b67' stroke-width='2.5' stroke-linecap='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center;background-size:12px}
.f-select option{background:color-mix(in srgb,#1a1a1a var(--dk),var(--bg4))}
.f-search{flex:1;min-width:170px}

/* ── botões ── */
.btn{border:none;border-radius:var(--r);padding:9px 17px;font-size:11px;font-weight:700;letter-spacing:.07em;cursor:pointer;transition:all .15s;white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;gap:7px;text-decoration:none}
.btn svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
.btn-primary{background:var(--ac);color:#0a0a08}
.btn-primary:hover{opacity:.85}
.btn-primary:disabled{opacity:.4;cursor:not-allowed}
.btn-ghost{background:none;border:1px solid var(--bd2);color:var(--tx2)}
.btn-ghost:hover{border-color:rgba(var(--ink),.25);color:var(--tx)}
.btn-danger{background:rgba(208,59,59,.12);border:1px solid rgba(208,59,59,.3);color:color-mix(in srgb,#ff7b7b var(--dk),#964949)}
.btn-danger:hover{background:rgba(208,59,59,.2)}
.btn-pill{border-radius:var(--rf)}
.btn-sm{padding:7px 12px;font-size:10.5px}

/* ── empty state ── */
.empty{text-align:center;padding:44px 20px;color:var(--tx2);font-size:13px;line-height:1.6}
.empty .ico{font-size:30px;margin-bottom:12px;opacity:.45}
.empty .btn{margin-top:16px}

/* ══════════════════════════════════════════════════════════════════════
   CARDS DE GERENCIAMENTO — contas, categorias, pessoas, metas,
   dívidas e compras. Nome quebra em até 2 linhas (nunca corta no meio),
   corpo cresce e o rodapé fica sempre colado embaixo.
   ══════════════════════════════════════════════════════════════════════ */
.mng-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;align-items:stretch}
@media(max-width:520px){.mng-grid{grid-template-columns:1fr}}

.mng{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--rl);padding:0;display:flex;flex-direction:column;overflow:hidden;transition:border-color .2s,transform .2s}
.mng:hover{border-color:var(--bd2);transform:translateY(-1px)}

/* cabeçalho: ícone + nome + badge */
.mng-hd{display:flex;align-items:flex-start;gap:12px;padding:16px 16px 12px}
.mng-ico{width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:19px;line-height:1;flex-shrink:0;overflow:hidden;position:relative}
.mng-ico img{width:26px;height:26px;object-fit:contain;border-radius:5px;display:block}
.mng-ico .ini{font-size:15px;font-weight:800;letter-spacing:-.3px}
/* SVG local do banco: já vem com fundo e cor da marca, então o quadro do
   card não pinta nada por baixo — só recorta no mesmo raio. */
.mng-ico.banco{background:none;border:0;border-radius:11px}
.mng-ico.banco svg{width:100%;height:100%;display:block}
.mng-hd-txt{flex:1;min-width:0}
.mng-name{font-size:14.5px;font-weight:700;line-height:1.28;letter-spacing:-.2px;word-break:break-word;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.mng-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.mng-badge{flex-shrink:0;align-self:flex-start}

/* corpo: valor de destaque + medidor + linhas de detalhe */
.mng-bd{padding:0 16px 14px;display:flex;flex-direction:column;gap:11px;flex:1}
.mng-amount{display:flex;align-items:baseline;gap:7px;flex-wrap:wrap}
.mng-amount .big{font-size:20px;font-weight:800;letter-spacing:-.6px;font-variant-numeric:tabular-nums;line-height:1.1}
.mng-amount .small{font-size:12px;color:var(--tx2);font-variant-numeric:tabular-nums}
.mng-amount .big.neg{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.mng-amount .big.pos{color:color-mix(in srgb,var(--st-good) var(--dk),#087008)}
.mng-cap{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--tx2)}
.mng-rows{display:flex;flex-direction:column;gap:6px}
.mng-row{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:12px}
.mng-row .k{color:var(--tx2);flex-shrink:0}
.mng-row .v{color:var(--tx3);font-variant-numeric:tabular-nums;text-align:right;font-weight:600;min-width:0;overflow-wrap:anywhere}
.mng-note{font-size:11.5px;color:var(--tx2);line-height:1.5}
.mng-note b{color:var(--tx3)}
.mng-subs{display:flex;flex-wrap:wrap;gap:5px}
.sub-chip{font-size:10px;background:rgba(var(--ink),.05);border:1px solid var(--bd);border-radius:var(--rf);padding:2px 8px;color:var(--tx3);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* rodapé de ações — sempre no fim do card */
/* quebra em vez de estourar: o card de dívida tem 4 ações e no celular
   elas não cabem numa linha só. `flex-basis` mínimo evita botão espremido. */
.mng-ft{margin-top:auto;display:flex;flex-wrap:wrap;gap:6px;padding:11px 16px;border-top:1px solid var(--bd);background:rgba(var(--ink),.015)}
.mng-ft .btn{flex:1 1 auto;min-width:72px;padding:8px 10px;font-size:10.5px}
.mng-ft .btn.grow2{flex:1.4}

/* card "adicionar" tracejado */
.mng.add{border-style:dashed;align-items:center;justify-content:center;text-align:center;padding:24px 18px;gap:12px;min-height:170px}
.mng.add .mng-note{max-width:230px}

/* medidor genérico dentro do card */
.mng-track{height:7px;background:rgba(var(--ink),.06);border-radius:var(--rf);overflow:hidden}
.mng-fill{height:100%;border-radius:var(--rf);transition:width .5s cubic-bezier(.4,0,.2,1)}

/* ── dívidas ── */
.debt-strategy{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.debt-strategy .seg{flex:0 0 auto;width:auto}
.debt-rank{position:absolute;top:-6px;left:-6px;width:20px;height:20px;border-radius:50%;background:var(--ac);color:#0a0a08;font-size:10px;font-weight:800;display:flex;align-items:center;justify-content:center;border:2px solid var(--bg2)}
.mng-ico-wrap{position:relative;flex-shrink:0}

/* ── compras: veredito ── */
.buy-verdict{display:flex;align-items:flex-start;gap:9px;font-size:12px;line-height:1.5;padding:10px 12px;border-radius:var(--r);border:1px solid transparent}
.buy-verdict svg{width:14px;height:14px;flex-shrink:0;margin-top:1px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.buy-verdict.good{background:rgba(12,163,12,.07);border-color:rgba(12,163,12,.22);color:color-mix(in srgb,#7fd97f var(--dk),#3E6A3E)}
.buy-verdict.warn{background:rgba(250,178,25,.07);border-color:rgba(250,178,25,.22);color:color-mix(in srgb,#f0c463 var(--dk),#715C2F)}
.buy-verdict.crit{background:rgba(208,59,59,.08);border-color:rgba(208,59,59,.26);color:color-mix(in srgb,#ff8f8f var(--dk),#8C4F4F)}
.buy-verdict b{color:var(--fg)}

/* ══════════════════════════════════════════════════════════════════════
   MODAL
   ══════════════════════════════════════════════════════════════════════ */
.modal-ov{position:fixed;inset:0;background:rgba(0,0,0,calc(.72*var(--sa)));backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);z-index:900;display:none;align-items:center;justify-content:center;padding:20px;overflow-y:auto}
.modal-ov.on{display:flex}
.modal{width:100%;max-width:560px;background:var(--bg2);border:1px solid var(--bd2);border-radius:18px;padding:26px;box-shadow:0 32px 90px rgba(0,0,0,calc(.75*var(--sa)));animation:m-in .22s cubic-bezier(.4,0,.2,1);margin:auto}
@keyframes m-in{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
.modal-hdr{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:20px}
.modal-title{font-size:17px;font-weight:700;letter-spacing:-.3px}
.modal-close{background:none;border:none;color:var(--tx2);font-size:24px;cursor:pointer;line-height:1;padding:0 4px;transition:color .15s;flex-shrink:0}
.modal-close:hover{color:var(--tx)}

.fgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.fgrid .full{grid-column:1/-1}
@media(max-width:520px){.fgrid{grid-template-columns:1fr}}
.fg{display:flex;flex-direction:column;gap:6px;min-width:0}
.fg label{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--tx2)}
.fg input,.fg select,.fg textarea{background:var(--bg3);border:1px solid var(--bd2);border-radius:var(--r);padding:10px 12px;font-size:13px;color:var(--tx);outline:none;transition:border-color .15s;width:100%}
.fg input:focus,.fg select:focus,.fg textarea:focus{border-color:var(--ac)}
.fg input::placeholder{color:var(--tx2)}
.fg select{cursor:pointer;appearance:none;padding-right:30px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b6b67' stroke-width='2.5' stroke-linecap='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;background-size:13px}
.fg select option{background:color-mix(in srgb,#1a1a1a var(--dk),var(--bg4))}
.fg select optgroup{background:color-mix(in srgb,#111 var(--dk),var(--bg2));color:var(--tx2);font-style:normal}
.fg textarea{resize:vertical;min-height:64px;line-height:1.5}
.fg .hint{font-size:11px;color:var(--tx2);line-height:1.45}

.seg{display:flex;background:rgba(var(--ink),.05);border-radius:var(--rf);padding:3px;gap:3px}
.seg button{flex:1;background:none;border:none;color:var(--tx2);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:8px 12px;border-radius:var(--rf);cursor:pointer;transition:all .18s;white-space:nowrap}
.seg button.active{background:var(--ac);color:#0a0a08}
.seg button.active.out{background:var(--c-out);color:#0a0a08}

.swatches{display:flex;gap:7px;flex-wrap:wrap}
.sw{width:26px;height:26px;border-radius:8px;border:2px solid transparent;cursor:pointer;transition:transform .15s;padding:0}
.sw:hover{transform:scale(1.12)}
.sw.on{border-color:rgb(var(--ink))}

/* ── picker de ícone/emoji ── */
.emoji-wrap{background:var(--bg3);border:1px solid var(--bd2);border-radius:var(--r);padding:9px;max-height:132px;overflow-y:auto}
.emoji-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(36px,1fr));gap:5px}
.emoji-btn{background:none;border:1.5px solid transparent;border-radius:8px;font-size:18px;line-height:1;padding:7px 0;cursor:pointer;transition:all .14s}
.emoji-btn:hover{background:rgba(var(--ink),.06)}
.emoji-btn.on{border-color:var(--ac);background:var(--acd)}

/* ── prévia da conta com logo do banco ── */
.bank-preview{display:flex;align-items:center;gap:12px;background:var(--bg3);border:1px solid var(--bd2);border-radius:var(--r);padding:12px 14px}
.bank-preview .mng-ico{width:42px;height:42px}
.bank-preview-txt{min-width:0}
.bank-preview-n{font-size:13.5px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bank-preview-s{font-size:11px;color:var(--tx2);margin-top:2px}

.chk{display:flex;align-items:flex-start;gap:9px;font-size:13px;color:var(--tx3);cursor:pointer;user-select:none;line-height:1.45}
.chk input{width:16px;height:16px;accent-color:var(--ac);cursor:pointer;flex-shrink:0;margin-top:1px}

.modal-foot{display:flex;gap:10px;margin-top:22px}
.modal-foot .btn{flex:1;justify-content:center;padding:12px}
.modal-err{background:rgba(208,59,59,.1);border:1px solid rgba(208,59,59,.3);border-radius:var(--r);padding:9px 13px;font-size:12px;color:color-mix(in srgb,#ff7b7b var(--dk),#964949);margin-bottom:14px;display:none;line-height:1.5}
.modal-err.on{display:block}

/* insight pós-lançamento de receita */
.insight{display:flex;flex-direction:column;gap:14px}
.insight-hero{text-align:center;padding:6px 0 2px}
.insight-hero .k{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--tx2);margin-bottom:8px}
.insight-hero .v{font-size:38px;font-weight:800;letter-spacing:-1.4px;color:var(--ac-tx);font-variant-numeric:tabular-nums;line-height:1}
.insight-hero .s{font-size:12.5px;color:var(--tx3);margin-top:9px;line-height:1.5}
.insight-rows{display:flex;flex-direction:column;gap:1px;background:var(--bd);border:1px solid var(--bd);border-radius:var(--r);overflow:hidden}
.insight-row{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--bg3);padding:11px 14px;font-size:12.5px}
.insight-row .k{color:var(--tx2);display:flex;align-items:center;gap:8px;min-width:0}
.insight-row .k .sw{width:8px;height:8px;border-radius:2px;flex-shrink:0}
.insight-row .v{font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.insight-row.total{background:var(--bg4)}

/* ── toast ── */
.toast{position:fixed;bottom:86px;left:50%;transform:translateX(-50%);background:var(--bg4);border:1px solid var(--bd2);border-radius:12px;padding:11px 20px;font-size:13px;font-weight:500;z-index:9500;opacity:0;transition:opacity .3s;pointer-events:none;max-width:360px;width:max-content;text-align:center;line-height:1.5}
.toast.on{opacity:1}
.toast.ok{border-color:rgba(12,163,12,.35);color:color-mix(in srgb,var(--st-good) var(--dk),#087008)}
.toast.err{border-color:rgba(208,59,59,.35);color:color-mix(in srgb,#ff7b7b var(--dk),#964949)}

/* ── suporte flutuante (padrão do site) ── */
.sup-btn{position:fixed;bottom:28px;right:28px;z-index:500;width:50px;height:50px;background:var(--ac);border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 20px rgba(7,196,44,calc(.4*var(--ga)));transition:transform .2s}
.sup-btn:hover{transform:scale(1.08)}
.sup-btn svg{width:20px;height:20px;fill:none;stroke:#000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.sup-overlay{position:fixed;inset:0;background:rgba(0,0,0,calc(.6*var(--sa)));z-index:9000;display:none;align-items:flex-end;justify-content:flex-end;padding:80px 28px 28px}
.sup-overlay.on{display:flex}
.sup-modal{width:100%;max-width:400px;background:color-mix(in srgb,#111 var(--dk),var(--bg2));border:1px solid rgba(var(--ink),.1);border-radius:20px;padding:28px;box-shadow:0 32px 80px rgba(0,0,0,calc(.7*var(--sa)));animation:m-in .25s cubic-bezier(.4,0,.2,1)}
.sup-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}
.sup-title{font-size:15px;font-weight:700;color:var(--fg)}
.sup-close{background:none;border:none;color:var(--fg-40);font-size:22px;cursor:pointer;line-height:1}
.sup-group{margin-bottom:12px}
.sup-label{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-40);font-weight:600;display:block;margin-bottom:6px}
.sup-input,.sup-select,.sup-textarea{width:100%;background:rgba(var(--ink),.06);border:1px solid rgba(var(--ink),.1);border-radius:10px;padding:11px 13px;color:var(--fg);font-size:13px;font-family:inherit;outline:none;transition:border-color .2s}
.sup-input:focus,.sup-select:focus,.sup-textarea:focus{border-color:rgba(7,196,44,.4)}
.sup-select{appearance:none;cursor:pointer}.sup-select option{background:color-mix(in srgb,#1a1a1a var(--dk),var(--bg4))}
.sup-textarea{resize:vertical;min-height:80px}
.sup-submit{width:100%;background:var(--ac);border:none;border-radius:var(--rf);padding:13px;color:#000;font-size:12px;font-weight:700;letter-spacing:.1em;cursor:pointer;font-family:inherit;margin-top:4px;transition:opacity .2s}
.sup-submit:hover{opacity:.85}
.sup-submit:disabled{opacity:.4;cursor:not-allowed}
.sup-msg{text-align:center;padding:14px 0;font-size:13px;line-height:1.6;color:var(--fg)}
.sup-msg a{color:var(--ac-tx);text-decoration:none;font-weight:600}

/* ══════════════════════════════════════════════════════════════════════
   AGENDA — pagamentos futuros e simulação de impacto
   ══════════════════════════════════════════════════════════════════════ */
.ag-mes{margin-bottom:18px}
.ag-mes-hd{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:0 2px 8px;border-bottom:1px solid var(--bd);margin-bottom:8px}
.ag-mes-n{font-size:13px;font-weight:700;letter-spacing:-.2px;text-transform:capitalize}
.ag-mes-n span{color:var(--tx2);font-weight:600}
.ag-mes-v{font-size:13px;font-weight:700;color:color-mix(in srgb,var(--c-out) var(--dk),#9A4545);font-variant-numeric:tabular-nums;text-align:right}
.ag-mes-s{display:block;font-size:11px;font-weight:600;color:var(--tx2);margin-top:2px}
.ag-mes-s b{color:color-mix(in srgb,var(--st-good) var(--dk),#087008)}
.ag-mes-s b.neg{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}

.ag-item{display:grid;grid-template-columns:88px 1fr auto auto;align-items:center;gap:14px;
  background:var(--bg2);border:1px solid var(--bd);border-left:3px solid var(--bd2);
  border-radius:var(--r);padding:12px 14px;margin-bottom:8px;transition:border-color .15s}
.ag-item:hover{border-color:var(--bd2)}
.ag-item.good{border-left-color:var(--st-good)}
.ag-item.warn{border-left-color:var(--st-warn)}
.ag-item.crit{border-left-color:var(--st-crit)}
.ag-dia{display:flex;flex-direction:column;gap:4px;align-items:flex-start}
.ag-dia b{font-size:13px;font-variant-numeric:tabular-nums}
.ag-desc{font-size:13.5px;font-weight:600;line-height:1.35;overflow-wrap:anywhere}
.ag-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:5px}
.ag-val{font-size:14px;font-weight:700;color:color-mix(in srgb,var(--c-out) var(--dk),#9A4545);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.ag-imp{display:block;font-size:10.5px;font-weight:700;letter-spacing:.03em;margin-top:3px}
.ag-imp.good{color:color-mix(in srgb,var(--st-good) var(--dk),#087008)}
.ag-imp.warn{color:color-mix(in srgb,var(--st-warn) var(--dk),#7D590C)}
.ag-imp.crit{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.ag-acoes{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.ag-add{display:flex;align-items:center;gap:16px;flex-wrap:wrap;background:var(--bg2);border:1px dashed var(--bd2);
  border-radius:var(--rl);padding:16px 18px;margin-top:6px}
.ag-add .mng-note{flex:1;min-width:200px}

/* bloco de simulação (modal e detalhe) */
.ag-sim{display:flex;flex-direction:column;gap:12px}
.ag-sim.vazio{background:var(--bg3);border:1px dashed var(--bd2);border-radius:var(--r);
  padding:14px;font-size:12px;color:var(--tx2);text-align:center}
.ag-sim-rows{background:var(--bg3);border:1px solid var(--bd);border-radius:var(--r);padding:10px 12px;
  display:flex;flex-direction:column;gap:6px}
.ag-sim-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:12px}
.ag-sim-row .k{color:var(--tx2)}
.ag-sim-row .v{font-weight:600;color:var(--tx3);font-variant-numeric:tabular-nums;white-space:nowrap}
.ag-sim-row.sub .v{color:color-mix(in srgb,var(--c-out) var(--dk),#9A4545)}
.ag-sim-row.tot{border-top:1px solid var(--bd);padding-top:7px;margin-top:1px}
.ag-sim-row.tot .k{color:var(--tx);font-weight:600}
.ag-sim-row.tot .v{color:color-mix(in srgb,var(--st-good) var(--dk),#087008);font-size:14px;font-weight:700}
.ag-sim-row.tot.neg .v{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.ag-sim-dia{font-size:12px;color:var(--tx2);line-height:1.5}
.ag-sim-dia b{color:var(--tx3)}
.ag-sim-nota{font-size:11px;color:var(--tx2);line-height:1.5;font-style:italic}
.ag-metas{background:var(--bg3);border:1px solid var(--bd);border-radius:var(--r);padding:11px 12px}
.ag-metas-t{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--tx2);margin-bottom:8px}
.ag-meta-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:12px;padding:3px 0}
.ag-meta-row .k{color:var(--tx3);font-weight:600}
.ag-meta-row .v{color:var(--tx2);text-align:right}
.ag-meta-row .v.warn{color:color-mix(in srgb,var(--st-warn) var(--dk),#7D590C)}
.ag-meta-row .v b{color:var(--tx)}
.ag-metas-n{font-size:11px;color:var(--tx2);line-height:1.5;margin-top:8px;padding-top:8px;border-top:1px solid var(--bd)}
.ag-modal-top{font-size:13px;color:var(--tx3);font-weight:600;margin-bottom:14px}

@media(max-width:680px){
  .ag-item{grid-template-columns:1fr auto;gap:8px 12px}
  .ag-dia{grid-column:1/-1;flex-direction:row;align-items:center;gap:8px}
  .ag-acoes{grid-column:1/-1;justify-content:flex-start}
  .ag-val{text-align:right}
}

/* ── aviso de limite do plano ── */
.upsell{background:linear-gradient(135deg,rgba(7,196,44,.08),rgba(245,196,0,.05));border:1px solid rgba(7,196,44,.22);border-radius:var(--rl);padding:18px 20px;display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:14px}
.upsell-t{font-size:14px;font-weight:700;margin-bottom:3px}
.upsell-d{font-size:12.5px;color:var(--tx2);line-height:1.5}
.upsell .btn{margin-left:auto;flex-shrink:0}

/* ══════════════════════════════════════════════════════════════════════
   INVESTIMENTOS — carteira, CDI e patrimônio
   Reaproveita kpi/card/tbl/mng/chip. O que entra aqui é só o que não
   existia: a barra de estado do mercado, o comparativo com o CDI e o
   bloco de patrimônio do painel.
   ══════════════════════════════════════════════════════════════════════ */

/* barra de estado: quando atualizou, dólar, CDI e o botão de atualizar */
.mkt-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--bg2);border:1px solid var(--bd);border-radius:var(--rl);padding:10px 14px;margin-bottom:12px;font-size:11.5px;color:var(--tx2)}
.mkt-dot{width:7px;height:7px;border-radius:50%;background:var(--tx2);flex-shrink:0}
.mkt-dot.on{background:var(--st-good);box-shadow:0 0 0 3px rgba(12,163,12,calc(.15*var(--ga)))}
.mkt-bar.carregando .mkt-dot{background:var(--st-warn);animation:mktPulse 1s ease-in-out infinite}
@keyframes mktPulse{50%{opacity:.3}}
.mkt-quando{font-weight:600}
.mkt-fx{font-variant-numeric:tabular-nums;padding-left:12px;border-left:1px solid var(--bd)}
.mkt-fx b{font-weight:700}
.mkt-btn{margin-left:auto}

/* carteira x CDI */
.seg-sm{padding:2px;gap:2px}
.seg-sm button{padding:6px 10px;font-size:10px}
.cdi-cmp{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin-top:16px}
.cdi-cmp>div{display:flex;flex-direction:column;gap:3px}
.cdi-cmp .k{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--tx2)}
.cdi-cmp .v{font-size:24px;font-weight:800;letter-spacing:-.8px;font-variant-numeric:tabular-nums}
.cdi-cmp .s{font-size:11.5px;color:var(--tx2)}
.cdi-note{font-size:11.5px;color:var(--tx2);line-height:1.6;margin-top:16px;padding-top:13px;border-top:1px solid var(--bd)}
.cdi-note b{color:var(--tx)}
.cdi-vazio{font-size:12.5px;color:var(--tx3);line-height:1.7;margin-top:14px}
.cdi-vazio b{color:var(--tx)}

/* ── gráficos do topo: pizza pequena + linhas, lado a lado ── */
.inv-graficos{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.55fr);gap:12px;margin-bottom:12px}
.inv-graficos>.card{margin-bottom:0;padding:1.1rem 1.2rem;min-width:0;display:flex;flex-direction:column}
.inv-graficos .chart-head{margin-bottom:2px}
.inv-graficos .chart-sub{font-size:11px;margin-bottom:8px}
.chart-delta{font-size:12px;font-weight:800;font-variant-numeric:tabular-nums;margin-left:auto}

/* pizza compacta: rosca à esquerda, legenda à direita */
.pizza-wrap{display:flex;align-items:center;gap:14px;flex:1;min-width:0}
.pizza-svg{width:112px;height:112px;flex-shrink:0}
.pizza-leg{display:flex;flex-direction:column;gap:6px;min-width:0;flex:1}
.pizza-leg-i{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--tx3);min-width:0}
.pizza-leg-i .sw{width:9px;height:9px;border-radius:3px;flex-shrink:0}
.pizza-leg-i .n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.pizza-leg-i .v{margin-left:auto;font-weight:700;color:var(--tx);font-variant-numeric:tabular-nums;flex-shrink:0}

.linha-svg{width:100%;height:auto;max-height:190px;display:block}
.inv-graficos .legend{margin-top:8px;gap:10px}
.inv-graficos .legend-item{font-size:11px}

@media(max-width:860px){
  .inv-graficos{grid-template-columns:1fr}
  .pizza-svg{width:96px;height:96px}
}

/* rentabilidade: lucro nominal x retorno efetivo x TWR */
.rent-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin-top:16px}
.rent-grid>div{display:flex;flex-direction:column;gap:3px}
.rent-grid .k{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--tx2)}
.rent-grid .v{font-size:21px;font-weight:800;letter-spacing:-.6px;font-variant-numeric:tabular-nums}
.rent-grid .s{font-size:11px;color:var(--tx2);line-height:1.45}

/* linhas da tabela de renda variável */
.inv-t{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.inv-t b{font-size:13px;letter-spacing:-.2px}
.inv-s{font-size:11px;color:var(--tx2);margin-top:2px;font-weight:500}
.inv-off{color:color-mix(in srgb,var(--st-warn) var(--dk),#7D590C);font-size:11px;font-weight:600;cursor:help;border-bottom:1px dotted rgba(250,178,25,.5)}

/* atalhos de percentual do CDI no formulário */
.chips-rapidos{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}
.chip-rap{background:rgba(var(--ink),.05);border:1px solid var(--bd2);border-radius:var(--rf);color:var(--tx2);font-size:10.5px;font-weight:700;padding:4px 10px;cursor:pointer;transition:all .15s}
.chip-rap:hover{border-color:var(--ac);color:var(--ac-tx)}

/* patrimônio no painel */
.patr-hero{display:flex;align-items:flex-start;gap:24px;flex-wrap:wrap;justify-content:space-between}
.patr-v{font-size:clamp(26px,4vw,34px);font-weight:800;letter-spacing:-1.2px;font-variant-numeric:tabular-nums;margin:4px 0 3px}
.patr-s{font-size:12px;color:var(--tx2)}
.patr-nums{display:flex;gap:22px;flex-wrap:wrap}
.patr-nums>div{display:flex;flex-direction:column;gap:2px;min-width:110px}
.patr-nums .k{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--tx2)}
.patr-nums .v{font-size:17px;font-weight:800;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
.patr-nums .s{font-size:11px;color:var(--tx2)}
.patr-bar{display:flex;height:8px;border-radius:var(--rf);overflow:hidden;gap:2px;margin-top:20px;background:rgba(var(--ink),.04)}

/* ── cartão de crédito ── */
.cartao{padding:0;overflow:hidden}
.cartao .mng-hd{padding:16px 20px}
.cartao-topo{display:flex;gap:24px;flex-wrap:wrap;justify-content:space-between;padding:4px 20px 18px}
.cartao-uso{padding:0 20px 16px}
.cartao-uso-barra{height:8px;border-radius:var(--rf);background:rgba(var(--ink),.06);overflow:hidden}
.cartao-uso-fill{height:100%;border-radius:var(--rf);transition:width .3s}
.cartao-uso-txt{font-size:11.5px;color:var(--tx2);margin-top:7px}
.cartao-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:24px;padding:0 20px 8px;border-top:1px solid var(--bd);padding-top:18px}
.cartao-hist{display:flex;align-items:flex-end;gap:8px;height:96px}
.cartao-hist-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:6px}
.cartao-hist-barra{width:100%;border-radius:4px 4px 0 0;min-height:3px;opacity:.85}
.cartao-hist-col span{font-size:10px;color:var(--tx2)}
.cartao .mng-rows,.cartao .sec-label,.cartao .sts-alert{margin-left:20px;margin-right:20px}
.cartao .mng-ft{padding:12px 20px}

@media(max-width:640px){
  .cartao-topo{gap:14px;padding:4px 16px 14px}
  .cartao-grid{padding:16px 16px 8px;gap:18px}
  .cartao .mng-rows,.cartao .sec-label,.cartao .sts-alert{margin-left:16px;margin-right:16px}
}

/* modo privacidade (tecla O): kpi-v, tbl .num, mng-amount e mng-row .v já
   entram pela regra do nm.css; aqui ficam só os elementos novos. A cotação do
   dólar e o CDI não borram — são números públicos, não o dinheiro do usuário. */
body.nm-priv .patr-v,
body.nm-priv .patr-nums .v,
body.nm-priv .cdi-cmp .s,
body.nm-priv #inv-rf .bill-sum .v,
body.nm-priv .rent-grid .v,
body.nm-priv #inv-cripto .bill-sum .v,
body.nm-priv .cartao-topo .patr-v,
body.nm-priv .cartao-topo .patr-nums .v,
body.nm-priv .cartao-uso-txt,
body.nm-priv #inv-dist .hbar-v{filter:blur(7px);transition:filter .18s;user-select:none}
body.nm-priv .patr-v:hover{filter:none}

/* O herói e os KPIs já estavam cobertos pelo nm.css; o que vazava era o
   TEXTO DE APOIO, que cita os mesmos valores por extenso: "R$ 1.200 ainda
   não caiu" no rodapé do KPI, "faltam R$ 1.800 em 4 contas" no resumo, e
   cada alerta do painel, que existe justamente para dizer um número.
   Só o <b> borra — a frase precisa continuar legível, senão o modo
   privacidade vira modo inútil. */
body.nm-priv .bill-val,
body.nm-priv .save-v,
body.nm-priv .hab-v,
body.nm-priv .kpi-s,
body.nm-priv .save-d b,
body.nm-priv .sts-sub b,
body.nm-priv .sts-alt b,
body.nm-priv .sts-alert b,
body.nm-priv .lim-note b,
body.nm-priv .buy-verdict b,
body.nm-priv .bill-sum .v{filter:blur(6px);transition:filter .18s;user-select:none}

@media(max-width:640px){
  .mkt-btn{margin-left:0}
  .mkt-fx{padding-left:0;border-left:none}
  .cdi-cmp .v{font-size:20px}
  .patr-nums{gap:14px 20px}
}

/* ── responsivo ── */
@media(max-width:640px){
  .app-wrap{padding:1.2rem 1rem 6rem}
  .land{padding:3rem 1rem 4rem}
  .kpi-v{font-size:20px}
  .modal{padding:20px}
  .sts{padding:20px 18px}
  .app-top-right{width:100%;margin-left:0}
  .app-top-right .btn{flex:1}
}
@media print{.sup-btn,.tabs,.app-top,nav,.user-bar{display:none!important}}

/* ══════════════════════════════════════════════════════════════════════
   OPEN FINANCE (nm-pluggy.js)
   Trilha de etapas do card de conexão. Conectar, revisar e importar são
   três coisas diferentes, e sem mostrar isso "conectado" parece significar
   "já importado" — o usuário fica esperando dado que não vem.
   ══════════════════════════════════════════════════════════════════════ */
.plg-steps{display:flex;gap:6px;margin:2px 0 14px;flex-wrap:wrap}
.plg-step{display:flex;align-items:center;gap:6px;flex:1 1 0;min-width:0;
  font-size:11.5px;line-height:1.3;color:var(--tx3)}
.plg-step .n{flex:0 0 auto;width:18px;height:18px;border-radius:50%;
  display:grid;place-items:center;font-size:10.5px;font-weight:700;
  border:1px solid var(--bd);color:var(--tx3);background:var(--bg3)}
.plg-step .t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.plg-step.ok{color:var(--tx2)}
.plg-step.ok .n{background:#0ca30c22;border-color:#0ca30c66;color:color-mix(in srgb,#0ca30c var(--dk),#087008)}
.plg-step.agora{color:var(--tx)}
.plg-step.agora .n{background:#fab21922;border-color:#fab219aa;color:color-mix(in srgb,#fab219 var(--dk),#7D590C);
  box-shadow:0 0 0 3px #fab2191a}
.plg-step.off{opacity:.55}

/* logo da instituição vinda do Pluggy */
.mng-ico.banco img{width:100%;height:100%;object-fit:contain;border-radius:6px}

@media (max-width:520px){
  .plg-step .t{display:none}
  .plg-step{flex:0 0 auto}
}

/* ══════════════════════════════════════════════════════════════════════
   TERMINAL DE INVESTIMENTOS (nm-terminal.js)
   Densidade acima de decoração: tabela em vez de card, número monoespaçado
   para alinhar coluna, e idade do dado sempre visível.
   ══════════════════════════════════════════════════════════════════════ */

/* ── sub-navegação ── */
.term-nav{display:flex;gap:4px;overflow-x:auto;margin:0 0 16px;
  padding-bottom:6px;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.term-nav::-webkit-scrollbar{height:3px}
.term-nav::-webkit-scrollbar-thumb{background:var(--bd);border-radius:3px}
.term-nav-b{flex:0 0 auto;display:flex;align-items:center;gap:6px;
  padding:7px 13px;border-radius:8px;border:1px solid transparent;
  background:transparent;color:var(--tx3);cursor:pointer;
  font:600 12.5px/1 inherit;letter-spacing:.01em;white-space:nowrap;
  transition:background .15s,color .15s,border-color .15s}
.term-nav-b:hover{color:var(--tx2);background:var(--bg3)}
.term-nav-b.active{color:var(--tx);background:var(--bg3);border-color:var(--bd)}
.term-badge{display:inline-grid;place-items:center;min-width:16px;height:16px;
  padding:0 4px;border-radius:8px;background:#d03b3b;color:#fff;
  font:700 10px/1 inherit}

/* ── cabeçalho de bloco ── */
.term-head{display:flex;align-items:flex-start;justify-content:space-between;
  gap:12px;margin:0 0 10px;flex-wrap:wrap}
.term-title{font:700 14px/1.2 inherit;color:var(--tx)}
.term-sub{font-size:11.5px;color:var(--tx3);margin-top:3px}
.term-ferramentas{display:flex;gap:8px;align-items:center}

/* ── chips de filtro ── */
.term-chips{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px}
.term-chip{padding:5px 11px;border-radius:20px;border:1px solid var(--bd);
  background:transparent;color:var(--tx3);cursor:pointer;
  font:600 11.5px/1 inherit;transition:all .15s}
.term-chip:hover{color:var(--tx2);border-color:var(--tx3)}
.term-chip.active{background:var(--tx);color:var(--bg);border-color:var(--tx)}

/* ── tabelas densas ── */
.term-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.term-tab{width:100%;border-collapse:collapse;font-size:12.5px}
.term-tab th{padding:9px 12px;text-align:left;font:600 10.5px/1 inherit;
  text-transform:uppercase;letter-spacing:.06em;color:var(--tx3);
  border-bottom:1px solid var(--bd);white-space:nowrap}
.term-tab td{padding:9px 12px;border-bottom:1px solid var(--bd);color:var(--tx2)}
.term-tab tbody tr:last-child td{border-bottom:0}
.term-tab tbody tr:hover td{background:var(--bg3)}
.term-tab .num{text-align:right;font-variant-numeric:tabular-nums;
  font-feature-settings:"tnum";white-space:nowrap}
.term-tab .t-k{font-weight:600;color:var(--tx);white-space:nowrap}
.term-tab .t-v{color:var(--tx);font-weight:600}
.term-tab .t-forte{color:var(--tx);font-weight:600}
.term-tab .t-sub{color:var(--tx3);font-size:11px}
.term-tab .t-nome{font-weight:600;color:var(--tx)}
.term-tab .t-idade{font-size:11px;color:var(--tx3);text-align:right;white-space:nowrap}
.term-tab .t-idade.velho{opacity:.65}
.term-pos th:first-child,.term-pos td:first-child{position:sticky;left:0;
  background:var(--bg2);z-index:1}
.term-pos tbody tr:hover td:first-child{background:var(--bg3)}

/* barra de comparação da visão geral */
.term-cmp tr.destaque td{background:#0ca30c0d}
.term-cmp .t-barra{width:38%;padding-right:14px}
.term-cmp .t-barra span{display:block;height:5px;border-radius:3px;min-width:2px}

/* ── aviso de indisponibilidade ── */
.term-aviso{margin-top:10px;padding:10px 13px;border-radius:8px;
  background:#fab2190f;border:1px solid #fab21933;
  font-size:12.5px;line-height:1.6;color:var(--tx2)}

/* ── notícias ── */
.term-news-lista{display:flex;flex-direction:column;gap:8px}
.term-news{padding:12px 14px;border-radius:10px;background:var(--bg2);
  border:1px solid var(--bd);border-left-width:3px}
.term-news.crit{border-left-color:#d03b3b}
.term-news.alta{border-left-color:#e08b2f}
.term-news.media{border-left-color:#fab219}
.term-news.baixa{border-left-color:var(--bd)}
.term-news-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:7px}
.term-imp{font:700 10px/1 inherit;letter-spacing:.06em;padding:3px 7px;
  border-radius:5px;background:var(--bg3);color:var(--tx3)}
.term-imp.crit{color:color-mix(in srgb,#d03b3b var(--dk),#AF3232)}
.term-imp.alta{color:color-mix(in srgb,#e08b2f var(--dk),#86531C)}
.term-imp.media{color:color-mix(in srgb,#fab219 var(--dk),#7D590C)}
.term-news-hora{margin-left:auto;font-size:11px;color:var(--tx3);white-space:nowrap}
.term-news-tit{font:600 13.5px/1.45 inherit;color:var(--tx);margin:0 0 5px}
.term-news-tit a{color:inherit;text-decoration:none}
.term-news-tit a:hover{text-decoration:underline}
.term-news-res{font-size:12.5px;line-height:1.6;color:var(--tx2);margin:0 0 7px}
.term-news-pe{display:flex;gap:12px;flex-wrap:wrap;font-size:11px;color:var(--tx3)}

@media (max-width:640px){
  .term-tab th,.term-tab td{padding:8px 9px;font-size:12px}
  .term-cmp .t-barra{display:none}
  .term-news-pe{gap:8px}
}

/* ── notas da saúde da carteira ── */
.term-notas{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px}
.term-nota-top{display:flex;justify-content:space-between;align-items:baseline;
  font-size:12px;color:var(--tx3);margin-bottom:6px}
.term-nota-top b{font-size:13.5px}
.term-nota-bar{height:5px;border-radius:3px;background:var(--bg3);overflow:hidden}
.term-nota-bar span{display:block;height:100%;border-radius:3px;transition:width .3s}
.term-notas-pe{margin-top:16px;padding-top:12px;border-top:1px solid var(--bd);
  font-size:12.5px;color:var(--tx3)}

/* ── observações da análise ── */
.term-obs{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.term-obs-i{padding:10px 13px;border-radius:8px;font-size:12.5px;line-height:1.6;
  color:var(--tx2);background:var(--bg2);border-left:3px solid var(--bd)}
.term-obs-i.alto{border-left-color:#d03b3b;background:#d03b3b0d}
.term-obs-i.medio{border-left-color:#fab219;background:#fab2190d}

/* ── NoMoney Score ── */
.term-criterios{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}
.term-criterios div{display:flex;flex-direction:column;gap:2px;padding:8px 10px;
  border-radius:7px;background:var(--bg3);cursor:help}
.term-criterios b{font-size:12.5px;color:var(--tx)}
.term-criterios span{font-size:10.5px;color:var(--tx3)}
.term-score-card .mng-hd{align-items:center}
.term-spark{width:80px;height:22px;flex:0 0 auto;opacity:.85}
.term-score-total{font:800 30px/1 inherit;letter-spacing:-.02em;margin-bottom:10px}
.term-score-total span{font-size:14px;font-weight:600;color:var(--tx3);margin-left:2px}
.term-dims{display:flex;flex-direction:column;gap:7px;margin-top:4px}
.term-dim{display:grid;grid-template-columns:78px 52px 1fr 26px;align-items:center;
  gap:8px;font-size:11.5px;cursor:help}
.term-dim .d{color:var(--tx3)}
.term-dim .v{text-align:right;color:var(--tx2);font-variant-numeric:tabular-nums}
.term-dim .b{height:4px;border-radius:2px;background:var(--bg3);overflow:hidden}
.term-dim .b i{display:block;height:100%;border-radius:2px}
.term-dim .n{text-align:right;color:var(--tx2);font-weight:600;font-variant-numeric:tabular-nums}
.term-tab .t-spark{width:88px;padding-right:12px}
.term-tab .t-spark svg{display:block}

/* ── busca, página do ativo e comparador ── */
.term-busca-lista{margin-top:8px;display:flex;flex-direction:column;gap:2px;
  max-height:290px;overflow-y:auto}
.term-busca-i{display:grid;grid-template-columns:64px 1fr auto auto;gap:10px;
  align-items:center;width:100%;padding:8px 10px;border:0;border-radius:7px;
  background:transparent;color:var(--tx2);cursor:pointer;text-align:left;
  font:inherit;font-size:12.5px}
.term-busca-i:hover{background:var(--bg3)}
.term-busca-i b{color:var(--tx)}
.term-busca-i .n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.term-busca-i .s{font-size:11px;color:var(--tx3);white-space:nowrap}
.term-busca-i .p{font-variant-numeric:tabular-nums;white-space:nowrap}
.term-ativo-topo{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}
.term-ativo-nome{font:700 15px/1.3 inherit;color:var(--tx)}
.term-ativo-preco{font:700 20px/1 inherit;color:var(--tx);white-space:nowrap}
.term-ativo-preco span{font-size:13px;font-weight:600;margin-left:6px}
.term-cmp-tab th{vertical-align:top;position:relative;min-width:96px}
.term-rm{position:absolute;top:4px;right:6px;width:18px;height:18px;padding:0;
  border:0;border-radius:50%;background:var(--bg3);color:var(--tx3);
  cursor:pointer;font:700 13px/1 inherit}
.term-rm:hover{background:#d03b3b22;color:color-mix(in srgb,#d03b3b var(--dk),#AF3232)}

/* ── resumo diário e fatores de movimento ── */
.term-resumo{border-left:3px solid #0ca30c}
.term-resumo-txt{font-size:13.5px;line-height:1.75;color:var(--tx2);margin:0}
.term-resumo-txt b{color:var(--tx)}
.term-fatores{display:flex;flex-direction:column;gap:6px}
.term-fatores div{display:flex;gap:8px;align-items:flex-start;font-size:12.5px;
  line-height:1.55;color:var(--tx2)}
.term-fatores span{flex:0 0 auto}

/* ══════════════════════════════════════════════════════════════════════
   MOBILE — a sub-navegação tem 13 áreas e é o ponto que mais sofre em tela
   pequena. Rolagem horizontal com indicação de que há mais à direita, e
   tabelas que não espremem a coluna do nome.
   ══════════════════════════════════════════════════════════════════════ */
@media (max-width:760px){
  /* sombra na borda direita revela que a barra continua */
  #term-nav{position:relative}
  #term-nav::after{content:'';position:absolute;top:0;right:0;bottom:6px;width:28px;
    pointer-events:none;background:linear-gradient(90deg,transparent,var(--bg))}
  .term-nav{gap:2px}
  .term-nav-b{padding:7px 11px;font-size:12px}

  /* a primeira coluna fixa deixa de ser sticky: em tela estreita ela come
     metade do espaço útil e a tabela vira ilegível */
  .term-pos th:first-child,.term-pos td:first-child{position:static}
  .term-tab{font-size:11.5px}
  .term-tab th,.term-tab td{padding:7px 8px}
  .term-tab .t-sub{font-size:10px}

  /* score e comparador em coluna única */
  .term-criterios{grid-template-columns:repeat(2,1fr)}
  .term-dim{grid-template-columns:66px 46px 1fr 22px;gap:6px}
  .term-score-total{font-size:26px}
  .term-cmp-tab th{min-width:78px}

  /* busca ocupa a largura toda */
  .term-busca-i{grid-template-columns:56px 1fr auto;gap:8px}
  .term-busca-i .s{display:none}

  .term-notas{grid-template-columns:1fr 1fr;gap:12px}
  .term-head{gap:8px}
  .term-title{font-size:13px}
}
@media (max-width:420px){
  .term-notas{grid-template-columns:1fr}
  .term-criterios{grid-template-columns:1fr}
  .term-news-tit{font-size:12.5px}
}

/* ── PLANO DE QUITAÇÃO (nm-dividas.js) ────────────────────────────────
   Reusa .card, .chart-title, .chart-sub, .mng-cap e .seg. O que entra aqui
   é só o que não existia: o simulador de aporte, os cartões de fonte de
   dinheiro, os conselhos e a linha do tempo. */

.amort-sim{margin-bottom:12px}
.amort-sim-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:14px}
.amort-sim-val{font-size:20px;font-weight:700;letter-spacing:-.02em;color:var(--ac-tx);font-variant-numeric:tabular-nums;white-space:nowrap}
.amort-range{-webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:100px;background:rgba(var(--ink),.09);outline:none;margin:2px 0 16px}
.amort-range::-webkit-slider-thumb{-webkit-appearance:none;width:17px;height:17px;border-radius:50%;background:var(--ac);border:2px solid var(--bg2);cursor:pointer}
.amort-range::-moz-range-thumb{width:17px;height:17px;border-radius:50%;background:var(--ac);border:2px solid var(--bg2);cursor:pointer;border-width:2px}
.amort-range:focus-visible{outline:2px solid var(--ac);outline-offset:4px}
.amort-sim-ft{display:flex;gap:22px;flex-wrap:wrap;align-items:flex-end}
.amort-fig{font-size:18px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.2}
.amort-fig.pos{color:var(--ac-tx)}
.amort-sim-nota{font-size:11.5px;color:var(--tx2);line-height:1.5;flex:1;min-width:170px;padding-bottom:2px}

.amort-fontes{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}
.amort-fonte{background:var(--bg2);border:1px solid var(--bd);border-left:3px solid var(--tx2);border-radius:var(--r);padding:13px 15px;transition:border-color .16s,background .16s}
.amort-fonte[role=button]{cursor:pointer}
.amort-fonte[role=button]:hover{background:var(--bg3);border-left-color:var(--ac)}
.amort-fonte[role=button]:focus-visible{outline:2px solid var(--ac);outline-offset:2px}
.amort-fonte.recorrente{border-left-color:var(--ac)}
.amort-fonte.pontual{border-left-color:var(--c-1)}
.amort-fonte.futuro{border-left-color:var(--yl)}
.amort-fonte.bloq{border-left-color:var(--tx2);opacity:.72}
.amort-fonte-hd{display:flex;align-items:center;gap:7px;margin-bottom:6px}
.amort-fonte-ico{font-size:14px;line-height:1}
.amort-fonte-nome{font-size:11.5px;font-weight:600;color:var(--tx3);letter-spacing:.01em}
.amort-fonte-v{font-size:19px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.2;margin-bottom:6px}
.amort-fonte-v span{display:block;font-size:10.5px;font-weight:500;color:var(--tx2);letter-spacing:0}
.amort-fonte-t{font-size:11.5px;color:var(--tx2);line-height:1.5}

.amort-conselho{display:flex;gap:11px;align-items:flex-start;padding:14px 0;border-bottom:1px solid var(--bd)}
.amort-conselho:last-child{border-bottom:none;padding-bottom:2px}
.amort-conselho:first-child{padding-top:2px}
.amort-conselho-ico{font-size:16px;line-height:1.3;flex:none;width:22px;text-align:center}
.amort-conselho-t{font-size:13.5px;font-weight:650;letter-spacing:-.005em;margin-bottom:3px}
.amort-conselho-d{font-size:12.5px;color:var(--tx2);line-height:1.6}
.amort-conselho.crit .amort-conselho-t{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.amort-conselho.warn .amort-conselho-t{color:color-mix(in srgb,var(--st-warn) var(--dk),#7D590C)}
.amort-ganho{display:inline-block;margin-top:7px;font-size:11.5px;font-weight:600;color:var(--ac-tx);background:var(--acd);border-radius:100px;padding:3px 10px;font-variant-numeric:tabular-nums}
.amort-acao{display:block;margin-top:9px;font:inherit;font-size:11.5px;font-weight:600;color:var(--ac-tx);background:none;border:none;border-bottom:1px solid rgba(7,196,44,.35);padding:0 0 1px;cursor:pointer}
.amort-acao:hover{color:color-mix(in srgb,var(--ac2) var(--dk),#056F18);border-bottom-color:var(--ac2)}
.amort-acao:focus-visible{outline:2px solid var(--ac);outline-offset:3px;border-radius:2px}

.tl{display:flex;flex-direction:column;gap:9px;margin-top:14px}
.tl-row{display:grid;grid-template-columns:minmax(90px,150px) 1fr 54px;gap:12px;align-items:center}
.tl-nome{font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tl-track{display:flex;height:20px;border-radius:6px;background:rgba(var(--ink),.05);overflow:hidden}
.tl-bar{height:100%;background:var(--ac);border-radius:6px}
.tl-bar.fraca{background:rgba(7,196,44,.26);border-radius:6px 0 0 6px}
.tl-bar.fraca + .tl-bar{border-radius:0 6px 6px 0}
.tl-data{font-size:11px;color:var(--tx2);text-align:right;font-variant-numeric:tabular-nums}

body.nm-priv .amort-sim-val,
body.nm-priv .amort-fig,
body.nm-priv .amort-fonte-v,
body.nm-priv .amort-ganho{filter:blur(7px);transition:filter .18s;user-select:none}

@media(max-width:560px){
  .amort-sim-ft{gap:16px}
  .amort-fig{font-size:16px}
  .tl-row{grid-template-columns:minmax(70px,110px) 1fr 46px;gap:8px}
  .tl-nome{font-size:11.5px}
}

/* ── MOMENTO DO PAGAMENTO (nm-dividas.js) ─────────────────────────────
   O modal de registro ganhou atalhos e prévia ao vivo; o de confirmação
   mostra o que o dinheiro comprou. Reusa .mng-track/.mng-fill da barra. */

.pd-atalhos{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.pd-atalho{
  font:inherit;font-size:11px;font-weight:600;padding:6px 11px;border-radius:100px;
  border:1px solid var(--bd2);background:var(--bg3);color:var(--tx3);cursor:pointer;
  font-variant-numeric:tabular-nums;transition:border-color .16s,color .16s
}
.pd-atalho:hover{border-color:var(--ac);color:var(--ac-tx)}
.pd-atalho:focus-visible{outline:2px solid var(--ac);outline-offset:2px}

.pd-previa{margin-top:14px}
.pd-previa-in{
  display:flex;flex-direction:column;gap:5px;padding:12px 14px;border-radius:var(--r);
  background:var(--acd);border:1px solid rgba(7,196,44,.22);
  font-size:12.5px;line-height:1.5;color:var(--tx3)
}
.pd-previa-in b{color:var(--tx);font-weight:650}
.pd-previa-in.crit{background:rgba(208,59,59,.1);border-color:rgba(208,59,59,.28);color:var(--tx3)}

.pg-ok{text-align:center;padding:4px 0 2px}
.pg-check{
  width:54px;height:54px;border-radius:50%;margin:0 auto 15px;display:grid;place-items:center;
  background:var(--acd);border:1px solid rgba(7,196,44,.4);font-size:24px;color:var(--ac-tx);
  animation:pg-pop .34s cubic-bezier(.34,1.56,.64,1) both
}
.pg-check.quitou{font-size:26px;background:rgba(245,196,0,.12);border-color:rgba(245,196,0,.42)}
@keyframes pg-pop{from{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}

.pg-tit{font-size:16.5px;font-weight:700;letter-spacing:-.015em;line-height:1.25}
.pg-sub{font-size:12px;color:var(--tx2);margin-top:4px}

.pg-split{display:flex;flex-direction:column;gap:9px;margin:18px 0 14px;text-align:left}
.pg-split div{display:flex;justify-content:space-between;align-items:baseline;gap:14px;font-size:13px}
.pg-split span{color:var(--tx2)}
.pg-split b{font-variant-numeric:tabular-nums;font-weight:650}
.pg-split .am{color:var(--ac-tx)}
.pg-split .ju{color:var(--tx3);font-weight:500}

.pg-barra-rot{
  display:flex;justify-content:space-between;font-size:10.5px;color:var(--tx2);
  margin-top:6px;font-variant-numeric:tabular-nums
}
.pg-barra-rot span:nth-child(2){color:var(--ac-tx);font-weight:600}

.pg-marcos{display:flex;flex-direction:column;gap:6px;margin-top:16px}
.pg-marco{
  display:flex;align-items:center;gap:8px;justify-content:center;font-size:12px;font-weight:600;
  background:rgba(245,196,0,.1);border:1px solid rgba(245,196,0,.26);color:color-mix(in srgb,var(--yl) var(--dk),#735C00);
  border-radius:100px;padding:6px 14px
}
.pg-marco span{font-size:13px}

.pg-liberdade{
  border-top:1px solid var(--bd);margin-top:18px;padding-top:16px;
  font-size:13px;line-height:1.6;color:var(--tx3)
}
.pg-liberdade b{color:var(--tx);font-weight:650}
.pg-data{font-size:12px;color:var(--tx2);display:inline-block;margin-top:3px}

.pg-seq{
  display:inline-flex;align-items:center;gap:7px;margin-top:15px;font-size:11.5px;color:var(--tx2);
  background:var(--bg3);border:1px solid var(--bd);border-radius:100px;padding:6px 13px
}
.pg-seq b{color:var(--tx);font-weight:650}

body.nm-priv .pg-split b,
body.nm-priv .pd-previa-in b{filter:blur(7px);transition:filter .18s;user-select:none}

@media(max-width:560px){
  .pd-atalho{font-size:10.5px;padding:6px 10px}
  .pg-tit{font-size:15px}
}

/* ── TROCA DE DÍVIDA E SIMULADOR DE PARCELAMENTO (nm-dividas.js) ────── */

.amort-ferramenta{
  display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  background:var(--bg2);border:1px solid var(--bd);border-radius:var(--rl);
  padding:16px 18px;margin-top:12px
}
.amort-ferramenta .btn{flex:none}

.sp-linhas{display:flex;flex-direction:column;gap:8px;margin:16px 0 14px}
.sp-linha{display:flex;justify-content:space-between;align-items:baseline;gap:14px;font-size:13px}
.sp-linha span{color:var(--tx2)}
.sp-linha b{font-variant-numeric:tabular-nums;font-weight:650}
.sp-cabe{font-size:12px;color:var(--tx2);line-height:1.55;margin-top:12px}
.sp-cabe b{color:var(--tx);font-weight:650}
.sp-vazio{font-size:12.5px;color:var(--tx2);line-height:1.55;padding:16px 0 4px;text-align:center}

body.nm-priv .sp-linha b{filter:blur(7px);transition:filter .18s;user-select:none}

@media(max-width:560px){
  .amort-ferramenta{align-items:flex-start;flex-direction:column;gap:12px}
  .amort-ferramenta .btn{width:100%}
}

/* ── JURO vs PRINCIPAL (nm-dividas.js) ─────────────────────────────── */

.jp{display:flex;flex-direction:column;gap:10px;margin:16px 0 14px}
.jp-row{display:grid;grid-template-columns:minmax(96px,158px) 1fr 40px;gap:12px;align-items:center}
.jp-nome{font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jp-nome span{display:block;font-size:10.5px;font-weight:500;color:var(--tx2);font-variant-numeric:tabular-nums}
.jp-track{height:18px}
.jp-bar{display:flex;height:100%;border-radius:5px;overflow:hidden;min-width:3px}
.jp-principal{background:var(--st-good);height:100%}
.jp-juro{background:var(--st-crit);height:100%}
.jp-pct{font-size:11.5px;color:var(--tx2);text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.jp-pct.alto{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}

@media(max-width:560px){
  .jp-row{grid-template-columns:minmax(76px,112px) 1fr 34px;gap:8px}
  .jp-nome{font-size:11.5px}
}

/* ── CONSTÂNCIA (nm-dividas.js) ────────────────────────────────────── */

.cst-heat{display:grid;grid-template-columns:repeat(12,1fr);gap:5px;max-width:330px;margin:16px 0 18px}
.cst-heat span{aspect-ratio:1;border-radius:4px;background:rgba(var(--ink),.05)}
.cst-heat span[data-l="1"]{background:rgba(7,196,44,.2)}
.cst-heat span[data-l="2"]{background:rgba(7,196,44,.45)}
.cst-heat span[data-l="3"]{background:rgba(7,196,44,.72)}
.cst-heat span[data-l="4"]{background:var(--ac)}
.cst-nums{display:flex;gap:24px;flex-wrap:wrap}
.cst-fig{font-size:18px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.2}
.cst-fig.pos{color:var(--ac-tx)}
body.nm-priv .cst-fig{filter:blur(7px);transition:filter .18s;user-select:none}

/* ── PLANO IMPRIMÍVEL (nm-dividas.js) ───────────────────────────────
   Existe só no papel. Na tela fica escondido para não duplicar o que os
   cards já mostram; o botão "Imprimir plano" é a única porta de entrada. */

.pl-print{display:none}

@media print{
  /* o app inteiro sai de cena e sobra o plano */
  body.nm-imprimindo .app-wrap > *:not(#conteudo),
  body.nm-imprimindo .panel:not(#p-dividas),
  body.nm-imprimindo #p-dividas > *:not(#dividas-impresso),
  body.nm-imprimindo .tabbar,
  body.nm-imprimindo .fab,
  body.nm-imprimindo .modal-ov,
  body.nm-imprimindo .toast{display:none!important}

  body.nm-imprimindo{background:#fff!important;color:#111!important}
  body.nm-imprimindo .pl-print{display:block}

  .pl-print{
    color:#111;font-size:10.5pt;line-height:1.45;
    font-variant-numeric:tabular-nums
  }
  .pl-hd{
    display:flex;justify-content:space-between;align-items:flex-start;gap:20pt;
    border-bottom:1.5pt solid color-mix(in srgb,#111 var(--dk),rgba(var(--ink),.04));padding-bottom:8pt;margin-bottom:12pt
  }
  .pl-tit{font-size:19pt;font-weight:700;letter-spacing:-.4pt;line-height:1.1}
  .pl-sub{font-size:8.5pt;color:#555;margin-top:2pt}
  .pl-livre{text-align:right;white-space:nowrap}
  .pl-livre b{display:block;font-size:14pt;font-weight:700;letter-spacing:-.3pt}
  .pl-livre span{font-size:8pt;color:#555;text-transform:uppercase;letter-spacing:.6pt}

  .pl-kpis{display:flex;gap:18pt;flex-wrap:wrap;margin-bottom:16pt}
  .pl-kpis > div{min-width:80pt}
  .pl-kpis span{display:block;font-size:7.5pt;color:#555;text-transform:uppercase;letter-spacing:.6pt}
  .pl-kpis b{font-size:12.5pt;font-weight:700}

  .pl-sec{
    font-size:8.5pt;font-weight:700;text-transform:uppercase;letter-spacing:1pt;
    color:#111;border-bottom:.5pt solid #999;padding-bottom:3pt;margin:14pt 0 7pt
  }
  .pl-tbl{width:100%;border-collapse:collapse;font-size:9pt}
  .pl-tbl th{
    text-align:left;font-size:7.5pt;text-transform:uppercase;letter-spacing:.5pt;
    color:#555;border-bottom:.5pt solid #999;padding:3pt 5pt 3pt 0;font-weight:600
  }
  .pl-tbl td{padding:3.5pt 5pt 3.5pt 0;border-bottom:.25pt solid #ddd}
  .pl-tbl .n{text-align:right;padding-right:0;white-space:nowrap}
  .pl-tbl tr{page-break-inside:avoid}

  .pl-lista{margin:0;padding-left:14pt;font-size:9pt}
  .pl-lista li{margin-bottom:6pt;page-break-inside:avoid}
  .pl-pe{
    margin-top:14pt;padding-top:6pt;border-top:.5pt solid #ddd;
    font-size:8pt;color:#555;line-height:1.4
  }
  @page{margin:14mm}
}

.cst-leg{display:flex;align-items:center;gap:5px;margin:-8px 0 16px;font-size:10.5px;color:var(--tx2)}
.cst-leg i{width:11px;height:11px;border-radius:3px;background:rgba(var(--ink),.05);flex:none}
.cst-leg i[data-l="1"]{background:rgba(7,196,44,.2)}
.cst-leg i[data-l="2"]{background:rgba(7,196,44,.45)}
.cst-leg i[data-l="3"]{background:rgba(7,196,44,.72)}
.cst-leg i[data-l="4"]{background:var(--ac)}
.cst-leg span:first-child{margin-right:2px}
.cst-leg span:last-child{margin-left:2px}

/* ── RESET DE CONTA (nm-reset.js) ─────────────────────────────────────
   Lista de escolha dentro do modal. A contagem à direita é o elemento
   mais importante da tela: é o número que separa "acho que tenho pouca
   coisa" de "são 1.284 lançamentos". Por isso ela é tabular, alinhada e
   não some no cinza do texto de apoio. */
.rst-lead{font-size:13px;color:var(--tx3);line-height:1.65;margin-bottom:14px}
.rst-tools{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.rst-link{background:none;border:0;padding:0;color:var(--tx3);font-size:11.5px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:color .15s}
.rst-link:hover{color:var(--ac-tx)}
.rst-link:disabled{opacity:.5;cursor:default}
.rst-tools .rst-sep{flex:1;height:1px;background:var(--bd)}

.rst-lista{display:flex;flex-direction:column;gap:6px}
.rst-i{display:flex;align-items:flex-start;gap:11px;padding:11px 13px;border:1px solid var(--bd);border-radius:var(--r);background:var(--bg3);cursor:pointer;transition:border-color .15s,background .15s}
.rst-i:hover{border-color:var(--bd2)}
.rst-i.on{border-color:rgba(208,59,59,.4);background:rgba(208,59,59,.06)}
.rst-i.rst-off{opacity:.45;cursor:default}
.rst-i input{width:16px;height:16px;accent-color:#d03b3b;cursor:pointer;flex:none;margin-top:2px}
.rst-i.rst-off input{cursor:default}
.rst-ic{color:var(--tx2);flex:none;margin-top:1px;display:flex}
.rst-i.on .rst-ic{color:color-mix(in srgb,#ff8f8f var(--dk),#8C4F4F)}
.rst-b{min-width:0;flex:1}
.rst-t{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:13px;font-weight:600;color:var(--tx)}
.rst-n{font-size:11.5px;font-weight:700;color:var(--tx3);font-variant-numeric:tabular-nums;flex:none}
.rst-n.rst-load{color:var(--tx2)}
.rst-n.rst-zero{color:var(--tx2);font-weight:600;text-transform:uppercase;letter-spacing:.06em;font-size:9.5px}
.rst-d{display:block;font-size:11.5px;color:var(--tx2);line-height:1.55;margin-top:3px}
.rst-nota{display:block;font-size:11px;color:color-mix(in srgb,#f0c463 var(--dk),#715C2F);line-height:1.5;margin-top:5px}

.rst-fine{font-size:11.5px;color:var(--tx2);line-height:1.6;margin-top:14px}
.rst-fine2{font-size:11.5px;color:var(--tx2)}
.rst-seed{margin-top:16px;padding:12px 13px;border:1px solid var(--bd);border-radius:var(--r);background:var(--bg3)}

.rst-type{margin-top:16px}
.rst-type label{display:block;font-size:12px;color:var(--tx3);margin-bottom:6px}
.rst-type label b{color:color-mix(in srgb,#ff8f8f var(--dk),#8C4F4F);letter-spacing:.08em}
.rst-type input{width:100%;background:var(--bg);border:1px solid rgba(208,59,59,.3);border-radius:var(--r);color:var(--tx);font-size:14px;font-weight:700;letter-spacing:.12em;padding:10px 12px;text-align:center}
.rst-type input:focus{outline:none;border-color:#d03b3b}

.rst-prog{padding:8px 0}
.rst-prog-t{font-size:12.5px;color:var(--tx3);margin-top:12px}
.rst-prog-n{font-size:11.5px;color:var(--tx2);font-variant-numeric:tabular-nums;margin-top:3px}

/* ══════════════════════════════════════════════════════════════════════
   MELHORIAS DA AUDITORIA
   ══════════════════════════════════════════════════════════════════════ */

/* ── C2 · o livre otimista, abaixo do conservador ─────────────────────── */
.sts-alt{
  margin-top:10px;padding:9px 12px;border-radius:var(--r);
  background:rgba(var(--ink),.04);border:1px solid var(--bd);
  font-size:12.5px;color:var(--tx3);line-height:1.5
}
.sts-alt b{color:var(--tx);font-variant-numeric:tabular-nums}
.sts-alt span{display:block;font-size:11px;color:var(--tx2);margin-top:2px}

/* ── C3 · onde a categoria deveria estar hoje ─────────────────────────
   A barra sozinha não sabe que dia é: a marca é a régua. */
.lim-track{position:relative}
.lim-hoje{
  position:absolute;top:-2px;bottom:-2px;width:2px;
  background:var(--tx3);opacity:.85;border-radius:2px;pointer-events:none
}
.lim-hoje::after{
  content:'';position:absolute;top:-3px;left:-2px;
  border:3px solid transparent;border-top-color:var(--tx3)
}

/* ── C6 · o que virou hábito ──────────────────────────────────────────── */
.hab-list{display:flex;flex-direction:column;gap:2px}
.hab{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid rgba(var(--ink),.04)}
.hab:last-child{border-bottom:0}
.hab-ic{
  width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  font-size:15px;flex:none
}
.hab-b{flex:1;min-width:0}
.hab-t{display:flex;align-items:baseline;gap:8px;font-size:13.5px;font-weight:600;color:var(--tx)}
.hab-d{font-size:10.5px;font-weight:700;letter-spacing:.02em;flex:none}
.hab-d.up{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.hab-d.down{color:color-mix(in srgb,var(--st-good) var(--dk),#087008)}
.hab-d.flat{color:var(--tx2)}
.hab-m{font-size:11.5px;color:var(--tx2);margin-top:2px;line-height:1.5}
.hab-m b{color:var(--tx3)}
.hab-v{
  text-align:right;flex:none;font-size:13.5px;font-weight:600;color:var(--tx);
  font-variant-numeric:tabular-nums
}
.hab-v span{display:block;font-size:10.5px;font-weight:500;color:var(--tx2);margin-top:2px}
.hab-pe{font-size:11px;color:var(--tx2);line-height:1.55;margin-top:12px;padding-top:10px;border-top:1px solid var(--bd)}

/* ── U2 · lançamentos em card no celular ──────────────────────────────
   A tabela tem min-width 660px: em 375px a coluna Valor nascia fora da
   tela. Uma das duas visões aparece, nunca as duas. */
.lanc-cards{display:none}
@media(max-width:760px){
  #lanc-card .tbl-scroll{display:none}
  .lanc-cards{display:flex;flex-direction:column;padding:4px 14px 14px}
}
.lanc-c{
  display:flex;align-items:flex-start;gap:10px;padding:12px 0;
  border-bottom:1px solid rgba(var(--ink),.05)
}
.lanc-c:last-of-type{border-bottom:0}
.lanc-c.on{background:rgba(7,196,44,.05);border-radius:var(--r);padding-left:8px;padding-right:8px;margin:0 -8px}
.lanc-c-b{flex:1;min-width:0}
.lanc-c-t{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.lanc-c-t .d{font-size:13.5px;font-weight:600;color:var(--tx);overflow-wrap:anywhere}
.lanc-c-t .v{font-size:13.5px;font-weight:700;white-space:nowrap;font-variant-numeric:tabular-nums}
.lanc-c-t .v.in{color:color-mix(in srgb,var(--c-in) var(--dk),#087008)}
.lanc-c-t .v.out{color:color-mix(in srgb,var(--c-out) var(--dk),#9A4545)}
.lanc-c-m{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:5px;font-size:11px;color:var(--tx2)}
.lanc-c-s{font-size:11px;color:var(--tx2);margin-top:3px}
.lanc-c-a{display:flex;gap:2px;flex:none;margin-top:-2px}
.lanc-c-ft{
  display:flex;align-items:baseline;justify-content:space-between;gap:10px;
  padding-top:12px;margin-top:4px;border-top:1px solid var(--bd);
  font-size:12px;color:var(--tx2)
}
.lanc-c-ft b{font-variant-numeric:tabular-nums;font-size:13px}

/* ── U4 · seleção e barra de ação em massa ────────────────────────────── */
.lanc-chk{display:inline-flex;align-items:center;cursor:pointer;padding:2px}
.lanc-chk input{width:15px;height:15px;accent-color:var(--ac);cursor:pointer;margin:0}
.tbl th.th-chk,.tbl td.td-chk{width:34px;padding-left:14px;padding-right:0}
.tbl tr.on td{background:rgba(7,196,44,.05)}

.lote{display:none}
.lote.on{
  display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  position:sticky;bottom:12px;z-index:40;margin-top:12px;
  background:var(--bg4);border:1px solid var(--bd2);border-radius:var(--rl);
  padding:11px 14px;box-shadow:0 10px 30px -12px rgba(0,0,0,calc(.75*var(--sa)))
}
.lote-n{font-size:12.5px;color:var(--tx3);line-height:1.4}
.lote-n b{color:var(--tx);font-size:14px}
.lote-n span{display:block;font-size:11px;color:var(--tx2);font-variant-numeric:tabular-nums}
.lote-a{display:flex;gap:6px;flex-wrap:wrap}
@media(max-width:640px){
  .lote.on{bottom:74px}          /* acima da tabbar do celular */
  .lote-a{width:100%}
  .lote-a .btn{flex:1 1 auto;justify-content:center}
}
.lote-sug{margin-top:14px;padding:12px 13px;border:1px solid var(--bd);border-radius:var(--r);background:var(--bg3)}
.lote-sug-d{font-size:11.5px;color:var(--tx2);line-height:1.55}
.lote-sug-d b{color:var(--tx3)}

/* ── U3 · "mais opções" no lançamento ─────────────────────────────────── */
.lanc-mais{margin-top:14px;border-top:1px solid var(--bd);padding-top:12px}
.lanc-mais>summary{
  cursor:pointer;list-style:none;display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;
  padding:6px 0;user-select:none
}
.lanc-mais>summary::-webkit-details-marker{display:none}
.lanc-mais>summary::before{
  content:'';width:0;height:0;flex:none;align-self:center;
  border:4px solid transparent;border-left-color:var(--tx2);
  transition:transform .18s
}
.lanc-mais[open]>summary::before{transform:rotate(90deg)}
.lanc-mais>summary:hover .lm-t{color:var(--ac-tx)}
.lanc-mais .lm-t{font-size:12.5px;font-weight:600;color:var(--tx3)}
.lanc-mais .lm-d{font-size:11px;color:var(--tx2)}
.lanc-mais .fgrid{margin-top:10px}
.lanc-mais>summary:focus-visible{outline:2px solid var(--ac);outline-offset:2px;border-radius:4px}

/* ── U5 · onboarding com as perguntas que fazem o painel funcionar ────── */
.onb-setup{
  display:flex;flex-direction:column;gap:14px;text-align:left;
  max-width:340px;margin:0 auto 1.6rem
}

/* ══════════════════════════════════════════════════════════════════════
   CARTÕES — fatura informada, limite garantido e estado
   ══════════════════════════════════════════════════════════════════════ */

/* ── faixa comparativa: comparar sem rolar a tela inteira ─────────────── */
.cfx{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px;margin-bottom:1.4rem}
.cfx-i{
  text-align:left;background:var(--bg2);border:1px solid var(--bd);border-radius:var(--rl);
  padding:13px 15px;cursor:pointer;display:flex;flex-direction:column;gap:6px;
  font:inherit;color:inherit;transition:border-color .15s,background .15s
}
.cfx-i:hover{border-color:var(--bd2);background:var(--bg3)}
.cfx-i:focus-visible{outline:2px solid var(--ac);outline-offset:2px}
.cfx-t{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--tx)}
.cfx-p{width:8px;height:8px;border-radius:3px;flex:none}
.cfx-v{font-size:18px;font-weight:700;color:var(--tx);font-variant-numeric:tabular-nums}
.cfx-s{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:11px;color:var(--tx2)}

/* ── estado da fatura: a resposta antes de qualquer número ────────────── */
.cartao-est{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:6px}
.cartao-est span:not(.chip){font-size:11.5px;color:var(--tx2)}
.cartao-acao-f{margin-top:12px}

/* ── linha do tempo dos próximos ciclos ───────────────────────────────── */
.cartao-tl{padding:0 20px 4px}
.cartao-tl-g{display:flex;gap:8px;align-items:flex-end;margin-top:10px}
.cartao-tl-c{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;min-width:0}
.cartao-tl-b{width:100%;border-radius:4px 4px 0 0;transition:height .4s cubic-bezier(.4,0,.2,1)}
.cartao-tl-v{font-size:11px;font-weight:600;color:var(--tx3);font-variant-numeric:tabular-nums;white-space:nowrap}
.cartao-tl-m{font-size:10px;color:var(--tx2);text-transform:uppercase;letter-spacing:.06em}
.cartao-tl-c.on .cartao-tl-v{color:var(--tx)}
.cartao-tl-c.on .cartao-tl-m{color:var(--tx3);font-weight:700}
@media(max-width:640px){.cartao-tl{padding:0 16px 4px}}

/* piscada ao pular da faixa para o card */
@keyframes cartaoPisca{0%,100%{box-shadow:none}30%{box-shadow:0 0 0 2px var(--ac)}}
.cartao.pisca{animation:cartaoPisca 1.3s ease}
@media (prefers-reduced-motion:reduce){.cartao.pisca{animation:none;box-shadow:0 0 0 2px var(--ac)}}

/* ── agenda: a fatura entre os agendados ──────────────────────────────── */
.ag-mes-f{display:block;font-size:11px;color:var(--tx2);margin-top:2px;font-variant-numeric:tabular-nums}

/* privacidade: os números novos entram na mesma regra dos antigos */
body.nm-priv .cfx-v,
body.nm-priv .cartao-tl-v{filter:blur(6px);transition:filter .18s;user-select:none}

/* ── compras: faixa de horizontes ──────────────────────────────────────
   Quatro colunas fixas em vez de auto-fit: a leitura é comparativa
   (1 mês contra 12), e coluna que muda de largura conforme o texto
   destrói justamente a comparação. */
.buy-hz{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:6px}
.buy-hz-c{background:rgba(var(--ink),.03);border:1px solid var(--bd);border-radius:var(--r);padding:7px 6px 8px;text-align:center;min-width:0}
.buy-hz-l{font-size:9px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--tx2);white-space:nowrap}
.buy-hz-bar{height:3px;background:rgba(var(--ink),.08);border-radius:var(--rf);overflow:hidden;margin:6px 0 5px}
.buy-hz-bar i{display:block;height:100%;border-radius:var(--rf);transition:width .45s cubic-bezier(.4,0,.2,1)}
.buy-hz-v{font-size:11.5px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.buy-hz-c.good .buy-hz-bar i{background:var(--st-good)}
.buy-hz-c.warn .buy-hz-bar i{background:var(--st-warn)}
.buy-hz-c.crit .buy-hz-bar i{background:var(--st-crit)}
.buy-hz-c.good .buy-hz-v{color:color-mix(in srgb,#7fd97f var(--dk),#3E6A3E)}
.buy-hz-c.warn .buy-hz-v{color:color-mix(in srgb,#f0c463 var(--dk),#715C2F)}
.buy-hz-c.crit .buy-hz-v{color:color-mix(in srgb,#ff8f8f var(--dk),#8C4F4F)}
@media(max-width:380px){.buy-hz{grid-template-columns:repeat(2,1fr)}}

/* ── compras: a meta que a compra atrasa ──────────────────────────────
   Fica FORA do veredito de propósito: são duas perguntas diferentes
   ("cabe?" e "custa o quê lá na frente?") e empilhar as duas na mesma
   caixa fazia a segunda sumir. */
.buy-goal{font-size:11.5px;line-height:1.5;padding:8px 11px;border-radius:var(--r);border:1px solid transparent}
.buy-goal.warn{background:rgba(250,178,25,.06);border-color:rgba(250,178,25,.2);color:color-mix(in srgb,#f0c463 var(--dk),#715C2F)}
.buy-goal.crit{background:rgba(208,59,59,.07);border-color:rgba(208,59,59,.24);color:color-mix(in srgb,#ff8f8f var(--dk),#8C4F4F)}
.buy-goal b{color:var(--fg)}

/* ── modal de análise ─────────────────────────────────────────────── */
.an-sec{margin-top:18px}
.an-sec:first-child{margin-top:14px}
.an-big{font-size:19px;font-weight:800;letter-spacing:-.5px;margin:5px 0 6px;line-height:1.2}
.an-tbl{width:100%;border-collapse:collapse;margin-top:8px;font-size:12px}
.an-tbl th{text-align:left;font-size:9.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--tx2);padding:0 8px 6px 0;border-bottom:1px solid var(--bd)}
.an-tbl th.num,.an-tbl td.num{text-align:right;padding-right:0;font-variant-numeric:tabular-nums}
.an-tbl td{padding:7px 8px 7px 0;border-bottom:1px solid var(--bd);color:var(--tx3);vertical-align:top}
.an-tbl tr:last-child td{border-bottom:0}
.an-tbl td.num.in{color:color-mix(in srgb,var(--st-good) var(--dk),#087008)}
.an-tbl td.num.out{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}
.an-tbl .td-meta{font-size:10px;color:var(--tx2);margin-top:2px}

.an-alt{border:1px solid var(--bd);border-radius:var(--r);padding:9px 11px;margin-top:7px;border-left-width:3px}
.an-alt.good{border-left-color:var(--st-good)}
.an-alt.warn{border-left-color:var(--st-warn)}
.an-alt.crit{border-left-color:var(--st-crit)}
.an-alt-h{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:12.5px}
.an-alt-h b{color:var(--tx)}
.an-alt-h span{font-variant-numeric:tabular-nums;font-weight:700;color:var(--tx3);white-space:nowrap}
.an-alt-n{font-size:11.5px;color:var(--tx2);line-height:1.5;margin-top:3px}

/* o valor de uma compra é dado sensível como qualquer outro: o modo
   privacidade já borra `.buy-verdict b`, e estas telas nasceram depois */
body.nm-priv .buy-hz-v,
body.nm-priv .an-big,
body.nm-priv .an-tbl td.num,
body.nm-priv .an-alt-h span{filter:blur(6px);transition:filter .18s;user-select:none}

/* rodapé 2x2: quatro ações não cabem numa linha de card de 300px, e
   quebrar 3+1 deixava o botão órfão parecendo erro de layout */
.mng-ft.dois .btn{flex:1 1 calc(50% - 3px);min-width:0}

/* ── compras: a fila ───────────────────────────────────────────────────
   Cada card projetava sozinho, como se fosse a única compra do mundo.
   A faixa mostra a disputa real: mesmo dinheiro, uma de cada vez.
   Rola na horizontal em vez de quebrar — a ordem É a informação, e uma
   fila que quebra em duas linhas deixa de parecer fila. */
.buy-fila-wrap{margin-bottom:1.5rem}
.buy-fila{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}
.buy-fila-i{flex:0 0 auto;min-width:150px;max-width:220px;background:var(--bg2);
  border:1px solid var(--bd);border-top:2px solid var(--ac);border-radius:var(--r);padding:10px 12px}
.buy-fila-i.crit{border-top-color:var(--st-crit)}
.buy-fila-n{font-size:12.5px;font-weight:700;letter-spacing:-.2px;display:flex;align-items:center;gap:6px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.buy-fila-ord{width:16px;height:16px;border-radius:50%;background:rgba(var(--ink),.08);color:var(--tx2);
  font-size:9.5px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}
.buy-fila-m{font-size:15px;font-weight:800;letter-spacing:-.4px;margin-top:5px;font-variant-numeric:tabular-nums}
.buy-fila-i.crit .buy-fila-m{color:color-mix(in srgb,#ff8f8f var(--dk),#8C4F4F)}
.buy-fila-d{font-size:10.5px;color:var(--tx2);line-height:1.4;margin-top:3px}

/* × de excluir no cabeçalho do card: o rodapé já tem quatro ações e um
   quinto botão espremeria todos. */
.btn-x{padding:1px 7px;font-size:15px;line-height:1.2;min-width:0;color:var(--tx2)}
.btn-x:hover{color:color-mix(in srgb,var(--st-crit) var(--dk),#AF3232)}

body.nm-priv .buy-fila-m{filter:blur(6px);transition:filter .18s;user-select:none}

/* ── seletor de ícones com catálogo emoji-mart ────────────────────────
   `.emoji-wrap` continua valendo para quem não migrou; o `.emo` é o
   contêiner novo, com prévia, busca e abas de categoria. */
.emo{background:var(--bg3);border:1px solid var(--bd2);border-radius:var(--r);padding:9px}
.emo-top{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.emo-atual{width:38px;height:38px;flex-shrink:0;display:flex;align-items:center;justify-content:center;
  font-size:21px;line-height:1;background:var(--bg2);border:1px solid var(--bd2);border-radius:10px;color:var(--tx2)}
.emo-q{flex:1;min-width:0}
/* o input herda o estilo de `.fg input`, que espera estar dentro de um
   `.fg` — aqui ele está dois níveis abaixo, então repete o essencial */
.emo-q{background:var(--bg2);border:1px solid var(--bd2);border-radius:var(--r);color:var(--tx);
  font-size:13px;padding:9px 11px;font-family:inherit;outline:none;transition:border-color .15s}
.emo-q:focus{border-color:var(--ac)}
.emo-q::placeholder{color:var(--tx2)}

.emo-tabs{display:flex;gap:3px;margin-bottom:8px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none}
.emo-tabs::-webkit-scrollbar{display:none}
.emo-tab{flex:0 0 auto;background:none;border:1.5px solid transparent;border-radius:8px;font-size:15px;
  line-height:1;padding:6px 8px;cursor:pointer;opacity:.55;transition:all .14s}
.emo-tab:hover{opacity:1;background:rgba(var(--ink),.06)}
.emo-tab.on{opacity:1;border-color:var(--ac);background:var(--acd)}

/* a rolagem vive na grade, não no contêiner: com a busca e as abas fixas
   no topo, rolar o bloco inteiro escondia justamente os controles */
.emo .emoji-grid{max-height:168px;overflow-y:auto;scrollbar-width:thin;padding-right:2px}
.emo-vazio{grid-column:1/-1;font-size:12px;color:var(--tx2);line-height:1.5;padding:14px 4px;text-align:center}
.emo-semcat{flex:1;font-size:12px;color:var(--tx2);align-self:center}

/* ══════════════════════════════════════════════════════════════════════
   COPILOTO — o chat de IA que divide o painel com o chamado
   ══════════════════════════════════════════════════════════════════════ */
.sup-modal.largo{max-width:520px}
.sup-abas{display:flex;gap:4px;margin:-6px 0 16px;border-bottom:1px solid rgba(var(--ink),.08)}
.sup-aba{background:none;border:none;border-bottom:2px solid transparent;color:var(--fg-45);
  font:600 12px/1 inherit;letter-spacing:.03em;padding:9px 12px 10px;cursor:pointer;transition:color .15s,border-color .15s}
.sup-aba:hover{color:var(--fg-75)}
.sup-aba.on{color:var(--fg);border-bottom-color:var(--ac)}

/* consentimento: aparece uma vez por navegador, antes da primeira pergunta */
.cop-aviso{font-size:12.5px;line-height:1.6;color:var(--fg-70)}
.cop-aviso p{margin:0 0 10px}
.cop-aviso b{color:var(--fg)}
.cop-aviso-nota{font-size:11.5px;color:var(--fg-45)}

/* a rolagem vive no log, não no painel: a barra de digitar fica fixa
   embaixo, senão some da tela justamente quando a resposta é longa */
.cop-log{height:min(52vh,420px);overflow-y:auto;scrollbar-width:thin;
  display:flex;flex-direction:column;gap:10px;padding-right:4px;margin-bottom:12px}

.cop-vazio{margin:auto 0;text-align:center;color:var(--fg-45);font-size:13px;line-height:1.6}
.cop-vazio p{margin:0 0 14px}
.cop-sug{display:flex;flex-direction:column;gap:6px}
.cop-sug button{background:rgba(var(--ink),.05);border:1px solid rgba(var(--ink),.1);
  border-radius:var(--rf);color:var(--fg-80);font:inherit;font-size:12.5px;
  padding:9px 14px;cursor:pointer;transition:background .15s,border-color .15s}
.cop-sug button:hover{background:rgba(var(--ink),.09);border-color:rgba(7,196,44,.35)}

.cop-msg{max-width:88%;font-size:13px;line-height:1.6;padding:10px 13px;border-radius:14px;
  word-break:break-word;overflow-wrap:anywhere}
.cop-msg.eu{align-self:flex-end;background:var(--acd);border:1px solid rgba(7,196,44,.28);
  color:var(--fg);border-bottom-right-radius:5px}
.cop-msg.ia{align-self:flex-start;background:rgba(var(--ink),.05);
  border:1px solid rgba(var(--ink),.09);color:var(--fg-90);border-bottom-left-radius:5px}
.cop-msg p{margin:0 0 8px}
.cop-msg p:last-child{margin-bottom:0}
.cop-msg b{color:var(--fg)}
.cop-msg ul{margin:0 0 8px;padding-left:18px}
.cop-msg li{margin-bottom:3px}

/* três pontos pulando: a espera de uma resposta de IA é longa o bastante
   para o silêncio parecer travamento */
.cop-pensando{display:flex;gap:4px;align-items:center;padding:14px 15px}
.cop-pensando i{width:6px;height:6px;border-radius:50%;background:rgba(var(--ink),.4);
  animation:cop-pulo 1.2s ease-in-out infinite}
.cop-pensando i:nth-child(2){animation-delay:.15s}
.cop-pensando i:nth-child(3){animation-delay:.3s}
@keyframes cop-pulo{0%,60%,100%{opacity:.25;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}

.cop-barra{display:flex;gap:8px;align-items:flex-end}
.cop-q{flex:1;min-width:0;background:rgba(var(--ink),.06);border:1px solid rgba(var(--ink),.1);
  border-radius:14px;padding:11px 13px;color:var(--fg);font:inherit;font-size:13px;line-height:1.4;
  outline:none;resize:none;max-height:120px;transition:border-color .2s}
.cop-q:focus{border-color:rgba(7,196,44,.4)}
.cop-q::placeholder{color:var(--fg-35)}
.cop-send{flex:0 0 auto;width:40px;height:40px;background:var(--ac);border:none;border-radius:50%;
  cursor:pointer;display:flex;align-items:center;justify-content:center;transition:opacity .2s}
.cop-send:hover{opacity:.85}
.cop-send:disabled{opacity:.35;cursor:not-allowed}
.cop-send svg{width:17px;height:17px;fill:none;stroke:#000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* o valor no chat é dado sensível como qualquer outro da tela */
body.nm-priv .cop-msg{filter:blur(5px);transition:filter .18s;user-select:none}

@media(max-width:560px){
  .sup-modal.largo{max-width:100%}
  .cop-log{height:min(46vh,340px)}
  .cop-msg{max-width:94%}
}

/* botão de navegação dentro da resposta do copiloto */
.cop-ir{display:inline-flex;align-items:center;gap:6px;margin-top:9px;background:rgba(7,196,44,.12);
  border:1px solid rgba(7,196,44,.35);border-radius:var(--rf);color:var(--ac-tx);
  font:700 11.5px/1 inherit;letter-spacing:.02em;padding:8px 13px;cursor:pointer;transition:background .15s}
.cop-ir:hover{background:rgba(7,196,44,.2)}
.cop-ir svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}

/* o destino piscando: é o "sinaliza onde é" depois de levar a pessoa até lá */
.cop-alvo{animation:cop-pisca 2.6s ease-out 1}
@keyframes cop-pisca{
  0%,100%{box-shadow:0 0 0 0 rgba(7,196,44,calc(0*var(--ga)))}
  12%{box-shadow:0 0 0 3px rgba(7,196,44,calc(.55*var(--ga)))}
  30%{box-shadow:0 0 0 3px rgba(7,196,44,calc(.18*var(--ga)))}
  48%{box-shadow:0 0 0 3px rgba(7,196,44,calc(.55*var(--ga)))}
  70%{box-shadow:0 0 0 3px rgba(7,196,44,calc(.15*var(--ga)))}
}
