:root{
  --bg:#f2f0f9; --panel:#fff; --ink:#1d1a2e; --soft:#6b6784; --mut:#9c98ad;
  --line:#eae7f4; --grid:#efedf8;
  --p:#7c3aed; --p-deep:#6d28d9; --p-mid:#8b5cf6; --p-lt:#a78bfa; --p-xlt:#cabef5; --p-soft:#f0ebfd;
  --track:#ece9f6; --falha:#df6b91; --ok:#2e9e6b;
  --shadow:0 1px 2px rgba(60,40,110,.04),0 6px 22px rgba(60,40,110,.06);
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);line-height:1.45;
  font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-font-smoothing:antialiased}
a{color:var(--p)}
.tnum{font-variant-numeric:tabular-nums}
.app{display:grid;grid-template-columns:212px 1fr;min-height:100vh}
@media(max-width:820px){.app{grid-template-columns:1fr}}

.side{background:var(--panel);border-right:1px solid var(--line);padding:22px 16px;
  position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:6px}
@media(max-width:820px){.side{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center}}
.brand{display:flex;align-items:center;gap:9px;font-weight:800;font-size:16px;margin-bottom:18px}
.brand .mk{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--p),var(--p-deep));color:#fff}
.nav{border:0;background:transparent;color:var(--soft);text-align:left;font:inherit;font-size:13.5px;
  font-weight:600;padding:10px 12px;border-radius:10px;cursor:pointer;display:flex;align-items:center;gap:10px;text-decoration:none}
.nav:hover{background:var(--p-soft);color:var(--ink)}
.nav.on{background:var(--p);color:#fff}
.side .rodape{margin-top:auto;font-size:11px;color:var(--mut)}

.main{padding:22px 26px 70px;min-width:0}
.top{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:18px}
.top h1{font-size:22px;letter-spacing:-.02em;margin:0;font-weight:800}
.sub{font-size:12.5px;color:var(--mut);margin:2px 0 0}
.grow{flex:1}

.card{background:var(--panel);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow)}
.pad{padding:16px 17px}
h2{font-size:12.5px;color:var(--soft);margin:0 0 14px;font-weight:700}
.grid{display:grid;gap:14px}
.k5{grid-template-columns:repeat(5,1fr)} .k2{grid-template-columns:1.3fr 1fr}
@media(max-width:1050px){.k5{grid-template-columns:repeat(3,1fr)}}
@media(max-width:900px){.k2{grid-template-columns:1fr}}
@media(max-width:560px){.k5{grid-template-columns:repeat(2,1fr)}}
.mb{margin-bottom:14px}

.kpi{padding:15px 16px;display:flex;flex-direction:column;gap:2px;position:relative;overflow:hidden}
.kpi .lab{font-size:12px;color:var(--soft);font-weight:700}
.kpi .val{font-size:30px;font-weight:800;letter-spacing:-.02em;line-height:1.05;margin-top:3px}
.kpi .note{font-size:11.5px;color:var(--mut)}
.kpi .bar{height:5px;border-radius:3px;background:var(--track);margin-top:9px;overflow:hidden}
.kpi .bar i{display:block;height:100%;border-radius:3px;background:var(--p)}

/* filtro de lançamento */
.flt{display:flex;align-items:center;gap:8px;flex-wrap:wrap;position:relative}
.flabel{font-size:11px;color:var(--mut);font-weight:700;text-transform:uppercase;letter-spacing:.05em}
.lancbtn{display:flex;align-items:center;gap:9px;min-width:172px;background:var(--panel);
  border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);padding:8px 11px;
  font:inherit;font-size:13px;font-weight:700;color:var(--ink);cursor:pointer}
.lancbtn:hover{border-color:var(--p-xlt)}
.lancbtn[aria-expanded="true"]{border-color:var(--p);box-shadow:0 0 0 3px var(--p-soft)}
.lancbtn .lsum{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lancbtn .lcnt{font-size:11px;font-weight:800;color:var(--p);background:var(--p-soft);padding:1px 7px;border-radius:999px}
.lancpop{position:absolute;top:calc(100% + 6px);right:0;z-index:50;display:none;flex-direction:column;gap:2px;
  background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:7px 8px;
  box-shadow:0 8px 28px rgba(60,40,110,.16);min-width:190px}
.lancpop.open{display:flex}
.lopt{display:flex;align-items:center;gap:9px;padding:5px 8px;border-radius:8px;cursor:pointer;
  font-size:13px;font-weight:600;color:var(--soft);user-select:none}
.lopt:hover{background:var(--p-soft);color:var(--ink)}
.lopt input{appearance:none;margin:0;width:16px;height:16px;flex:none;border:1.5px solid var(--p-xlt);
  border-radius:5px;background:var(--panel);cursor:pointer;position:relative}
.lopt input:checked{background:var(--p);border-color:var(--p)}
.lopt input:checked::after{content:"";position:absolute;left:4.5px;top:1px;width:4px;height:8px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(43deg)}
.lopt input:focus-visible{outline:2px solid var(--p-mid);outline-offset:2px}
.lopt input:disabled{cursor:not-allowed;opacity:.65}
.lopt .lqt{margin-left:auto;font-size:11px;font-weight:700;color:var(--mut)}

.scroll{overflow-x:auto}
table{border-collapse:collapse;width:100%;font-size:13px;min-width:560px}
th,td{padding:9px 11px;text-align:right;border-bottom:1px solid var(--line);white-space:nowrap}
th:first-child,td:first-child{text-align:left;white-space:normal;min-width:210px}
th{font-size:10.5px;text-transform:uppercase;color:var(--mut);font-weight:800;
  position:sticky;top:0;background:var(--panel)}
tbody tr:hover{background:var(--p-soft)}
.pill{display:inline-block;padding:1px 9px;border-radius:999px;font-size:11px;font-weight:800}
.pill.ok{background:var(--p-soft);color:var(--p)} .pill.dr{background:var(--grid);color:var(--mut)}

.btn{border:1px solid var(--p);background:var(--p);color:#fff;font:inherit;font-size:13px;font-weight:700;
  padding:9px 16px;border-radius:10px;cursor:pointer}
.btn:hover{background:var(--p-deep)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.sec{background:var(--panel);color:var(--soft);border-color:var(--line)}
.btn.sec:hover{background:var(--p-soft);color:var(--ink)}
input[type=text],input[type=password],input[type=search]{width:100%;border:1px solid var(--line);
  background:var(--bg);color:var(--ink);border-radius:10px;padding:10px 13px;font:inherit;font-size:13px}
input:focus{outline:2px solid var(--p-mid);outline-offset:1px}
label.campo{display:block;font-size:12px;font-weight:700;color:var(--soft);margin:0 0 6px}
.dica{font-size:11.5px;color:var(--mut);margin-top:5px}

.logbox{background:#1d1a2e;color:#e6e2f5;border-radius:12px;padding:13px 15px;font-size:12px;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;max-height:340px;overflow:auto;white-space:pre-wrap}
.logbox .t{color:#9c98ad}
.status{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:700}
.dot{width:9px;height:9px;border-radius:50%;background:var(--mut);flex:none}
.dot.on{background:var(--ok)} .dot.run{background:var(--p);animation:pulsa 1.1s infinite}
.dot.off{background:var(--falha)}
@keyframes pulsa{50%{opacity:.3}}
.muted{color:var(--mut)}
.aviso{background:#fdf3f7;border:1px solid #f4d2e0;color:#a03a63;border-radius:10px;padding:10px 13px;font-size:12.5px}

/* ---------------------------------------------------------------- login */
body.login{
  min-height:100vh;
  background:
    radial-gradient(900px 500px at 50% -8%, #ece5fb 0%, rgba(236,229,251,0) 62%),
    var(--bg);
}
.loginwrap{min-height:100vh;display:flex;flex-direction:column;align-items:center;
  justify-content:center;padding:24px;gap:16px}
.loginbox{
  width:100%;max-width:352px;background:var(--panel);border:1px solid var(--line);
  border-radius:18px;padding:34px 30px 30px;box-shadow:0 1px 2px rgba(60,40,110,.05),0 18px 44px rgba(60,40,110,.10);
  display:flex;flex-direction:column;
}
.logomark{
  width:46px;height:46px;border-radius:14px;margin:0 auto 16px;color:#fff;
  background:linear-gradient(135deg,var(--p-mid),var(--p-deep));
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 6px 16px rgba(109,40,217,.28);
}
.logomark svg{width:24px;height:24px}
.loginbox h1{font-size:19px;font-weight:800;letter-spacing:-.02em;margin:0;text-align:center}
.loginbox .legenda{font-size:12.5px;color:var(--mut);text-align:center;margin:5px 0 24px}
.loginbox .campo{margin-bottom:7px}
.loginbox input[type=password]{padding:11px 14px;font-size:14px}
.btn.entrar{width:100%;margin-top:16px;padding:11px 16px;font-size:14px}
.erro{
  background:#fdf2f6;border:1px solid #f3cddd;color:#a03a63;
  border-radius:10px;padding:9px 12px;font-size:12.5px;margin-bottom:16px;
}
.rodapenota{font-size:11.5px;color:var(--mut);margin:0}
