:root{--bg:#f6f5f2;--paper:#fff;--ink:#1f2a2e;--ink2:#4a5a60;--mute:#7d8a8f;--line:#e7e3dc;--soft:#f1efea;
 --accent:#d4702a;--accent-h:#b85d1d;--accent-soft:#fbeee2;--side:#fbfcfb;--side-ink:#2c4a57;--side-mute:#7c949c;--side-hi:#e9f3ef;--brand:#2f6f86;--brand2:#7cc9a0;
 --ok:#2f7a55;--ok-bg:#e6f2ea;--warn:#a8651c;--warn-bg:#faf0e1;--bad:#b3362a;--bad-bg:#fbe9e6;--bar:#cfd5d6}
@media (prefers-color-scheme: dark){:root{--bg:#121a1d;--paper:#1a2428;--ink:#e8ecec;--ink2:#b9c4c6;--mute:#8a989b;--line:#2a363a;--soft:#202c30;
 --accent:#ec8a45;--accent-h:#f39c5d;--accent-soft:#3a2a1d;--side:#131d20;--side-ink:#c9d6d9;--side-mute:#7f949a;--side-hi:#1e2c30;--ok:#7fcfa2;--ok-bg:#16301f;--warn:#e8b163;--warn-bg:#3a2a14;
 --bad:#f28b82;--bad-bg:#3d1a17;--bar:#3a484c;color-scheme:dark}}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 "IBM Plex Sans",-apple-system,"Segoe UI",Roboto,sans-serif}
a{color:var(--accent)}a:hover{color:var(--accent-h)}
.app{display:grid;grid-template-columns:auto 1fr;min-height:100vh}
/* sidebar */
aside{width:256px;background:var(--side);color:var(--side-ink);display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto;transition:width .18s;border-right:1px solid var(--line);
 background-image:radial-gradient(circle at 110% -5%, rgba(124,201,160,.20) 0 120px, transparent 121px),radial-gradient(circle at -20% 105%, rgba(47,111,134,.13) 0 150px, transparent 151px),
 radial-gradient(circle at 85% 72%, rgba(124,201,160,.10) 0 46px, transparent 47px);background-repeat:no-repeat}
.side-top{display:flex;align-items:center;justify-content:space-between;padding:16px 14px 12px 18px}
.brand img{display:block;height:38px;width:auto}.brand .mk{display:none;height:30px}
.collapse-btn{background:none;border:0;color:var(--side-mute);cursor:pointer;padding:4px;border-radius:6px}.collapse-btn:hover{color:var(--brand);background:var(--side-hi)}.collapse-btn svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.7}
.co{margin:0 12px 8px;background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:7px 10px;box-shadow:0 1px 2px rgba(20,40,50,.04)}
.co label{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--side-mute)}
.co select{width:100%;margin-top:2px;background:transparent;color:var(--ink);border:0;font:inherit;font-weight:600;padding:2px 0;cursor:pointer}
.co select option{color:#000}
nav.menu{padding:4px 8px 12px;display:flex;flex-direction:column;gap:1px}
nav.menu details{border-top:1px solid var(--line);padding-top:4px;margin-top:6px}
nav.menu summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--side-mute);padding:6px 10px;border-radius:6px}
nav.menu summary::-webkit-details-marker{display:none}
nav.menu summary:after{content:"›";font-size:14px;transition:transform .15s}nav.menu details[open] summary:after{transform:rotate(90deg)}
nav.menu summary:hover{color:var(--brand)}
nav.menu a{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:7px;color:var(--side-ink);text-decoration:none;position:relative}
nav.menu a svg{width:17px;height:17px;flex:none;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;opacity:.85}
nav.menu a:hover{background:var(--side-hi);color:var(--brand)}
nav.menu a.on{background:var(--side-hi);color:var(--ink);font-weight:600}nav.menu a.on:before{content:"";position:absolute;left:-8px;top:7px;bottom:7px;width:3px;border-radius:2px;background:var(--accent)}
.side-foot{margin-top:auto;padding:12px 18px 16px;font-size:12.5px;color:var(--side-mute);border-top:1px solid var(--line)}.side-foot a{color:var(--brand)}
body.mini aside{width:64px}body.mini .side-top{flex-direction:column;gap:8px;padding:14px 8px}body.mini .brand .full{display:none}body.mini .brand .mk{display:block}body.mini .brand b,body.mini .co,body.mini nav.menu summary,body.mini nav.menu a span,body.mini .side-foot{display:none}
body.mini nav.menu details{border:0;margin:0;padding:0}body.mini nav.menu a{justify-content:center}
/* contenido */
.topbar{display:none}
main{padding:24px 30px 64px;min-width:0;max-width:1320px}
.head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:18px}
h1{font-size:22px;margin:0;font-weight:600;letter-spacing:-.01em}.sub{color:var(--mute);margin:2px 0 0}
h3{font-size:14.5px;margin:0 0 12px;font-weight:600}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto}
.tabs a{padding:8px 12px;color:var(--ink2);text-decoration:none;border-bottom:2px solid transparent;white-space:nowrap}.tabs a.on{color:var(--ink);border-color:var(--accent);font-weight:600}
.bar{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-bottom:14px}
label.f{display:flex;flex-direction:column;font-size:11.5px;color:var(--mute);gap:3px}
input,select,textarea,button{font:inherit;color:inherit}
input[type=text],input[type=email],input[type=date],input[type=month],input[type=number],input[type=password],input:not([type]),select,textarea{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--ink)}
textarea{min-height:84px;resize:vertical;width:100%}
input:focus,select:focus,textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}
.btn{display:inline-flex;align-items:center;gap:6px;background:var(--accent);color:#fff;border:0;border-radius:8px;padding:8px 14px;font-weight:600;cursor:pointer;text-decoration:none}
.btn:hover{background:var(--accent-h);color:#fff}.btn.ghost{background:transparent;color:var(--ink2);border:1px solid var(--line)}.btn.ghost:hover{background:var(--soft);color:var(--ink)}
.btn.sm{padding:4px 10px;font-size:12.5px}.btn.danger{background:transparent;color:var(--bad);border:1px solid var(--line)}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.kpi .l{font-size:12.5px;color:var(--mute)}.kpi .v{font-size:23px;font-weight:600;font-variant-numeric:tabular-nums;margin-top:2px}
.kpi .s{font-size:12px;color:var(--mute);margin-top:4px}.kpi.hl{border-top:3px solid var(--accent)}
.up{color:var(--ok)}.down{color:var(--bad)}
.card{background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:16px 18px;margin-bottom:14px}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px}.grid3{display:grid;grid-template-columns:2fr 1fr;gap:14px}
.tbl{overflow-x:auto;background:var(--paper);border:1px solid var(--line);border-radius:12px}
table{border-collapse:collapse;width:100%;font-size:13px}
th{text-align:left;font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--mute);padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap;font-weight:500;background:var(--paper);position:sticky;top:0}
td{padding:9px 12px;border-top:1px solid var(--line);vertical-align:top}tbody tr:hover td{background:var(--soft)}
td.n,th.n{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
tr.tot td{font-weight:600;background:var(--soft)}
.chip{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;white-space:nowrap;background:var(--soft);color:var(--ink2)}
.chip.ok{background:var(--ok-bg);color:var(--ok)}.chip.warn{background:var(--warn-bg);color:var(--warn)}.chip.bad{background:var(--bad-bg);color:var(--bad)}.chip.acc{background:var(--accent-soft);color:var(--accent)}
.alert{border-radius:10px;padding:10px 14px;margin-bottom:14px;background:var(--warn-bg);color:var(--warn)}.alert.ok{background:var(--ok-bg);color:var(--ok)}
.muted{color:var(--mute)}.small{font-size:12.5px}
.list-row{display:flex;justify-content:space-between;gap:10px;padding:7px 0;border-top:1px solid var(--line)}.list-row:first-of-type{border-top:0}
.pager{display:flex;gap:12px;align-items:center;margin-top:10px;font-size:13px}
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.form-grid label.f{font-size:12px}.form-grid .full{grid-column:1/-1}
.check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink)}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:14px}
.chart{width:100%;height:auto;display:block}.chart .bar{fill:var(--bar)}.chart .bar.hi{fill:var(--accent)}.chart .grid{stroke:var(--line);stroke-dasharray:3 3}.chart .axis{fill:var(--mute);font-size:11px}
.hb{margin:8px 0}.hb-l{display:flex;justify-content:space-between;gap:8px;font-size:12.5px}.hb-l span{color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hb-t{height:6px;background:var(--soft);border-radius:4px;margin-top:4px}.hb-t i{display:block;height:100%;background:var(--accent);border-radius:4px;opacity:.85}
/* matriz de recurrentes */
.mx td.c{text-align:center;min-width:62px;font-size:12px;padding:6px 4px;cursor:pointer}
.mx .s-ok{background:var(--ok-bg);color:var(--ok);font-weight:600}.mx .s-external,.mx .s-manual{background:var(--ok-bg);color:var(--ok)}
.mx .s-missing{background:var(--bad-bg);color:var(--bad);font-weight:600}.mx .s-pending{background:var(--warn-bg);color:var(--warn)}
.mx .s-na,.mx .s-future,.mx .s-before{color:var(--mute)}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--mute);margin:8px 0 12px}.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
dialog{border:1px solid var(--line);border-radius:14px;padding:20px;background:var(--paper);color:var(--ink);max-width:460px;width:92vw}dialog::backdrop{background:rgba(0,0,0,.35)}
code,pre.help{background:var(--soft);border-radius:5px;font-size:12.5px}code{padding:0 4px}pre.help{padding:12px;white-space:pre-wrap;line-height:1.55}
.login{min-height:100vh;display:grid;place-items:center;padding:16px;background:var(--bg)}
.login .box{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:30px;width:100%;max-width:380px}
.login input{width:100%;margin:4px 0 14px}
@media (max-width:900px){
 .app{grid-template-columns:1fr}
 .topbar{display:flex;align-items:center;gap:12px;position:sticky;top:0;z-index:20;background:var(--paper);color:var(--ink);padding:8px 14px;border-bottom:1px solid var(--line)}
 .topbar button{background:none;border:0;color:var(--ink);font-size:22px;cursor:pointer}.topbar img{height:26px}
 aside{position:fixed;left:0;top:0;z-index:30;transform:translateX(-100%);transition:transform .2s;width:272px}
 body.open aside{transform:none}body.open:after{content:"";position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:25}
 .collapse-btn{display:none}main{padding:16px}.grid3{grid-template-columns:1fr}.kpi .v{font-size:20px}}
.bulkbar{display:none;align-items:center;gap:8px;flex-wrap:wrap;position:sticky;top:0;z-index:5;background:#24343b;color:#fff;border-radius:10px;padding:8px 12px;margin-bottom:10px}
.bulkbar.on{display:flex}.bulkbar span{font-weight:600;margin-right:6px}.bulkbar .btn.ghost,.bulkbar .btn.danger{background:rgba(255,255,255,.1);color:#fff;border-color:transparent}
@media (max-width:900px){.bulkbar{top:52px}}
input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent)}

@media (prefers-color-scheme: dark){aside{background-image:none}.brand img.full{filter:brightness(1.35) saturate(.9)}}
