html{overflow-x:clip}
:root{
  --sidebar-bg:#1e293b;
  --sidebar-text:#94a3b8;
  --sidebar-hover:#334155;
  --sidebar-active:#f59e0b;
  --sidebar-w:230px;
  --header-h:60px;
  --accent:#2563eb;
  --amber:#f59e0b;
  --amber-dark:#d97706;
  --amber-bg:#fffbeb;
  --success:#15803d;
  --warning:#b45309;
  --danger:#dc2626;
  --purple:#8b5cf6;
  --bg:#f1f5f9;
  --card-bg:#fff;
  --text:#1e293b;
  --text-muted:#475569;
  --border:#e2e8f0;
  --radius:10px;
  --shadow:0 1px 4px rgba(0,0,0,.08);
  --surface: var(--card-bg);
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:'Inter','Segoe UI',Arial,sans-serif;background:var(--bg);color:var(--text);display:flex;min-height:100vh;font-size:14px}

/* Sidebar */
.sidebar-logo{
  padding:20px 20px 16px;
  display:flex;align-items:center;gap:10px;
  border-bottom:1px solid #334155;
}
.sidebar-logo img{flex-shrink:0}
.sidebar-logo-text{font-size:16px;font-weight:700;color:#f1f5f9;line-height:1.2}
.sidebar-logo-sub{font-size:11px;color:var(--sidebar-text)}
nav{padding:12px 0;flex:1}
.nav-item{
  display:flex;align-items:center;gap:10px;
  color:var(--sidebar-text);
  text-decoration:none;border-radius:0;
  transition:background .15s,color .15s;
  cursor:pointer;font-size:14px;border:none;background:none;width:100%;text-align:left;
  min-height:44px;
}
.nav-item:hover{background:var(--sidebar-hover);color:#f1f5f9}
.nav-item.active{background:var(--sidebar-active);color:#0f172a}
.nav-item svg{flex-shrink:0;opacity:.8}
.nav-item.active svg{opacity:1;color:#0f172a}
.nav-section-label{
  padding:16px 20px 6px;
  font-size:11px;font-weight:600;text-transform:uppercase;
  letter-spacing:.06em;color:#94a3b8;
}
.sidebar-footer{
  padding:16px 20px;border-top:1px solid #334155;
}
.sidebar-footer button{
  width:100%;padding:8px;background:var(--sidebar-hover);
  color:#f1f5f9;border:none;border-radius:6px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;gap:8px;
  font-size:13px;transition:background .15s;
}
.sidebar-footer button:hover{background:#475569}

/* Main */
.topbar-title{font-size:17px;font-weight:600;flex:1;margin:0;line-height:1.3;outline:none}
.topbar-search{
  padding:7px 12px;border:1px solid var(--border);border-radius:6px;
  font-size:13px;width:260px;background:#f8fafc;
  transition:border-color .15s;
}
.topbar-search:focus{outline:none;border-color:var(--accent);background:#fff}
.topbar-badge{
  font-size:12px;padding:3px 8px;border-radius:12px;
  background:#fef3c7;color:#92400e;font-weight:500;
}
.main{overflow-x:hidden}
.content{flex:1}/* padding migrated to Tailwind in index.html */

/* Pages */
.page{display:none}
.page.active{display:block}

/* Cards row — grid layout migrated to Tailwind utilities in index.html */
.card{
  background:var(--card-bg);border-radius:var(--radius);
  padding:16px 18px;box-shadow:var(--shadow);
  border:1px solid var(--border);
}
.card-label{font-size:12px;color:var(--text-muted);font-weight:500;margin-bottom:4px}
.card-value{font-size:20px;font-weight:700;line-height:1.2}
.card-sub{font-size:11px;color:var(--text-muted);margin-top:3px}
.card.accent{border-left:3px solid var(--accent)}
.card.success{border-left:3px solid var(--success)}
.card.warning{border-left:3px solid var(--warning)}
/* Caixas de aviso (checklist do Simular, resumo do upload, dica macro, status
   das recomendações). Antes eram cores fixas inline, sem par escuro: no tema
   escuro o texto herdava #f1f5f9 sobre fundo quase branco (#195/#193). */
.notice{border:1px solid transparent}
/* #291: selos e avisos do Simular — antes cores fixas inline, claras no escuro. */
:root{
  --bg-muted:#f3f4f6;--row-alt:#f8fafc;
  --blk-teto-fg:#dc2626;--blk-teto-bg:#fee2e2;
  --blk-cotacao-fg:#92400e;--blk-cotacao-bg:#fef3c7;
  --blk-invalido-fg:#6b7280;--blk-invalido-bg:#f3f4f6;
}
.sim-badge{display:inline-block;padding:2px 8px;border-radius:99px;font-size:10px;font-weight:600;white-space:nowrap}
.sim-badge-sm{font-size:9px;padding:1px 5px;margin-left:4px;cursor:help}
.sim-badge-green{background:#dcfce7;color:#15803d}
.sim-badge-amber{background:#fef3c7;color:#92400e}
.sim-badge-blue{background:#dbeafe;color:#1d4ed8}
.sim-badge-slate{background:#f1f5f9;color:#475569}
.sim-badge-red{background:#fee2e2;color:#b91c1c}
.sim-notice{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding:10px 14px;border:1px solid;border-radius:8px;font-size:13px}
.sim-notice-blue{background:#eff6ff;border-color:#bfdbfe;color:#1d4ed8}
.sim-notice-slate{background:#f1f5f9;border-color:#e2e8f0;color:#475569}
.sim-notice-amber{display:block;background:#fefce8;border-color:#fde68a;color:#92400e}
.notice-amber{background:var(--amber-bg);border-color:#fde68a}
.notice-success{background:#f0fdf4;border-color:#bbf7d0}
.notice-danger{background:#fef2f2;border-color:#fecaca}
.notice-purple{background:#f5f3ff;border-color:#ddd6fe;color:#5b21b6}
.rec-soma-notice,.rec-dup-notice{padding:10px 14px;border-radius:8px;font-size:13px;line-height:1.5;margin:0 0 16px}
.rec-soma-notice a,.rec-dup-notice a,.uncategorized-notice a{color:var(--accent);font-weight:600;white-space:nowrap}
#rec-status-bar.notice-success{color:var(--success)}
#rec-status-bar.notice-danger{color:var(--danger)}
.card.danger{border-left:3px solid var(--danger)}
.card.purple{border-left:3px solid var(--purple)}

/* Section headers */
.section-header{
  display:flex;align-items:center;gap:8px;
}
.section-header h2{font-size:16px;font-weight:600}
.section-header h3{font-size:14px;font-weight:600;color:var(--text-muted)}
.badge{
  font-size:11px;padding:2px 7px;border-radius:10px;
  font-weight:600;
}
.badge-blue{background:#dbeafe;color:#1d4ed8}
.badge-green{background:#dcfce7;color:#15803d}
.badge-orange{background:#ffedd5;color:#c2410c}
.badge-purple{background:#e0e7ff;color:#3730a3}
.badge-sem-alvo{background:var(--border);color:var(--text-muted);font-weight:500;margin-left:6px}

/* Tables */
.table-wrap{overflow-x:auto;max-width:100%;border-radius:var(--radius);border:1px solid var(--border);background:var(--card-bg);box-shadow:var(--shadow);margin-bottom:8px}
#tbl-rf td,#tbl-rf th,#tbl-tesouro td,#tbl-tesouro th{word-break:break-word}
table{border-collapse:collapse;width:100%;min-width:0}
th,td{border-bottom:1px solid var(--border);padding:9px 12px;text-align:left;font-size:13px}
th{background:#f8fafc;font-weight:600;font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;cursor:pointer;user-select:none;position:sticky;top:0}
th:hover{background:#f1f5f9}
tbody tr:last-child td{border-bottom:none}
tbody tr:hover{background:#f8fafc}
/* Cores de status da carteira — DOIS CANAIS SEPARADOS, para que "acima do
   alvo" nunca dispute atencao com "comprar"/"aguardar":

   1. PREENCHIMENTO = acao a tomar. Só os estados acionaveis recebem tinta:
      comprar (verde) e aguardar (ambar). Quem esta acima do alvo nao pede
      acao de compra, entao nao recebe tinta — fica neutro.
   2. FAIXA LATERAL + MARCADOR = posicao vs. alvo. Faixa SOLIDA e marcador
      "▼" para abaixo do alvo; faixa HACHURADA e marcador "▲" para acima.
      Forma e textura funcionam sem cor (deficiencia de visao cromatica) e
      sem competir com o canal de acao.

   "Ausente" (outra tabela) usa indigo + faixa pontilhada. */
.row-green td{background:#dcfce7 !important}
.row-yellow td{background:#fef3c7 !important}
.row-orange td{background:#f8fafc !important}
.row-missing td{background:#e0e7ff !important}
.row-green td:first-child{box-shadow:inset 4px 0 0 #16a34a}
.row-yellow td:first-child{box-shadow:inset 4px 0 0 #d97706}
.row-missing td:first-child{box-shadow:inset 4px 0 0 #4f46e5}
/* Acima do alvo: faixa hachurada cinza-ardosia, sem tinta na linha. */
.row-orange td:first-child{
  background-image:repeating-linear-gradient(135deg,#64748b 0 3px,transparent 3px 6px) !important;
  background-repeat:no-repeat !important;
  background-size:4px 100% !important;
  background-position:left top !important;
}
/* Marcadores de direcao — segundo sinal, independente de cor. */
.row-green td:first-child::after,
.row-yellow td:first-child::after,
.row-orange td:first-child::after{
  font-size:10px;font-weight:700;margin-left:6px;vertical-align:1px;
}
.row-green td:first-child::after,
.row-yellow td:first-child::after{content:"▼";color:#64748b}
.row-orange td:first-child::after{content:"▲";color:#475569}
/* Linha "ausente" que tambem e comprar: nao ha posicao, logo sem marcador. */
.row-missing td:first-child::after{content:none}
/* #242: no Simular toda linha e compra e nao ha legenda; o "▼" ao lado do nome
   da carteira (ou do ticker, no legado) parecia a seta de um seletor. */
#tbl-macro-suggestions td:first-child::after,#tbl-sim td:first-child::after{content:none}
tbody tr.row-green:hover td{background:#bbf7d0 !important}
tbody tr.row-yellow:hover td{background:#fde68a !important}
tbody tr.row-orange:hover td{background:#eef2f6 !important}
tbody tr.row-missing:hover td{background:#c7d2fe !important}

.pill{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}
.pill-comprar{background:#bbf7d0;color:#14532d}
.pill-aguardar{background:#fde68a;color:#78350f}
.pill-default{background:#f1f5f9;color:#475569}

.diff-positive{color:#15803d;font-weight:600}
.diff-negative{color:#dc2626;font-weight:600}
.diff-neutral{color:var(--text-muted)}

/* Empty state */
.empty-state{text-align:center;padding:32px;color:var(--text-muted)}
.empty-state svg{margin:0 auto 8px;display:block;opacity:.35}

/* Charts area */
.charts-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(320px,1fr));
  gap:16px;margin-bottom:24px;
}
.chart-card{
  background:var(--card-bg);border-radius:var(--radius);
  padding:18px;box-shadow:var(--shadow);border:1px solid var(--border);
}
.chart-card h3{font-size:13px;font-weight:600;margin-bottom:14px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}
.chart-wrap{position:relative;height:220px}
.chart-card h3{margin-bottom:4px}
.chart-sub{font-size:11px;color:var(--text-muted);margin:0 0 12px}

/* Barras em DOM (sem biblioteca de gráficos — ver js/utils/charts.js). */
.bars{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.bar-row{display:grid;grid-template-columns:72px 1fr 52px;align-items:center;gap:8px;font-size:12px}
.bar-label{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bar-track{position:relative;height:14px;border-radius:7px;background:#f1f5f9;overflow:hidden}
.bar-fill{display:block;height:100%;border-radius:7px;min-width:2px;transition:width .2s ease}
.bar-marker{position:absolute;top:-2px;bottom:-2px;width:2px;background:#0f172a;opacity:.55}
.bar-value{text-align:right;color:var(--text-muted);font-variant-numeric:tabular-nums}
/* Mesmas familias das linhas da tabela: acao no preenchimento, neutro para
   quem esta acima do alvo. */
.bar-comprar{background:#16a34a}
.bar-aguardar{background:#d97706}
.bar-over{background:#94a3b8}
.bar-neutral{background:#3b82f6}

/* Alternador tabela/graficos por secao (js/utils/view-toggle.js). */
.view-toggle{display:flex;gap:6px;margin:0 0 10px}
.vt-btn{
  display:inline-flex;align-items:center;gap:5px;
  padding:5px 10px;min-height:32px;border-radius:8px;cursor:pointer;
  border:1px solid var(--border);background:var(--card-bg);
  color:var(--text-muted);font-size:12px;font-weight:600;
}
.vt-btn:hover{background:#f1f5f9}
.vt-btn.is-on{border-color:var(--accent);color:var(--accent);background:#eff6ff}
.vt-btn.is-on svg{opacity:1}
.vt-btn svg{opacity:.7}
/* Necessario porque .charts-grid define display:grid, que venceria [hidden]. */
[hidden]{display:none !important}

/* Upload page */
.upload-box{
  display:block;width:100%;box-sizing:border-box;
  background:var(--card-bg);border:2px dashed var(--border);border-radius:var(--radius);
  padding:32px 24px;text-align:center;cursor:pointer;transition:border-color .2s,background .2s;
}
.upload-box:hover,.upload-box.dragover{border-color:var(--accent);background:#eff6ff}
.upload-box svg{display:block;margin:0 auto 12px;color:var(--text-muted)}
.upload-box p{color:var(--text-muted);font-size:13px;margin-top:6px}
.upload-box input[type=file]{display:none}
.btn{
  display:inline-flex;align-items:center;gap:7px;
  padding:9px 18px;border-radius:7px;border:none;cursor:pointer;
  font-size:13px;font-weight:600;transition:background .15s,opacity .15s;
}
.btn-primary{background:var(--accent);color:#fff}
.btn-primary:hover{background:#1d4ed8}
.btn-primary:disabled{opacity:.5;cursor:not-allowed}
.btn-secondary{background:#f1f5f9;color:var(--text);border:1px solid var(--border)}
.btn-secondary:hover{background:#e2e8f0}
.badge-amber{background:#f59e0b1a;color:#92400e}
/* #194: resumo do relatório/movimentações em uso na tela Enviar Relatório */
.upload-current{font-size:13px;line-height:1.5;padding:10px 12px;margin:0 0 16px;border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:8px;background:var(--card-bg)}
.upload-current[hidden]{display:none}
.upload-current-hint{font-size:12px;color:var(--text-muted)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-danger{background:#fee2e2;color:#b91c1c;border:1px solid #fecaca}
.btn-danger:hover{background:#fecaca}
.btn-outline{background:#fff;color:var(--text);border:1px solid var(--border)}
.btn-outline:hover{background:#f8fafc}
/* Rec table editable input — #233: borda visível em repouso (≥3:1, WCAG 1.4.11);
   sem ela as células pareciam texto e não dava para saber que eram editáveis. */
.rec-cell-input{
  width:100%;border:1px solid #7c8aa0;border-radius:5px;
  padding:4px 7px;font-size:1rem;background:var(--card-bg);
  font-family:inherit;color:var(--text);
}
.rec-cell-input:focus{outline:none;border-color:var(--accent);background:#eff6ff}
.rec-cell-input:hover{border-color:var(--text-muted);background:#f8fafc}
.rec-cell-select{
  width:100%;border:1px solid #7c8aa0;border-radius:5px;
  padding:4px 7px;font-size:1rem;background:var(--card-bg);
  font-family:inherit;color:var(--text);cursor:pointer;
}
.rec-cell-select:focus{outline:none;border-color:var(--accent);background:#eff6ff}
.rec-cell-select:hover{border-color:var(--text-muted);background:#f8fafc}
/* Manual form row */
.rec-manual-row{
  display:grid;
  grid-template-columns:2fr 1fr 1.2fr 1fr 1.2fr 36px;
  gap:6px;align-items:center;min-width:0;
}
.rec-manual-row input,.rec-manual-row select{
  padding:7px 10px;border:1px solid var(--border);border-radius:6px;
  font-size:16px;width:100%;font-family:inherit;
}
.rec-manual-row input:focus,.rec-manual-row select:focus{
  outline:none;border-color:var(--accent);
}
.rec-tab{transition:color .15s,border-color .15s}
.rec-tab:hover{color:var(--text)!important}
/* ── REC: nav bar ─────────────────────────────── */
.rec-nav-bar{border-bottom:2px solid var(--border)}
.rec-tabs-bar{display:flex;gap:0;overflow-x:auto;scrollbar-width:none}
.rec-tabs-bar::-webkit-scrollbar{display:none}
.rec-mobile-nav{display:none;padding:10px 0 12px}
.rec-carteira-select{
  width:100%;padding:9px 12px;border:1px solid var(--border);
  border-radius:7px;font-size:16px;font-weight:600;
  background:var(--card-bg);color:var(--text);cursor:pointer;
}
.rec-carteira-select:focus{outline:none;border-color:var(--accent)}
/* ── REC: toolbar ─────────────────────────────── */
.rec-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 0;flex-wrap:wrap}
.rec-toolbar-left{display:flex;gap:8px;flex-wrap:wrap}
.rec-toolbar-btn{white-space:nowrap}
.rec-stats-bar{font-size:13px;color:var(--text-muted);white-space:nowrap}
.rec-stats-sep{margin:0 6px}
/* ── REC: painéis colapsáveis ─────────────────── */
.rec-collapsible-panel{
  background:var(--card-bg);border:1px solid var(--border);
  border-radius:var(--radius);margin-bottom:12px;box-shadow:var(--shadow);
}
.rec-panel-inner{padding:16px 18px}
.rec-panel-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.rec-panel-title{font-size:14px;font-weight:600}
.rec-panel-close-btn{
  background:none;border:none;cursor:pointer;color:var(--text-muted);
  padding:2px 6px;border-radius:4px;font-size:16px;line-height:1;
}
/* ── REC: quick-add form ──────────────────────── */
.rec-quickadd-form{
  display:grid;
  grid-template-columns:2fr 1fr 1.2fr 1fr 1.2fr auto;
  gap:8px;align-items:center;
}
.rec-qa-input,.rec-qa-select{
  padding:8px 10px;border:1px solid var(--border);border-radius:6px;
  font-size:16px;width:100%;font-family:inherit;background:var(--card-bg);color:var(--text);
}
.rec-qa-input:focus,.rec-qa-select:focus{outline:none;border-color:var(--accent)}
/* ── REC: cards mobile ────────────────────────── */
.rec-card-item{
  background:var(--card-bg);border:1px solid var(--border);
  border-radius:var(--radius);padding:12px 14px;margin-bottom:8px;
  display:flex;align-items:flex-start;gap:10px;box-shadow:var(--shadow);
}
.rec-card-body{flex:1;min-width:0}
.rec-card-primary{display:flex;align-items:center;gap:8px;margin-bottom:4px;flex-wrap:wrap}
.rec-card-ticker{font-size:14px;font-weight:700}
.rec-card-aloc{font-size:13px;color:var(--text-muted)}
.rec-card-secondary{font-size:12px;color:var(--text-muted)}
.rec-card-delete{
  background:none;border:none;cursor:pointer;color:var(--text-muted);
  padding:4px;border-radius:4px;flex-shrink:0;display:flex;align-items:center;font-size:14px;
}
.rec-card-delete:hover{color:var(--danger);background:#fee2e2}
/* #190: edição no card (celular), motivo de elegibilidade e desfazer */
.rec-card-item{flex-wrap:wrap}
.rec-card-actions{display:flex;align-items:center;gap:4px;flex-shrink:0}
.rec-card-edit{background:none;border:1px solid var(--border);border-radius:6px;padding:6px 10px;min-height:44px;font-size:13px;font-weight:600;color:var(--accent);cursor:pointer}
.rec-card-actions .rec-card-delete{min-height:44px;min-width:44px;justify-content:center}
.rec-card-form{flex-basis:100%;display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:4px}
.rec-card-form label{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--text-muted)}
.rec-card-form .rec-card-input{width:100%;min-width:0;box-sizing:border-box;font-size:16px;padding:8px;border:1px solid var(--border);border-radius:6px;background:var(--card-bg);color:var(--text);min-height:44px}
.rec-soma-hint{font-size:12px;color:var(--text-muted)}
.rec-vies-note{white-space:normal;margin:4px 0 0;font-size:11px;color:var(--text-muted)}
.rec-status-undo{margin-left:auto;background:none;border:none;color:#15803d;font-weight:600;text-decoration:underline;cursor:pointer;min-height:44px;padding:0 6px}
/* ── REC: empty state ─────────────────────────── */
.rec-empty-state{text-align:center;padding:32px 16px;color:var(--text-muted);font-size:13px}
/* ── REC: action bar (rodapé) ─────────────────── */
.rec-action-bar{
  display:flex;gap:10px;padding:14px 0 4px;
  border-top:1px solid var(--border);margin-top:8px;flex-wrap:wrap;
}
.upload-status{font-size:13px;color:var(--text-muted);margin-left:10px}
.upload-actions{display:flex;align-items:center;margin-top:16px;gap:10px;flex-wrap:wrap}
.upload-filename{
  font-size:13px;padding:7px 12px;background:#f8fafc;
  border:1px solid var(--border);border-radius:6px;color:var(--text);
  flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
pre{background:#f8fafc;padding:12px;border-radius:7px;white-space:pre-wrap;font-size:12px;border:1px solid var(--border)}

/* Legend */
.legend{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:10px}
.legend-item{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--text-muted)}
.legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
/* Amostra da legenda para "acima do alvo": hachura cinza, nao um matiz a mais. */
.legend-hatch{
  width:10px;height:10px;border-radius:2px;flex-shrink:0;
  background-image:repeating-linear-gradient(135deg,#64748b 0 2px,transparent 2px 4px);
  border:1px solid #cbd5e1;
}

/* Simular page */
.sim-form-card{background:var(--card-bg);border-radius:var(--radius);padding:24px;box-shadow:var(--shadow);border:1px solid var(--border);max-width:520px;margin-bottom:28px}
.form-row{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-end;margin-top:16px}
.form-group{display:flex;flex-direction:column;gap:5px;flex:1;min-width:140px}
.form-group label{font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}
.form-group input,.form-group select{padding:9px 12px;border:1px solid var(--border);border-radius:7px;font-size:16px;background:#f8fafc;transition:border-color .15s}
.form-group input:focus,.form-group select:focus{outline:none;border-color:var(--accent);background:#fff}
/* Campos soltos (Minha Conta, modais) — mesmo visual dos .form-group */
.input-field{padding:9px 12px;border:1px solid var(--border);border-radius:7px;font-size:14px;background:#f8fafc;color:var(--text);transition:border-color .15s}
.input-field:focus{outline:none;border-color:var(--accent);background:#fff}
.sim-loading{display:none;align-items:center;gap:10px;color:var(--text-muted);font-size:13px;margin:16px 0}
.spinner{width:18px;height:18px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}
@keyframes spin{to{transform:rotate(360deg)}}
.sim-progress{height:8px;background:var(--border);border-radius:4px;margin-top:6px;overflow:hidden}
.sim-progress-bar{height:100%;border-radius:4px;background:var(--accent);transition:width .4s}
.arrow-right{display:inline-block;margin:0 4px;color:var(--text-muted)}
.price-tag{display:inline-block;background:#f0fdf4;color:#15803d;padding:2px 7px;border-radius:5px;font-weight:600;font-size:13px}
/* #224: cards do celular gerados em JS (Carteira Atual, Simular) — tokens de tema,
   não bg-white fixo, para o texto claro do tema escuro não sumir no fundo branco. */
.m-card{background:var(--card-bg);border-color:var(--border)}
.m-card:active{background:#f8fafc}
.m-card-muted{color:var(--text-muted)}
.rent-tag{display:inline-block;font-weight:600;color:#7c3aed}
/* #235: remover carteira (Estratégia) — alvo de toque de 44×44 */
.pf-del-btn{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}
/* #238: carteira sem posições — só o bloco de orientação, sem cards zerados nem tabelas vazias */
#page-carteira.carteira-vazia > :not(#carteira-empty){display:none!important}
/* #239: atalhos de seção da Carteira Atual e resumo da carteira de Renda Fixa */
.carteira-atalhos{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 20px}
.carteira-atalhos button{min-height:44px;padding:0 14px;border:1px solid var(--border);border-radius:999px;background:var(--card-bg);color:var(--text);font-size:13px;font-weight:500;cursor:pointer}
.carteira-atalhos button:hover{border-color:var(--accent);color:var(--accent)}
#profile-section,#carteira-analysis-section,[id^="secao-"]{scroll-margin-top:72px}
.carteira-rf-resumo{font-size:13px;color:var(--text-muted);margin:8px 0 0}
.carteira-atalho-inline{background:none;border:none;padding:0;color:var(--accent);font:inherit;font-weight:600;cursor:pointer;text-decoration:underline}
/* #240: tabelas de sugestão do Simular — 13 colunas no hierárquico; o preço
   quebrava em duas linhas ("R$" / "99,70") em 1366px. Valores em R$ e
   quantidade ficam em uma linha e o padding encolhe para caber sem rolagem.
   Colunas: hierárquico 4–8 = Preço Atual, Preço Teto, Margem, Qtd, Valor;
   legado 2–6 = Preço Atual, Preço Teto, Margem, Qtd, Valor a Investir. */
#tbl-macro-suggestions th,#tbl-macro-suggestions td,#tbl-sim th,#tbl-sim td{padding:8px}
#tbl-macro-suggestions td:nth-child(n+4):nth-child(-n+8),
#tbl-sim td:nth-child(n+2):nth-child(-n+6){white-space:nowrap}
/* #245: controles de movimentação (fieldset) — desabilitados sem relatório consolidado */
.mov-controls{display:flex;flex-direction:column;gap:12px;border:0;padding:0;margin:0;min-width:0}
.mov-controls:disabled{opacity:.5}
.mov-controls:disabled #mov-file-label{cursor:not-allowed}
.mov-requires{padding:10px 12px;border-radius:8px;font-size:13px;margin:0 0 12px}
.sim-alert{background:#fef9c3;border:1px solid #fde68a;border-radius:7px;padding:12px 14px;font-size:13px;color:#92400e;margin-bottom:16px;display:flex;gap:8px;align-items:flex-start}
.sim-macro-summary{margin-top:20px}
.sim-macro-side{margin-bottom:28px;min-width:0}
.sim-macro-side .sim-macro-summary{margin-top:0}
@media (min-width:1440px){.sim-top.has-side{display:grid;grid-template-columns:minmax(300px,340px) minmax(0,1fr);gap:16px;align-items:start}.sim-top.has-side .sim-form-card{max-width:none}}
/* No painel lateral a tabela tem menos largura: células compactas (os paddings são inline). */
.sim-macro-side .sim-macro-table table{font-size:12px!important}
.sim-macro-side .sim-macro-table th,.sim-macro-side .sim-macro-table td{padding:7px 7px!important;white-space:nowrap}
.sim-macro-side .sim-macro-table th{font-size:11px;white-space:normal}
/* #189: sugestões em cards no celular */
.sim-sugg-cards{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}
.sim-sugg-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--card-bg);padding:10px 12px;box-shadow:var(--shadow)}
.sim-sugg-card-main{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;font-size:14px;color:var(--text)}
.sim-sugg-card-qty{margin-left:auto;font-size:13px;color:var(--text)}
.sim-sugg-card-sub{margin-top:4px;font-size:12px;color:var(--text-muted);line-height:1.6}
.sim-sugg-legend{font-size:11px;color:var(--text-muted);margin:4px 0 16px;line-height:1.5}
.sim-scroll-hint{font-size:11px;color:var(--text-muted);margin:0 0 6px}
.sim-macro-table{overflow-x:auto;max-width:100%;border-radius:var(--radius);border:1px solid var(--border);background:var(--card-bg);box-shadow:var(--shadow)}
.sim-macro-table table{min-width:0}
.sim-macro-table thead tr{background:#f8fafc;color:var(--text-muted)}
.sim-macro-table tbody tr:nth-child(even){background:#f8fafc}
.sim-macro-table tbody tr:hover{background:#f8fafc}
.sim-empty{text-align:center;padding:48px;color:var(--text-muted)}

/* Hamburger (mobile) — display/padding/bg/border migrated to Tailwind utilities in index.html */

/* Wizard */
#wizard-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,.65);z-index:9980;
  pointer-events:all;transition:opacity .2s;
}
#wizard-card{
  position:fixed;z-index:9995;width:300px;
  background:var(--sidebar-bg);color:#f1f5f9;
  border-radius:14px;padding:22px 20px 18px;
  box-shadow:0 12px 40px rgba(0,0,0,.5);
  pointer-events:all;transition:opacity .2s;
}
.wizard-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.wizard-dots{display:flex;gap:5px}
.wizard-dot{width:6px;height:6px;border-radius:50%;background:#334155;transition:background .2s,transform .2s}
.wizard-dot.active{background:var(--accent);transform:scale(1.3)}
.wizard-skip{background:none;border:none;color:#475569;font-size:12px;cursor:pointer;padding:2px 6px;border-radius:4px;transition:color .15s}
.wizard-skip:hover{color:#94a3b8}
.wizard-title{font-size:15px;font-weight:700;color:#f1f5f9;margin-bottom:8px;line-height:1.3}
.wizard-body{font-size:13px;color:#cbd5e1;line-height:1.65;margin-bottom:18px}
.wizard-footer{display:flex;justify-content:space-between;align-items:center}
.wizard-step-label{font-size:11px;color:#475569}
.wizard-btn-next{
  background:var(--accent);color:#fff;border:none;border-radius:8px;
  padding:9px 18px;font-size:13px;font-weight:600;cursor:pointer;
  transition:background .15s,transform .1s;
}
.wizard-btn-next:hover{background:#2563eb}
.wizard-btn-next:active{transform:scale(.97)}
.wizard-highlight{
  outline:2px solid var(--accent);outline-offset:4px;
  border-radius:6px;
}
.wizard-help-btn{
  width:100%;padding:9px;background:var(--sidebar-hover);
  color:#f1f5f9;border:none;border-radius:6px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;gap:8px;
  font-size:13px;transition:background .15s;
}
.wizard-help-btn:hover{background:#475569}

/* Sidebar overlay — display/position/bg/z-index migrated to Tailwind utilities in index.html */

/* ── Ajuda & Tutoriais ── */
.nav-item-link{text-decoration:none;}

.help-ad-container{
  min-height:90px;
  margin-bottom:28px;
  padding:12px;
  background:#f8fafc;
  border:1px solid var(--border);
  border-radius:var(--radius);
}
.help-ad-label{
  font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;
  color:var(--text-muted);text-align:center;margin-bottom:8px;
}

.help-card-group{margin-bottom:32px;}
.help-card-group:last-child{margin-bottom:0;}
.help-group-title{font-size:13px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;margin:0 0 8px;}

.help-cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;margin-top:12px;}

.help-card{
  background:var(--card-bg);
  border:1px solid var(--border);
  border-radius:10px;
  padding:20px;
  display:flex;flex-direction:column;gap:8px;
  min-width:0;
  box-shadow:var(--shadow);
}
.help-card-link{
  text-decoration:none;color:inherit;
  transition:border-color .15s,box-shadow .15s,transform .1s;
  cursor:pointer;
}
.help-card-link:hover{
  border-color:var(--accent);
  box-shadow:0 4px 16px rgba(59,130,246,.12);
  transform:translateY(-2px);
}
.help-card-link:focus-visible{outline:2px solid var(--accent);outline-offset:3px;}

.help-card-icon{font-size:28px;line-height:1;}
.help-card-title{font-size:15px;font-weight:600;margin:0;color:var(--text);}
.help-card-desc{font-size:13px;color:var(--text-muted);flex:1;margin:0;line-height:1.5;}
.help-card-tags{display:flex;flex-wrap:wrap;gap:6px;}
.help-tag{font-size:11px;background:#f1f5f9;border:1px solid var(--border);border-radius:4px;padding:2px 8px;color:var(--text-muted);}
.help-card-cta{
  display:inline-block;margin-top:8px;
  font-size:13px;font-weight:600;color:var(--accent);
  align-self:flex-start;transition:color .15s;
}
.help-card-link:hover .help-card-cta{color:#2563eb;}

#page-ajuda .page-desc{
  color:var(--text-muted);font-size:13px;
  margin-top:4px;margin-bottom:20px;line-height:1.5;
}

@media(max-width:600px){
  .help-cards-grid{grid-template-columns:1fr;gap:12px;}
  .help-card{padding:16px;}
  .help-ad-container{
    margin-left:-10px;margin-right:-10px;
    border-radius:0;border-left:none;border-right:none;
    padding:12px 10px;
  }
}
@media(min-width:601px) and (max-width:900px){
  .help-cards-grid{grid-template-columns:repeat(2,1fr);}
}

/* ── Cookie Consent Banner ── */
/* #185: cores fixas. Antes o fundo vinha de var(--bg-card), que não existe, e o
   texto herdava a cor escura do tema claro (contraste ~1,1:1). */
.cookie-banner{
  position:fixed;bottom:0;left:0;right:0;
  background:#1e293b;color:#f1f5f9;
  border-top:1px solid #334155;
  padding:14px 24px;
  display:none;flex-direction:row;align-items:center;gap:16px;
  z-index:9999;
  box-shadow:0 -2px 12px rgba(0,0,0,.25);
}
.cookie-banner.visible{display:flex;}
/* #185: com o menu lateral aberto no celular, o banner cobria o botão Sair. */
body:has(#sidebar.translate-x-0) .cookie-banner.visible{display:none;}
.cookie-banner-text{font-size:13px;flex:1;min-width:0;margin:0;line-height:1.5;color:#f1f5f9;}
.cookie-banner-text a{color:#93c5fd;text-decoration:underline;}
.cookie-banner-actions{display:flex;gap:10px;flex-shrink:0;}
.cookie-accept-btn,.cookie-decline-btn{white-space:nowrap;}
.cookie-decline-btn{background:transparent;color:#f1f5f9;border:1px solid #64748b;}
.cookie-decline-btn:hover{background:#334155;}
@media(max-width:600px){
  .cookie-banner{flex-direction:column;align-items:stretch;gap:10px;padding:14px 16px;}
  .cookie-banner-actions{flex-direction:column-reverse;}
  .cookie-accept-btn,.cookie-decline-btn{width:100%;text-align:center;justify-content:center;}
}

/* @media(max-width:768px) layout rules migrated to Tailwind responsive utilities — see index.html */
@media(max-width:768px){
  /* Retained: wizard centering (complex transform — not idiomatic Tailwind) */
  #wizard-card{
    position:fixed;
    left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;
    transform:translate(-50%,-50%);
    width:calc(100vw - 32px);max-width:320px;
  }
  .page-title-bar{display:none}
  .page-desc{display:none!important}
  body{font-size:16px}
  .card-label{font-size:13px}
  .card-value{font-size:22px}
  th,td{font-size:13px;padding:8px 10px}
  .btn{min-height:44px;padding:10px 18px}
}

/* @media(max-width:480px) retained rules */
@media(max-width:480px){
  .rec-tabs-bar{display:none!important}
  .rec-mobile-nav{display:block}
  .rec-toolbar{flex-direction:column;align-items:stretch}
  .rec-stats-bar{text-align:center}
  #rec-table-view{display:none!important}
  .rec-quickadd-form{grid-template-columns:1fr}
  .rec-qa-submit{width:100%;justify-content:center}
  .rec-action-bar{flex-direction:column}
  .rec-action-bar .btn{width:100%;justify-content:center}
  .rec-panel-inner{padding:12px 14px}
  .chart-wrap{height:160px!important}
}

/* feat/008: Tabelas de Ações/FIIs: word-break + larguras proporcionais para 10 colunas */
#tbl-acoes td,#tbl-acoes th,
#tbl-fiis td,#tbl-fiis th{word-break:break-word;overflow-wrap:break-word}
/* 1=Ticker 2=Produto 3=Qtd 4=P.Médio 5=Valor 6=DY 7=%Alvo 8=%Atual 9=Dif 10=Viés */
#tbl-acoes th:nth-child(1),#tbl-fiis th:nth-child(1){width:9%}
#tbl-acoes th:nth-child(2),#tbl-fiis th:nth-child(2){width:22%}
#tbl-acoes th:nth-child(3),#tbl-fiis th:nth-child(3){width:6%}
#tbl-acoes th:nth-child(4),#tbl-fiis th:nth-child(4){width:9%}
#tbl-acoes th:nth-child(5),#tbl-fiis th:nth-child(5){width:11%}
#tbl-acoes th:nth-child(6),#tbl-fiis th:nth-child(6){width:8%}
#tbl-acoes th:nth-child(7),#tbl-fiis th:nth-child(7){width:8%}
#tbl-acoes th:nth-child(8),#tbl-fiis th:nth-child(8){width:8%}
#tbl-acoes th:nth-child(9),#tbl-fiis th:nth-child(9){width:9%}
#tbl-acoes th:nth-child(10),#tbl-fiis th:nth-child(10){width:10%}
/* tablet 768–1023px: oculta "Preço Médio" (4ª col) para caber sem scroll */
@media(min-width:768px) and (max-width:1023px){
  #tbl-acoes th:nth-child(4),#tbl-acoes td:nth-child(4),
  #tbl-fiis th:nth-child(4),#tbl-fiis td:nth-child(4){display:none}
}

/* FR-013: Dark mode via prefers-color-scheme (T045) */
@media(prefers-color-scheme:dark){
  /* T(mobile-p2): reatribuição sistêmica dos tokens de cor — corrige de uma vez
     todo consumidor de var(--text)/var(--text-muted)/var(--border)/var(--card-bg)
     que ainda não tinha par escuro (ex.: .rec-cell-input, .sim-macro-table,
     .form-group label). Ver docs/ux/mobile-leitura-cores-plano.md, Fase 3. */
  :root{--text:#f1f5f9;--text-muted:#94a3b8;--border:#334155;--card-bg:#1e293b}
  /* #193: no claro os tons semânticos escureceram para passar de 4,5:1 sobre
     branco; sobre o fundo escuro eles precisam ser os tons claros. */
  :root{--accent:#60a5fa;--success:#4ade80;--warning:#fbbf24;--danger:#f87171}
  .btn-primary,.wizard-btn-next{background:#2563eb}
  .btn-primary:hover{background:#1d4ed8}

  body{background:#0f172a;color:#f1f5f9}
  .card{background:#1e293b;border-color:#334155}
  .topbar{background:#1e293b;border-color:#334155}
  .table-wrap{background:#1e293b;border-color:#334155}
  th{background:#0f172a;color:#94a3b8}
  td{border-color:#334155}
  tbody tr:hover{background:#334155}
  .card-label{color:#94a3b8}
  .rec-collapsible-panel{background:#1e293b;border-color:#334155}
  .upload-box{background:#1e293b;border-color:#334155}
  .sim-form-card{background:#1e293b;border-color:#334155}
  .topbar-search{background:#0f172a;border-color:#334155;color:#f1f5f9}
  .badge-blue{background:#1d4ed81a;color:#93c5fd}
  .badge-green{background:#15803d1a;color:#4ade80}
  .badge-orange{background:#c2410c1a;color:#fb923c}
  .badge-purple{background:#4f46e52e;color:#a5b4fc}
  .badge-amber{background:#f59e0b1a;color:#fbbf24}
  .topbar-title{color:#f1f5f9}
  pre{background:#0f172a;border-color:#334155;color:#cbd5e1}

  /* T(mobile-p0): componentes de cor semântica sem par escuro — ver docs/ux/mobile-leitura-cores-plano.md */
  .pill-comprar{background:#15803d1a;color:#4ade80}
  .pill-aguardar{background:#92400e1a;color:#fbbf24}
  .pill-default{background:#334155;color:#cbd5e1}

  .diff-positive{color:#4ade80}
  .diff-negative{color:#f87171}
  .diff-neutral{color:#94a3b8}

  /* #195: par escuro das caixas de aviso — fundo translúcido, texto claro. */
  .notice-amber{background:#f59e0b1a;border-color:#92400e}
  .notice-success{background:#15803d1a;border-color:#166534}
  .notice-danger{background:#dc26261a;border-color:#7f1d1d}
  .notice-purple{background:#8b5cf61a;border-color:#4c1d95;color:#c4b5fd}

  .rent-tag{color:#c4b5fd}
  .price-tag{background:#15803d1a;color:#4ade80}
  .m-card:active{background:#273449}

  .btn-secondary{background:#334155;color:#f1f5f9;border-color:#475569}
  .btn-secondary:hover{background:#475569}
  .btn-outline{background:#1e293b;color:#f1f5f9;border-color:#334155}
  .btn-outline:hover{background:#334155}
  .btn-danger{background:#7f1d1d33;color:#fca5a5;border-color:#7f1d1d}
  .btn-danger:hover{background:#7f1d1d59}

  .sim-alert{background:#92400e26;border-color:#92400e80;color:#fbbf24}

  /* #291: par escuro dos selos e avisos do Simular (fundo translúcido, texto claro; ≥ 4,5:1). */
  :root{
    --bg-muted:#334155;--row-alt:#1a2436;
    --blk-teto-fg:#f87171;--blk-teto-bg:#ef444433;
    --blk-cotacao-fg:#fbbf24;--blk-cotacao-bg:#f59e0b26;
    --blk-invalido-fg:#94a3b8;--blk-invalido-bg:#94a3b826;
  }
  .sim-badge-green{background:#16a34a33;color:#4ade80}
  .sim-badge-amber{background:#f59e0b26;color:#fbbf24}
  .sim-badge-blue{background:#3b82f633;color:#93c5fd}
  .sim-badge-slate{background:#94a3b826;color:#cbd5e1}
  .sim-badge-red{background:#ef444433;color:#fca5a5}
  .sim-notice-blue{background:#3b82f61a;border-color:#1e40af;color:#93c5fd}
  .sim-notice-slate{background:#94a3b81a;border-color:#475569;color:#cbd5e1}
  .sim-notice-amber{background:#f59e0b1a;border-color:#92400e;color:#fbbf24}

  .help-tag{background:#334155;border-color:#475569;color:#cbd5e1}
  .help-ad-container{background:#1e293b;border-color:#334155}

  .upload-filename{background:#0f172a;border-color:#334155;color:#f1f5f9}

  .rec-card-item{background:#1e293b;border-color:#334155}
  .rec-carteira-select{background:#1e293b;color:#f1f5f9;border-color:#334155}
  .rec-qa-input,.rec-qa-select{background:#1e293b;color:#f1f5f9;border-color:#334155}
  .rec-nav-bar,.rec-action-bar{border-color:#334155}
  .help-card{background:#1e293b;border-color:#334155}
  .help-card-title{color:#f1f5f9}
  .chart-card{background:#1e293b;border-color:#334155}
  .bar-track{background:#334155}
  .bar-marker{background:#e2e8f0;opacity:.8}
  .bar-comprar{background:#4ade80}
  .bar-aguardar{background:#fbbf24}
  .bar-over{background:#64748b}
  .bar-neutral{background:#60a5fa}
  .vt-btn{background:#1e293b;border-color:#334155;color:#94a3b8}
  .vt-btn:hover{background:#334155}
  .vt-btn.is-on{background:#1d4ed82e;border-color:#60a5fa;color:#93c5fd}

  .row-green td{background:#16a34a3d !important}
  .row-yellow td{background:#d977063d !important}
  .row-orange td{background:#ffffff0a !important}
  .row-missing td{background:#4f46e54d !important}
  .row-green td:first-child{box-shadow:inset 4px 0 0 #4ade80}
  .row-yellow td:first-child{box-shadow:inset 4px 0 0 #fbbf24}
  .row-missing td:first-child{box-shadow:inset 4px 0 0 #a5b4fc}
  .row-orange td:first-child{
    background-image:repeating-linear-gradient(135deg,#94a3b8 0 3px,transparent 3px 6px) !important;
  }
  .legend-hatch{
    background-image:repeating-linear-gradient(135deg,#94a3b8 0 2px,transparent 2px 4px);
    border-color:#475569;
  }
  .row-green td:first-child::after,
  .row-yellow td:first-child::after{color:#94a3b8}
  .row-orange td:first-child::after{color:#cbd5e1}
  tbody tr.row-green:hover td{background:#16a34a5c !important}
  tbody tr.row-yellow:hover td{background:#d977065c !important}
  tbody tr.row-orange:hover td{background:#ffffff14 !important}
  tbody tr.row-missing:hover td{background:#4f46e570 !important}

  /* T(mobile-p2): fundos claros hardcoded (não usam var()) que, com o texto
     agora claro por padrão, ficavam claro-sobre-claro em interação (foco/hover/drag) */
  th:hover{background:#1e293b}
  .form-group input,.form-group select{background:#0f172a;color:#f1f5f9}
  .form-group input:focus,.form-group select:focus{background:#1e293b}
  .input-field{background:#0f172a;color:#f1f5f9;border-color:#334155}
  .input-field:focus{background:#1e293b}
  .rec-cell-input:focus,.rec-cell-select:focus{background:#1d4ed81a}
  .rec-cell-input:hover,.rec-cell-select:hover{background:#334155}
  .rec-cell-input,.rec-cell-select{border-color:#6b7a90}
  .upload-box:hover,.upload-box.dragover{background:#1d4ed81a}
  .sim-macro-table thead tr{background:#0f172a}
  .sim-macro-table tbody tr:nth-child(even){background:#00000033}
  .sim-macro-table tbody tr:hover{background:#334155}
}

/* ── FR-008 (#54): auto-zoom do iOS Safari ─────────────────────────────────
   O iOS dá zoom automático ao focar um campo com font-size < 16px, o que
   reposiciona a viewport e cria overflow horizontal. A regra abaixo garante o
   mínimo em TODO input/select/textarea abaixo de 768px, inclusive os criados
   dinamicamente por JS. Acima disso o desktop mantém os tamanhos originais.
   A meta viewport continua sem `user-scalable=no`: o zoom manual segue
   disponível, o que se perde é só o zoom *involuntário* ao focar. */
.input-competencia{
  padding:4px 8px;border:1px solid var(--border);border-radius:6px;
  background:var(--surface);color:var(--text);font-size:13px;font-family:inherit;
}
@media(max-width:767px){
  input,select,textarea,.input-competencia{font-size:16px}
}

/* ── FR-003 (#49): cards da página Upload lado a lado a partir de 768px ────
   Eram `min-width:280px` inline. Com a sidebar passando a ocupar 230px já em
   768px (e não mais só em 1024px), sobram ~506px de conteúdo: dois cards de
   280px + gap não cabem e quebravam para uma coluna justamente no breakpoint
   que a spec exige lado a lado. 220px cabe (≈243px cada) e ainda empilha em
   390px, onde a área útil é ~358px. */
.upload-card{
  flex:1;min-width:220px;background:var(--surface);
  border:1px solid var(--border);border-radius:12px;padding:24px 28px;
}
@media(max-width:480px){
  .upload-card{padding:18px 16px}
}

/* ── FR-005 (#53): alvos de toque de 44x44 no mobile ───────────────────────
   Varri os elementos interativos realmente visiveis nas 8 paginas da SPA em
   390px e achei 18 abaixo de 44px: os botoes da pagina Conta, os alternadores
   Tabela/Graficos, os links inline "Configurar", o checkbox de estrategia e o
   <summary> do painel Avancado. As regras abaixo sobem a area clicavel so
   abaixo de 768px — no desktop a densidade original e preservada, porque la o
   ponteiro e preciso e o criterio nao se aplica. */
@media(max-width:767px){
  .btn,.btn-primary,.btn-secondary,.btn-outline,.btn-danger,.vt-btn{
    min-height:44px;
  }
  /* Link dentro de texto corrido: inline-flex para a altura valer sem quebrar
     o fluxo do paragrafo. */
  .link-tap{display:inline-flex;align-items:center;min-height:44px}
  /* O alvo de um checkbox e o label que o envolve, nao a caixa em si. */
  label:has(> input[type=checkbox]){min-height:44px}
  input[type=checkbox]{width:20px;height:20px}
  details > summary{min-height:44px;display:flex;align-items:center}
  /* Controles do banner de erro de polling: ficam ocultos por padrao, entao
     escaparam da varredura inicial da #53 — so apareceram ao exercitar o
     estado de falha da #55. */
  #polling-error-banner button{min-height:44px;min-width:44px;justify-content:center}
}

/* ── FR-002/FR-011 (#57): foco visivel, estado pressionado e validacao ─────
   Varios `:focus` do arquivo zeram o outline sem por nada no lugar — quem
   navega por teclado perde a referencia de onde esta. As regras abaixo
   restabelecem um anel visivel em TODO interativo, usando `:focus-visible`
   para nao poluir o clique de mouse. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible,
.nav-item:focus-visible,
.vt-btn:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:2px;
  border-radius:4px;
}

/* Estado pressionado: feedback tatil em tudo que e clicavel, nao so nos
   botoes que ja tinham `active:` via Tailwind. */
.btn:active,.btn-primary:active,.btn-secondary:active,.btn-outline:active,
.btn-danger:active,.vt-btn:active,.nav-item:active,
th[data-sort]:active,.sort-header:active,[role="button"]:active{
  opacity:.75;
}

/* Campo invalido: borda + icone, nunca so cor — daltonico nao distingue
   vermelho de cinza. O `:not(:placeholder-shown)` evita marcar campo vazio
   que o usuario ainda nem tocou. */
input:invalid:not(:placeholder-shown),
select:invalid,
textarea:invalid:not(:placeholder-shown){
  border-color:var(--danger);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ef4444' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='8' x2='12' y2='12'/%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 10px center;
  background-size:16px;
  padding-right:32px;
}

/* ── FR-004 (#56): tabela de simulacao fora do mobile ──────────────────────
   `#sim-table-wrap` tem `display` controlado por estilo INLINE pelo JS, que
   vence qualquer classe utilitaria — por isso a tabela de 12 colunas continuava
   aparecendo em 390px ao lado dos cards. Abaixo de 768px ela some de vez e
   `#mobile-sim-cards` fica como unica representacao. */
@media(max-width:767px){
  #sim-table-wrap{display:none!important}
}

/* ── Análise de Ativos (beta) ───────────────────────────────────────────── */
.nav-beta-badge{margin-left:auto;font-size:9.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  padding:2px 6px;border-radius:9px;background:rgba(245,158,11,.18);color:#fbbf24}
.nav-item.active .nav-beta-badge{background:#0f172a;color:#fbbf24}
.aa-beta-pill{font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:2px 8px;
  border-radius:10px;background:var(--amber-bg);color:#b45309;border:1px solid #fcd34d}
.aa-disclaimer{font-size:12.5px;line-height:1.5;color:#92400e;background:var(--amber-bg);border:1px solid #fde68a;
  border-radius:8px;padding:9px 12px;margin-bottom:12px}
.aa-search-card{max-width:680px;margin-bottom:14px}
.aa-search-label{display:block;font-size:12px;color:var(--text-muted);font-weight:500;margin-bottom:6px}
.aa-search-row{display:flex;gap:10px;align-items:stretch}
.aa-search-box{position:relative;flex:1;min-width:0}
.aa-search-input{width:100%;min-height:44px;font-size:16px;text-transform:uppercase;letter-spacing:.02em}
.aa-search-input::placeholder{text-transform:none;letter-spacing:0}
.aa-submit{min-height:44px;justify-content:center;flex-shrink:0}
.aa-suggestions{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:30;list-style:none;
  background:var(--card-bg);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(15,23,42,.14);
  max-height:320px;overflow-y:auto}
.aa-option{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;min-height:44px;
  padding:8px 12px;cursor:pointer;font-size:13px;border-bottom:1px solid var(--border)}
.aa-option:last-child{border-bottom:none}
.aa-option:hover,.aa-option.active{background:rgba(59,130,246,.10)}
.aa-option-ticker{font-weight:700}
.aa-option-name{color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.aa-option-kind{font-size:11px;font-weight:600;color:var(--accent)}
.aa-status{display:flex;align-items:center;gap:10px;font-size:13px;padding:12px 14px;border-radius:8px;
  margin-bottom:12px;border:1px solid var(--border);background:var(--card-bg);color:var(--text-muted)}
.aa-status-error{color:#b91c1c;background:#fef2f2;border-color:#fecaca}
.aa-header{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px 24px;margin-bottom:12px}
.aa-header-main{min-width:0}
.aa-title-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.aa-ticker{font-size:22px;font-weight:800;letter-spacing:.01em}
.aa-kind{font-size:11px;font-weight:700;padding:3px 8px;border-radius:10px;background:#dbeafe;color:#1d4ed8}
.aa-kind[data-kind="fii"]{background:#dcfce7;color:#15803d}
.aa-name{font-size:14px;font-weight:600;margin-top:4px;overflow-wrap:anywhere}
.aa-meta{font-size:12px;color:var(--text-muted);margin-top:3px}
.aa-header-side{display:flex;flex-direction:column;align-items:flex-end;text-align:right}
.aa-price-row{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.aa-price{font-size:22px;font-weight:800}
.aa-price-missing{font-size:15px;color:var(--warning)}
.aa-stale{display:inline-block;margin-left:6px;font-size:11px;font-weight:700;padding:1px 7px;border-radius:9px;
  background:#ffedd5;color:#c2410c}
.aa-notices{list-style:none;margin:0 0 12px;display:flex;flex-direction:column;gap:6px}
.aa-notices li{font-size:12.5px;padding:8px 12px;border-radius:8px;background:var(--amber-bg);color:#92400e;
  border-left:3px solid var(--amber)}
.aa-groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,440px),1fr));gap:12px;align-items:start}
.aa-group[data-group="governanca"],.aa-group[data-group="fundo"]{grid-column:1/-1}
.aa-group-title{font-size:14px;font-weight:700;margin-bottom:10px}
.aa-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;align-items:start}
.aa-ind{border:1px solid var(--border);border-radius:8px;padding:8px 10px 10px 12px;min-width:0;background:rgba(148,163,184,.06)}
.aa-ind-head{display:flex;align-items:center;justify-content:space-between;gap:4px;min-height:44px}
.aa-ind-label{font-size:12px;font-weight:600;color:var(--text-muted);line-height:1.3}
.aa-help-btn{position:relative;flex-shrink:0;width:44px;height:44px;margin:-6px -6px -6px 0;border:none;background:transparent;
  cursor:pointer;font-size:0;color:transparent}
.aa-help-btn::before{content:"?";position:absolute;inset:11px;display:flex;align-items:center;justify-content:center;
  border-radius:50%;border:1px solid var(--border);font-size:12px;font-weight:700;color:var(--text-muted);background:var(--card-bg)}
.aa-help-btn[aria-expanded="true"]::before{background:var(--accent);border-color:var(--accent);color:#fff}
.aa-help-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-4px;border-radius:50%}
.aa-ind-value{font-size:19px;font-weight:700;line-height:1.25;overflow-wrap:anywhere}
.aa-ind-empty .aa-ind-value{color:var(--text-muted)}
.aa-ind-text .aa-ind-value{font-size:14px;font-weight:600;overflow-wrap:break-word;word-break:normal}
.aa-ind-reason{font-size:11.5px;color:var(--text-muted);margin-top:3px;line-height:1.35}
.aa-help{font-size:12px;line-height:1.45;color:var(--text-muted);margin-top:8px;padding-top:8px;border-top:1px dashed var(--border)}
.aa-help p+p{margin-top:4px}
.aa-help strong{color:var(--text)}
@media(max-width:600px){
  .aa-search-row{flex-direction:column}
  .aa-submit{width:100%}
  .aa-header-side{align-items:flex-start;text-align:left}
  .aa-price-row{justify-content:flex-start}
  .aa-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .aa-ind{padding:6px 8px 8px 10px}
  .aa-ind-value{font-size:16px}
  .aa-groups{gap:10px}
}
@media(prefers-color-scheme:dark){
  .aa-beta-pill{background:rgba(245,158,11,.15);color:#fbbf24;border-color:rgba(245,158,11,.4)}
  .aa-disclaimer,.aa-notices li{background:rgba(245,158,11,.10);color:#fcd34d;border-color:rgba(245,158,11,.35)}
  .aa-status-error{background:rgba(239,68,68,.12);color:#fca5a5;border-color:rgba(239,68,68,.4)}
  .aa-kind{background:#1d4ed81a;color:#93c5fd}
  .aa-kind[data-kind="fii"]{background:#15803d1a;color:#4ade80}
  .aa-stale{background:#c2410c1a;color:#fb923c}
  .aa-search-input{background:#0f172a}
}

/* #191: link "Pular para o conteúdo" (visível só com foco) e texto só para leitor de tela */
.skip-link{position:absolute;left:8px;top:-60px;z-index:10000;background:#1e293b;color:#fff;padding:10px 14px;border-radius:6px;font-size:14px;font-weight:600;text-decoration:none}
.skip-link:focus{top:8px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
#conteudo:focus{outline:none}

/* A2: evolução do patrimônio — barras verticais empilhadas (js/utils/patrimony-chart.js). */
.pat-card{margin-bottom:20px}
.pat-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.pat-head h2{font-weight:600}
.pat-sub{font-size:12px;color:var(--text-muted);margin:2px 0 12px}
.pat-link{background:none;border:0;padding:10px 0;min-height:44px;color:var(--accent);font-size:13px;font-weight:600;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center}
.pat-link:hover{text-decoration:underline}
.pat-chart{list-style:none;margin:0;padding:8px 0 0;display:flex;align-items:flex-end;gap:10px;height:230px;overflow-x:auto;overflow-y:visible}
.pat-col{position:relative;flex:1 0 52px;max-width:96px;height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;border-radius:6px;outline:none}
.pat-col:focus-visible{box-shadow:0 0 0 2px var(--accent)}
.pat-total{font-size:11px;font-weight:600;white-space:nowrap;margin-bottom:4px;font-variant-numeric:tabular-nums}
.pat-stack{display:flex;flex-direction:column-reverse;width:70%;min-height:2px;border-radius:5px 5px 0 0;overflow:hidden;background:var(--border)}
.pat-seg{display:block;width:100%}
.pat-month{font-size:11px;color:var(--text-muted);margin-top:6px;height:16px;white-space:nowrap}
.pat-acoes{background:var(--accent)}
.pat-fiis{background:var(--success)}
.pat-rf{background:#f59e0b}
.pat-tesouro{background:#14b8a6}
.pat-gap{align-self:stretch;flex:0 0 0;border-left:2px dashed var(--border);margin:24px 2px 22px}
.pat-tip{display:none;position:absolute;top:0;left:50%;transform:translateX(-50%);z-index:5;min-width:170px;padding:8px 10px;border-radius:8px;background:#0f172a;color:#f8fafc;font-size:11px;line-height:1.5;box-shadow:var(--shadow);pointer-events:none}
.pat-tip strong,.pat-tip span{display:block;white-space:nowrap}
.pat-col:hover .pat-tip,.pat-col:focus .pat-tip{display:block}
/* Primeira e última coluna: o tooltip não sai pela borda (o gráfico tem overflow para rolar no celular). */
.pat-col:first-child .pat-tip{left:0;transform:none}
.pat-col:last-child .pat-tip{left:auto;right:0;transform:none}
.pat-total-short{display:none}
@media(max-width:640px){.pat-total-full{display:none}.pat-total-short{display:inline}.pat-chart{gap:6px}}
.pat-footnote{font-size:11px;color:var(--text-muted);margin:6px 0 0}
.pat-dot{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px;vertical-align:baseline}
.pat-legend{display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--text-muted);margin-top:10px}
.pat-summary{font-size:14px;font-weight:600;margin:10px 0 0}
.pat-summary:empty{display:none}
.pat-notice{font-size:13px;color:var(--text-muted);margin:12px 0 0;padding:10px 12px;border-radius:8px;background:var(--bg);border:1px solid var(--border)}
.pat-notice a{color:var(--accent);font-weight:600}
.pat-empty,.pat-error{padding:16px 0;font-size:13px;color:var(--text-muted)}
.pat-empty p,.pat-error p{margin:0 0 10px}
.pat-skeleton .pat-stack{width:60%;animation:pat-pulse 1.6s ease-in-out infinite}
@keyframes pat-pulse{50%{opacity:.45}}
.pat-table,.pat-imports{width:100%;border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums}
.pat-table th,.pat-table td,.pat-imports th,.pat-imports td{padding:8px 10px;border-bottom:1px solid var(--border);text-align:right;vertical-align:top}
.pat-table th:first-child,.pat-imports th,.pat-imports td{text-align:left}
.pat-panel{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}
.pat-panel-title{font-size:14px;font-weight:600;margin:0}
.pat-month-input{min-height:40px;padding:6px 8px;border:1px solid var(--border);border-radius:6px;background:var(--card-bg);color:var(--text);font-size:13px}
.pat-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.pat-btn{font-size:12px;min-height:40px;padding:6px 12px}
.pat-hint{display:block;font-size:11px;color:var(--text-muted);margin-top:4px}
.pat-badge{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;font-size:11px;font-weight:600;background:#eff6ff;color:#1d4ed8}
.pat-row-status{font-size:12px;color:var(--text-muted);flex-basis:100%}
.pat-row-status:empty{display:none}
@media(prefers-color-scheme:dark){.pat-badge{background:#1e3a8a;color:#dbeafe}}
