/* ══════════════════════════════════════════════════════════════════════════
   shell.css · La carcasa de navegacion de The Grow Mode
   ──────────────────────────────────────────────────────────────────────────
   DOS patrones, no uno que se encoge:
     · Escritorio  → barra lateral plegable (300 px con etiquetas / 56 px solo
                     iconos). El estado se recuerda por dispositivo.
     · Movil       → barra inferior de iconos, al alcance del pulgar.
                     NO hay hamburguesa: anadiria un clic a lo que hoy se
                     alcanza directo.

   DOS MODOS de montaje (los decide shell.js, no el HTML):
     · ABSORBER  (el CRM)  → el CRM YA TIENE .app{grid:300px 1fr} + .sidebar +
                             .rail-items + .sb-footer. La carcasa se INYECTA
                             dentro de esa barra. No cuesta ni un pixel de
                             ancho util: reutiliza los 300 que ya se gastan.
                             Aqui NO se dibuja marca, ni cuenta, ni barra
                             inferior: ya existen.
     · AUTONOMO  (Agenda panel, Viral Scanner) → esas paginas no tienen barra.
                             La carcasa se dibuja entera y empuja el contenido
                             con padding sobre <body class="shell-host">.

   NO toca la altura de ninguna cabecera. El kanban del CRM depende de
   max-height:calc(100vh - 260px) y se rompe en silencio si eso cambia.

   Se enlaza SIEMPRE con ?v= (lo pone herramientas/sellar-version.mjs).
   herramientas/comprobar-enlaces.mjs falla si una pagina interna lo enlaza sin
   version, y falla tambien si una pagina PUBLICA lo menciona siquiera.
   ══════════════════════════════════════════════════════════════════════════ */

/* Los colores salen de las variables del CRM cuando existen, y si no, del
   sistema de diseno tal cual. Asi la carcasa se ve igual dentro del CRM que
   sola en el Scanner, sin duplicar la paleta en dos sitios. */
:root{
  --sh-bg:   var(--dark,   #0E0E14);
  --sh-bg2:  var(--dark2,  #13131f);
  --sh-acc:  var(--gp2,    #9A57F5);
  --sh-acc-d:var(--gp1,    #6D28D9);
  --sh-acc-l:var(--gp3,    #D3A4FF);
  --sh-acc-bg: var(--gd,   rgba(154,87,245,0.10));
  --sh-acc-bd: var(--gb,   rgba(154,87,245,0.28));
  --sh-bd:   var(--border, rgba(255,255,255,0.07));
  --sh-bd2:  var(--border2,rgba(255,255,255,0.14));
  --sh-muted:var(--muted,  rgba(255,255,255,0.57));
  --sh-bright:var(--bright,#fff);
  --sh-ease: var(--ease,   cubic-bezier(.16,1,.3,1));
  --sh-w: 300px;
  --sh-w-min: 56px;
  --sh-bottom-h: 58px;
}

/* ── ARMAZON, MODO AUTONOMO ─────────────────────────────────────────────── */
body.shell-host{
  padding-left: var(--sh-w);
  transition: padding-left .22s var(--sh-ease);
}
body.shell-host.sidebar-collapsed{ padding-left: var(--sh-w-min); }

.shell{
  position:fixed; top:0; left:0; z-index:80;
  width: var(--sh-w); height:100vh;
  display:flex; flex-direction:column;
  background: var(--sh-bg2);
  border-right:0.5px solid var(--sh-bd2);
  font-family: Barlow, system-ui, -apple-system, sans-serif;
  color: var(--sh-bright);
  overflow:hidden;
  transition: width .22s var(--sh-ease);
}
body.sidebar-collapsed .shell{ width: var(--sh-w-min); }

/* En modo ABSORBER no hay <aside class="shell">: lo que se inyecta son
   fragmentos sueltos dentro de la .sidebar que el CRM ya tiene. */

/* ── BOTON DE PLEGADO (solo modo autonomo; el CRM ya tiene el suyo) ─────── */
.shell-toggle{
  position:absolute; top:14px; right:10px; width:26px; height:26px;
  border-radius:7px; border:0.5px solid var(--sh-bd2);
  background:rgba(255,255,255,0.04); color:var(--sh-muted);
  cursor:pointer; display:flex; align-items:center; justify-content:center;
  font-size:14px; z-index:6; padding:0;
  transition:color .14s, border-color .14s, background .14s;
}
.shell-toggle:hover{ color:var(--sh-acc-l); border-color:var(--sh-acc); background:var(--sh-acc-bg); }
.shell-toggle i{ font-size:14px; }
.shell-toggle .st-closed{ display:none; }
body.sidebar-collapsed .shell-toggle{ position:static; margin:12px auto 6px; }
body.sidebar-collapsed .shell-toggle .st-open{ display:none; }
body.sidebar-collapsed .shell-toggle .st-closed{ display:inline-flex; }

/* ── MARCA (solo modo autonomo) ─────────────────────────────────────────── */
.shell-brand{
  padding:20px 18px 14px; border-bottom:0.5px solid var(--sh-bd);
  cursor:pointer; text-decoration:none; display:block; color:inherit;
}
.shell-brand-the{
  font-size:9px; font-weight:700; letter-spacing:.2em; text-transform:uppercase;
  color:var(--sh-muted); margin-bottom:2px;
}
.shell-brand-name{ font-size:19px; font-weight:900; letter-spacing:-.02em; line-height:1; }
.shell-brand-name .b-g{ color:var(--sh-acc-l); }

/* ── LISTA DE SECCIONES (los dos modos) ────────────────────────────────── */
/* Los rellenos son ajustados A PROPOSITO (German, 5-ago). En modo absorber
   este bloque se apila ENCIMA del embudo del CRM, asi que cada pixel de aqui
   es un pixel menos de lista de leads. Con los valores originales (nav 12/10,
   enlace 9px, margen 3) la lista bajaba de 407 a 170 px en un portatil de 768
   de alto: unos dos leads menos a la vista. Estos valores devuelven ~26 px.
   Si se vuelven a subir, se paga ahi. */
.shell-nav{ padding:8px 10px 6px; border-bottom:0.5px solid var(--sh-bd); }
.shell-nav-t{
  font-size:9px; font-weight:700; letter-spacing:.16em; text-transform:uppercase;
  color:var(--sh-muted); padding:0 8px 5px;
}
.shell-link{
  display:flex; align-items:center; gap:11px;
  padding:7px 10px; border-radius:10px; margin-bottom:2px;
  border:0.5px solid transparent; background:transparent;
  /* Regla del proyecto: texto BRILLANTE por defecto. Solo el activo usa el
     acento. Un menu con todo en morado no dice donde estas. */
  color:var(--sh-bright);
  font-family:inherit; font-size:13.5px; font-weight:700; letter-spacing:-.005em;
  text-decoration:none; cursor:pointer; width:100%; text-align:left;
  transition:background .14s, border-color .14s, color .14s;
}
.shell-link i{ font-size:18px; flex-shrink:0; width:18px; text-align:center; }
.shell-link-tx{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.shell-link:hover{ background:var(--sh-acc-bg); border-color:var(--sh-acc-bd); }

/* EL CANDADO. Agenda pide su propia clave y sus dos vecinas no piden nada.
   Mismo criterio y mismo tamaño que el `.vt-lock` que el CRM ya usa en su
   vista "Semana": que se note ANTES de pulsar, no despues.
   `margin-left:auto` lo manda al extremo derecho, para que no compita con la
   etiqueta. Se va solo cuando la fase 3 quite `clave:true` de SECCIONES. */
.shell-link .shell-lock{ margin-left:auto; font-size:10px; opacity:.62; }
.shell-link:hover .shell-lock{ opacity:.9; }
/* Plegada no cabe el icono extra: el aviso vive en el `title`, y una marca
   discreta en la esquina recuerda que esa puerta es distinta. */
.shell-rail-clave{ position:relative; }
.shell-rail-clave::after{
  content:''; position:absolute; right:5px; bottom:5px;
  width:4px; height:4px; border-radius:50%;
  background:var(--sh-muted);
}
/* ── EL GRUPO "HERRAMIENTAS" ───────────────────────────────────────────────
   Fathom, Pitch, Agenda y Scanner viven dentro de un grupo plegable con su
   titulo, en vez de colgar sueltos debajo de "CRM" pareciendo sub-secciones
   suyas (Gabriela, 19-ago). Antes aqui habia una rayita fina; sobra, porque
   el titulo del grupo ya separa.
   El titulo se dibuja como los demas rotulos de la barra (9px, mayusculas)
   PERO es un boton: por eso lleva chevron y estados de foco y hover.
   Ojo: el CRM esconde `.shell-nav-t` para ahorrar altura; esta clase es OTRA
   y tiene que verse siempre, que es justo lo que se pidio. */
/* El rotulo generico "SECCIONES" se esconde en las TRES paginas. El CRM ya lo
   escondia por altura; ahora ademas sobra por sentido: con el grupo
   "HERRAMIENTAS" habria dos rotulos, uno dentro de otro, diciendo casi lo
   mismo. No se pierde accesibilidad: el <nav> ya lleva aria-label="Secciones".
   Si algun dia se quiere de vuelta, se borra esta regla y vuelve en Scanner y
   Agenda (en el CRM lo sigue tapando su propio <style>). */
.shell-nav-t{ display:none; }
.shell-grupo{ margin-top:2px; }
.shell-grupo-t{
  display:flex; align-items:center; gap:8px; width:100%;
  padding:6px 10px; border:0; background:none; border-radius:9px;
  font-family:inherit; font-size:9px; font-weight:700; letter-spacing:.16em;
  text-transform:uppercase; color:var(--sh-muted); cursor:pointer; text-align:left;
  transition:color .14s, background .14s;
}
.shell-grupo-t:hover{ color:var(--sh-acc-l); background:var(--sh-acc-bg); }
.shell-grupo-tx{ flex:1; min-width:0; }
.shell-grupo-chev{ font-size:13px; flex-shrink:0; transition:transform .18s var(--sh-ease); }
.shell-grupo.abierto .shell-grupo-chev{ transform:rotate(90deg); color:var(--sh-acc-l); }
/* El globo del total va mas apagado que el de una seccion: resume, no avisa. */
.shell-grupo-t .shell-badge{ background:var(--sh-acc-bd); color:var(--sh-bright); }
.shell-grupo-t:focus-visible{ outline:2px solid var(--sh-acc-l); outline-offset:1px; }

.shell-link.on{
  color:var(--sh-acc-l);
  background:var(--sh-acc-bg);
  border-color:var(--sh-acc-bd);
}
.shell-link.on i{ color:var(--sh-acc-l); }

/* Contador. Solo se dibuja si shell.js recibio un numero de verdad.
   Sin dato -> el elemento ni existe en el DOM (ver shell.js, pintaContador). */
.shell-badge{
  flex-shrink:0; min-width:19px; height:19px; padding:0 6px;
  border-radius:999px; display:inline-flex; align-items:center; justify-content:center;
  background:linear-gradient(135deg,#7C3AED,var(--sh-acc-d)); color:#fff;
  font-size:10.5px; font-weight:900; line-height:1; letter-spacing:0;
}
.shell-link.on .shell-badge{ background:var(--sh-acc-l); color:#1a0b2e; }

/* ── HUECO DE LA SECCION ACTIVA ────────────────────────────────────────────
   En el CRM aqui va el embudo de siempre (no lo toca nadie).
   En Agenda y Scanner NO hay contenido util todavia: se queda VACIO a
   proposito. Inventar relleno aqui es peor que dejarlo en blanco. */
.shell-hueco{ flex:1; min-height:0; overflow-y:auto; }
.shell-hueco:empty{ flex:1; }

/* ── CUENTA AL PIE (solo modo autonomo; el CRM ya tiene .sb-footer) ─────── */
.shell-cuenta{
  display:flex; align-items:center; gap:11px;
  padding:12px 14px; border-top:0.5px solid var(--sh-bd);
}
.shell-av{
  width:38px; height:38px; border-radius:11px; flex-shrink:0;
  display:flex; align-items:center; justify-content:center;
  font-size:14px; font-weight:900; color:#fff; letter-spacing:-.02em;
  background:linear-gradient(135deg,var(--sh-acc),var(--sh-acc-d));
  background-size:cover; background-position:center 20%;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
}
.shell-av i{ font-size:19px; }
.shell-cuenta-tx{ flex:1; min-width:0; line-height:1.25; }
.shell-cuenta-n{ font-size:13px; font-weight:800; color:#fff; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.shell-cuenta-r{ font-size:11px; color:var(--sh-muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.shell-salir{
  display:inline-flex; align-items:center; justify-content:center;
  width:32px; height:32px; border-radius:9px; flex-shrink:0;
  border:0.5px solid var(--sh-bd2); background:rgba(255,255,255,0.04);
  color:var(--sh-muted); cursor:pointer; font-size:16px;
  transition:color .15s, border-color .15s;
}
.shell-salir:hover{ color:#f87171; border-color:rgba(248,113,113,.4); }

/* ── RIEL PLEGADO (los dos modos) ──────────────────────────────────────────
   En modo absorber estos botones se meten DENTRO del .rail-items que el CRM
   ya tiene, y heredan .rail-item. En autonomo se dibuja el riel completo. */
.shell-rail{
  display:none; flex-direction:column; align-items:center; gap:6px;
  padding:6px 0 10px; flex:1; width:100%; overflow-y:auto;
}
body.sidebar-collapsed .shell .shell-rail{ display:flex; }
body.sidebar-collapsed .shell > *:not(.shell-toggle):not(.shell-rail){ display:none !important; }

.shell-rail-item, .rail-item.shell-rail-item{
  position:relative;
  width:38px; height:38px; border-radius:10px; flex-shrink:0;
  display:flex; align-items:center; justify-content:center;
  border:0.5px solid transparent; background:transparent;
  color:var(--sh-bright); font-size:17px; padding:0; cursor:pointer;
  text-decoration:none;
  transition:background .14s, border-color .14s, color .14s;
}
.shell-rail-item i{ font-size:17px; }
.shell-rail-item:hover{ background:var(--sh-acc-bg); border-color:var(--sh-acc-bd); color:var(--sh-acc-l); }
.shell-rail-item.on{
  color:#fff;
  background:linear-gradient(135deg,var(--sh-acc),var(--sh-acc-d));
  border-color:transparent;
  box-shadow:0 6px 14px -6px rgba(154,87,245,.85);
}
.shell-rail-sep{ height:1px; background:var(--sh-bd); margin:6px 10px; align-self:stretch; }
.shell-rail-spacer{ flex:1; min-height:8px; }

/* Contador sobre el icono cuando la barra esta plegada.
   Queda DENTRO de los 38 px del boton (top/right a -1) a proposito: el riel
   apila los iconos con 6 px de hueco, y un globo que sobresalia 4 px se
   montaba encima del icono de abajo. Con el anillo de 2 px sigue destacando
   sin invadir al vecino. */
.shell-rail-item .shell-badge{
  position:absolute; top:-1px; right:-1px;
  min-width:16px; height:16px; padding:0 4px; font-size:9.5px;
  box-shadow:0 0 0 2px var(--sh-bg2);
}

/* ── BARRA INFERIOR (movil) ────────────────────────────────────────────────
   OJO INTEGRACION: el CRM YA TIENE .bottom-nav (Inicio · Leads · FAB ·
   Agenda · Perfil). shell.js NO dibuja una segunda si detecta aquella.
   Las clases de aqui estan pensadas para que la integracion pueda adoptarlas
   sin cambiar la altura de nada. */
.shell-bottom{
  display:none;
  position:fixed; bottom:0; left:0; right:0; z-index:70;
  align-items:center; justify-content:space-around; gap:4px;
  /* 6 y no 8: con los botones a 44 px (min-height, mas abajo) un relleno de 8
     dejaba la barra en 61 px mientras las paginas siguen reservando 58
     (--sh-bottom-h), y los ultimos 3 px de contenido quedaban DEBAJO de la
     barra. Con 6 la barra mide ~57 y cabe en lo reservado, asi que la
     variable sigue diciendo la verdad y ninguna pagina tiene que cambiar. */
  padding:6px 8px calc(6px + env(safe-area-inset-bottom,0px));
  background:rgba(19,19,31,0.96);
  -webkit-backdrop-filter:blur(12px); backdrop-filter:blur(12px);
  border-top:0.5px solid var(--sh-bd);
  font-family: Barlow, system-ui, -apple-system, sans-serif;
}
.shell-bn{
  position:relative; flex:1;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:3px;
  background:none; border:none; padding:3px 0;
  /* 44 px REALES. Median 41 con el relleno de 3 px, y esta es la barra que MAS
     se toca con el dedo: en el telefono es la unica navegacion entre
     herramientas, porque la lateral se esconde entera.
     Va con min-height y no con height para que el texto no se recorte si algun
     dia una etiqueta ocupa dos lineas. La barra mide 58 (--sh-bottom-h), asi
     que los 44 caben de sobra y no hay que tocar el alto ni el relleno
     inferior que cada pagina reserva. */
  min-height:44px;
  /* misma regla: brillante por defecto, acento solo el activo */
  color:var(--sh-bright);
  font-family:inherit; font-size:9.5px; font-weight:700; letter-spacing:.02em;
  text-decoration:none; cursor:pointer;
  transition:color .15s;
}
.shell-bn i{ font-size:21px; }
.shell-bn.on{ color:var(--sh-acc-l); }
.shell-bn .shell-badge{
  position:absolute; top:-2px; right:calc(50% - 20px);
  min-width:16px; height:16px; padding:0 4px; font-size:9.5px;
}

/* ── CORTE A MOVIL ─────────────────────────────────────────────────────────
   860 px es el mismo corte que ya usa el CRM. No inventamos otro. */
@media (max-width:860px){
  body.shell-host{
    padding-left:0 !important;
    padding-bottom:calc(var(--sh-bottom-h) + env(safe-area-inset-bottom,0px));
  }
  .shell{ display:none !important; }
  .shell-bottom.shell-bottom-on{ display:flex; }

  /* 44 px REALES en movil, y solo en movil.
     En modo absorber esta lista NO desaparece bajo 860: viaja dentro del
     `.sidebar` del CRM, que ahi se convierte en un CAJON que se abre con la
     hamburguesa. O sea que estos enlaces SI se tocan con el dedo, aunque el
     `.shell{display:none}` de arriba haga pensar lo contrario (ese solo
     esconde la barra del modo autonomo).
     Median 38 px, que incumple la misma regla de 44 que el CRM acaba de
     arreglar en sus propios botones. En escritorio se quedan compactos a
     proposito: con raton 34 px sobran, y cada pixel de aqui es lista de
     leads. */
  .shell-link{ min-height:44px; }
  /* El titulo del grupo tambien se toca con el dedo: en movil la barra del CRM
     es un cajon y estos son los enlaces que SI se pulsan ahi. */
  .shell-grupo-t{ min-height:44px; }
}

/* ── FOCO VISIBLE ──────────────────────────────────────────────────────── */
.shell-link:focus-visible, .shell-rail-item:focus-visible,
.shell-bn:focus-visible, .shell-toggle:focus-visible,
.shell-salir:focus-visible, .shell-brand:focus-visible{
  outline:2px solid var(--sh-acc-l); outline-offset:1px;
}

@media (prefers-reduced-motion:reduce){
  body.shell-host, .shell, .shell-link, .shell-rail-item, .shell-bn{
    transition-duration:.001ms !important;
  }
}
