:root{--navy:#062B4F;--muted:#3E5A75;--cyan:#16A9C9;--bg:#F3F6F9;--card:#fff;--line:#DCE3EA;--ok:#1E8E5A;--warn:#C98A00;--bad:#C2362F;--text:#16263A}
*{box-sizing:border-box}
body{margin:0;font:14px/1.45 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;color:var(--text);background:var(--bg)}
a{color:#0B6E99}
h1{font-size:22px;margin:4px 0 14px;color:var(--navy)}h2{font-size:16px;margin:0 0 10px;color:var(--navy)}
.top{display:flex;align-items:center;gap:24px;background:var(--navy);color:#fff;padding:12px 20px;min-height:76px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;color:#fff;text-decoration:none}
.brand .logo{display:flex;align-items:center;justify-content:center;width:64px;height:52px;background:#fff;border-radius:8px;padding:6px;flex:none}
.brand .logo img{max-width:100%;max-height:100%;display:block}
.brand span{display:flex;flex-direction:column;line-height:1.1}.brand b{font-size:19px}.brand small{font-size:11px;color:#9FC3DA}
nav{display:flex;gap:2px;flex-wrap:wrap;flex:1}
nav a{color:#D5E4EF;text-decoration:none;padding:7px 11px;border-radius:6px}
nav a:hover{background:#0E3D69}nav a.on{background:#fff;color:var(--navy);font-weight:600}
.who{display:flex;gap:12px;align-items:center;font-size:12px;color:#BFD3E2}.who a,.who .link{color:#fff}
.who form{margin:0}
.heartbeat{display:flex;gap:8px;padding:8px 20px;background:#fff;border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center}
.cell{display:flex;gap:8px;align-items:center;border:1px solid var(--line);border-radius:8px;padding:5px 12px;min-width:220px}
.cell i{width:11px;height:11px;border-radius:50%;background:#A9B6C3}
.cell.ok i{background:var(--ok)}.cell.warn i{background:var(--warn)}.cell.bad i{background:var(--bad)}
.cell.bad{border-color:#E9B4B0;background:#FDF3F2}
.cell span{color:var(--muted);font-size:12px}
.clock{margin-left:auto;color:var(--muted);font-size:12px}
main{max-width:1280px;margin:0 auto;padding:18px 20px 40px}
footer{text-align:center;color:var(--muted);font-size:12px;padding:16px}
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:16px 18px;margin-bottom:16px}
.card.attention{border-left:4px solid var(--warn)}
.card.narrow,.login{max-width:420px;margin:30px auto}
.login{text-align:center}.login .stack{text-align:left}.login-logo{height:64px}
.muted{color:var(--muted)}.small{font-size:12px}.mono{font-family:ui-monospace,Consolas,monospace}.center{text-align:center}.nowrap{white-space:nowrap}
.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.between{justify-content:space-between}
.cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:16px;align-items:start}
.cols>.card{margin-bottom:0}
.inline{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:0}.grow{flex:1;min-width:240px}
.stack{display:flex;flex-direction:column;gap:12px}
.grid-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.grid-form .wide{grid-column:1/-1}
label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted);font-weight:600}
input,select,textarea{font:inherit;padding:7px 9px;border:1px solid #C3CFDB;border-radius:6px;background:#fff;color:var(--text)}
input:focus,select:focus,textarea:focus{outline:2px solid var(--cyan);border-color:var(--cyan)}
input[readonly],textarea[readonly]{background:#F1F4F7}
button,.button{font:inherit;padding:7px 14px;border:1px solid #B6C4D2;border-radius:6px;background:#fff;color:var(--navy);cursor:pointer;text-decoration:none;display:inline-block}
button:hover,.button:hover{background:#EEF3F7}
.primary{background:var(--navy);border-color:var(--navy);color:#fff}.primary:hover{background:#0E3D69}
.danger{color:var(--bad);border-color:#E3AAA6}
button.small,.button.small,input.small{padding:3px 9px;font-size:12px}
button.link{background:none;border:0;padding:0;text-decoration:underline;cursor:pointer}
.buttons{display:flex;gap:8px;flex-wrap:wrap}
.flash{padding:9px 13px;border-radius:7px;margin-bottom:14px}
.flash.ok{background:#E7F5EE;color:#155E3D}.flash.err{background:#FBE9E8;color:#8A231D}.flash.warn{background:#FFF5DB;color:#6B4C00}
.tag{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;background:#E8EDF2;color:var(--muted)}
.tag.ok{background:#E2F3EA;color:var(--ok)}.tag.warn{background:#FFF1CF;color:#8A6200}.tag.bad{background:#FBE3E1;color:var(--bad)}
.badge[hidden]{display:none}
.badge{display:inline-block;min-width:18px;padding:0 6px;margin-left:6px;border-radius:9px;background:var(--warn);color:#fff;font-size:11px;text-align:center}
table.list{width:100%;border-collapse:collapse}
.list th{text-align:left;font-size:12px;color:var(--muted);border-bottom:1px solid var(--line);padding:6px 8px}
.list td{border-bottom:1px solid #EEF2F5;padding:7px 8px;vertical-align:top}
.r{text-align:right}
.actions{display:flex;gap:6px;flex-wrap:wrap}.actions form{margin:0}
.sev-warn td{background:#FFFAEB}.sev-error td{background:#FDF0EF}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-top:12px}
.kpi{border:1px solid var(--line);border-radius:8px;padding:10px 14px;display:flex;flex-direction:column}
.kpi span{font-size:12px;color:var(--muted)}.kpi b{font-size:26px;color:var(--navy)}.kpi small{color:var(--muted)}
.grid-values{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px}
table.values{border-collapse:collapse;width:100%}.values caption{text-align:left;font-weight:600;color:var(--navy);padding-bottom:4px}
.values th{text-align:left;font-weight:500;color:var(--muted);font-size:12px}.values td{text-align:right;font-variant-numeric:tabular-nums}.values td.u{text-align:left;color:var(--muted);font-size:12px;padding-left:4px}
.chart{position:relative}.chart canvas{width:100%;height:320px;display:block}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;margin-top:6px}.legend i{display:inline-block;width:12px;height:3px;margin-right:5px;vertical-align:middle}
.kv{display:grid;grid-template-columns:160px 1fr;gap:6px 12px;margin:0}.kv dt{color:var(--muted)}.kv dd{margin:0}
.code{font:600 20px ui-monospace,Consolas,monospace;letter-spacing:1px;color:var(--navy);background:#EEF4F8;padding:6px 12px;border-radius:6px;display:inline-block}
.pin{font:700 44px ui-monospace,Consolas,monospace;letter-spacing:6px;text-align:center;color:var(--navy);background:#E9F6FA;border:2px dashed var(--cyan);border-radius:10px;padding:10px;margin:12px 0 4px}
.steps li{margin-bottom:6px}
.empty{text-align:center;padding:40px}
@media (max-width:700px){.cell{min-width:0;flex:1}.kv{grid-template-columns:1fr}}

.who a.on{text-decoration:underline;font-weight:600}
.pulse{display:inline-block;width:9px;height:9px;border-radius:50%;background:#A9B6C3;margin-right:7px;vertical-align:middle}
.pulse.beat{animation:beat 1s ease-out}.pulse.ok{background:var(--ok)}.pulse.bad{background:var(--bad)}
@keyframes beat{0%{transform:scale(1.9);box-shadow:0 0 0 0 rgba(30,142,90,.6)}100%{transform:scale(1);box-shadow:0 0 0 8px rgba(30,142,90,0)}}
.live-badge{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;padding:4px 10px;border-radius:12px;background:#E8EDF2;color:var(--muted)}
.live-badge i{width:9px;height:9px;border-radius:50%;background:#A9B6C3}
.live-badge.live{background:#E2F3EA;color:var(--ok)}.live-badge.live i{background:var(--ok);animation:beat 1s ease-out}
.live-badge.stale{background:#FFF1CF;color:#8A6200}.live-badge.stale i{background:var(--warn)}
.flash.small{padding:6px 10px;font-size:13px;margin:10px 0 0}
.acq .inline{justify-content:flex-end}
h3{font-size:14px;color:var(--navy);margin:18px 0 8px}
.inline-label{flex-direction:row;align-items:center;gap:8px}
.flash-num{animation:flashnum .8s ease-out}@keyframes flashnum{0%{background:#DDF3FA}100%{background:transparent}}
.about-logo{height:72px;margin-right:12px}
.manual h2{margin-top:22px}.manual h2:first-child{margin-top:0}.manual li{margin-bottom:5px}
.toc li{margin-bottom:4px}
.creds dd{word-break:break-all}.secret{background:#FFF5DB;padding:2px 6px;border-radius:4px}
/* ---- Análisis ---- */
.an-head{align-items:flex-end;margin-bottom:12px}.an-head h1{margin-bottom:4px}
.an-filters{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end}
.an-filters label,.an-filters .fld{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted);font-weight:600}
.an-filters .grow{flex:2 1 260px}.f-unom input{width:110px}
.seg{display:flex;border:1px solid #C3CFDB;border-radius:6px;overflow:hidden}
.seg button{border:0;border-radius:0;padding:7px 11px;font-weight:400}
.seg button[aria-pressed=true],.chips button[aria-pressed=true]{background:var(--navy);color:#fff;border-color:var(--navy)}
.chips{display:flex;flex-wrap:wrap;gap:6px}.chips button{border-radius:14px;padding:4px 11px;font-size:13px}
.chips button:disabled{opacity:.45;cursor:not-allowed}
.an-kpis{grid-template-columns:repeat(auto-fit,minmax(165px,1fr));margin:0 0 16px}
.an-kpis .kpi{background:#fff}.an-kpis .kpi b{font-size:24px}.kpi small.st-ok{color:var(--ok);font-weight:600}
.kpi small.st-warn{color:#8A6200;font-weight:600}.kpi small.st-bad{color:var(--bad);font-weight:600}
.kpi-imp{border-top:4px solid #1F5FA8}.kpi-imp b{color:#1F5FA8!important}.kpi-exp{border-top:4px solid #D9822B}.kpi-exp b{color:#A3540F!important}
.an-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:16px;margin-bottom:16px}.an-grid>.card{margin:0}
.an-wide{grid-column:span 2}@media (max-width:900px){.an-wide{grid-column:auto}}
.mini-chart{width:100%;display:block}
.uplot-box{width:100%;min-height:200px}.uplot-box .u-legend{font-size:12px;text-align:left}
.legend-pq{display:flex;gap:14px;color:var(--muted)}.sw{display:inline-block;width:14px;height:10px;border-radius:2px;margin-right:6px;vertical-align:middle}
.sw.imp{background:#1F5FA8}.sw.exp{background:#D9822B}
.table-scroll{overflow-x:auto}.tag.ok{background:#E2F3EA;color:var(--ok)}
.card h2{margin-bottom:8px}.small{font-size:12px}
@media print{
  .top nav,.who,.heartbeat,.no-print,footer{display:none!important}
  body{background:#fff}.card{break-inside:avoid;border-color:#ccc}main{padding:0;max-width:none}
}
.an-filters [hidden]{display:none!important}
@media (max-width:700px){.heartbeat{gap:6px}.cell{flex:1 1 100%;min-width:0}.clock{margin-left:0;flex:1 1 100%}.top{gap:10px}}
.u-legend .u-series[hidden]{display:none}
