/* Valores de reserva do tema. Cada marca sobrescreve estas variáveis em /marca.css (gerado pelo servidor a partir das cores validadas da marca). */
:root { --bg:#101216; --panel:#171a20; --panel2:#1d212a; --field:#0b0d10; --line:#262b36; --text:#e8eaef; --muted:#8b93a3;
        --brand:#d4a63f; --on-brand:#111111; --accent:#f0c96a; --on-bad:#ffffff;
        --ok:#56d364; --ok-bg:#12301b; --ok-line:#1f6f31; --bad:#f85149; --bad-bg:#3d1518; --bad-line:#8e2b30;
        --warn:#e3b341; --warn-bg:#3a2f0f; --warn-line:#7a5f1c; --info:#79c0ff; --info-bg:#10283f; --info-line:#2a5a8a; --bronze:#e0a070; }
* { box-sizing: border-box; }
body { margin:0; background:var(--bg); color:var(--text); font:15px/1.5 system-ui,Segoe UI,Roboto,sans-serif; }
a { color:var(--accent); text-decoration:none; } a:hover { text-decoration:underline; }
.app { display:grid; grid-template-columns:230px 1fr; min-height:100vh; }
.side { background:var(--panel); border-right:1px solid var(--line); padding:16px 12px; display:flex; flex-direction:column; gap:12px; }
.brand { font-weight:700; font-size:18px; padding:4px 8px; }
.brand img, .login .logo { display:block; max-width:100%; max-height:44px; width:auto; height:auto; }
.side nav { display:flex; flex-direction:column; gap:2px; }
.side nav a { padding:8px 10px; border-radius:6px; color:var(--text); }
.side nav a:hover, .side nav a.on { background:var(--panel2); text-decoration:none; }
.side nav a.on { box-shadow:inset 3px 0 0 var(--brand); }
.logout { margin-top:auto; border-top:1px solid var(--line); padding-top:12px; }
.who { margin-bottom:8px; } small, .muted, .small { color:var(--muted); font-size:12.5px; }
main { padding:22px 28px; max-width:1400px; width:100%; }
h1 { margin:0 0 16px; font-size:22px; } h2 { font-size:16px; margin:22px 0 8px; }
.cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr)); gap:12px; margin-bottom:8px; }
.card { background:var(--panel); border:1px solid var(--line); border-radius:8px; padding:12px 14px; }
.card span { color:var(--muted); font-size:13px; display:block; } .card b { font-size:24px; }
.card.bad b, .bad { color:var(--bad); } .ok { color:var(--ok); }
.scroll { overflow-x:auto; border:1px solid var(--line); border-radius:8px; }
table { border-collapse:collapse; width:100%; background:var(--panel); }
th, td { padding:8px 10px; border-bottom:1px solid var(--line); text-align:left; white-space:nowrap; font-size:14px; }
th { color:var(--muted); font-weight:600; background:var(--panel2); position:sticky; top:0; }
tr:last-child td { border-bottom:none; }
.acts { display:flex; gap:6px; } .acts form { margin:0; }
.pill { display:inline-block; padding:1px 8px; border-radius:20px; background:var(--panel2); font-size:12.5px; }
.pill.ok, .pill.active, .pill.green, .pill.FILLED { background:var(--ok-bg); color:var(--ok); }
.pill.warning, .pill.yellow, .pill.pending, .pill.paused { background:var(--warn-bg); color:var(--warn); }
.pill.critical, .pill.red, .pill.rejected, .pill.suspended, .pill.failed, .pill.closed_by_dest { background:var(--bad-bg); color:var(--bad); }
.pill.info, .pill.distributed { background:var(--info-bg); color:var(--info); }
button { background:var(--brand); color:var(--on-brand); border:0; border-radius:6px; padding:8px 14px; cursor:pointer; font-size:14px; font-weight:600; }
button:hover { filter:brightness(1.1); } button.danger, .mini.danger { background:var(--bad); color:var(--on-bad); }
button.mini { padding:3px 9px; font-size:12.5px; background:var(--panel2); color:var(--text); border:1px solid var(--line); font-weight:500; }
select.mini { padding:2px 6px; font-size:12.5px; margin-right:4px; max-width:160px; }        /* seleção dentro da célula de ações (ex.: a marca da conta) */
.fform { display:grid; gap:10px; max-width:640px; background:var(--panel); border:1px solid var(--line); border-radius:8px; padding:14px; }
label { display:grid; gap:4px; font-size:13.5px; color:var(--muted); } label.check { display:flex; gap:8px; align-items:center; color:var(--text); }
input, select, textarea { background:var(--field); color:var(--text); border:1px solid var(--line); border-radius:6px; padding:8px 10px; font:inherit; }
input[type=checkbox] { width:auto; }
.flash { padding:10px 14px; border-radius:6px; margin-bottom:12px; background:var(--ok-bg); color:var(--ok); border:1px solid var(--ok-line); }
.flash.erro { background:var(--bad-bg); color:var(--bad); border-color:var(--bad-line); }
.login { max-width:380px; margin:8vh auto; background:var(--panel); border:1px solid var(--line); border-radius:10px; padding:26px; }
.login.wide { max-width:560px; } .login form { display:grid; gap:12px; }
.login h1 { margin-bottom:4px; } .login .tagline { margin:0 0 16px; }
.qr svg { display:block; width:240px; height:240px; background:#fff; padding:12px; border-radius:6px; }
.terms { white-space:pre-wrap; max-height:260px; overflow:auto; background:var(--field); padding:12px; border-radius:6px; font-size:13px; }
code { background:var(--field); padding:1px 5px; border-radius:4px; } code.small { font-size:12px; color:var(--muted); white-space:normal; }
footer { margin-top:40px; color:var(--muted); font-size:12px; } footer .legal { max-width:760px; white-space:pre-line; margin-top:4px; }
@media (max-width: 860px) { .app { grid-template-columns:1fr; } .side { flex-direction:row; flex-wrap:wrap; align-items:center; } .side nav { flex-direction:row; flex-wrap:wrap; } main { padding:14px; } }

.pill.ouro { background:var(--warn-bg); color:var(--warn); } .pill.prata { background:var(--panel2); color:var(--text); } .pill.bronze { background:var(--warn-bg); color:var(--bronze); }
.pill.formacao { background:var(--info-bg); color:var(--info); } .pill.sem_selo { background:var(--panel2); color:var(--muted); }

/* tela "Marcas" (administrador master) */
.brand-card { margin:18px 0 30px; padding:16px; border:1px solid var(--line); border-radius:10px; background:var(--panel); }
.brand-card.has-error { border-color:var(--bad); }
.brand-card h2 { margin-top:0; }
.brand-card .fform { background:transparent; border:0; padding:0; max-width:none; }
.brand-card .fform.inline { margin-top:16px; padding-top:14px; border-top:1px solid var(--line); max-width:520px; }
.brand-grid { display:grid; grid-template-columns:minmax(220px,300px) 1fr; gap:22px; align-items:start; }
.colorgrid { display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:10px; }
.colorrow { display:flex; gap:8px; align-items:center; } .colorrow input[type=color] { width:44px; height:36px; padding:2px; cursor:pointer; flex:none; }
.colorrow input.hex { width:100%; font-family:ui-monospace,Consolas,monospace; }
.brand-preview { --pv-bg:#101216; --pv-text:#e8eaef; --pv-primary:#d4a63f; --pv-accent:#f0c96a; --pv-on:#111111;
                 background:var(--pv-bg); color:var(--pv-text); border:1px solid var(--line); border-radius:10px; padding:16px; }
.brand-preview .pv-head { font-size:18px; margin-bottom:8px; } .brand-preview .pv-head img { max-height:40px; max-width:100%; display:block; }
.brand-preview .pv-text { margin:0 0 10px; } .brand-preview .pv-link { color:var(--pv-accent); text-decoration:underline; }
.brand-preview .pv-btn { display:inline-block; background:var(--pv-primary); color:var(--pv-on); border-radius:6px; padding:5px 12px; font-weight:600; font-size:13px; }
.swatches { display:grid; grid-template-columns:1fr 1fr; gap:6px; margin-top:12px; }
.swatches i { font-style:normal; font:12px/1 ui-monospace,Consolas,monospace; padding:10px 6px; border-radius:6px; text-align:center; border:1px solid rgba(128,128,128,.4); }
.swatches .pv-s-bg { background:var(--pv-bg); color:var(--pv-text); } .swatches .pv-s-text { background:var(--pv-text); color:var(--pv-bg); }
.swatches .pv-s-primary { background:var(--pv-primary); color:var(--pv-on); } .swatches .pv-s-accent { background:var(--pv-accent); color:var(--pv-bg); }
@media (max-width: 860px) { .brand-grid { grid-template-columns:1fr; } }

/* telas de robôs e destinos, relatórios em PDF e portal do cliente */
.card.pos b, td.pos, td.ok { color:var(--ok); } .card.neg b, td.neg, td.bad { color:var(--bad); }
td.num, th.num { text-align:right; font-variant-numeric:tabular-nums; }
.monthly th, .monthly td { padding:6px 8px; font-size:13px; }
.statgrid { display:grid; grid-template-columns:repeat(auto-fit,minmax(340px,1fr)); gap:12px; margin:8px 0 16px; }
.statgrid table td:first-child { color:var(--muted); }
.sendbox { display:grid; gap:6px; max-height:260px; overflow:auto; padding:8px; border:1px solid var(--line); border-radius:8px; background:var(--panel); }
.pager { display:flex; gap:12px; align-items:center; margin:10px 0; }

/* ---------- visão do portfólio (cliente e «ver como cliente»): o look do dashboard de referência, com as cores da marca ---------- */
:root { --demo:#b07fd9; }
.dash { max-width:1240px; }
.dash .dhead { display:flex; flex-wrap:wrap; align-items:flex-end; justify-content:space-between; gap:18px; border-bottom:1px solid var(--line); padding:6px 0 20px; margin-bottom:22px; }
.dash .eyebrow { font:11px/1 ui-monospace,Consolas,monospace; letter-spacing:.16em; text-transform:uppercase; color:var(--brand); }
.dash h1 { font-size:26px; font-weight:800; letter-spacing:-.01em; margin:6px 0 0; }
.dash .sub { color:var(--muted); margin-top:4px; font-size:13px; }
.dash .hero-num { text-align:right; }
.dash .hero-num .v { font:600 40px/1 ui-monospace,Consolas,monospace; font-variant-numeric:tabular-nums; }
.dash .hero-num .l { font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--muted); margin-top:6px; }
.dash .pos, .dash td.pos { color:var(--ok); } .dash .neg, .dash td.neg { color:var(--bad); }
.dash .filters { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin:2px 0 20px; }
.dash .chip { display:inline-block; border:1px solid var(--line); background:var(--panel); color:var(--muted); padding:7px 16px; border-radius:20px; font-size:13px; font-weight:600; text-decoration:none; }
.dash .chip:hover { color:var(--text); text-decoration:none; } .dash .chip.on { background:var(--brand); border-color:var(--brand); color:var(--on-brand); }
.dash .filters .lbl { color:var(--muted); font-size:12.5px; margin-left:10px; }
.dash .kpis { display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:10px; margin-bottom:26px; }
.dash .kpi { background:var(--panel); border:1px solid var(--line); border-radius:10px; padding:12px 14px; }
.dash .kpi .l { font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--muted); }
.dash .kpi .v { font:600 19px/1.2 ui-monospace,Consolas,monospace; margin-top:5px; font-variant-numeric:tabular-nums; }
.dash .kpi.pos .v { color:var(--ok); } .dash .kpi.neg .v { color:var(--bad); }
.dash section { margin-bottom:30px; }
.dash h2 { font-size:15px; font-weight:700; letter-spacing:.02em; margin:0 0 12px; display:flex; align-items:center; gap:10px; }
.dash h2::after { content:""; flex:1; height:1px; background:var(--line); }
.dash h2 .hint { font-weight:400; font-size:12px; color:var(--muted); letter-spacing:0; }
.dash .panel { background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:18px; }
.dash .stats-grid { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
@media (max-width:860px) { .dash .stats-grid { grid-template-columns:1fr; } .dash .hero-num { text-align:left; } }
.dash .stat-tbl { width:100%; border-collapse:collapse; background:transparent; }
.dash .stat-tbl td { padding:7px 10px; border-bottom:1px solid var(--line); font-size:13px; white-space:normal; }
.dash .stat-tbl tr:last-child td { border-bottom:none; } .dash .stat-tbl td:first-child { color:var(--muted); }
.dash .stat-tbl td:last-child { text-align:right; font:500 13px/1.3 ui-monospace,Consolas,monospace; } .dash .stat-tbl .note { color:var(--muted); font-size:11px; }
.dash table.grid { font-size:13px; } .dash table.grid th { font-size:11px; letter-spacing:.08em; text-transform:uppercase; text-align:right; }
.dash table.grid th:first-child, .dash table.grid td:first-child { text-align:left; font-weight:600; }
.dash table.grid td { text-align:right; font-family:ui-monospace,Consolas,monospace; font-variant-numeric:tabular-nums; }
.dash .mc-title { font-size:12px; color:var(--muted); margin-bottom:8px; letter-spacing:.04em; text-transform:uppercase; }
.dash .legend { list-style:none; margin:12px 0 0; padding:0; font-size:12.5px; color:var(--muted); display:grid; gap:4px; }
.dash .dot { display:inline-block; width:9px; height:9px; border-radius:50%; margin-right:7px; }
.dash .side-tag { font-size:10.5px; padding:1px 8px; border-radius:10px; font-weight:600; }
.dash .tag-buy { background:var(--ok-bg); color:var(--ok); } .dash .tag-sell { background:var(--bad-bg); color:var(--bad); }
.chart .ax { fill:var(--muted); font-size:12px; } .chart .lg { fill:var(--text); font-size:12px; }
.chart .axt { fill:var(--muted); font-size:13px; } .chart .mk { font-size:13px; font-weight:600; }
.chart .bu { fill:var(--ok); } .chart .bd { fill:var(--bad); } .chart .tk { stroke:var(--muted); stroke-width:1; }
/* passar o mouse nos gráficos (static/charts.js): linha-guia, faixa da barra, bolinhas e a caixa de valores */
svg.chart[data-hv] { cursor:crosshair; touch-action:pan-y; }
.chart .hv { pointer-events:none; } .chart .hv-line { stroke:var(--muted); stroke-width:1; stroke-dasharray:3 3; }
.chart .hv-band { fill:var(--text); opacity:.09; } .chart .hv-dot { fill:var(--text); stroke:var(--panel); stroke-width:1.6; }
.chart-tip { position:fixed; z-index:80; display:none; pointer-events:none; max-width:340px; background:var(--panel2); border:1px solid var(--line); border-radius:9px;
  padding:8px 11px; font:12.5px/1.4 system-ui,sans-serif; color:var(--text); box-shadow:0 8px 24px rgba(0,0,0,.4); }
.chart-tip .ct-h { color:var(--muted); font-size:11.5px; letter-spacing:.02em; margin:0 0 3px; } .chart-tip .ct-h:not(:first-child) { margin-top:7px; padding-top:6px; border-top:1px solid var(--line); }
.chart-tip .ct-r { display:flex; justify-content:space-between; align-items:center; gap:16px; white-space:nowrap; }
.chart-tip .ct-r i { display:inline-block; width:8px; height:8px; border-radius:50%; margin-right:7px; }
.chart-tip .ct-r b { font:600 12.5px ui-monospace,Consolas,monospace; font-variant-numeric:tabular-nums; }
.dash .mc-intro { color:var(--muted); font-size:13.5px; line-height:1.6; margin:0 0 14px; max-width:920px; }
.dash .mc-sub { color:var(--muted); font-size:12.5px; margin:-2px 0 10px; line-height:1.45; }
.dash .mc-panel { margin-bottom:14px; } .dash .mc-read { margin:6px 0 0 18px; padding:0; line-height:1.75; font-size:13.5px; }
.preview-banner { background:var(--warn-bg); color:var(--warn); border:1px solid var(--warn-line); border-radius:8px; padding:10px 14px; margin-bottom:16px; font-size:13.5px; }
.disclaimer { color:var(--muted); font-size:12px; margin-top:26px; border-top:1px solid var(--line); padding-top:12px; }
.dash .disclaimer { color:var(--text); font-size:16px; font-weight:700; letter-spacing:.01em; text-align:center; margin:34px 0 8px; padding:16px 20px; background:var(--panel);
  border:1px solid var(--line); border-left:4px solid var(--brand); border-radius:10px; }

.app > main { min-width:0; }
.dash svg.chart { max-width:100%; }

/* ---------- painel «Latência e fidelidade da cópia» ---------- */
.latform { display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:10px; align-items:end; background:var(--panel); border:1px solid var(--line); border-radius:10px; padding:14px; margin:0 0 12px; }
.latform select, .latform input { width:100%; }
.latform input[type=checkbox] { width:auto; }
.latform label.check { grid-column:span 2; padding-bottom:6px; }
.dash.lat .filters { margin-top:0; }
.dash .kpi .s { font-size:11.5px; color:var(--muted); margin-top:4px; line-height:1.35; }
.verdict { padding:14px 18px; border-radius:10px; margin:6px 0 22px; font-size:15px; border:1px solid var(--line); background:var(--panel); }
.verdict.ok { background:var(--ok-bg); border-color:var(--ok-line); color:var(--ok); }
.verdict.bad { background:var(--bad-bg); border-color:var(--bad-line); color:var(--bad); }
.verdict.warn { background:var(--warn-bg); border-color:var(--warn-line); color:var(--warn); }
table.lat td.wrap, table.lat th.wrap { white-space:normal; min-width:200px; max-width:380px; }
table.lat td.num, table.lat th.num { text-align:right; font-variant-numeric:tabular-nums; }
table.lat td.pos { color:var(--ok); } table.lat td.neg { color:var(--bad); }
table.lat tr.hl td { background:var(--panel2); font-weight:600; }
.dash.lat h3 { font-size:14px; margin:20px 0 8px; }
.dash.lat h3 .hint { font-weight:400; font-size:12px; color:var(--muted); }
.dash.lat .panel { margin-bottom:14px; }
.help { margin-top:24px; background:var(--panel); border:1px solid var(--line); border-radius:10px; padding:10px 16px; }
.help summary { cursor:pointer; font-weight:600; } .help li { margin:8px 0; font-size:13.5px; }
.fidbox { min-height:40px; }
/* ---------- assistente de cadastro de portfólio (o modelo do dashboard de referência, com as cores da marca) ---------- */
:root { --bt:#5b8fd9; }
.dash.wz .steps { list-style:none; display:flex; flex-wrap:wrap; gap:8px; padding:0; margin:0 0 18px; }
.dash.wz .steps li { display:flex; align-items:center; gap:8px; padding:6px 14px; border:1px solid var(--line); border-radius:20px; color:var(--muted); font-size:13px; }
.dash.wz .steps li span { width:20px; height:20px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; background:var(--panel2); font-size:11px; font-weight:700; }
.dash.wz .steps li.on { border-color:var(--brand); color:var(--text); } .dash.wz .steps li.on span { background:var(--brand); color:var(--on-brand); }
.dash.wz .steps li.done span { background:var(--ok-bg); color:var(--ok); }
.dash .dsel { background:var(--panel2); border:1px solid var(--line); color:var(--text); border-radius:8px; padding:7px 10px; font:12.5px ui-monospace,Consolas,monospace; }
.dash.wz .wz-bar { display:flex; flex-wrap:wrap; align-items:center; gap:8px 18px; margin:0 0 14px; color:var(--muted); font-size:12.5px; }
.dash.wz .grp { display:inline-flex; align-items:center; gap:7px; flex-wrap:wrap; }
.dash.wz label.grp.check, .dash.wz .grp label.check { display:inline-flex; gap:6px; align-items:center; color:var(--muted); cursor:pointer; }
.dash .chip { cursor:pointer; font-family:inherit; }
.dash .chip input[type=radio] { display:none; }
.dash.wz .grp .chip { padding:5px 12px; }
.dash.wz button.chip:hover, .dash.wz label.chip:hover { color:var(--text); }
.dash.wz .wz-upload { margin-bottom:18px; padding:12px 16px; }
.dash.wz .wz-upload label.chip { display:inline-block; }
.dash.wz .wz-cdistatus { margin:-4px 0 14px; color:var(--muted); line-height:1.5; }
.dash.wz .wz-upload progress { width:200px; height:8px; vertical-align:middle; margin-left:8px; accent-color:var(--brand); }
.dash.wz .wz-upload #wz-upmsg { margin:10px 0 0; } .dash.wz .wz-upload #wz-upmsg ul { margin:6px 0 0 18px; padding:0; }
.dash .panel.stratpanel { margin-bottom:18px; padding:14px 16px; }
.dash .sp-head { display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.dash .sp-title { font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:var(--muted); font-weight:700; }
.dash .sp-list { display:flex; flex-direction:column; gap:6px; }
.dash .strat-row { display:flex; align-items:center; gap:12px; background:var(--panel2); border:1px solid var(--line); border-radius:8px; padding:8px 12px; font-size:13px; flex-wrap:wrap; }
.dash .strat-row input[type=checkbox] { accent-color:var(--brand); width:15px; height:15px; cursor:pointer; }
.dash .strat-dot { width:10px; height:10px; border-radius:50%; flex:none; }
.dash .strat-name { font-weight:600; min-width:200px; flex:1 1 220px; background:transparent; border:1px solid transparent; border-radius:6px; padding:3px 6px; color:var(--text); }
.dash input.strat-name:hover, .dash input.strat-name:focus { border-color:var(--line); background:var(--field); }
.dash .strat-meta { color:var(--muted); font-size:12px; }
.dash .strat-pl { margin-left:auto; font:600 14px ui-monospace,Consolas,monospace; font-variant-numeric:tabular-nums; }
.dash .strat-pl.pos { color:var(--ok); } .dash .strat-pl.neg { color:var(--bad); }
.dash button.strat-rm { background:none; border:none; color:var(--muted); cursor:pointer; font-size:15px; padding:2px 6px; border-radius:6px; font-weight:400; }
.dash button.strat-rm:hover { color:var(--bad); background:var(--panel); filter:none; }
.dash .tag { display:inline-block; padding:1px 8px; border-radius:10px; font-size:10.5px; font-weight:600; }
.dash .tag-bt { background:var(--info-bg); color:var(--info); } .dash .tag-demo { background:var(--panel); color:var(--demo); border:1px solid var(--demo); }
.dash .tag-real { background:transparent; color:var(--brand); border:1px solid var(--brand); }
.dash .kpis-live { display:contents; }
.dash .kpi.cap-card { border-color:var(--brand); }
.dash .cap-input { width:100%; background:transparent; border:none; border-bottom:1px dashed var(--line); border-radius:0; color:var(--text); font:600 19px ui-monospace,Consolas,monospace; margin-top:5px; padding:0 0 2px; }
.dash .cap-input:focus { outline:none; border-bottom-color:var(--brand); }
.dash .wz-actions { display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin:8px 0 18px; }
.dash button.primary { background:var(--brand); color:var(--on-brand); } .dash button.ghost { background:var(--panel2); color:var(--text); border:1px solid var(--line); font-weight:500; }
.dash .wz-default { position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden; }
.dash form.busy ~ #wz-sections, .dash form.busy #wz-kpis { opacity:.55; transition:opacity .15s; }
.dash.wz .wz-name { max-width:760px; margin-top:16px; } .dash.wz .wz-name textarea { min-height:200px; resize:vertical; }
.dash.wz .wz-pick { max-width:520px; margin:14px 0; } .dash.wz .wz-accounts { margin-top:18px; }
.dash.wz .wz-accounts td label { display:block; cursor:pointer; color:var(--text); }
.dash .desc-panel { white-space:pre-line; margin-bottom:22px; color:var(--text); font-size:14px; }
/* «Resultado por período»: abas Dia / Semana / Mês só com CSS (botões de rádio escondidos, mas focáveis pelo teclado) */
.dash .pertabs { position:relative; }
.dash .pt-radio { position:absolute; opacity:0; width:1px; height:1px; margin:0; pointer-events:none; }
.dash .pt-tabs { display:flex; flex-wrap:wrap; gap:8px; margin:0 0 14px; }
.dash .pt-tabs label { cursor:pointer; border:1px solid var(--line); background:var(--panel); color:var(--muted); padding:6px 16px; border-radius:20px; font-size:13px; font-weight:600; user-select:none; }
.dash .pt-tabs label:hover { color:var(--text); }
.dash .pt-pane { display:none; }
.dash #pt-day:checked ~ .pt-day, .dash #pt-week:checked ~ .pt-week, .dash #pt-month:checked ~ .pt-month { display:block; }
.dash #pt-day:checked ~ .pt-tabs label[for=pt-day], .dash #pt-week:checked ~ .pt-tabs label[for=pt-week], .dash #pt-month:checked ~ .pt-tabs label[for=pt-month]
  { background:var(--brand); border-color:var(--brand); color:var(--on-brand); }
.dash #pt-day:focus-visible ~ .pt-tabs label[for=pt-day], .dash #pt-week:focus-visible ~ .pt-tabs label[for=pt-week], .dash #pt-month:focus-visible ~ .pt-tabs label[for=pt-month]
  { outline:2px solid var(--brand); outline-offset:2px; }
.dash .pt-line { margin:0 0 2px; line-height:1.5; }
.dash .pt-note { margin:4px 0 0; line-height:1.45; }
/* gráficos rolláveis (muitos dias): o gráfico fica mais largo que o quadro e rola na horizontal; os números do eixo vertical ficam parados na esquerda */
.dash .sc-scroll { overflow-x:auto; overflow-y:hidden; padding-bottom:4px; scrollbar-width:thin; scrollbar-color:var(--muted) var(--panel2); }
.dash .sc-scroll:focus-visible { outline:2px solid var(--brand); outline-offset:2px; border-radius:6px; }
.dash .sc-scroll::-webkit-scrollbar { height:10px; } .dash .sc-scroll::-webkit-scrollbar-track { background:var(--panel2); border-radius:6px; }
.dash .sc-scroll::-webkit-scrollbar-thumb { background:var(--muted); border-radius:6px; }
.dash .sc-row { display:flex; align-items:flex-start; width:max-content; }
.dash .sc-row svg.chart { max-width:none; flex:none; }
.dash .sc-row .yax { position:sticky; left:0; z-index:3; background:var(--panel); }
.chart .yl { stroke:var(--line); stroke-width:1; }
.dash .sc-cap { position:sticky; left:72px; width:0; flex:none; z-index:2; pointer-events:none; }
.dash .sc-cap span { position:absolute; top:2px; white-space:nowrap; font-size:12px; color:var(--text); }
.dash .sc-scroll svg.chart[data-hv] { touch-action:pan-x pan-y; }
.dash .sc-scroll.dragging, .dash .sc-scroll.dragging svg.chart[data-hv] { cursor:grabbing; user-select:none; }
.chart .bu.part, .chart .bd.part { opacity:.55; }

@media print {
  body.app { display:block; } .side, .noprint, .logout, footer, .pager { display:none !important; }
  body { background:#fff; color:#000; } main { padding:0; max-width:none; }
  .dash .panel, .dash .kpi, .scroll, table { background:#fff !important; border-color:#bbb !important; color:#000 !important; }
  .scroll { overflow:visible; } th, td { white-space:normal; color:#000 !important; }
  :root { --text:#000; --muted:#444; --line:#bbb; --panel:#fff; --panel2:#eee; }
  a { color:#000; text-decoration:none; } section { break-inside:avoid-page; }
}

/* ---------- lista de portfólios (cliente e administrador), compilado e menu em grupos (contrato em docs/PLANO-LISTA-PORTFOLIOS.md, seções 6 e 6b) ---------- */
/* barra de ações no alto da lista: a contagem vem ANTES dos botões (order), então os botões não andam quando o texto dela muda */
.dash .pf-listhead { align-items:flex-start; }
.dash .pf-listhead > div:first-child { flex:1 1 260px; min-width:0; }
.pf-tools { display:flex; flex-wrap:wrap; align-items:center; justify-content:flex-end; gap:8px; }
.pf-count { order:-1; margin-right:6px; white-space:nowrap; min-width:9em; text-align:right; }       /* largura fixa (cabe «Nenhuma marcada»): a barra não muda de tamanho nem pula de lugar a cada caixa marcada */
/* os botões da barra são <button class="chip">: o mesmo visual do a.chip (só aqui: os chips-botão do assistente de cadastro ficam como estão); sem marcação suficiente ficam esmaecidos */
.pf-tools button.chip { appearance:none; -webkit-appearance:none; line-height:1.5; }
.pf-tools button.chip:hover { filter:none; }
.dash button.chip:disabled { opacity:.45; cursor:not-allowed; }
.dash button.chip:disabled:not(.on):hover { color:var(--muted); }
.pf-tools [data-check-all] { min-width:140px; text-align:center; }
/* cartões */
.pf-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(min(340px, 100%), 1fr)); gap:16px; margin:0; }
.pf-card { position:relative; display:flex; flex-direction:column; gap:12px; min-width:0; padding:16px 18px; background:var(--panel); border:1px solid var(--line); border-radius:12px;
           transition:border-color .15s ease, box-shadow .15s ease, background-color .15s ease; }
.pf-card:hover { border-color:var(--brand); box-shadow:0 6px 18px rgba(0, 0, 0, .2); }
.pf-card.picked { border-color:var(--brand); box-shadow:0 0 0 1px var(--brand); background:var(--panel2); background:color-mix(in srgb, var(--brand) 9%, var(--panel)); }
.pf-head { display:flex; align-items:center; gap:12px; min-width:0; }
.pf-head input[type=checkbox] { flex:none; width:24px; height:24px; margin:0; accent-color:var(--brand); cursor:pointer; position:relative; z-index:2; }    /* 24 px: o mínimo de alvo de toque da WCAG 2.2 */
.pf-head input[type=checkbox]:disabled { cursor:not-allowed; opacity:.45; }
.dash .pf-head h2 { flex:1 1 auto; min-width:0; margin:0; display:block; font-size:17px; line-height:1.3; letter-spacing:0; overflow-wrap:anywhere; }
.dash .pf-head h2::after { content:none; display:none; }
/* o link do nome estica sobre o cartão inteiro (clicar em qualquer lugar abre o portfólio); a caixa de marcar, as etiquetas e as ações ficam por cima (z-index) */
.pf-link { color:var(--text); text-decoration:none; }
.pf-link:hover { text-decoration:none; }
.pf-card:hover .pf-link { color:var(--accent); }
.pf-link::after { content:""; position:absolute; top:0; right:0; bottom:0; left:0; z-index:1; border-radius:12px; }
.pf-link:focus-visible { outline:none; }
.pf-link:focus-visible::after { outline:2px solid var(--brand); outline-offset:2px; }
.pf-spark { margin:2px 0 0; line-height:0; }
.pf-spark svg { display:block; width:100%; height:auto; max-height:112px; }
.dash .pf-kpis { grid-template-columns:repeat(3, minmax(0, 1fr)); gap:8px; margin:0; }
.dash .pf-kpis .kpi { padding:8px; border-radius:8px; background:var(--panel2); }
.dash .pf-kpis .kpi .l { font-size:9.5px; letter-spacing:.06em; line-height:1.25; overflow-wrap:break-word; }
.dash .pf-kpis .kpi .v { font-size:13px; margin-top:3px; overflow-wrap:break-word; }    /* quebra só entre palavras: uma data nunca é partida no meio */
.pf-pending { margin:0; }
.pf-tags { display:flex; flex-wrap:wrap; gap:6px; position:relative; z-index:2; pointer-events:none; }
.pf-tags a { pointer-events:auto; }
.pf-actions { position:relative; z-index:2; margin-top:auto; padding-top:10px; border-top:1px solid var(--line); font-size:13px; color:var(--muted); }
/* compilado: quadro «Estratégias reunidas» */
.pf-members { background:transparent; }
.pf-members th, .pf-members td { white-space:normal; }
.pf-members th { position:static; font-size:11px; letter-spacing:.08em; text-transform:uppercase; }
.pf-members td:first-child { font-weight:600; overflow-wrap:anywhere; }
.pf-members td.num { font-family:ui-monospace, Consolas, monospace; white-space:nowrap; }
/* Lucro e Maior queda: o valor em dinheiro e, ao lado, o % do capital, na mesma linha (o % tem largura mínima: os valores alinham de uma linha para a outra). Cada parte é
   um bloco que não se parte no meio («R$» nunca fica longe do número). Em tela estreita (abaixo) o % pode descer para a linha de baixo. */
.pf-members .pf-v, .pf-members .pf-p { display:inline-block; white-space:nowrap; }
.pf-members .pf-p { min-width:10ch; margin-left:8px; text-align:right; }
tr.pf-total td { font-weight:700; background:var(--panel2); border-top:2px solid var(--line); border-bottom:none; }
.pf-note { margin:10px 0 0; color:var(--muted); font-size:12px; line-height:1.5; }
/* menu lateral em grupos: submenu nativo (<details>), sem JavaScript. A seta é um triângulo de CSS: ▸ fechado, ▾ aberto (gira 90 graus) */
.side nav details.navgroup > summary { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:8px 10px; border-radius:6px; color:var(--text);
                                       cursor:pointer; list-style:none; user-select:none; }
.side nav details.navgroup > summary::-webkit-details-marker { display:none; }
.side nav details.navgroup > summary::after { content:""; flex:none; width:0; height:0; border-style:solid; border-width:4px 0 4px 6px; border-color:transparent transparent transparent var(--muted);
                                              transition:transform .15s ease; }
.side nav details.navgroup[open] > summary::after { transform:rotate(90deg); }
.side nav details.navgroup > summary:hover { background:var(--panel2); }
.side nav details.navgroup > summary.on { font-weight:700; }
.side nav details.navgroup > summary.on::after { border-left-color:var(--brand); }
.side nav details.navgroup:not([open]) > summary.on { background:var(--panel2); box-shadow:inset 3px 0 0 var(--brand); }
.side nav details.navgroup > a.sub { display:block; margin:2px 0 0 12px; padding:7px 10px 7px 14px; font-size:14px; }
@media (prefers-reduced-motion: reduce) { .pf-card, .side nav details.navgroup > summary::after { transition:none; } }
/* telas estreitas: a barra lateral vira uma linha com quebra; o grupo ABERTO ocupa a linha inteira e os filhos ficam em fila ao lado do título dele */
@media (max-width: 860px) {
  .pf-tools { justify-content:flex-start; width:100%; }
  .pf-count { text-align:left; }                                                          /* a largura fixa continua (as linhas de botões quebram do mesmo jeito em qualquer estado) */
  .side nav details.navgroup > summary { display:inline-flex; justify-content:flex-start; }
  .side nav details.navgroup[open] { flex:1 1 100%; }
  .side nav details.navgroup > a.sub { display:inline-block; margin:2px 4px 0 0; padding:7px 12px; }
}
@media (max-width: 720px) {
  .pf-members td.pair { white-space:normal; }
}
@media (max-width: 560px) {
  .pf-grid { gap:12px; }
  .pf-card { padding:14px; }
  .pf-tools .chip { flex:1 1 auto; text-align:center; }
  .pf-members th, .pf-members td { padding:6px 3px; font-size:12px; }                    /* mais justo: a tabela inteira cabe em um celular de 390 px sem rolar */
  .pf-members th { font-size:10px; letter-spacing:.04em; }
  .pf-members th:first-child, .pf-members td:first-child { padding-left:6px; }
  .pf-members th:last-child, .pf-members td:last-child { padding-right:6px; }
  .pf-members td.num { white-space:normal; }
}
@media print {
  .pf-tools { display:none !important; }
  .pf-card { background:var(--panel) !important; border-color:var(--line) !important; box-shadow:none !important; break-inside:avoid; }
}

/* ---------- controlador de contas master (cadastro em 4 passos, tabela de controle e análise do magic): classes com prefixo mc- (docs/PLANO-CONTROLADOR-MASTER.md, parte W) ---------- */
.mc-steps { list-style:none; display:flex; flex-wrap:wrap; gap:8px; padding:0; margin:0 0 16px; }
.mc-steps li { border:1px solid var(--line); border-radius:20px; color:var(--muted); font-size:13px; }
.mc-stp { display:flex; align-items:center; gap:8px; padding:6px 14px; color:inherit; }
a.mc-stp:hover { color:var(--text); text-decoration:none; }
.mc-stp span { width:20px; height:20px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; background:var(--panel2); font-size:11px; font-weight:700; }
.mc-steps li.on { border-color:var(--brand); color:var(--text); } .mc-steps li.on .mc-stp span { background:var(--brand); color:var(--on-brand); }
.mc-steps li.done .mc-stp span { background:var(--ok-bg); color:var(--ok); }
.mc-btn { display:inline-block; padding:4px 11px; border:1px solid var(--line); border-radius:6px; background:var(--panel2); color:var(--text); font-size:12.5px; font-weight:500; white-space:nowrap; cursor:pointer; }
.mc-btn:hover { text-decoration:none; border-color:var(--brand); }
.mc-btn.primary { background:var(--brand); border-color:var(--brand); color:var(--on-brand); font-weight:600; }
.mc-tbl th, .mc-tbl td { padding:6px 8px; font-size:13px; vertical-align:top; }
.mc-tbl td.wrap, .mc-tbl th.wrap { white-space:normal; min-width:180px; max-width:380px; }
.mc-tbl th { white-space:normal; }
.mc-tbl th.mc-grp { text-align:center; border-left:1px solid var(--line); border-right:1px solid var(--line); background:var(--panel); }
.mc-ln { margin-top:2px; line-height:1.3; white-space:normal; max-width:300px; }
.mc-ctl tr.mc-row-blocked td { background:var(--bad-bg); background:color-mix(in srgb, var(--bad) 9%, var(--panel)); }
.mc-ctl tr.mc-row-off td { background:var(--warn-bg); background:color-mix(in srgb, var(--warn) 7%, var(--panel)); }
.mc-counts { display:flex; flex-wrap:wrap; gap:8px; margin:0 0 12px; }
.mc-chip { display:inline-flex; gap:6px; align-items:baseline; padding:5px 14px; border:1px solid var(--line); border-radius:20px; background:var(--panel); color:var(--muted); font-size:13px; }
.mc-chip b { color:var(--text); font-size:15px; } .mc-chip:hover { text-decoration:none; border-color:var(--brand); }
.mc-chip.on { border-color:var(--brand); box-shadow:0 0 0 1px var(--brand); color:var(--text); }
.mc-chip.bad b { color:var(--bad); } .mc-chip.warn b { color:var(--warn); }
.mc-actbox { display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.mc-actbox form { margin:0; }
.mc-inline { display:inline-flex; flex-wrap:wrap; gap:6px; align-items:center; margin:0; max-width:100%; }
.mc-inline input { width:92px; padding:4px 8px; }
.mc-inline input[type=file] { width:auto; max-width:230px; padding:3px 4px; font-size:12px; }
.mc-form h2, .mc-form h3 { margin:0 0 4px; font-size:15px; }
.mc-form textarea { width:100%; }
.mc-decide { display:grid; grid-template-columns:repeat(auto-fit, minmax(300px, 1fr)); gap:14px; margin:6px 0 8px; }
.mc-decide .fform { max-width:none; }
.mc-drop { border:2px dashed var(--line); border-radius:12px; padding:16px; background:var(--panel); margin-bottom:8px; }
.mc-drop.over { border-color:var(--brand); background:var(--panel2); }
.mc-prog { margin-top:8px; } .mc-prog progress { width:240px; height:8px; vertical-align:middle; accent-color:var(--brand); }
#mc-upmsg { margin-top:10px; } #mc-upmsg ul { margin:6px 0 0 18px; padding:0; }
.mc-situ { display:grid; gap:8px; background:var(--panel); border:1px solid var(--line); border-radius:10px; padding:14px 16px; max-width:900px; }
.mc-situ p { margin:0; }
.mc-cmp td:first-child { color:var(--muted); white-space:normal; min-width:200px; }
.mc-cmp th { max-width:260px; }
.mc-lim { display:grid; grid-template-columns:repeat(auto-fill, minmax(290px, 1fr)); gap:8px 18px; margin:8px 0 12px; }
.mc-limrow { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:6px 10px; background:var(--panel); border:1px solid var(--line); border-radius:8px; color:var(--text); font-size:13px; }
.mc-limrow small { display:block; font-size:11px; }
.mc-limrow input:not([type=checkbox]):not([type=hidden]) { width:110px; text-align:right; }
.mc-chart { background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:12px; }
.mc-chart svg.chart { max-width:100%; }
.mc-rename { margin-top:18px; } .mc-rename summary { cursor:pointer; color:var(--muted); }
/* tabela de controle: colunas estreitas (uma estatística por coluna), primeira coluna fixa na rolagem horizontal */
.mc-ctl th, .mc-ctl td { padding:5px 6px; font-size:12.5px; }
.mc-ctl th { font-size:11.5px; line-height:1.25; vertical-align:bottom; }
.mc-ctl td.num { white-space:nowrap; } .mc-ctl th.num { white-space:normal; min-width:62px; }
.mc-ctl th:first-child, .mc-ctl td:first-child { position:sticky; left:0; z-index:2; background:var(--panel); box-shadow:1px 0 0 var(--line); min-width:150px; }
.mc-ctl th:first-child { z-index:3; background:var(--panel2); }
.mc-ctl tr.mc-row-blocked td:first-child { background:var(--bad-bg); background:color-mix(in srgb, var(--bad) 9%, var(--panel)); }
.mc-ctl tr.mc-row-off td:first-child { background:var(--warn-bg); background:color-mix(in srgb, var(--warn) 7%, var(--panel)); }
.mc-ctl td.mc-gate { min-width:200px; }
.mc-hit { margin-top:3px; font-size:12.5px; line-height:1.35; white-space:normal; max-width:280px; }
.mc-hits { display:grid; gap:6px; } .mc-hits .mc-hit { max-width:none; font-size:13.5px; }
.mc-model { margin-top:10px; max-width:480px; }
.mc-boxes { display:grid; grid-template-columns:repeat(auto-fit, minmax(300px, 1fr)); gap:12px; }
.mc-box h3 { margin:0 0 6px; font-size:12px; color:var(--muted); letter-spacing:.06em; text-transform:uppercase; }
.mc-box td:first-child { white-space:normal; }
.mc-limgrp { border:1px solid var(--line); border-radius:10px; margin:0 0 12px; padding:6px 12px 10px; min-width:0; }
.mc-limgrp legend { padding:0 8px; font-weight:700; font-size:13px; }
.mc-limtxt { flex:1 1 220px; min-width:0; } .mc-limtxt b { font-weight:600; }
.mc-limctl { display:flex; flex-direction:column; align-items:flex-end; gap:4px; flex:none; }
.mc-ctl td.mc-stat { min-width:120px; } .mc-ctl td.mc-bt1 { min-width:150px; }                                  /* a legenda do lote sob o lucro do backtest quebra em 2 linhas, não em 5 */
.mc-ctl .mc-actbox { min-width:215px; }
.mc-box table { width:100%; } .mc-box td { white-space:normal; overflow-wrap:anywhere; } .mc-box td.num { white-space:normal; text-align:right; }
/* aviso de atenção (amarelo): meio-termo entre o verde de «deu certo» e o vermelho de «recusado»; usado no Concluir com ressalvas e na faixa «sem atualização» */
.flash.aviso { background:var(--warn-bg); color:var(--warn); border-color:var(--warn-line); }
.live-note { margin-bottom:8px; } .live-note a { color:inherit; font-weight:700; text-decoration:underline; }
.live-stale { opacity:.5; transition:opacity .2s; }                      /* o trecho que se atualiza sozinho ficou sem resposta: o que está na tela é velho */
.mc-warn { color:var(--warn); }
/* «Escolher os arquivos»: o campo de arquivo fica invisível mas FOCÁVEL (o teclado chega nele; Enter ou Espaço abre a escolha) e o foco desenha o botão ao lado */
.mc-drop { position:relative; }
.mc-file { position:absolute; width:1px; height:1px; margin:-1px; padding:0; border:0; overflow:hidden; clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; opacity:0; }
.mc-file:focus-visible + label.mc-btn { outline:2px solid var(--brand); outline-offset:3px; }
.mc-file:disabled + label.mc-btn { opacity:.55; cursor:not-allowed; }
.mc-diff { margin:10px 0 14px; max-width:900px; } .mc-diff summary { cursor:pointer; } .mc-diff ul { margin:6px 0 0 18px; padding:0; line-height:1.5; } .mc-diff p { margin:6px 0 0; }
@media print { .mc-actbox, .mc-rename, .mc-counts { display:none !important; } }

/* visão da conta master (ext_master_visao / master_visao) */
.vis-form .vis-bar, .dash .vis-bar { display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin:0 0 14px; }
.vis-form .vis-bar label { display:inline-flex; gap:6px; align-items:center; color:var(--muted); font-size:13px; }
.vis-form input[type=date] { padding:5px 8px; border:1px solid var(--line); border-radius:6px; background:var(--panel); color:var(--text); font:inherit; }
.vis-chk { display:inline-flex; align-items:center; gap:6px; cursor:pointer; } .vis-chk input { margin:0; }
.vis-legend li { display:flex; gap:8px; align-items:center; flex-wrap:wrap; } .vis-legend .dot { margin-right:0; }
tr.vis-total td { font-weight:600; background:var(--panel2); }
.vis-muted-row td { opacity:.6; }
.vis-tbl td .pos { color:var(--ok); } .vis-tbl td .neg { color:var(--bad); }
.vis-leg { display:flex; flex-wrap:wrap; gap:6px 8px; align-items:center; margin:10px 0 0; }
.vis-leg .lbl { color:var(--muted); font-size:12px; margin-right:4px; }
.vis-leg .mini { font-size:11.5px; padding:2px 8px; }
.vis-tg { display:inline-flex; align-items:center; gap:6px; border:1px solid var(--line); background:var(--panel2); color:var(--text); border-radius:16px; padding:3px 10px 3px 7px; font-size:12.5px; cursor:pointer; font-family:inherit; }
.vis-tg:hover { border-color:var(--brand); }
.vis-tg .dot { margin:0; }
.vis-tg.off { opacity:.45; text-decoration:line-through; }
.vis-tg .muted { font-size:11px; }
tr.vis-off td { opacity:.55; }
button.vis-dot { border:0; background:transparent; cursor:pointer; padding:4px; line-height:0; }
button.vis-dot .dot { margin:0; }
button.vis-dot.off .dot { opacity:.25; }

