/* ==========================================================================
   Panel de plataforma. La vista del dueño del producto.
   No es la consola: aquí no se opera, se supervisa. Más densa, más tabla,
   menos tarjeta. Y sin tema configurable — este panel es de la casa.
   ========================================================================== */
:root {
  --bg: #08090B;
  --s1: #101215;
  --s2: #16191D;
  --s3: #1D2126;
  --ln: rgba(255,255,255,.08);
  --ln2: rgba(255,255,255,.16);
  --tx: #EDF0F3;
  --tn: #98A0A9;
  --sd: #666E77;

  --on-rgb:   62,213,152;
  --off-rgb:  244,100,95;
  --warn-rgb: 245,178,61;
  --info-rgb: 91,157,255;
  --on:   rgb(var(--on-rgb));
  --off:  rgb(var(--off-rgb));
  --warn: rgb(var(--warn-rgb));
  --info: rgb(var(--info-rgb));

  --f-t: 'Instrument Sans', system-ui, sans-serif;
  --f-n: 'JetBrains Mono', monospace;

  /* Las mismas cuatro formas que las otras dos caras, en su versión sobria. */
  --r1: 14px; --r2: 11px; --r3: 9px; --r4: 99px;
}

* { margin: 0; padding: 0; box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html, body { background: var(--bg); color: var(--tx); font-family: var(--f-t); }
body { min-height: 100vh; min-height: 100dvh; }
.app { display: flex; flex-direction: column; height: 100vh; height: 100dvh; }

/* ---------- cabecera ---------- */
.top {
  display: flex; align-items: center; justify-content: space-between; flex-shrink: 0;
  padding: calc(12px + env(safe-area-inset-top)) 14px 11px;
  border-bottom: 1px solid var(--ln); background: var(--s1);
}
.marca { display: flex; align-items: center; gap: 9px; }
.marca .punto { width: 7px; height: 7px; border-radius: 2px; background: var(--info); }
.marca b { font: 700 11px var(--f-n); letter-spacing: .22em; }
.quien { font: 500 10.5px var(--f-n); color: var(--sd); letter-spacing: .06em; }

.lienzo { flex: 1; overflow-y: auto; padding: 14px 14px calc(28px + env(safe-area-inset-bottom)); }
.lienzo::-webkit-scrollbar { display: none; }

h1 { font: 700 21px var(--f-t); letter-spacing: -.02em; margin-bottom: 3px; }
.ojo { font: 500 9.5px var(--f-n); color: var(--sd); letter-spacing: .18em; text-transform: uppercase; }
.sub { font-size: 12.5px; color: var(--tn); margin-bottom: 14px; }

/* ---------- el resumen de arriba ---------- */
.cifras {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px;
  background: var(--ln); border: 1px solid var(--ln); border-radius: var(--r2);
  overflow: hidden; margin: 12px 0 16px;
}
.cifra { background: var(--s1); padding: 10px 11px 11px; }
.cifra .l {
  font: 500 8.5px var(--f-n); color: var(--sd); letter-spacing: .12em; text-transform: uppercase;
}
.cifra .v {
  font: 700 20px var(--f-n); letter-spacing: -.04em; margin-top: 5px;
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.cifra .v i { font-style: normal; font-size: 12px; color: var(--sd); }
.cifra .v.on { color: var(--on); } .cifra .v.off { color: var(--off); }
@media (max-width: 520px) { .cifras { grid-template-columns: repeat(2, 1fr); } }

/* ---------- la tabla ---------- */
.tabla { border: 1px solid var(--ln); border-radius: var(--r2); overflow: hidden; }
.fila {
  display: grid; grid-template-columns: 1fr 62px 74px 74px 68px;
  align-items: center; gap: 8px; padding: 10px 12px; width: 100%; text-align: left;
  background: var(--s1); border: none; border-bottom: 1px solid var(--ln);
  color: var(--tx); font-family: inherit; cursor: pointer;
}
.fila:last-child { border-bottom: none; }
.fila:active { background: var(--s2); }
.fila.cab {
  background: var(--s2); cursor: default; padding: 8px 12px;
  font: 500 8.5px var(--f-n); color: var(--sd); letter-spacing: .12em; text-transform: uppercase;
}
.fila.cab:active { background: var(--s2); }
.fila .quien-lider { min-width: 0; }
.fila .quien-lider b { display: block; font-size: 13.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fila .quien-lider span {
  display: block; font: 500 10px var(--f-n); color: var(--sd); margin-top: 1px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.num { font: 700 12.5px var(--f-n); text-align: right; font-variant-numeric: tabular-nums; }
.num.mini { font-size: 11px; color: var(--tn); }
.num.on { color: var(--on); } .num.off { color: var(--off); } .num.warn { color: var(--warn); }
.chip-estado {
  display: inline-block; font: 700 8.5px var(--f-n); letter-spacing: .1em; text-transform: uppercase;
  padding: 3px 7px; border-radius: var(--r4); background: var(--s3); color: var(--sd);
}
.chip-estado.viva { background: rgba(var(--on-rgb),.13); color: var(--on); }
.chip-estado.pausa { background: rgba(var(--off-rgb),.13); color: var(--off); }

/* ---------- detalle ---------- */
.volver {
  display: inline-flex; align-items: center; gap: 7px; background: none; border: none;
  color: var(--tn); font: 600 12.5px var(--f-t); cursor: pointer; padding: 4px 0; margin-bottom: 12px;
}
.bloque { border: 1px solid var(--ln); border-radius: var(--r2); background: var(--s1); margin-bottom: 12px; }
.bloque > .tit {
  padding: 9px 12px; border-bottom: 1px solid var(--ln); background: var(--s2);
  font: 500 8.5px var(--f-n); color: var(--sd); letter-spacing: .14em; text-transform: uppercase;
}
.bloque > .cuerpo { padding: 12px; }
.kv { display: flex; justify-content: space-between; align-items: center; padding: 7px 0; font-size: 13px; }
.kv + .kv { border-top: 1px solid var(--ln); }
.kv .k { color: var(--tn); }
.kv .v { font: 700 12.5px var(--f-n); }

.sw {
  width: 40px; height: 23px; border-radius: 99px; background: var(--s3); border: 1px solid var(--ln2);
  position: relative; flex-shrink: 0; cursor: pointer; transition: background .15s;
}
.sw::after {
  content: ""; position: absolute; top: 2px; left: 2px; width: 17px; height: 17px;
  border-radius: 50%; background: var(--tn); transition: transform .15s, background .15s;
}
.sw.on { background: rgba(var(--on-rgb),.2); border-color: rgba(var(--on-rgb),.45); }
.sw.on::after { transform: translateX(17px); background: var(--on); }
.sw.bloq { opacity: .4; cursor: not-allowed; }

.btn {
  height: 40px; padding: 0 14px; border-radius: var(--r3); border: 1px solid var(--ln2); background: var(--s2);
  color: var(--tx); font: 700 12.5px var(--f-t); cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
}
.btn:active { transform: scale(.98); }
.btn.pri { background: var(--tx); color: var(--bg); border-color: var(--tx); font-weight: 700; }
.btn.peligro { color: var(--off); border-color: rgba(var(--off-rgb),.35); }
.btn.ancho { width: 100%; }
.btn:disabled { opacity: .5; }
.duo { display: flex; gap: 8px; }
.duo > * { flex: 1; }

.campo { margin-bottom: 10px; }
.campo label {
  display: block; font: 500 9px var(--f-n); color: var(--sd);
  letter-spacing: .12em; text-transform: uppercase; margin-bottom: 5px;
}
.inp {
  width: 100%; height: 40px; padding: 0 11px; border-radius: var(--r3); background: var(--s2);
  border: 1px solid var(--ln); color: var(--tx); font: 500 13px var(--f-t); outline: none;
}
textarea.inp, select.inp { height: auto; padding: 10px 11px; }
.inp:focus { border-color: var(--ln2); }
.inp::placeholder { color: var(--sd); }
.pista { font-size: 11.5px; color: var(--sd); line-height: 1.45; margin-top: -4px; margin-bottom: 10px; }

.segm { display: flex; gap: 4px; padding: 4px; border-radius: var(--r2); background: var(--s2); border: 1px solid var(--ln); }
.segm button {
  flex: 1; padding: 8px 4px; border: none; background: none; border-radius: var(--r3); cursor: pointer;
  color: var(--tn); font: 600 12px var(--f-t);
}
.segm button.on { background: var(--tx); color: var(--bg); font-weight: 700; }

.aviso {
  border: 1px solid rgba(var(--warn-rgb),.28); background: rgba(var(--warn-rgb),.07);
  border-radius: var(--r2); padding: 12px; margin-bottom: 12px;
}
.aviso b { display: block; font-size: 13px; margin-bottom: 6px; color: var(--warn); }
.aviso ol { margin: 0; padding-left: 18px; }
.aviso li { font-size: 12.5px; color: var(--tn); line-height: 1.6; }
.aviso code {
  font: 500 11.5px var(--f-n); background: var(--s3); padding: 1px 5px; border-radius: 5px; color: var(--tx);
}

.error { border: 1px solid rgba(var(--off-rgb),.3); background: rgba(var(--off-rgb),.07); border-radius: var(--r2); padding: 13px; }
.error b { display: block; font-size: 13.5px; margin-bottom: 3px; }
.error span { font-size: 12.5px; color: var(--tn); }
.vacio { text-align: center; padding: 40px 16px; color: var(--sd); font-size: 13px; }
.sk { background: var(--s1); border-radius: var(--r2); animation: p 1.4s ease-in-out infinite; }
@keyframes p { 50% { opacity: .5; } }

/* El respaldo al día: mismo bloque, pero en verde. Es el único aviso que
   también aparece cuando todo está bien, porque saber que está es el punto. */
.aviso.bien { background: rgba(var(--on-rgb), .07); border-color: rgba(var(--on-rgb), .28); }
.aviso.bien b { color: var(--on); }
.aviso .btn { flex-shrink: 0; }
/* El respaldo que no sale del servidor no es un aviso: es un problema. */
.aviso.malo { background: rgba(var(--off-rgb), .08); border-color: rgba(var(--off-rgb), .32); }
.aviso.malo b { color: var(--off); }
