/* Cerbero — sistema de diseño (tokens claro/oscuro + componentes del panel).
   Todas las pantallas nuevas parten de aquí. */

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}

/* ---------- tokens: oscuro (por defecto) ---------- */
:root{
  --bg:#06060e; --bg2:#0c0c1a;
  --surface:rgba(17,17,38,.78); --surface-2:rgba(255,255,255,.05); --surface-3:rgba(0,0,0,.18);
  --line:rgba(255,255,255,.07); --line-strong:rgba(255,255,255,.12);
  --text:#f0f0f5; --text2:#a1a1b5; --muted:#6b6b80;
  --track:rgba(255,255,255,.07);
  --purple:#8b5cf6; --indigo:#6366f1; --cyan:#06b6d4; --blue:#3b82f6;
  --ok:#10b981; --ok-text:#34d399; --ok-bg:rgba(16,185,129,.16);
  --warn:#f59e0b; --warn-text:#fbbf24; --warn-bg:rgba(245,158,11,.16);
  --crit:#ef4444; --crit-text:#fca5a5; --crit-bg:rgba(239,68,68,.18);
  --info:#64748b; --info-text:#cbd5e1; --info-bg:rgba(100,116,139,.2);
  --grey:#4b5563;
  --radius:22px; --radius-sm:14px;
  --glow-a:rgba(139,92,246,.10); --glow-b:rgba(6,182,212,.07); --glow-c:rgba(236,72,153,.05);
  --topbar:rgba(6,6,14,.72);
  --hero-ok:linear-gradient(135deg,rgba(16,185,129,.20),rgba(6,182,212,.12) 45%,rgba(139,92,246,.18));
  --hero-warn:linear-gradient(135deg,rgba(245,158,11,.24),rgba(249,115,22,.12) 50%,rgba(139,92,246,.14));
  --hero-crit:linear-gradient(135deg,rgba(239,68,68,.28),rgba(236,72,153,.16) 50%,rgba(139,92,246,.14));
  --kpi-bg:rgba(6,6,14,.38); --kpi-line:rgba(255,255,255,.08);
  --ring-ok:conic-gradient(from 210deg,#10b981,#06b6d4,#3b82f6,#8b5cf6,#10b981);
  --ring-warn:conic-gradient(from 210deg,#f59e0b,#fbbf24,#f97316,#f59e0b);
  --ring-crit:conic-gradient(from 210deg,#ef4444,#f472b6,#f97316,#ef4444);
  --ring-none:conic-gradient(#374151,#4b5563,#374151);
  --shadow:0 10px 40px rgba(0,0,0,.35);
  --chart-cpu:#22d3ee; --chart-ram:#a78bfa; --chart-disk:#fbbf24;
  color-scheme:dark;
}
/* ---------- tokens: claro ---------- */
[data-theme="light"]{
  --bg:#f3f3fa; --bg2:#ffffff;
  --surface:rgba(255,255,255,.86); --surface-2:rgba(20,20,60,.05); --surface-3:rgba(20,20,60,.04);
  --line:rgba(20,20,60,.08); --line-strong:rgba(20,20,60,.16);
  --text:#15152a; --text2:#5b5b73; --muted:#8a8aa3;
  --track:rgba(20,20,60,.08);
  --ok:#059669; --ok-text:#047857; --ok-bg:rgba(16,185,129,.14);
  --warn:#d97706; --warn-text:#b45309; --warn-bg:rgba(245,158,11,.16);
  --crit:#dc2626; --crit-text:#b91c1c; --crit-bg:rgba(239,68,68,.12);
  --info:#64748b; --info-text:#475569; --info-bg:rgba(100,116,139,.14);
  --grey:#9ca3af;
  --glow-a:rgba(139,92,246,.14); --glow-b:rgba(6,182,212,.10); --glow-c:rgba(236,72,153,.07);
  --topbar:rgba(243,243,250,.78);
  --hero-ok:linear-gradient(135deg,rgba(16,185,129,.22),rgba(6,182,212,.14) 45%,rgba(139,92,246,.18));
  --hero-warn:linear-gradient(135deg,rgba(245,158,11,.28),rgba(249,115,22,.14) 50%,rgba(139,92,246,.14));
  --hero-crit:linear-gradient(135deg,rgba(239,68,68,.26),rgba(236,72,153,.14) 50%,rgba(139,92,246,.14));
  --kpi-bg:rgba(255,255,255,.55); --kpi-line:rgba(20,20,60,.08);
  --ring-none:conic-gradient(#cbd5e1,#e2e8f0,#cbd5e1);
  --shadow:0 10px 40px rgba(20,20,60,.10);
  --chart-cpu:#0891b2; --chart-ram:#7c3aed; --chart-disk:#d97706;
  color-scheme:light;
}

html{scroll-behavior:smooth}
body{font-family:Inter,-apple-system,system-ui,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;transition:background .3s,color .3s}
body::before{content:'';position:fixed;inset:-30%;pointer-events:none;z-index:0;
  background:radial-gradient(circle at 20% 10%,var(--glow-a),transparent 40%),
             radial-gradient(circle at 85% 30%,var(--glow-b),transparent 40%),
             radial-gradient(circle at 50% 95%,var(--glow-c),transparent 40%);
  animation:drift 30s ease-in-out infinite alternate}
@keyframes drift{to{transform:translate3d(3%,-2%,0) rotate(3deg)}}
a{color:inherit}
.wrap{position:relative;z-index:1;max-width:1180px;margin:0 auto;padding:0 16px 60px}

/* ---------- barra superior ---------- */
.top{position:sticky;top:0;z-index:20;margin:0 -16px;padding:14px 16px;display:flex;align-items:center;gap:12px;
  background:var(--topbar);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border-bottom:1px solid var(--line)}
.logo{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;font-size:21px;flex:none;
  background:linear-gradient(135deg,#8b5cf6,#ec4899 55%,#f59e0b);box-shadow:0 6px 24px rgba(139,92,246,.35)}
.brand{flex:1;min-width:0}
.brand h1{font-size:1.15rem;font-weight:800;letter-spacing:-.02em;line-height:1.1}
.brand h1 span{background:linear-gradient(90deg,#8b5cf6,#d946ef,#f59e0b);-webkit-background-clip:text;background-clip:text;color:transparent}
.brand small{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:.74rem;font-weight:500}
.live-dot{width:8px;height:8px;border-radius:50%;background:var(--crit);box-shadow:0 0 0 0 rgba(239,68,68,.7);animation:pulse 1.6s infinite}
.live-dot.stale{background:var(--grey);animation:none}
@keyframes pulse{70%{box-shadow:0 0 0 9px rgba(239,68,68,0)}100%{box-shadow:0 0 0 0 rgba(239,68,68,0)}}
.clock{font-variant-numeric:tabular-nums;font-weight:700;font-size:1.05rem;color:var(--text2)}
.btn{display:inline-flex;align-items:center;gap:6px;color:var(--text2);text-decoration:none;font-size:.8rem;font-weight:600;padding:8px 12px;
  border-radius:12px;border:1px solid var(--line);background:transparent;cursor:pointer;font-family:inherit;white-space:nowrap;transition:background .2s,color .2s}
.btn:hover{color:var(--text);background:var(--surface-2)}
.btn.primary{background:var(--purple);color:#fff;border-color:transparent}
.btn.primary:hover{filter:brightness(1.1)}
.btn.icon{padding:8px 10px;font-size:1rem}
.btn.small{padding:5px 9px;font-size:.72rem;border-radius:9px}
.btn:disabled{opacity:.5;cursor:default}

/* ---------- stories ---------- */
.stories{display:flex;gap:18px;overflow-x:auto;padding:22px 2px 8px;scrollbar-width:none}
.stories::-webkit-scrollbar{display:none}
.story{flex:none;width:78px;text-align:center;cursor:pointer;background:none;border:0;color:inherit;font:inherit}
.story .ring{width:74px;height:74px;border-radius:50%;padding:3px;margin:0 auto;background:var(--ring-ok);position:relative;transition:transform .2s}
.story:hover .ring{transform:scale(1.06)}
.story .ring.warn{background:var(--ring-warn)} .story .ring.crit{background:var(--ring-crit);animation:spin 3s linear infinite}
.story .ring.none{background:var(--ring-none)}
@keyframes spin{to{filter:hue-rotate(25deg)}}
.story .face{width:100%;height:100%;border-radius:50%;background:var(--bg2);border:3px solid var(--bg);display:grid;place-items:center;
  font-size:1.55rem;font-weight:900;letter-spacing:-.04em}
.story .face small{display:block;font-size:.58rem;font-weight:700;color:var(--text2);letter-spacing:0;margin-top:-6px}
.story .lbl{display:block;margin-top:7px;font-size:.74rem;font-weight:600;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.story .badge{position:absolute;right:-2px;bottom:2px;min-width:22px;height:22px;padding:0 6px;border-radius:11px;font-size:.68rem;font-weight:800;
  display:grid;place-items:center;border:3px solid var(--bg);background:var(--crit);color:#fff}
.story .badge.warn{background:var(--warn);color:#1a1205}

/* ---------- hero ---------- */
.hero{margin-top:14px;border-radius:28px;padding:26px 24px;position:relative;overflow:hidden;border:1px solid var(--line);background:var(--hero-ok)}
.hero.warn{background:var(--hero-warn)} .hero.crit{background:var(--hero-crit)}
.hero::after{content:'';position:absolute;width:320px;height:320px;right:-80px;top:-120px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.12),transparent 65%)}
.hero-head{display:flex;align-items:center;gap:16px;position:relative;z-index:1}
.hero-emoji{font-size:2.6rem;filter:drop-shadow(0 6px 18px rgba(0,0,0,.25))}
.hero h2{font-size:clamp(1.45rem,4.2vw,2.2rem);font-weight:900;letter-spacing:-.03em;line-height:1.1}
.hero p{color:var(--text2);font-size:.9rem;margin-top:4px}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:22px;position:relative;z-index:1}
.kpi{background:var(--kpi-bg);border:1px solid var(--kpi-line);border-radius:18px;padding:14px 16px;backdrop-filter:blur(6px)}
.kpi b{display:block;font-size:1.65rem;font-weight:900;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.kpi b small{font-size:.95rem;color:var(--text2);font-weight:700}
.kpi span{font-size:.74rem;color:var(--text2);font-weight:600;text-transform:uppercase;letter-spacing:.05em}

/* ---------- secciones y tarjetas ---------- */
.section-title{display:flex;align-items:center;gap:10px;margin:34px 2px 14px;font-size:1.05rem;font-weight:800;letter-spacing:-.01em;flex-wrap:wrap}
.section-title .count{font-size:.72rem;font-weight:800;padding:3px 9px;border-radius:999px;background:var(--surface-2);color:var(--text2)}
.section-title .hint{margin-left:auto;font-size:.74rem;font-weight:500;color:var(--muted)}
.grid{display:grid;gap:16px}
.grid.servers{grid-template-columns:repeat(auto-fill,minmax(340px,1fr))}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.banner{display:none;margin-top:14px;padding:12px 16px;border-radius:14px;background:var(--crit-bg);border:1px solid var(--crit);color:var(--crit-text);font-size:.86rem;font-weight:600}
.banner.warn{background:var(--warn-bg);border-color:var(--warn);color:var(--warn-text)}
.banner a{color:inherit}
.foot{margin-top:40px;text-align:center;color:var(--muted);font-size:.74rem}

/* ---------- alertas ---------- */
.alerts{display:flex;flex-direction:column;gap:10px}
.alert{display:flex;gap:14px;align-items:center;padding:14px 16px;border-radius:18px;background:var(--surface);border:1px solid var(--line);
  position:relative;overflow:hidden;animation:slidein .45s cubic-bezier(.2,.8,.2,1) both;flex-wrap:wrap}
.alert::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--warn)}
.alert.crit::before{background:linear-gradient(var(--crit),#f472b6)}
.alert.info::before{background:var(--info)}
.alert.crit{background:linear-gradient(90deg,var(--crit-bg),var(--surface) 55%)}
.alert.warn{background:linear-gradient(90deg,var(--warn-bg),var(--surface) 55%)}
.alert.handled{opacity:.6}
.alert .ic{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;font-size:1.25rem;background:var(--surface-2);flex:none}
.alert .tx{flex:1;min-width:200px}
.alert .tx b{display:block;font-size:.92rem;font-weight:700}
.alert .tx span{display:block;font-size:.8rem;color:var(--text2)}
.alert .tx em{display:block;font-size:.72rem;color:var(--muted);font-style:normal;margin-top:2px}
.alert .tag{font-size:.66rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;padding:4px 9px;border-radius:999px;background:var(--surface-2);color:var(--text2);flex:none}
.alert .tag.crit{background:var(--crit-bg);color:var(--crit-text)} .alert .tag.warn{background:var(--warn-bg);color:var(--warn-text)}
.alert .tag.info{background:var(--info-bg);color:var(--info-text)} .alert .tag.ok{background:var(--ok-bg);color:var(--ok-text)}
.alert .actions{display:flex;gap:6px;flex:none;margin-left:auto}
.all-good{padding:30px;text-align:center;color:var(--text2);font-weight:600}
.all-good div{font-size:2.4rem;margin-bottom:6px}
@keyframes slidein{from{opacity:0;transform:translateY(8px)}}
details.group{margin-top:10px}
details.group summary{cursor:pointer;font-size:.78rem;color:var(--muted);font-weight:600;list-style:none;padding:6px 2px}
details.group summary::-webkit-details-marker{display:none}
details.group summary:hover{color:var(--text2)}
details.group .alerts{margin-top:8px}

/* ---------- pendientes ---------- */
.grid.todo{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}
.todo-item{padding:14px 16px;display:flex;gap:12px;align-items:center}
.todo-item .ic{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;font-size:1.2rem;background:var(--surface-2);flex:none}
.todo-item b{font-weight:800}
.todo-item span{display:block;font-size:.74rem;color:var(--muted);margin-top:2px}
.todo-item.warn{border-color:rgba(245,158,11,.4)}

/* ---------- tarjeta de servidor ---------- */
.srv{padding:18px;scroll-margin-top:90px;transition:border-color .3s}
.srv.crit{border-color:rgba(239,68,68,.45);box-shadow:0 0 0 1px rgba(239,68,68,.15),0 10px 40px rgba(239,68,68,.08)}
.srv.warn{border-color:rgba(245,158,11,.4)}
.srv-head{display:flex;align-items:center;gap:12px}
.avatar{width:46px;height:46px;border-radius:50%;padding:2px;background:var(--ring-ok);flex:none}
.avatar.warn{background:var(--ring-warn)} .avatar.crit{background:var(--ring-crit)} .avatar.none{background:var(--ring-none)}
.avatar div{width:100%;height:100%;border-radius:50%;background:var(--bg2);border:2px solid var(--bg);display:grid;place-items:center;font-weight:900;font-size:1.05rem}
.srv-head .who{flex:1;min-width:0}
.srv-head .who b{font-size:1rem;font-weight:800;display:block}
.srv-head .who span{font-size:.76rem;color:var(--muted);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pill{font-size:.7rem;font-weight:800;padding:5px 10px;border-radius:999px;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
.pill.online{background:var(--ok-bg);color:var(--ok-text)} .pill.degraded{background:var(--warn-bg);color:var(--warn-text)}
.pill.offline{background:var(--crit-bg);color:var(--crit-text)} .pill.nodata{background:var(--info-bg);color:var(--info-text)}
.facts{display:flex;flex-wrap:wrap;gap:5px 10px;margin-top:12px;font-size:.72rem;color:var(--muted);font-weight:500}
.facts span{white-space:nowrap} .facts .bad{color:var(--warn-text);font-weight:700}
.gauges{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:14px 0 6px}
.gauge{text-align:center}
.gauge svg{width:100%;max-width:104px;height:auto;display:block;margin:0 auto;overflow:visible}
.gauge .trk{stroke:var(--track)}
.gauge .val{transition:stroke-dashoffset 1.1s cubic-bezier(.2,.8,.2,1),stroke .4s}
.gauge text{fill:var(--text);font-weight:900;font-size:19px;font-family:Inter,sans-serif;letter-spacing:-.04em}
.gauge text.u{font-size:10px;fill:var(--text2);font-weight:700}
.gauge .lbl{font-size:.72rem;font-weight:700;color:var(--text2);text-transform:uppercase;letter-spacing:.07em;margin-top:2px}
.gauge .sub{font-size:.68rem;color:var(--muted)}
.chart{margin-top:10px;background:var(--surface-3);border-radius:16px;padding:10px 10px 6px;border:1px solid var(--line)}
.chart svg{width:100%;height:84px;display:block}
.chart .legend{display:flex;gap:14px;font-size:.7rem;color:var(--text2);font-weight:600;margin-top:4px;padding:0 2px}
.chart .legend i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;vertical-align:0}
.chart .legend .rng{margin-left:auto;color:var(--muted);font-weight:500}
.ctr{margin-top:14px}
.ctr-top{display:flex;justify-content:space-between;font-size:.8rem;font-weight:700;margin-bottom:7px;gap:8px;flex-wrap:wrap}
.ctr-top span{color:var(--text2);font-weight:600}
.bar{height:9px;border-radius:99px;background:var(--track);overflow:hidden}
.bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--ok),var(--cyan));transition:width 1s}
.bar.warn i{background:linear-gradient(90deg,var(--warn),#f97316)}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.chip{font-size:.72rem;font-weight:600;padding:4px 9px;border-radius:9px;background:var(--crit-bg);color:var(--crit-text);border:1px solid transparent}
.chip small{opacity:.75;font-weight:500}
.chip.grey{background:var(--surface-2);color:var(--text2);border-color:var(--line)}
.nodata-msg{margin:22px 0 6px;padding:18px;border-radius:16px;border:1px dashed var(--line-strong);color:var(--text2);font-size:.85rem;text-align:center}

/* ---------- backups / nubes / tareas ---------- */
.grid.series{grid-template-columns:repeat(auto-fill,minmax(205px,1fr))}
.ser{padding:16px;position:relative;overflow:hidden}
.ser::after{content:'';position:absolute;right:-30px;top:-30px;width:110px;height:110px;border-radius:50%;background:radial-gradient(circle,var(--ok-bg),transparent 70%)}
.ser.stale::after{background:radial-gradient(circle,var(--crit-bg),transparent 70%)}
.ser-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.ser-top b{font-size:.95rem;font-weight:800}
.ser .ok{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-size:.9rem;background:var(--ok-bg);color:var(--ok-text);font-weight:900}
.ser.stale .ok{background:var(--crit-bg);color:var(--crit-text)}
.ser .age{font-size:1.6rem;font-weight:900;letter-spacing:-.03em;margin-top:12px}
.ser .age small{font-size:.8rem;color:var(--text2);font-weight:600}
.ser .meta{font-size:.74rem;color:var(--text2);margin-top:6px;display:flex;flex-wrap:wrap;gap:5px}
.ser .meta span{background:var(--surface-2);padding:3px 8px;border-radius:8px}
.grid.clouds{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
.cloud{padding:18px;display:flex;gap:14px;align-items:center}
.cloud .ci{width:52px;height:52px;border-radius:16px;display:grid;place-items:center;font-size:1.5rem;flex:none;color:#fff}
.cloud .ci.Azure{background:linear-gradient(135deg,#0078d4,#06b6d4)}
.cloud .ci.Contabo{background:linear-gradient(135deg,#1e40af,#6366f1)}
.cloud .ci.AWS{background:linear-gradient(135deg,#f59e0b,#ef4444)}
.cloud b{display:block;font-size:1.45rem;font-weight:900;letter-spacing:-.03em}
.cloud span{font-size:.78rem;color:var(--text2);display:block}
.cloud em{font-size:.68rem;color:var(--muted);font-style:normal;display:block;margin-top:2px}
.tasks{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}
.task{flex:1 0 210px;padding:14px 16px;display:flex;gap:12px;align-items:center}
.task .ti{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;font-weight:900;flex:none;background:var(--ok-bg);color:var(--ok-text)}
.task.bad .ti{background:var(--crit-bg);color:var(--crit-text)} .task.old .ti{background:var(--warn-bg);color:var(--warn-text)}
.task b{font-size:.84rem;font-weight:700;display:block;line-height:1.25}
.task span{font-size:.74rem;color:var(--text2)}

/* ---------- tablas / listas (historial) ---------- */
.filters{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0 14px}
.filters a{font-size:.78rem;font-weight:600;padding:6px 12px;border-radius:999px;border:1px solid var(--line);color:var(--text2);text-decoration:none}
.filters a.on{background:var(--purple);color:#fff;border-color:transparent}
.row-meta{font-size:.72rem;color:var(--muted)}

/* ---------- formularios y ajustes ---------- */
.grid.two{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.card.pad{padding:20px}
.card.pad h3{font-size:.95rem;font-weight:800;margin-bottom:12px;letter-spacing:-.01em}
.field{margin-bottom:12px}
.field label{display:block;font-size:.76rem;font-weight:700;color:var(--text2);margin-bottom:5px;text-transform:uppercase;letter-spacing:.05em}
.field small{display:block;font-size:.72rem;color:var(--muted);margin-top:4px}
.field small.error{color:var(--crit-text);font-weight:600}
.field.err input,.field.err select,.field.err textarea{border-color:var(--crit)}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=url],input[type=tel],select,textarea{
  width:100%;font:inherit;font-size:.9rem;color:var(--text);background:var(--surface-3);border:1px solid var(--line-strong);
  border-radius:12px;padding:9px 12px;outline:none;transition:border-color .2s,box-shadow .2s}
input:focus,select:focus,textarea:focus{border-color:var(--purple);box-shadow:0 0 0 3px rgba(139,92,246,.2)}
input[type=color]{width:60px;height:38px;padding:2px;border:1px solid var(--line-strong);border-radius:10px;background:var(--surface-3)}
input[type=checkbox]{width:18px;height:18px;accent-color:var(--purple);vertical-align:middle}
select{appearance:auto}
.checks{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.check{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;cursor:pointer;background:var(--surface-3);margin-bottom:8px}
.check:hover{border-color:var(--line-strong)}
.check b{font-size:.86rem;font-weight:700}
.check span{font-size:.72rem;color:var(--muted);display:block}
.check.other{opacity:.65}
.tbl{width:100%;border-collapse:collapse;font-size:.86rem}
.tbl th{text-align:left;font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:700;padding:10px 12px;border-bottom:1px solid var(--line)}
.tbl td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl tr:last-child td{border-bottom:0}
.tbl tr.off td{opacity:.5}
.tbl select,.tbl input[type=text]{width:auto;padding:6px 10px;font-size:.82rem}
.inline{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.inline select{width:auto}
.actions-bar{display:flex;gap:10px;margin-top:18px;flex-wrap:wrap}
.banner.ok{background:var(--ok-bg);border-color:var(--ok);color:var(--ok-text)}
.how{padding-left:20px;font-size:.86rem;color:var(--text2);display:grid;gap:8px}
.grid.companies{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.co{padding:18px;text-decoration:none;display:block;border-top:3px solid var(--co,var(--purple))}
.co-head{display:flex;align-items:center;gap:12px}
.co-head .co-icon{width:44px;height:44px;border-radius:14px;display:grid;place-items:center;font-size:1.4rem;background:var(--surface-2);flex:none}
.co-head b{display:block;font-size:1rem;font-weight:800}
.co-head span{font-size:.74rem;color:var(--muted)}
.co-head .pill{margin-left:auto}
.co-team{display:flex;flex-wrap:wrap;gap:6px 10px;margin-top:10px;font-size:.76rem;color:var(--text2)}
.co-team .lead{color:var(--text);font-weight:700} .co-team .backup{font-weight:600}
.cosel{display:flex;gap:8px;overflow-x:auto;padding:12px 2px 0;scrollbar-width:none}
.cosel::-webkit-scrollbar{display:none}
.cosel button{flex:none;font:inherit;font-size:.78rem;font-weight:700;padding:7px 13px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--text2);cursor:pointer}
.cosel button.on{background:var(--co,var(--purple));color:#fff;border-color:transparent}
.cotag{font-size:.66rem;font-weight:800;padding:3px 8px;border-radius:999px;background:var(--surface-2);color:var(--text2);border-left:3px solid var(--co,var(--purple))}

@media (max-width:720px){
  .kpis{grid-template-columns:repeat(2,1fr)}
  .grid.servers{grid-template-columns:1fr}
  .hero{padding:22px 18px;border-radius:24px}
  .clock{display:none}
  .alert .actions{margin-left:0;width:100%;justify-content:flex-end}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------- navegación común ---------- */
.top .logo{text-decoration:none;transition:transform .25s}
.top .logo:hover{transform:rotate(-8deg) scale(1.06)}
.navpills{display:flex;gap:4px;margin-left:8px}
.navpills a{display:flex;align-items:center;gap:6px;padding:8px 12px;border-radius:12px;font-size:.8rem;font-weight:700;color:var(--text2);text-decoration:none;transition:background .2s,color .2s,transform .2s}
.navpills a:hover{background:var(--surface-2);color:var(--text);transform:translateY(-1px)}
.navpills a.on{background:var(--purple);color:#fff;box-shadow:0 6px 18px rgba(139,92,246,.35)}
.navpills i{font-style:normal;font-size:.95rem}
.topright{display:flex;gap:6px;margin-left:auto}
.tabbar{display:none}
@media (max-width:860px){
  .navpills{display:none}
  .wrap{padding-bottom:90px}
  .tabbar{display:flex;position:fixed;left:12px;right:12px;bottom:12px;z-index:30;padding:6px;border-radius:22px;
    background:var(--topbar);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--line);box-shadow:var(--shadow)}
  .tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 4px;border-radius:16px;font-size:.62rem;font-weight:700;color:var(--muted);text-decoration:none;transition:background .2s,color .2s}
  .tabbar a i{font-style:normal;font-size:1.2rem;transition:transform .2s}
  .tabbar a.on{background:var(--purple);color:#fff} .tabbar a.on i{transform:translateY(-2px) scale(1.1)}
  .brand h1{font-size:1rem} .brand small{display:none}
}

/* ---------- animaciones y micro-interacciones ---------- */
.card{transition:transform .25s cubic-bezier(.2,.8,.2,1),box-shadow .25s,border-color .3s}
.card.lift:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
.stagger>*{animation:rise .5s cubic-bezier(.2,.8,.2,1) both}
.stagger>*:nth-child(1){animation-delay:.02s}.stagger>*:nth-child(2){animation-delay:.07s}.stagger>*:nth-child(3){animation-delay:.12s}
.stagger>*:nth-child(4){animation-delay:.17s}.stagger>*:nth-child(5){animation-delay:.22s}.stagger>*:nth-child(6){animation-delay:.27s}
.stagger>*:nth-child(7){animation-delay:.32s}.stagger>*:nth-child(8){animation-delay:.37s}.stagger>*:nth-child(n+9){animation-delay:.4s}
@keyframes rise{from{opacity:0;transform:translateY(14px) scale(.98)}}
.story .ring{animation:ringin .6s cubic-bezier(.2,.8,.2,1) both}
@keyframes ringin{from{transform:scale(.6);opacity:0}}
.hero{transition:background 1s}
.kpi b{transition:color .3s}
.skeleton{position:relative;overflow:hidden;background:var(--surface-2);border-radius:var(--radius);min-height:120px}
.skeleton::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.08),transparent);animation:shimmer 1.4s infinite}
@keyframes shimmer{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
.toasts{position:fixed;right:16px;bottom:16px;z-index:50;display:flex;flex-direction:column;gap:10px;max-width:min(380px,calc(100vw - 32px))}
@media (max-width:860px){.toasts{bottom:92px}}
.toast{display:flex;gap:12px;align-items:center;padding:12px 14px;border-radius:16px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);
  backdrop-filter:blur(16px);animation:toastin .4s cubic-bezier(.2,.8,.2,1) both;cursor:pointer}
.toast.out{animation:toastout .3s forwards}
.toast .ic{font-size:1.3rem} .toast b{display:block;font-size:.86rem} .toast span{font-size:.74rem;color:var(--text2)}
.toast.crit{border-color:var(--crit);box-shadow:0 10px 40px rgba(239,68,68,.25)} .toast.warn{border-color:var(--warn)} .toast.ok{border-color:var(--ok)}
@keyframes toastin{from{opacity:0;transform:translateX(30px) scale(.95)}}
@keyframes toastout{to{opacity:0;transform:translateY(10px) scale(.95)}}
.pulse-ok{animation:glowok 2.4s ease-in-out infinite}
@keyframes glowok{50%{box-shadow:0 0 0 6px rgba(16,185,129,.12)}}

/* ---------- login ---------- */
.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px;position:relative;z-index:1}
.login{width:min(420px,100%);padding:34px 30px;border-radius:30px;background:var(--surface);border:1px solid var(--line);backdrop-filter:blur(20px);
  box-shadow:var(--shadow);animation:rise .6s cubic-bezier(.2,.8,.2,1) both}
.login .logo{width:64px;height:64px;border-radius:20px;font-size:32px;margin:0 auto 14px;animation:ringin .7s cubic-bezier(.2,.8,.2,1) both}
.login h1{text-align:center;font-size:1.7rem;font-weight:900;letter-spacing:-.03em}
.login h1 span{background:linear-gradient(90deg,#8b5cf6,#d946ef,#f59e0b);-webkit-background-clip:text;background-clip:text;color:transparent}
.login p{text-align:center;color:var(--text2);font-size:.86rem;margin:4px 0 22px}
.login .field{margin-bottom:14px}
.login .btn.primary{width:100%;justify-content:center;padding:13px;font-size:.95rem;border-radius:14px;margin-top:6px}
.login .foot{margin-top:18px}
.orbs{position:fixed;inset:0;overflow:hidden;z-index:0;pointer-events:none}
.orbs i{position:absolute;border-radius:50%;filter:blur(60px);opacity:.55;animation:float 14s ease-in-out infinite alternate}
.orbs i:nth-child(1){width:380px;height:380px;left:-80px;top:-60px;background:#8b5cf6}
.orbs i:nth-child(2){width:320px;height:320px;right:-60px;top:20%;background:#06b6d4;animation-delay:-5s}
.orbs i:nth-child(3){width:300px;height:300px;left:30%;bottom:-120px;background:#ec4899;animation-delay:-9s}
@keyframes float{to{transform:translate3d(40px,30px,0) scale(1.1)}}

/* ---------- alta de servidor ---------- */
.steps{display:grid;gap:14px;counter-reset:step}
.step{padding:18px;border-radius:18px;background:var(--surface);border:1px solid var(--line);position:relative;padding-left:62px}
.step::before{counter-increment:step;content:counter(step);position:absolute;left:18px;top:18px;width:30px;height:30px;border-radius:10px;display:grid;place-items:center;
  font-weight:900;font-size:.9rem;background:var(--purple);color:#fff}
.step h4{font-size:.95rem;font-weight:800;margin-bottom:6px}
.step p{font-size:.82rem;color:var(--text2)}
pre.code{margin-top:10px;background:#0b0b16;color:#d4d4e4;border-radius:14px;padding:14px;font-family:ui-monospace,Menlo,monospace;font-size:.76rem;line-height:1.5;overflow:auto;max-height:360px;white-space:pre;border:1px solid var(--line)}
.copybar{display:flex;gap:8px;align-items:center;margin-top:8px}
.result{margin-top:12px;padding:12px 14px;border-radius:14px;font-size:.84rem;border:1px solid var(--line);background:var(--surface-3)}
.result.ok{border-color:var(--ok);color:var(--ok-text)} .result.bad{border-color:var(--crit);color:var(--crit-text)}

/* ---------- informe ---------- */
.report h2{font-size:1.4rem;font-weight:900;letter-spacing:-.02em;margin:26px 0 10px}
.report .big{font-size:2.4rem;font-weight:900;letter-spacing:-.04em;line-height:1}
.report .big small{font-size:1rem;color:var(--text2);font-weight:700}
.trend{display:flex;align-items:flex-end;gap:2px;height:70px;padding:8px;background:var(--surface-3);border-radius:14px;border:1px solid var(--line)}
.trend i{flex:1;border-radius:3px 3px 0 0;background:var(--purple);min-height:2px}
.trend i.ok{background:var(--ok)} .trend i.warn{background:var(--warn)} .trend i.crit{background:var(--crit)}
@media print{body::before,.top,.tabbar,.btn,.toasts{display:none!important}body{background:#fff;color:#111}.card{border:1px solid #ddd;break-inside:avoid}}

/* ---------- guía por alerta, coste, línea de tiempo, parcheo, mapa ---------- */
.runbook{width:100%;margin:2px 0 0 54px;font-size:.8rem}
.runbook summary{cursor:pointer;color:var(--text2);font-weight:700;font-size:.76rem;list-style:none}
.runbook summary::-webkit-details-marker{display:none}
.runbook ol{margin:8px 0 8px 18px;color:var(--text2);display:grid;gap:4px}
.runbook code,.tl code{font-family:ui-monospace,Menlo,monospace;font-size:.76rem;background:var(--surface-2);padding:1px 5px;border-radius:5px}
@media (max-width:720px){.runbook{margin-left:0}}
.cost .spark{display:flex;align-items:flex-end;gap:1px;height:26px;margin-top:6px}
.cost .spark i{flex:1;background:var(--purple);opacity:.7;border-radius:2px 2px 0 0;min-height:2px}
.tl{position:relative;margin-top:8px;padding-left:22px;max-height:520px;overflow:auto}
.tl::before{content:'';position:absolute;left:8px;top:4px;bottom:4px;width:2px;background:var(--line-strong);border-radius:2px}
.tl-item{position:relative;padding:6px 0 10px}
.tl-item::before{content:'';position:absolute;left:-19px;top:11px;width:10px;height:10px;border-radius:50%;background:var(--grey);border:2px solid var(--bg)}
.tl-item.alerta::before{background:var(--warn)} .tl-item.alert_crit::before{background:var(--crit)} .tl-item.alert_resolved::before{background:var(--ok)}
.tl-item.cambio::before{background:var(--cyan)} .tl-item.acceso::before{background:var(--purple)} .tl-item.parcheo::before{background:var(--ok)}
.tl-item b{font-size:.84rem;font-weight:700} .tl-item span{display:block;font-size:.74rem;color:var(--muted)}
.tl-day{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--text2);margin:10px 0 2px -22px}
.impact{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
.impact span{font-size:.74rem;font-weight:700;padding:5px 10px;border-radius:999px;background:var(--surface-2)}
.impact span.warn{background:var(--warn-bg);color:var(--warn-text)} .impact span.ok{background:var(--ok-bg);color:var(--ok-text)}
.mapwrap{position:relative;background:var(--surface-3);border:1px solid var(--line);border-radius:20px;overflow:hidden}
.mapwrap svg{width:100%;height:auto;display:block}
.mapwrap .edge{stroke:var(--purple);stroke-opacity:.55;fill:none}
.mapwrap .edge-label{font-size:11px;font-weight:700;fill:var(--text2);font-family:Inter,sans-serif}
.mapwrap .node circle{fill:var(--bg2);stroke-width:3}
.mapwrap .node text{font-family:Inter,sans-serif;font-weight:800;fill:var(--text)}
.mapwrap .node .sub{font-weight:500;fill:var(--muted);font-size:11px}
.mapwrap .flow{stroke-dasharray:6 8;animation:flow 1.2s linear infinite}
@keyframes flow{to{stroke-dashoffset:-14}}
