/* Plataforma de gestión de coworking. Escritorio, uso diurno en recepción. */
:root{
  --papel:oklch(0.982 0.004 70);
  --superficie:oklch(0.998 0.002 70);
  --linea:oklch(0.905 0.008 65);
  --linea-suave:oklch(0.945 0.006 65);
  --tinta:oklch(0.255 0.014 55);
  --tinta-media:oklch(0.485 0.012 60);
  --tinta-suave:oklch(0.625 0.010 62);
  --acento:oklch(0.520 0.130 42);
  --acento-fuerte:oklch(0.430 0.125 40);
  --acento-tenue:oklch(0.945 0.028 50);
  --ok:oklch(0.520 0.105 152);
  --ok-tenue:oklch(0.935 0.038 152);
  --neutro:oklch(0.455 0.018 60);
  --neutro-tenue:oklch(0.905 0.008 60);
  --espera:oklch(0.610 0.120 72);
  --espera-tenue:oklch(0.945 0.055 80);
  --riesgo:oklch(0.510 0.150 27);
  --riesgo-tenue:oklch(0.940 0.040 30);
  --barra:oklch(0.268 0.020 52);
  --barra-texto:oklch(0.880 0.012 60);
  --sombra:0 1px 2px oklch(0.25 0.02 55 / .06), 0 4px 14px oklch(0.25 0.02 55 / .05);
  --salida:cubic-bezier(.22,1,.36,1);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--papel);color:var(--tinta);
  font-family:"IBM Plex Sans","Segoe UI",system-ui,sans-serif;
  font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
.mono{font-family:"IBM Plex Mono",ui-monospace,monospace;font-variant-numeric:tabular-nums}

/* ------------------------------------------------------------- estructura */
.app{display:grid;grid-template-columns:230px 1fr;min-height:100vh}
.lateral{
  background:var(--barra);color:var(--barra-texto);
  display:flex;flex-direction:column;position:sticky;top:0;height:100vh;
}
.marca{padding:20px 20px 16px;border-bottom:1px solid oklch(0.36 0.02 52)}
.marca b{display:block;font-size:15px;font-weight:600;color:oklch(0.97 0.01 60);letter-spacing:-.01em}
.marca span{font-size:11px;color:oklch(0.70 0.02 60);text-transform:uppercase;letter-spacing:.09em}
.nav{padding:14px 12px;display:flex;flex-direction:column;gap:1px;flex:1}
.nav a{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:6px;
  font-size:13.5px;color:oklch(0.83 0.012 60);transition:background .18s var(--salida),color .18s var(--salida);
}
.nav a:hover{background:oklch(0.33 0.02 52);color:oklch(0.97 0.01 60)}
.nav a.on{background:var(--acento);color:oklch(0.985 0.01 60);font-weight:500}
.nav a svg{width:16px;height:16px;flex:none;opacity:.85}
.nav .grupo{font-size:10.5px;text-transform:uppercase;letter-spacing:.11em;
  color:oklch(0.60 0.02 58);padding:16px 12px 6px}
.pie{padding:14px 18px;border-top:1px solid oklch(0.36 0.02 52);font-size:12px}
.pie i{display:block;font-style:normal;color:oklch(0.97 0.01 60);font-weight:500}
.pie a{color:oklch(0.66 0.02 58);font-size:11.5px}
.pie a:hover{color:oklch(0.88 0.02 58)}

.principal{display:flex;flex-direction:column;min-width:0}
.superior{
  height:56px;background:var(--superficie);border-bottom:1px solid var(--linea);
  display:flex;align-items:center;gap:20px;padding:0 28px;position:sticky;top:0;z-index:20;
}
.superior h1{font-size:16px;font-weight:600;margin:0;letter-spacing:-.01em}
.superior .ruta{color:var(--tinta-suave);font-size:12.5px}
.crece{flex:1}
.contenido{padding:26px 28px 48px;min-width:0}

/* ------------------------------------------------------------- indicadores */
.cifras{
  display:flex;background:var(--superficie);border:1px solid var(--linea);
  border-radius:8px;overflow:hidden;margin-bottom:24px;
}
.cifra{padding:15px 22px;border-right:1px solid var(--linea-suave);flex:1;min-width:0}
.cifra:last-child{border-right:0}
.cifra dt{font-size:10.5px;text-transform:uppercase;letter-spacing:.09em;
  color:var(--tinta-suave);margin:0 0 5px}
.cifra dd{margin:0;font-size:23px;font-weight:600;letter-spacing:-.02em;line-height:1.15}
.cifra small{display:block;font-size:11.5px;color:var(--tinta-suave);margin-top:3px;font-weight:400}
.cifra.destaca dd{color:var(--acento)}

/* ------------------------------------------------------------- superficies */
.rejilla{display:grid;gap:20px}
.rejilla.dos{grid-template-columns:1.45fr 1fr}
.panel{background:var(--superficie);border:1px solid var(--linea);border-radius:8px;overflow:hidden}
.panel > header{
  padding:13px 18px;border-bottom:1px solid var(--linea);
  display:flex;align-items:center;gap:10px;
}
.panel > header h2{font-size:13px;font-weight:600;margin:0;text-transform:uppercase;letter-spacing:.07em}
.panel > header .n{
  font-size:11px;background:var(--neutro-tenue);color:var(--tinta-media);
  padding:1px 7px;border-radius:20px;font-weight:600;
}
.panel .cuerpo{padding:16px 18px}
.vacio{padding:30px 18px;text-align:center;color:var(--tinta-suave);font-size:13px}

/* ------------------------------------------------------------------ tablas */
table{width:100%;border-collapse:collapse}
th{
  text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--tinta-suave);font-weight:600;padding:9px 18px;border-bottom:1px solid var(--linea);
  background:oklch(0.972 0.005 68);
}
td{padding:11px 18px;border-bottom:1px solid var(--linea-suave);font-size:13.5px;vertical-align:middle}
tbody tr:last-child td{border-bottom:0}
tbody tr{transition:background .15s var(--salida)}
tbody tr:hover{background:oklch(0.975 0.006 68)}
td b{font-weight:600}
td .sub{display:block;font-size:12px;color:var(--tinta-suave);margin-top:1px}
.der{text-align:right}

/* ----------------------------------------------------------------- etiquetas */
.eti{
  display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;
  padding:2px 9px;border-radius:4px;white-space:nowrap;
}
.eti::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}
.eti.ok{background:var(--ok-tenue);color:var(--ok)}
.eti.ocupado{background:var(--neutro-tenue);color:var(--neutro)}
.eti.espera{background:var(--espera-tenue);color:oklch(0.48 0.11 68)}
.eti.riesgo{background:var(--riesgo-tenue);color:var(--riesgo)}
.eti.acento{background:var(--acento-tenue);color:var(--acento-fuerte)}
.eti.simple::before{display:none}

/* -------------------------------------------------------------------- botones */
.btn{
  display:inline-flex;align-items:center;gap:7px;padding:7px 14px;border-radius:6px;
  border:1px solid var(--linea);background:var(--superficie);color:var(--tinta);
  font:inherit;font-size:13px;font-weight:500;cursor:pointer;
  transition:background .18s var(--salida),border-color .18s var(--salida);
}
.btn:hover{background:oklch(0.965 0.006 68);border-color:var(--linea-suave)}
.btn.principal{background:var(--acento);border-color:var(--acento);color:oklch(0.99 0.005 60)}
.btn.principal:hover{background:var(--acento-fuerte);border-color:var(--acento-fuerte)}
.btn.chico{padding:4px 10px;font-size:12px}
input[type=text],input[type=email],input[type=password],input[type=search]{
  font:inherit;font-size:13.5px;padding:8px 12px;border:1px solid var(--linea);
  border-radius:6px;background:var(--superficie);color:var(--tinta);width:100%;
}
input:focus{outline:2px solid var(--acento);outline-offset:-1px;border-color:transparent}

/* --------------------------------------------------------------- agenda hoy */
.visita{display:flex;gap:14px;padding:13px 18px;border-bottom:1px solid var(--linea-suave)}
.visita:last-child{border-bottom:0}
.visita .h{
  font-size:15px;font-weight:600;width:52px;flex:none;padding-top:1px;
  font-family:"IBM Plex Mono",monospace;font-variant-numeric:tabular-nums;
}
.visita .d{flex:1;min-width:0}
.visita .d b{font-size:14px}
.visita .d p{margin:2px 0 0;font-size:12.5px;color:var(--tinta-suave)}
.visita .acc{display:flex;gap:6px;align-items:flex-start;flex:none}

/* ------------------------------------------------------------------- embudo */
.embudo{display:flex;flex-direction:column;gap:9px}
.paso{display:grid;grid-template-columns:118px 1fr 34px;align-items:center;gap:12px;font-size:12.5px}
.paso .barra{height:22px;background:oklch(0.955 0.006 68);border-radius:3px;overflow:hidden}
.paso .barra i{display:block;height:100%;background:var(--acento);opacity:.82;border-radius:3px;
  transition:width .5s var(--salida)}
.paso .barra i.gris{background:var(--neutro);opacity:.34}
.paso .v{text-align:right;font-weight:600;font-family:"IBM Plex Mono",monospace}

/* ------------------------------------------------------------------ kanban */
.tablero{display:grid;grid-template-columns:repeat(5,minmax(228px,1fr));gap:14px;align-items:start}
.columna{background:oklch(0.965 0.006 68);border:1px solid var(--linea);border-radius:8px;min-height:180px}
.columna > header{padding:11px 14px;display:flex;align-items:center;gap:8px;
  border-bottom:1px solid var(--linea)}
.columna > header h3{margin:0;font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.07em}
.columna > header .n{font-size:11px;color:var(--tinta-suave);font-weight:600}
.columna .pila{padding:10px;display:flex;flex-direction:column;gap:9px;min-height:60px}
.columna.encima{background:var(--acento-tenue);border-color:var(--acento)}
.ficha{
  background:var(--superficie);border:1px solid var(--linea);border-radius:6px;padding:11px 12px;
  cursor:grab;box-shadow:var(--sombra);transition:box-shadow .18s var(--salida),transform .18s var(--salida);
}
.ficha:hover{box-shadow:0 2px 6px oklch(0.25 0.02 55/.10),0 8px 20px oklch(0.25 0.02 55/.08)}
.ficha.moviendo{opacity:.42;transform:scale(.98)}
.ficha b{display:block;font-size:13.5px;font-weight:600;letter-spacing:-.005em}
.ficha .emp{font-size:12px;color:var(--tinta-suave);margin-top:1px}
.ficha .met{display:flex;align-items:center;gap:8px;margin-top:9px;font-size:11.5px;color:var(--tinta-media)}
.ficha .val{font-weight:600;font-family:"IBM Plex Mono",monospace}
.cerradas{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:16px}

/* ------------------------------------------------------------------ agenda */
.semana{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;align-items:start}
.dia{background:var(--superficie);border:1px solid var(--linea);border-radius:8px;overflow:hidden}
.dia.esHoy{border-color:var(--acento)}
.dia > header{padding:9px 12px;border-bottom:1px solid var(--linea);background:oklch(0.968 0.006 68)}
.dia.esHoy > header{background:var(--acento-tenue)}
.dia > header b{font-size:12px;text-transform:uppercase;letter-spacing:.07em}
.dia > header span{display:block;font-size:19px;font-weight:600;letter-spacing:-.02em}
.dia .lista{padding:9px;display:flex;flex-direction:column;gap:8px;min-height:70px}
.bloque{border:1px solid var(--linea);border-radius:6px;padding:9px 10px;background:var(--superficie)}
.bloque .hh{font-size:12px;font-weight:600;font-family:"IBM Plex Mono",monospace}
.bloque b{display:block;font-size:12.5px;margin-top:2px}
.bloque .q{font-size:11.5px;color:var(--tinta-suave)}

/* -------------------------------------------------------------- plano pisos */
.piso{margin-bottom:22px}
.piso > h3{
  font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--tinta-suave);
  margin:0 0 10px;display:flex;align-items:center;gap:10px;
}
.piso > h3::after{content:"";flex:1;height:1px;background:var(--linea)}
.plano{display:flex;gap:10px;align-items:stretch}
.unidad{
  border:1px solid var(--linea);border-radius:7px;padding:13px 14px;background:var(--superficie);
  min-height:104px;display:flex;flex-direction:column;justify-content:space-between;
  cursor:pointer;transition:border-color .18s var(--salida),box-shadow .18s var(--salida);
}
.unidad:hover{box-shadow:var(--sombra)}
.unidad .cod{font-size:11px;font-family:"IBM Plex Mono",monospace;color:var(--tinta-suave);letter-spacing:.04em}
.unidad b{display:block;font-size:14px;font-weight:600;margin-top:2px;letter-spacing:-.005em}
.unidad .cap{font-size:11.5px;color:var(--tinta-suave);margin-top:2px}
.unidad .pie2{margin-top:10px;display:flex;flex-direction:column;align-items:flex-start;gap:2px}
.unidad .precio{font-size:13px;font-weight:600;font-family:"IBM Plex Mono",monospace;white-space:nowrap}
.unidad.u-disponible{background:var(--ok-tenue);border-color:oklch(0.86 0.05 152)}
.unidad.u-ocupado{background:var(--neutro-tenue);border-color:oklch(0.86 0.01 60)}
.unidad.u-mantenimiento{background:var(--riesgo-tenue);border-color:oklch(0.87 0.05 30)}
.unidad.u-ocupado.u-porvencer{background:var(--espera-tenue);border-color:oklch(0.87 0.07 80)}
.unidad{gap:12px;min-height:126px}
.unidad .ocupante{display:flex;flex-direction:column;gap:2px;align-items:flex-start}
.unidad .ocupante b{font-size:12.5px;font-weight:600;line-height:1.3}
.unidad .precio{font-size:13px;font-weight:600;white-space:nowrap;margin-top:auto}
.unidad .precio .por{font-weight:400;font-size:11px;color:var(--tinta-suave)}
.por{font-weight:400;font-size:11px;color:var(--tinta-suave)}

.titulo-seccion{font-size:15px;font-weight:600;letter-spacing:-.01em;margin:28px 0 4px}
.titulo-seccion:first-of-type{margin-top:4px}
.nota-seccion{font-size:12.5px;color:var(--tinta-suave);margin:0 0 16px;max-width:72ch;line-height:1.5}
.leyenda{display:flex;gap:16px;font-size:12px;color:var(--tinta-media);margin-bottom:18px;align-items:center}
.leyenda i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px;vertical-align:-1px}

/* ------------------------------------------------------------------ ingreso */
.ingreso{min-height:100vh;display:grid;place-items:center;background:var(--papel)}
.ingreso form{
  width:352px;background:var(--superficie);border:1px solid var(--linea);
  border-radius:10px;padding:30px;box-shadow:var(--sombra);
}
.ingreso h1{font-size:19px;margin:0 0 4px;letter-spacing:-.02em}
.ingreso p.sub{margin:0 0 22px;color:var(--tinta-suave);font-size:13px}
.campo{margin-bottom:14px}
.campo label{display:block;font-size:11.5px;font-weight:600;margin-bottom:5px;
  text-transform:uppercase;letter-spacing:.07em;color:var(--tinta-media)}
.error{background:var(--riesgo-tenue);color:var(--riesgo);padding:9px 12px;
  border-radius:6px;font-size:12.5px;margin-bottom:14px}
.pista{margin-top:16px;padding-top:14px;border-top:1px solid var(--linea-suave);
  font-size:12px;color:var(--tinta-suave);text-align:center}

/* ------------------------------------------------------------------- ficha */
.dosCol{display:grid;grid-template-columns:1fr 340px;gap:20px;align-items:start}
.datos{display:grid;grid-template-columns:auto 1fr;gap:9px 16px;font-size:13px}
.datos dt{color:var(--tinta-suave);font-size:12px}
.datos dd{margin:0;font-weight:500}
.chat{display:flex;flex-direction:column;gap:9px;padding:16px 18px;max-height:420px;overflow-y:auto}
.chat .m{max-width:80%;padding:8px 12px;border-radius:9px;font-size:13px;line-height:1.45}
.chat .m.cliente{background:oklch(0.955 0.006 68);align-self:flex-start;border-bottom-left-radius:3px}
.chat .m.bot{background:var(--acento-tenue);align-self:flex-end;border-bottom-right-radius:3px}

/* ------------------------------------------------------------------ agenda */
.modos{display:flex;background:oklch(0.955 0.006 68);border:1px solid var(--linea);
  border-radius:7px;padding:2px;gap:2px}
.modos a{padding:5px 14px;border-radius:5px;font-size:12.5px;font-weight:500;color:var(--tinta-media);
  transition:background .18s var(--salida),color .18s var(--salida)}
.modos a:hover{color:var(--tinta)}
.modos a.on{background:var(--superficie);color:var(--tinta);box-shadow:0 1px 2px oklch(0.25 0.02 55/.10)}
.navsem{display:flex;gap:5px}

.agenda{background:var(--superficie);border:1px solid var(--linea);border-radius:8px;overflow:hidden}
.ag-cab{display:grid;grid-template-columns:62px repeat(7,1fr);
  border-bottom:1px solid var(--linea);background:oklch(0.972 0.005 68)}
.ag-esq{border-right:1px solid var(--linea)}
.ag-dcab{padding:9px 12px;border-right:1px solid var(--linea-suave);display:flex;
  align-items:baseline;gap:8px}
.ag-dcab:last-child{border-right:0}
.ag-dcab b{font-size:11px;text-transform:uppercase;letter-spacing:.09em;color:var(--tinta-suave)}
.ag-dcab span{font-size:18px;font-weight:600;letter-spacing:-.02em}
.ag-dcab i{margin-left:auto;font-style:normal;font-size:11px;font-weight:600;
  background:var(--neutro-tenue);color:var(--tinta-media);padding:1px 7px;border-radius:20px}
.ag-dcab.esHoy{background:var(--acento-tenue)}
.ag-dcab.esHoy span,.ag-dcab.esHoy b{color:var(--acento-fuerte)}

.ag-cuerpo{display:grid;grid-template-columns:62px 1fr;padding-top:10px}
.ag-horas{border-right:1px solid var(--linea);position:relative}
.ag-horas span{display:block;height:var(--ph);font-size:11px;color:var(--tinta-suave);
  text-align:right;padding-right:9px;transform:translateY(-6px);
  font-family:"IBM Plex Mono",monospace}
.ag-rejilla{display:grid;grid-template-columns:repeat(7,1fr);position:relative}
.ag-col{position:relative;border-right:1px solid var(--linea-suave);
  background-image:repeating-linear-gradient(to bottom,
    var(--linea-suave) 0 1px, transparent 1px var(--ph));
  background-position:0 0}
.ag-col:last-child{border-right:0}
.ag-col.esHoy{background-color:oklch(0.985 0.010 55)}
.ag-ahora{position:absolute;left:0;right:0;height:2px;background:var(--acento);z-index:6}
.ag-ahora::before{content:"";position:absolute;left:-4px;top:-3px;width:8px;height:8px;
  border-radius:50%;background:var(--acento)}

.ev{
  position:absolute;border-radius:5px;padding:5px 8px;overflow:hidden;cursor:pointer;
  display:flex;flex-direction:column;gap:1px;z-index:3;
  transition:box-shadow .18s var(--salida),transform .18s var(--salida);
}
.ev:hover{box-shadow:0 3px 10px oklch(0.25 0.02 55/.16);z-index:5;transform:translateY(-1px)}
.ev .ev-h{font-size:10.5px;font-weight:600;opacity:.75}
.ev b{font-size:12px;font-weight:600;line-height:1.25;letter-spacing:-.005em;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ev.alto b{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;
  -webkit-box-orient:vertical;text-overflow:clip}
.ev .ev-s{font-size:11px;opacity:.78;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ev .ev-p{font-size:10.5px;opacity:.62;margin-top:auto}
.ev.e-visita{background:var(--acento-tenue);border:1px solid oklch(0.78 0.07 45);color:var(--acento-fuerte)}
.ev.e-sala{background:oklch(0.945 0.038 235);border:1px solid oklch(0.72 0.09 240);color:oklch(0.40 0.12 245)}
.ev.s-tentativa{border-style:dashed;background:var(--espera-tenue);
  border-color:oklch(0.72 0.11 78);color:oklch(0.44 0.10 65)}
.ev.s-asistio{background:var(--ok-tenue);border-color:oklch(0.72 0.09 152);color:var(--ok)}
.ev.s-no_asistio{background:var(--riesgo-tenue);border-color:oklch(0.75 0.10 28);color:var(--riesgo)}

/* --------------------------------------------------------------- cajón lateral */
.cajon{
  position:fixed;top:0;right:0;width:352px;height:100vh;background:var(--superficie);
  border-left:1px solid var(--linea);z-index:60;display:flex;flex-direction:column;
  box-shadow:-8px 0 28px oklch(0.25 0.02 55/.10);
}
.cajon[hidden]{display:none}
.cajon > header{padding:16px 18px;border-bottom:1px solid var(--linea);
  display:flex;align-items:center;gap:12px}
.cajon > header b{font-size:15px;font-weight:600;letter-spacing:-.01em;flex:1}
.cajon > div{padding:18px;overflow-y:auto;flex:1}
.cajon .datos{grid-template-columns:104px 1fr}
.cajon-acc{display:flex;gap:8px;margin-top:16px}
.cajon-acc .btn{flex:1;justify-content:center}

/* --------------------------------------------------------- franjas de sala */
.franja{display:flex;align-items:center;gap:14px;padding:10px 0;
  border-bottom:1px solid var(--linea-suave)}
.franja:last-child{border-bottom:0}
.franja .fr-h{font-size:13px;font-weight:600;width:52px;flex:none;line-height:1.3}
.franja .fr-h i{display:block;font-style:normal;font-size:11.5px;font-weight:400;
  color:var(--tinta-suave)}
.franja .fr-b{flex:1;min-width:0}
.franja .fr-b b{display:block;font-size:13.5px;font-weight:600}
.franja .fr-b em{font-style:normal;font-size:12px;color:var(--tinta-suave)}
.franja .fr-m{font-size:13px;font-weight:600;width:84px;text-align:right;flex:none}

/* --------------------------------------------------------- formularios */
.dos-campos{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.dos-campos .campo[hidden]{display:none}
select{font:inherit;font-size:13.5px;padding:8px 12px;border:1px solid var(--linea);
  border-radius:6px;background:var(--superficie);color:var(--tinta);width:100%}
input[type=date],input[type=time]{font:inherit;font-size:13.5px;padding:7px 12px;
  border:1px solid var(--linea);border-radius:6px;background:var(--superficie);
  color:var(--tinta);width:100%}
select:focus,input[type=date]:focus,input[type=time]:focus{outline:2px solid var(--acento);
  outline-offset:-1px;border-color:transparent}
.campo{position:relative;margin-bottom:14px}

.sugerencias{position:absolute;left:0;right:0;top:100%;z-index:20;background:var(--superficie);
  border:1px solid var(--linea);border-radius:6px;margin-top:3px;overflow:hidden;
  box-shadow:0 6px 18px oklch(0.25 0.02 55/.12)}
.sugerencias[hidden]{display:none}
.sugerencias button{display:block;width:100%;text-align:left;border:0;background:none;
  padding:8px 12px;font:inherit;cursor:pointer;border-bottom:1px solid var(--linea-suave)}
.sugerencias button:last-child{border-bottom:0}
.sugerencias button:hover{background:var(--acento-tenue)}
.sugerencias button b{display:block;font-size:13px;font-weight:600}
.sugerencias button span{font-size:11.5px;color:var(--tinta-suave)}

.aviso{padding:9px 12px;border-radius:6px;font-size:12.5px;margin-bottom:12px}
.aviso[hidden]{display:none}
.aviso.malo{background:var(--riesgo-tenue);color:var(--riesgo)}
.aviso.bien{background:var(--ok-tenue);color:var(--ok)}

.resumen{display:flex;align-items:center;justify-content:space-between;
  padding:12px 14px;background:oklch(0.965 0.006 68);border-radius:7px;
  border:1px solid var(--linea)}
.resumen[hidden]{display:none}
.resumen span{font-size:12px;color:var(--tinta-media)}
.resumen b{font-size:19px;font-weight:600;letter-spacing:-.02em}

.ag-col{cursor:crosshair}
.ev{cursor:pointer}

/* ---------------------------------------------------------- ganancias */
.barras{display:flex;align-items:flex-end;gap:14px;height:196px;padding-top:6px}
.barra-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;height:100%}
.barra-caja{flex:1;width:100%;display:flex;align-items:flex-end;
  background:oklch(0.965 0.006 68);border-radius:4px;overflow:hidden}
.barra-caja i{display:block;width:100%;background:var(--acento);opacity:.85;
  border-radius:4px;transition:height .5s var(--salida)}
.barra-v{font-size:11.5px;font-weight:600;color:var(--tinta-media)}
.barra-e{font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--tinta-suave)}

.medidor-barra{height:12px;background:oklch(0.955 0.006 68);border-radius:6px;overflow:hidden}
.medidor-barra i{display:block;height:100%;background:var(--ok);border-radius:6px}
.medidor-pie{display:flex;justify-content:space-between;margin-top:10px;font-size:12.5px;
  color:var(--tinta-media)}
.medidor-pie b{font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--tinta)}
.sube{color:var(--ok);font-weight:500}
.baja{color:var(--riesgo);font-weight:500}

/* ------------------------------------------------------------ saldo de horas */
.saldo{display:flex;flex-direction:column;gap:4px}
.saldo-barra{height:6px;background:oklch(0.93 0.008 68);border-radius:3px;overflow:hidden}
.saldo-barra i{display:block;height:100%;background:var(--acento);border-radius:3px}
.saldo span{font-size:11.5px;color:var(--tinta-suave)}
.credito{padding:10px 12px;border-radius:6px;font-size:12.5px;margin-bottom:12px;
  background:var(--acento-tenue);color:var(--acento-fuerte);line-height:1.45}
.credito[hidden]{display:none}

/* ------------------------------------------------------------------ filtros */
.filtros{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:20px;
  padding:12px 14px;background:var(--superficie);border:1px solid var(--linea);border-radius:8px}
.filtros select{width:auto;min-width:130px;padding:6px 10px;font-size:12.5px}
.filtros .f-buscar{width:290px;padding:6px 12px;font-size:13px}
.filtros .f-check{display:flex;align-items:center;gap:6px;font-size:12.5px;
  color:var(--tinta-media);cursor:pointer;white-space:nowrap;padding:0 4px}
.filtros .f-check input{margin:0;accent-color:var(--acento)}

/* ------------------------------------------------------------------- listado */
table.densa td{padding:8px 14px;font-size:13px}
table.densa th{padding:8px 14px}
td.alerta{color:var(--riesgo);font-weight:600}
.paginador{display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:12px 18px;border-top:1px solid var(--linea);font-size:12.5px;color:var(--tinta-media)}
.btn.inerte{opacity:.4;pointer-events:none}

/* -------------------------------------------------------------- kanban ampliado */
.col-valor{padding:6px 14px;font-size:12px;font-weight:600;color:var(--acento-fuerte);
  background:var(--acento-tenue);border-bottom:1px solid var(--linea)}
.mas{display:block;text-align:center;padding:9px;font-size:12px;font-weight:500;
  color:var(--acento-fuerte);background:var(--superficie);border:1px dashed var(--linea);
  border-radius:6px;transition:background .18s var(--salida)}
.mas:hover{background:var(--acento-tenue)}
.paso.ancho{grid-template-columns:118px 1fr 34px 92px}
.barra-caja.doble{position:relative}
.barra-caja.doble i{position:absolute;bottom:0;left:0;width:100%}
.barra-caja.doble i.verde{background:var(--ok);opacity:1;width:52%;left:24%}

/* --------------------------------------------------------- lista agrupada */
table.agrupada tr.g1 > td:first-child,
table.agrupada tr.g2 > td:first-child{display:flex;align-items:center;gap:8px}
table.agrupada tr.g1{cursor:pointer;background:oklch(0.972 0.005 68)}
table.agrupada tr.g1:hover{background:oklch(0.955 0.008 65)}
table.agrupada tr.g1 b{font-size:13.5px;text-transform:capitalize}
table.agrupada tr.g2{cursor:pointer;background:oklch(0.985 0.004 68);font-size:13px}
table.agrupada tr.g2:hover{background:oklch(0.968 0.006 68)}
table.agrupada tr.detalle{background:var(--superficie)}
table.agrupada tr.detalle td:first-child{display:flex;align-items:center;gap:8px}
table.agrupada .flecha{display:inline-block;width:12px;color:var(--tinta-suave);
  font-size:10px;transition:color .18s var(--salida)}
table.agrupada tr.cargando .flecha{opacity:.4}
table.agrupada .sangria{display:inline-block;width:26px;flex:none}
table.agrupada tr.detalle .sangria{width:38px}
table.agrupada tr.detalle.n2 .sangria{width:64px}
table.agrupada tr.detalle td:first-child b{font-weight:600}
table.agrupada tr.detalle td:first-child .sub{margin-left:10px;display:inline}
table.agrupada tr.totalizador{background:oklch(0.955 0.008 65);border-top:2px solid var(--linea)}
table.agrupada tr.totalizador td{padding-top:12px;padding-bottom:12px}
table.agrupada .tope{text-align:center;color:var(--tinta-suave);font-size:12px;font-style:italic}

/* -------------------------------------------------- selección y acciones en lote */
table.seleccionable th.sel,
table.seleccionable td.sel{width:38px;padding-left:16px;padding-right:0}
table.seleccionable input[type=checkbox]{accent-color:var(--acento);cursor:pointer;margin:0}
table.seleccionable tr.marcada{background:var(--acento-tenue)}
table.seleccionable tr.marcada:hover{background:oklch(0.925 0.035 50)}
table.seleccionable td[data-col]{cursor:pointer}

.barra-lote{
  position:fixed;left:230px;right:0;bottom:0;z-index:50;
  display:flex;align-items:center;gap:12px;padding:12px 26px;
  background:var(--barra);color:var(--barra-texto);
  box-shadow:0 -4px 20px oklch(0.25 0.02 55/.18);
}
.barra-lote[hidden]{display:none}
.barra-lote .cuenta{font-size:13.5px}
.barra-lote .cuenta b{color:oklch(0.98 0.01 60);font-size:15px;font-weight:600}
.barra-lote .lote-todos{font-size:12.5px;color:oklch(0.80 0.06 45);text-decoration:underline}
.barra-lote .lote-todos:hover{color:oklch(0.90 0.06 45)}
.barra-lote select{width:auto;min-width:150px;padding:6px 10px;font-size:12.5px;
  background:oklch(0.34 0.02 52);color:var(--barra-texto);border-color:oklch(0.42 0.02 52)}
.barra-lote .btn{background:oklch(0.34 0.02 52);border-color:oklch(0.42 0.02 52);
  color:var(--barra-texto)}
.barra-lote .btn:hover{background:oklch(0.40 0.02 52)}
.barra-lote .btn.principal{background:var(--acento);border-color:var(--acento);
  color:oklch(0.99 0.005 60)}
.barra-lote .btn.principal:hover{background:var(--acento-fuerte)}

.menu-col{position:relative}
.cols{position:absolute;right:0;top:calc(100% + 6px);z-index:30;background:var(--superficie);
  border:1px solid var(--linea);border-radius:7px;padding:8px;min-width:172px;
  box-shadow:0 8px 22px oklch(0.25 0.02 55/.14)}
.cols[hidden]{display:none}
.cols label{display:flex;align-items:center;gap:8px;padding:5px 8px;font-size:12.5px;
  border-radius:5px;cursor:pointer}
.cols label:hover{background:oklch(0.965 0.006 68)}
.cols input{accent-color:var(--acento);margin:0}

/* ------------------------------------------- color por etapa en el kanban */
/* Progresión de temperatura: del azul del lead frío al terracota de la
   propuesta, con verde y rojo propios para los dos cierres. El color vive en
   la columna, no en las fichas: así se distinguen sin ensuciar el contenido. */
.columna[data-etapa="nuevo"]{background:oklch(0.972 0.012 245);border-color:oklch(0.905 0.030 245)}
.columna[data-etapa="nuevo"] > header{border-bottom-color:oklch(0.905 0.030 245)}
.columna[data-etapa="nuevo"] > header h3{color:oklch(0.430 0.080 245)}
.columna[data-etapa="nuevo"] > header .n{background:oklch(0.940 0.030 245);color:oklch(0.430 0.080 245)}
.columna[data-etapa="nuevo"] .col-valor{background:oklch(0.940 0.030 245);color:oklch(0.430 0.080 245);border-bottom-color:oklch(0.905 0.030 245)}
.columna[data-etapa="nuevo"] .mas{color:oklch(0.430 0.080 245);border-color:oklch(0.905 0.030 245)}
.columna[data-etapa="nuevo"] .mas:hover{background:oklch(0.940 0.030 245)}
.columna[data-etapa="nuevo"].encima{background:oklch(0.940 0.030 245);border-color:oklch(0.430 0.080 245)}
.columna[data-etapa="calificado"]{background:oklch(0.972 0.014 205);border-color:oklch(0.905 0.033 205)}
.columna[data-etapa="calificado"] > header{border-bottom-color:oklch(0.905 0.033 205)}
.columna[data-etapa="calificado"] > header h3{color:oklch(0.420 0.075 205)}
.columna[data-etapa="calificado"] > header .n{background:oklch(0.940 0.034 205);color:oklch(0.420 0.075 205)}
.columna[data-etapa="calificado"] .col-valor{background:oklch(0.940 0.034 205);color:oklch(0.420 0.075 205);border-bottom-color:oklch(0.905 0.033 205)}
.columna[data-etapa="calificado"] .mas{color:oklch(0.420 0.075 205);border-color:oklch(0.905 0.033 205)}
.columna[data-etapa="calificado"] .mas:hover{background:oklch(0.940 0.034 205)}
.columna[data-etapa="calificado"].encima{background:oklch(0.940 0.034 205);border-color:oklch(0.420 0.075 205)}
.columna[data-etapa="visita_agendada"]{background:oklch(0.970 0.020 195);border-color:oklch(0.895 0.045 195)}
.columna[data-etapa="visita_agendada"] > header{border-bottom-color:oklch(0.895 0.045 195)}
.columna[data-etapa="visita_agendada"] > header h3{color:oklch(0.410 0.085 195)}
.columna[data-etapa="visita_agendada"] > header .n{background:oklch(0.936 0.048 195);color:oklch(0.410 0.085 195)}
.columna[data-etapa="visita_agendada"] .col-valor{background:oklch(0.936 0.048 195);color:oklch(0.410 0.085 195);border-bottom-color:oklch(0.895 0.045 195)}
.columna[data-etapa="visita_agendada"] .mas{color:oklch(0.410 0.085 195);border-color:oklch(0.895 0.045 195)}
.columna[data-etapa="visita_agendada"] .mas:hover{background:oklch(0.936 0.048 195)}
.columna[data-etapa="visita_agendada"].encima{background:oklch(0.936 0.048 195);border-color:oklch(0.410 0.085 195)}
.columna[data-etapa="visitado"]{background:oklch(0.974 0.022 85);border-color:oklch(0.905 0.050 85)}
.columna[data-etapa="visitado"] > header{border-bottom-color:oklch(0.905 0.050 85)}
.columna[data-etapa="visitado"] > header h3{color:oklch(0.440 0.090 85)}
.columna[data-etapa="visitado"] > header .n{background:oklch(0.940 0.055 85);color:oklch(0.440 0.090 85)}
.columna[data-etapa="visitado"] .col-valor{background:oklch(0.940 0.055 85);color:oklch(0.440 0.090 85);border-bottom-color:oklch(0.905 0.050 85)}
.columna[data-etapa="visitado"] .mas{color:oklch(0.440 0.090 85);border-color:oklch(0.905 0.050 85)}
.columna[data-etapa="visitado"] .mas:hover{background:oklch(0.940 0.055 85)}
.columna[data-etapa="visitado"].encima{background:oklch(0.940 0.055 85);border-color:oklch(0.440 0.090 85)}
.columna[data-etapa="propuesta"]{background:oklch(0.972 0.022 45);border-color:oklch(0.900 0.048 45)}
.columna[data-etapa="propuesta"] > header{border-bottom-color:oklch(0.900 0.048 45)}
.columna[data-etapa="propuesta"] > header h3{color:oklch(0.430 0.110 45)}
.columna[data-etapa="propuesta"] > header .n{background:oklch(0.940 0.052 45);color:oklch(0.430 0.110 45)}
.columna[data-etapa="propuesta"] .col-valor{background:oklch(0.940 0.052 45);color:oklch(0.430 0.110 45);border-bottom-color:oklch(0.900 0.048 45)}
.columna[data-etapa="propuesta"] .mas{color:oklch(0.430 0.110 45);border-color:oklch(0.900 0.048 45)}
.columna[data-etapa="propuesta"] .mas:hover{background:oklch(0.940 0.052 45)}
.columna[data-etapa="propuesta"].encima{background:oklch(0.940 0.052 45);border-color:oklch(0.430 0.110 45)}
.columna[data-etapa="ganado"]{background:oklch(0.966 0.032 145);border-color:oklch(0.878 0.070 145)}
.columna[data-etapa="ganado"] > header{border-bottom-color:oklch(0.878 0.070 145)}
.columna[data-etapa="ganado"] > header h3{color:oklch(0.395 0.115 145)}
.columna[data-etapa="ganado"] > header .n{background:oklch(0.925 0.075 145);color:oklch(0.395 0.115 145)}
.columna[data-etapa="ganado"] .col-valor{background:oklch(0.925 0.075 145);color:oklch(0.395 0.115 145);border-bottom-color:oklch(0.878 0.070 145)}
.columna[data-etapa="ganado"] .mas{color:oklch(0.395 0.115 145);border-color:oklch(0.878 0.070 145)}
.columna[data-etapa="ganado"] .mas:hover{background:oklch(0.925 0.075 145)}
.columna[data-etapa="ganado"].encima{background:oklch(0.925 0.075 145);border-color:oklch(0.395 0.115 145)}
.columna[data-etapa="perdido"]{background:oklch(0.972 0.016 25);border-color:oklch(0.905 0.038 25)}
.columna[data-etapa="perdido"] > header{border-bottom-color:oklch(0.905 0.038 25)}
.columna[data-etapa="perdido"] > header h3{color:oklch(0.450 0.100 25)}
.columna[data-etapa="perdido"] > header .n{background:oklch(0.940 0.040 25);color:oklch(0.450 0.100 25)}
.columna[data-etapa="perdido"] .col-valor{background:oklch(0.940 0.040 25);color:oklch(0.450 0.100 25);border-bottom-color:oklch(0.905 0.038 25)}
.columna[data-etapa="perdido"] .mas{color:oklch(0.450 0.100 25);border-color:oklch(0.905 0.038 25)}
.columna[data-etapa="perdido"] .mas:hover{background:oklch(0.940 0.040 25)}
.columna[data-etapa="perdido"].encima{background:oklch(0.940 0.040 25);border-color:oklch(0.450 0.100 25)}

/* ------------------------------------------------ indicadores con lectura */
.indicadores{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:26px}
.ind{background:var(--superficie);border:1px solid var(--linea);border-radius:8px;padding:16px 18px}
.ind-cab{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}
.ind-cab > span{font-size:11px;text-transform:uppercase;letter-spacing:.09em;color:var(--tinta-suave)}
.ind-n{font-size:30px;font-weight:600;letter-spacing:-.03em;line-height:1;margin-bottom:10px}
.ind-n i{font-style:normal;font-size:16px;font-weight:500;color:var(--tinta-suave);margin-left:2px}
.ind .medidor-barra{height:7px}
.ind-pie{margin:10px 0 0;font-size:12px;line-height:1.5;color:var(--tinta-media)}
.ind-pie b{color:var(--tinta);font-weight:600}
.dx{font-size:11px;font-weight:600;padding:2px 8px;border-radius:20px;white-space:nowrap}
.dx.alta{background:var(--espera-tenue);color:oklch(0.46 0.10 68)}
.dx.buena{background:var(--ok-tenue);color:var(--ok)}
.dx.media{background:var(--neutro-tenue);color:var(--neutro)}
.dx.baja{background:var(--riesgo-tenue);color:var(--riesgo)}

/* ------------------------------------------- cronología de ocupación de salas */
.cronologia{display:flex;flex-direction:column;gap:9px}
.cr-horas{display:flex;align-items:center;gap:14px}
.cr-nombre{width:210px;flex:none;display:flex;flex-direction:column;gap:1px}
.cr-nombre b{font-size:13px;font-weight:600}
.cr-nombre i{font-style:normal;font-size:11.5px;color:var(--tinta-suave)}
.cr-escala{flex:1;position:relative;height:16px}
.cr-escala span{position:absolute;transform:translateX(-50%);font-size:10.5px;
  color:var(--tinta-suave);font-family:"IBM Plex Mono",monospace}
.cr-escala span:first-child{transform:none}
.cr-escala span:last-child{transform:translateX(-100%)}
.cr-fila{display:flex;align-items:center;gap:14px}
.cr-pista{flex:1;position:relative;height:38px;background:oklch(0.965 0.006 68);
  border:1px solid var(--linea);border-radius:6px;overflow:hidden;
  background-image:repeating-linear-gradient(to right,
    transparent 0 calc(100%/13 - 1px), var(--linea) calc(100%/13 - 1px) calc(100%/13))}
.cr-bloque{position:absolute;top:3px;bottom:3px;border-radius:4px;
  background:oklch(0.905 0.055 235);border:1px solid oklch(0.70 0.10 240);
  display:flex;align-items:center;padding:0 8px;overflow:hidden}
.cr-bloque span{font-size:11.5px;font-weight:500;color:oklch(0.36 0.11 245);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cr-bloque.tentativa{background:var(--espera-tenue);border-color:oklch(0.72 0.11 78);
  border-style:dashed}
.cr-bloque.tentativa span{color:oklch(0.44 0.10 65)}
.cr-ahora{position:absolute;top:0;bottom:0;width:2px;background:var(--acento);z-index:3}
.cr-libre{position:absolute;left:10px;top:50%;transform:translateY(-50%);
  font-size:11.5px;color:var(--tinta-suave);font-style:italic}
.cr-mes{width:118px;flex:none;text-align:right;display:flex;flex-direction:column;gap:1px}
.cr-mes b{font-size:13px;font-weight:600}
.cr-mes i{font-style:normal;font-size:11px;color:var(--tinta-suave)}

/* -------------------------------------------------------------- cuentas */
.pie .perfil{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.08em;
  color:oklch(0.62 0.02 58);margin-top:1px}
.pie-enlaces{display:flex;gap:12px;margin-top:8px}
.pie-enlaces a{font-size:11.5px}
tr.inactiva{opacity:.55}
tr.inactiva b{text-decoration:line-through}
table select.rol{width:auto;min-width:150px;padding:4px 8px;font-size:12.5px}
