.ctrl{display:flex;align-items:center;gap:8px;}
.ctrl label{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--tinta-suave);font-weight:700;}
/* owner multi-select */
.owner-ctrl{position:relative;}
.owner-btn{font-family:var(--sans);font-size:13px;padding:6px 10px;border:1px solid var(--linea);border-radius:6px;background:#fff;color:var(--tinta);cursor:pointer;min-width:150px;text-align:left;display:inline-flex;justify-content:space-between;align-items:center;gap:10px;}
.owner-btn:after{content:'▾';font-size:10px;color:var(--tinta-suave);}
.owner-btn:disabled{cursor:default;opacity:.85;}
.owner-btn:disabled:after{content:'';}
.owner-panel{display:none;position:absolute;top:calc(100% + 6px);right:0;background:#fff;border:1px solid var(--linea);border-radius:8px;box-shadow:0 8px 24px rgba(1,32,91,.18);padding:8px;min-width:250px;max-height:340px;overflow-y:auto;z-index:15;}
.owner-panel.open{display:block;}
.owner-panel .oa{display:flex;gap:10px;flex-wrap:wrap;padding:2px 6px 8px;border-bottom:1px solid var(--linea);margin-bottom:4px;}
.owner-panel .oa a{font-size:11px;color:var(--marca);cursor:pointer;text-decoration:none;font-weight:700;}
.owner-panel .oa a:hover{text-decoration:underline;}
.owner-panel .owner-row{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:5px;font-size:12.5px;text-transform:none;letter-spacing:normal;font-weight:400;color:var(--tinta);cursor:pointer;}
.owner-row:hover{background:var(--gana-soft);}
.owner-row input{cursor:pointer;}
/* buscador global de cliente/oportunidad (search.js) — mismo patrón que owner-ctrl/owner-panel */
.search-ctrl{position:relative;}
.search-input{font-family:var(--sans);font-size:13px;padding:6px 10px;border:1px solid var(--linea);border-radius:6px;background:#fff;color:var(--tinta);width:230px;}
.search-input:focus{outline:none;border-color:var(--marca);}
.search-panel{display:none;position:absolute;top:calc(100% + 6px);right:0;background:#fff;border:1px solid var(--linea);border-radius:8px;box-shadow:0 8px 24px rgba(1,32,91,.18);width:340px;max-width:calc(100vw - 32px);max-height:380px;overflow-y:auto;z-index:16;}
/* Angosto: anclar por la izquierda en vez de por la derecha — a este ancho el control de búsqueda
   queda cerca del borde izquierdo (el resto del topbar se apila debajo por el flex-wrap), así que
   anclar por la derecha sacaba el panel de pantalla. */
@media (max-width:600px){
  .search-panel{right:auto;left:0;width:min(320px,calc(100vw - 40px));}
}
.search-panel.open{display:block;}
.search-empty{padding:12px;font-size:12px;color:var(--tinta-suave);}
.search-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid var(--linea);text-decoration:none;color:inherit;}
.search-row:last-child{border-bottom:none;}
.search-row:hover{background:var(--gana-soft);}
.search-row-main{display:flex;flex-direction:column;gap:2px;min-width:0;}
.search-row-main .nm{font-size:12.5px;font-weight:700;color:var(--ancla);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px;}
.search-row-main .cli{font-size:10.5px;color:var(--tinta-suave);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px;}
.search-row-meta{display:flex;flex-direction:column;align-items:flex-end;gap:3px;flex-shrink:0;}
.search-row-meta .v{font-family:var(--mono);font-size:11px;color:var(--tinta-suave);}
.pill.neutro{background:var(--palido);color:var(--profundo);}
/* login button (auth.js) */
.login-btn{font-family:var(--sans);font-size:13px;padding:6px 14px;border:1px solid var(--marca);border-radius:6px;background:var(--marca);color:#fff;cursor:pointer;font-weight:700;text-decoration:none;display:inline-block;}
.login-btn:hover{opacity:.9;}
/* filter chips */
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px;min-height:26px;align-items:center;}
.chips .lbl{font-family:var(--mono);font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--tinta-suave);}
.chip{font-size:12px;background:var(--gana-soft);color:var(--profundo);border:1px solid var(--marca);border-radius:13px;padding:4px 11px;cursor:pointer;}
.chip.clear{background:none;border-color:var(--tinta-suave);color:var(--tinta-suave);}
.chip-empty{font-size:12.5px;color:var(--tinta-suave);font-style:italic;}
/* kpi */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin-bottom:22px;}
.kpi{background:var(--panel);border:1px solid var(--linea);border-radius:10px;padding:16px 18px;display:flex;flex-direction:column;gap:5px;box-shadow:0 1px 2px rgba(1,32,91,.05),0 2px 8px rgba(1,32,91,.04);}
.kpi .n{font-size:27px;font-weight:700;color:var(--ancla);line-height:1;font-variant-numeric:tabular-nums;}
.kpi .n.pierde{color:var(--pierde);}
.kpi .l{font-size:11.5px;color:var(--tinta-suave);}
.kpi .d{font-size:11px;font-variant-numeric:tabular-nums;}
.kpi .d.up{color:var(--gana);} .kpi .d.down{color:var(--pierde);}
/* Descomposición volumen × ticket (página Tendencia) — el cambio de ingreso solo puede venir de dos
   lugares: cuántos negocios se cerraron y qué tan grande fue cada uno. El panel tiene que dejar ver
   cuál de los dos mandó, de un vistazo. */
.tdesc-tot{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid var(--linea);margin-bottom:14px;}
.tdesc-tot .val{font-size:17px;font-weight:700;color:var(--ancla);font-variant-numeric:tabular-nums;}
.tdesc-tot .per{font-size:11px;color:var(--tinta-suave);text-transform:uppercase;letter-spacing:.04em;}
.tdesc-tot .fl{color:var(--tinta-suave);font-size:15px;}
.tdesc-tot .delta{margin-left:auto;font-size:16px;font-weight:700;font-variant-numeric:tabular-nums;}
.tdesc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:16px;}
.tdesc-card .lbl{font-size:12px;font-weight:700;color:var(--profundo);margin-bottom:3px;line-height:1.25;}
.tdesc-card .amt{font-size:21px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.1;margin-bottom:7px;}
.tdesc-card .det{font-size:11px;color:var(--tinta-suave);margin-top:6px;font-variant-numeric:tabular-nums;}
.tdesc-up{color:var(--gana);} .tdesc-down{color:var(--pierde);}
/* panels grid */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:18px;}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px;align-items:stretch;}
@media(max-width:1180px){.grid3{grid-template-columns:1fr 1fr;}}
@media(max-width:820px){.grid2,.grid3{grid-template-columns:1fr;}}
/* Indicadores (1/3) + tabla de detalle (2/3) lado a lado — pensado para la 1:1 con el ejecutivo:
   clic en un indicador de la izquierda y la tabla de la derecha reacciona sin perderla de vista. */
.split23{display:grid;grid-template-columns:1fr 2fr;gap:18px;align-items:start;}
.split23>.split23-ind .panel{margin-bottom:14px;}
@media(max-width:980px){.split23{grid-template-columns:1fr;}}
/* Separador de sección: título corto entre bloques de paneles de distinta naturaleza (p.ej.
   la tabla de detalle vs. los paneles de diagnóstico secundarios que siguen). */
.sec-div{margin:28px 0 18px;padding-top:16px;border-top:2px solid var(--linea);}
.sec-div span{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--marca);}
.panel{background:var(--panel);border:1px solid var(--linea);border-radius:10px;padding:16px 18px;margin-bottom:18px;box-shadow:0 1px 2px rgba(1,32,91,.05),0 2px 8px rgba(1,32,91,.04);}
.panel h3{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--profundo);margin:0 0 4px;}
.panel .hint{font-size:11px;color:var(--tinta-suave);margin:0 0 12px;}
/* bar rows */
.row{display:grid;grid-template-columns:1fr 90px 34px;align-items:center;gap:9px;padding:5px 4px;border-radius:5px;cursor:pointer;transition:background .1s,opacity .12s;}
.row:hover{background:var(--gana-soft);}
.row.active{background:var(--gana-soft);}
.row.dim{opacity:.34;}
.row.static{cursor:default;} .row.static:hover{background:none;}
.row .bl{display:flex;align-items:center;gap:8px;min-width:0;}
.row .nm{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.row .track{position:absolute;inset:0;background:var(--gana-soft);border-radius:3px;}
.row .barwrap{position:relative;height:20px;border-radius:3px;background:#eef2f5;overflow:hidden;grid-column:1;display:none;}
.bar-cell{position:relative;height:9px;background:#edf1f5;border-radius:3px;overflow:hidden;flex:1;}
.bar-fill{position:absolute;left:0;top:0;height:100%;border-radius:3px;background:var(--marca);}
.bar-fill.pierde{background:var(--pierde);}
.bar-fill.alerta{background:var(--alerta);}
.row .v{font-family:var(--mono);font-size:11.5px;text-align:right;font-variant-numeric:tabular-nums;}
.row .c{font-family:var(--mono);font-size:10.5px;text-align:right;color:var(--tinta-suave);}
.row.dual{grid-template-columns:1fr 78px 40px 76px;}

/* Matriz calidad x movimiento (Tubería de Ventas) */
.mtz{display:grid;grid-template-columns:1fr 84px 84px;gap:3px;align-items:stretch;}
.mtz-h{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--profundo);text-align:center;padding:0 0 4px;}
.mtz-h.alerta{color:var(--pierde);font-weight:700;}
.mtz-r{font-size:12px;display:flex;align-items:center;gap:6px;padding:6px 2px;}
.mtz-r.tot{font-weight:700;color:var(--tinta-suave);font-size:11px;border-top:1px solid var(--linea);}
.mtz-c{background:#f4f7fa;border:1px solid transparent;border-radius:6px;padding:5px 4px;text-align:center;cursor:pointer;display:flex;flex-direction:column;gap:1px;transition:background .1s,border-color .1s;}
.mtz-c:hover{background:var(--gana-soft);}
.mtz-c.active{border-color:var(--marca);background:var(--palido);}
.mtz-c.foco{background:#fbe9e6;}
.mtz-c.foco:hover{background:#f7dbd6;}
.mtz-c.tot{background:none;cursor:default;border-top:1px solid var(--linea);border-radius:0;}
.mtz-c.tot:hover{background:none;}
.mtz-c .n{font-family:var(--mono);font-size:14px;font-weight:700;color:var(--ancla);line-height:1.1;}
.mtz-c.foco .n{color:var(--pierde);}
.mtz-c .v{font-family:var(--mono);font-size:12px;font-weight:700;color:var(--profundo);}

/* Matriz de ejecutivos × dimensión conmutable */
.mze{display:grid;gap:3px;align-items:stretch;}
.mze-h{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--profundo);text-align:center;padding:0 2px 5px;line-height:1.25;align-self:end;}
.mze-h.tot{font-weight:700;}
.mze-r{font-size:12px;display:flex;align-items:center;padding:6px 6px 6px 2px;cursor:pointer;border-radius:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mze-r:hover{background:var(--gana-soft);}
.mze-r.active{background:var(--palido);font-weight:700;}
.mze-r.tot{font-weight:700;color:var(--tinta-suave);font-size:11px;cursor:default;border-top:1px solid var(--linea);}
.mze-r.tot:hover{background:none;}
.mze-c{border:1px solid transparent;border-radius:5px;padding:4px 2px;text-align:center;cursor:pointer;display:flex;flex-direction:column;justify-content:center;gap:0;transition:border-color .1s;}
.mze-c:hover{border-color:var(--marca);}
.mze-c.active{border-color:var(--marca);box-shadow:inset 0 0 0 1px var(--marca);}
.mze-c.vacia{cursor:default;}
.mze-c.vacia:hover{border-color:transparent;}
.mze-c.tot{background:none !important;cursor:default;border-top:1px solid var(--linea);border-radius:0;}
.mze-c.tot:hover{border-color:transparent;}
.mze-c .n{font-family:var(--mono);font-size:13px;font-weight:700;color:var(--ancla);line-height:1.15;}
.mze-c .n.vacio{color:#c8d2db;font-weight:400;}
.mze-c .v{font-family:var(--mono);font-size:11.5px;font-weight:700;color:var(--profundo);line-height:1.1;}

/* Rejilla de 3 columnas para los paneles de diagnóstico: más tablero a la vista sin scroll.
   En columna angosta la fila se compacta (menos padding, barra más fina, cifras más chicas) y el
   monto pierde peso visual — la lectura rápida es la cantidad, el monto es el respaldo. */
.grid3 .panel{padding:13px 14px;margin-bottom:0;display:flex;flex-direction:column;}
/* El último bloque de texto de un panel ("Fase más lenta", el promedio del termómetro) se ancla
   abajo, para que las 3 tarjetas de una fila cierren a la misma altura sin dejar el pie flotando. */
.grid3 .panel>.hint:last-child{margin-top:auto;padding-top:8px;}
.grid3 .panel .hint{margin-bottom:9px;}
.grid3 .row{padding:3px 3px;gap:7px;}
.grid3 .row.dual{grid-template-columns:1fr 52px 30px 62px;}
.grid3 .row .nm{font-size:12px;}
.grid3 .row .v{font-size:11px;}
.grid3 .row .c{font-size:9.5px;}
.grid3 .bar-cell{height:7px;}

/* Control de período retrospectivo (mensual/semanal) de Ventas Resumen */
.vr-periodo{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px;}
.vr-periodo-lbl{font-size:12px;color:var(--tinta-suave);font-family:var(--mono);}

/* Dashboard de Ventas Resumen — cross-filter estilo Power BI */
/* Fila de barra: nombre completo en su propia línea (nunca se corta) + valores, barra debajo */
.dbar-row{padding:7px 4px;border-radius:6px;cursor:pointer;transition:background .1s,opacity .12s;}
.dbar-row:hover{background:var(--gana-soft);}
.dbar-row.active{background:var(--gana-soft);}
.dbar-row.dim{opacity:.34;}
.dbar-top{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:4px;}
.dbar-top .nm{font-size:12.5px;color:var(--tinta);}
.dbar-top .vals{flex:none;font-family:var(--mono);font-size:11.5px;white-space:nowrap;}
.dbar-top .vals b{font-family:var(--sans);color:var(--ancla);}
.dbar-top .vals .c{color:var(--tinta-suave);margin-left:6px;}
.donut-arc{transition:opacity .12s;}
.donut-arc.dim{opacity:.3;}
.donut-leg-row{display:flex;align-items:center;gap:8px;padding:5px 4px;border-radius:5px;cursor:pointer;transition:background .1s,opacity .12s;}
.donut-leg-row:hover{background:var(--gana-soft);}
.donut-leg-row.active{background:var(--gana-soft);}
.donut-leg-row.dim{opacity:.34;}
.donut-leg-row .nm{flex:1;font-size:12.5px;}
.donut-leg-row .v{font-family:var(--mono);font-size:11.5px;width:34px;text-align:right;}
.donut-leg-row .c{font-family:var(--mono);font-size:10.5px;color:var(--tinta-suave);width:70px;text-align:right;}
.cwm-row{cursor:pointer;border-radius:6px;transition:background .1s;}
.cwm-row:hover{background:var(--gana-soft);}
.cwm-row.active{background:var(--gana-soft);}
.donut-dot{width:10px;height:10px;border-radius:50%;flex:none;}
/* callout */
.callout{border-radius:0 8px 8px 0;padding:14px 18px;font-size:13.5px;margin-bottom:14px;}
.callout.info{background:var(--palido);border-left:4px solid var(--marca);}
.callout.warn{background:var(--alerta-soft);border-left:4px solid var(--alerta);}
.callout.bad{background:var(--pierde-soft);border-left:4px solid var(--pierde);}
.callout b{color:var(--ancla);}
.callout.bad b{color:var(--pierde);}
/* table */
.tw{overflow-x:auto;border:1px solid var(--linea);border-radius:10px;background:var(--panel);box-shadow:0 1px 2px rgba(1,32,91,.05),0 2px 8px rgba(1,32,91,.04);}
.tw-title{display:flex;align-items:baseline;gap:10px;padding:14px 16px;border-bottom:1px solid var(--linea);}
.tw-title h3{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--profundo);margin:0;}
.tw-title .tw-count{font-size:11px;color:var(--tinta-suave);font-family:var(--mono);}
/* Resalta la barra de título de una tabla puntual (p.ej. "Oportunidades para accionar esta
   semana" en Previsión de Ventas) — franja de color a la izquierda y fondo tinte de alerta, para
   que se distinga de las demás tablas de la página al primer vistazo. */
.tw-title.hi{background:var(--alerta-soft);border-left:4px solid var(--alerta);border-bottom-color:#ecdcb0;}
.tw-title.hi h3{color:#8a6414;}
/* <summary class="tw-title"> — secciones colapsables (ver página Actividades) */
summary.tw-title{list-style:none;}
summary.tw-title::-webkit-details-marker{display:none;}
summary.tw-title::marker{content:'';}
.tw-chevron{font-size:11px;color:var(--tinta-suave);transition:transform .12s;display:inline-block;}
details:not([open])>summary.tw-title .tw-chevron{transform:rotate(-90deg);}
.ts{max-height:460px;overflow-y:auto;}
/* Variante sin scroll horizontal: se usa donde la tabla declara sus anchos con <colgroup>.
   El min-width global de `table` es lo que forzaba la barra lateral; aquí se anula. */
.tw.fit{overflow-x:hidden;}
/* Colchón fijo de seguridad: cuando SÍ aparece la barra vertical (más filas que `max-height`),
   el ancho de una tabla `table-layout:fixed` a veces queda calculado por encima del disponible —
   sin este margen, la última columna se recortaba unos 15px con `.tw.fit`, aunque las columnas
   sumaran bien menos de 100%. Vale la pena perder una franja angosta en blanco cuando NO hay
   barra a cambio de que nunca se corte cuando SÍ la hay. */
.tw.fit table.fix{width:calc(100% - 16px);}
/* Variante para layouts angostos (2/3 de ancho): sí hay scroll horizontal, pero la primera
   columna (Cliente/Oportunidad) queda fija — el "quién" nunca se pierde al desplazarse a ver
   Ejecutivo/MRR/Cierre. */
.tw.split table.fix thead th:first-child,.tw.split table.fix tbody td:first-child{position:sticky;left:0;z-index:2;background:var(--panel);box-shadow:2px 0 4px -2px rgba(1,32,91,.15);}
.tw.split table.fix thead th:first-child{z-index:3;background:var(--palido);}
.tw.split table.fix tbody tr:hover td:first-child{background:var(--gana-soft);}
/* Sin este piso, `width:100%` fuerza la tabla a caber en el 2/3 del layout dividido y
   table-layout:fixed aplasta las columnas — la última (Agendar) quedaba cortada en vez de
   simplemente empujar el scroll horizontal, que es el comportamiento que sí se busca acá. */
.tw.split table.fix{min-width:860px;}
table.fix{table-layout:fixed;min-width:0;}
table.fix thead th,table.fix tbody td{padding:6px 8px;}
table.fix td.elip{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* Cliente y oportunidad en una sola celda: el enlace arriba, el cliente como subíndice. */
td.dual-cel{white-space:normal;line-height:1.3;}
td.dual-cel .opp{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
td.dual-cel .sub{display:block;font-size:11.5px;color:var(--tinta);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* Indicador de actividad agendada (ver actIndicador() en tables.js) — pill chico junto al
   nombre; "si" en verde discreto, "no" en rojo suave para que salte a la vista el hueco. */
td.dual-cel .act-ind{display:inline-block;margin-top:2px;font-size:10px;font-weight:700;padding:1px 5px;border-radius:8px;}
td.dual-cel .act-ind.si{background:var(--gana-soft);color:var(--profundo);}
td.dual-cel .act-ind.no{background:var(--pierde-soft);color:var(--pierde);}
/* Filas de grupo colapsable en tablePipe (ver `groupKey`) — encabezado clicleable con chevron;
   arranca colapsado, clic para desplegar las filas de ese grupo. */
tr.grp-hdr{cursor:pointer;background:var(--palido);}
tr.grp-hdr:hover{background:#c3e0f2;}
tr.grp-hdr td{padding:8px 12px;font-size:12px;color:var(--profundo);border-bottom:1px solid var(--linea);}
.grp-chev{display:inline-block;width:12px;color:var(--marca);}
/* Plan de cierre como insignia de una letra — el nombre completo va en el title. */
.plan-b{display:inline-block;width:19px;height:19px;line-height:19px;text-align:center;border-radius:5px;font-size:11px;font-weight:700;background:var(--gris);color:var(--tinta-suave);}
.plan-b.pA{background:#d8ece0;color:#2f6b4f;}
.plan-b.pB{background:var(--gana-soft);color:var(--profundo);}
.plan-b.pC{background:var(--alerta-soft);color:#8a6414;}
.plan-b.pD{background:#f7ddd8;color:#9c3a2c;}
tbody td.num.venc{color:var(--pierde);font-weight:700;}
table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:760px;}
/* Encabezado en azul pálido de marca con texto azul profundo: el gris sobre gris de antes tenía muy
   poco contraste y la fila de títulos se perdía entre los datos. */
thead th{position:sticky;top:0;background:var(--palido);text-align:left;font-size:10px;letter-spacing:.04em;text-transform:uppercase;color:var(--profundo);font-weight:700;padding:9px 12px;border-bottom:2px solid var(--marca);white-space:nowrap;}
thead th.sortable{cursor:pointer;user-select:none;}
thead th.sortable:hover{background:#bfe1f2;}
thead th.on{color:var(--ancla);}
thead th .so{margin-left:5px;font-size:11px;opacity:.4;}
thead th.sortable:hover .so{opacity:.85;}
thead th.on .so{opacity:1;color:var(--marca);font-size:12px;}
/* El encabezado de una columna numérica se alinea con sus valores (a la derecha). Antes heredaba
   text-align:left mientras los valores iban a la derecha: por eso se veían desalineadas. */
thead th.num{text-align:right;}
/* Líneas divisorias de columna — hacen legible una tabla ancha sin tener que seguir la fila con el dedo. */
thead th,tbody td{border-right:1px solid var(--linea);}
thead th:last-child,tbody td:last-child{border-right:none;}
tbody td{padding:7px 12px;border-bottom:1px solid var(--linea);white-space:nowrap;}
tbody td.num{text-align:right;font-variant-numeric:tabular-nums;}
tbody td.wrap{white-space:normal;min-width:220px;max-width:340px;font-size:11.5px;color:var(--tinta-suave);}
tbody td.wrap-p{white-space:normal;max-width:200px;}
tbody tr:hover{background:var(--gana-soft);}
tbody tr:last-child td{border-bottom:none;}
a.opp{color:var(--marca);text-decoration:none;font-weight:700;}
a.opp:hover{text-decoration:underline;}
.pill{display:inline-block;font-size:10.5px;padding:2px 8px;border-radius:10px;font-weight:700;}
.pill.nuevo{background:var(--gana-soft);color:var(--profundo);}
.pill.cartera{background:var(--alerta-soft);color:#8a6414;}
.seg-tabs{display:inline-flex;flex-wrap:wrap;border:1px solid var(--linea);border-radius:7px;overflow:hidden;}
.seg-tabs button{font-family:var(--sans);font-size:12.5px;padding:6px 14px;border:0;background:#fff;color:var(--tinta-suave);cursor:pointer;}
.seg-tabs button.on{background:var(--marca);color:#fff;font-weight:700;}
.soon-box{text-align:center;padding:80px 20px;color:var(--tinta-suave);}
.soon-box .big{font-size:44px;margin-bottom:12px;}
.soon-box h2{color:var(--ancla);font-size:22px;margin:0 0 8px;}
.rep-btn{font-family:var(--sans);font-size:13px;padding:8px 16px;border:1px solid var(--marca);border-radius:6px;background:#fff;color:var(--marca);cursor:pointer;font-weight:700;}
.rep-btn:hover{background:var(--gana-soft);}

/* Botones "agendar" por oportunidad (tabla de tubería) — patrón traído de «Gestión de Cuentas
   Alfa»: abren Dynamics con una actividad nueva ya referida a esa oportunidad. Compactos a
   propósito: la tabla ya lleva 13 columnas y esto no puede costarle ancho a los datos. */
.acc-grp{display:inline-flex;gap:3px;}
.acc-b{display:inline-flex;align-items:center;justify-content:center;width:19px;height:19px;
  border:1px solid var(--linea);border-radius:4px;background:#fff;color:var(--marca);
  font-size:10.5px;line-height:1;text-decoration:none;cursor:pointer;transition:background .12s,border-color .12s;}
.acc-b:hover{background:var(--marca);border-color:var(--marca);color:#fff;}

/* Tira compacta de notas de Previsión — reemplaza tres callouts apilados por uno de varias
   líneas cortas. Mismo contenido, un tercio del alto. */
.callout.nota-tira{display:flex;flex-direction:column;gap:5px;font-size:12px;line-height:1.45;}
/* Insignia de bloqueo en la tabla de accionables (Previsión) */
.blq-pill{display:inline-block;padding:2px 7px;border-radius:10px;font-size:10.5px;font-weight:700;
  background:var(--profundo-soft);color:var(--profundo);white-space:nowrap;cursor:help;}
.blq-pill.pierde{background:var(--pierde-soft);color:var(--pierde);}
.blq-pill.alerta{background:var(--alerta-soft);color:var(--alerta);}

/* ---- Página Agenda (pages/agenda.js) ----
   Calendario de actividades planificadas. Patrón traído de «Gestión de Cuentas Alfa»
   (Informe v2/agenda.html), reescrito sobre las variables de marca de este informe. */
.ag-f-lbl{display:block;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--tinta-suave);margin-bottom:6px;}
.ag-tipos{display:flex;gap:14px;flex-wrap:wrap;}
.ag-tipo{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;cursor:pointer;}
.ag-toolbar{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px;}
.ag-nav{display:flex;align-items:center;gap:8px;}
.ag-nav-b{font-family:var(--sans);font-size:12.5px;padding:5px 11px;border:1px solid var(--linea);
  border-radius:6px;background:#fff;color:var(--tinta);cursor:pointer;}
.ag-nav-b:hover{border-color:var(--marca);color:var(--marca);}
.ag-nav-lbl{font-size:13px;font-weight:700;color:var(--profundo);min-width:180px;text-align:center;}

.ag-week{display:grid;grid-template-columns:repeat(7,1fr);gap:10px;align-items:start;}
@media(max-width:1180px){.ag-week{grid-template-columns:repeat(4,1fr);}}
@media(max-width:820px){.ag-week{grid-template-columns:repeat(2,1fr);}}
.ag-day{background:var(--panel);border:1px solid var(--linea);border-radius:10px;padding:9px 9px 10px;
  min-height:120px;display:flex;flex-direction:column;gap:6px;}
.ag-day.hoy{border-color:var(--marca);box-shadow:0 0 0 1px var(--marca) inset;}
.ag-day-h{display:flex;justify-content:space-between;font-size:10.5px;text-transform:uppercase;
  letter-spacing:.04em;color:var(--tinta-suave);font-weight:700;margin-bottom:2px;}
.ag-vacio{font-size:11px;color:var(--tinta-suave);}

.ag-item{display:block;border-radius:6px;padding:6px 8px;text-decoration:none;
  border-left:3px solid var(--marca);background:var(--gana-soft);color:var(--tinta);}
.ag-item:hover{filter:brightness(.97);}
.ag-item-t{display:block;font-size:11.5px;font-weight:700;line-height:1.3;}
.ag-item-s{display:block;font-size:10.5px;color:var(--tinta-suave);margin-top:2px;}
.ag-item.t-cita{border-left-color:var(--alerta);background:var(--alerta-soft);}
.ag-item.t-llamada{border-left-color:var(--profundo);background:var(--profundo-soft);}
.ag-item.venc{border-left-color:var(--pierde);background:var(--pierde-soft);}
.ag-item.hecha{opacity:.55;}
.ag-lista{display:flex;flex-direction:column;gap:7px;}

.ag-month{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;}
.ag-m-h{font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--tinta-suave);
  font-weight:700;text-align:center;padding-bottom:4px;}
.ag-m-d{position:relative;background:var(--panel);border:1px solid var(--linea);border-radius:8px;
  min-height:56px;padding:6px 7px;cursor:pointer;}
.ag-m-d:hover{border-color:var(--marca);}
.ag-m-d.otro{opacity:.42;}
.ag-m-d.hoy{border-color:var(--marca);box-shadow:0 0 0 1px var(--marca) inset;}
.ag-m-d.sel{background:var(--gana-soft);border-color:var(--marca);}
.ag-m-num{font-size:11.5px;font-family:var(--mono);color:var(--tinta-suave);}
.ag-m-badge{position:absolute;right:6px;bottom:6px;min-width:18px;height:18px;border-radius:9px;
  background:var(--marca);color:#fff;font-size:10.5px;font-weight:700;display:inline-flex;
  align-items:center;justify-content:center;padding:0 5px;}
.ag-m-badge.venc{background:var(--pierde);}
.ag-lista.scroll{max-height:560px;overflow-y:auto;padding-right:5px;}

/* ---- Nuevas Oportunidades (pages/nuevas.js) ----
   Barras apiladas de cohorte + insignias de estado. La matriz de calor reusa las clases .mze
   de la matriz de ejecutivos; solo cambia el color de fondo, que lo calcula cohHeat(). */
.coh-leyenda{display:flex;gap:16px;margin-bottom:12px;}
.coh-leg{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--tinta-suave);}
.coh-leg i{width:11px;height:11px;border-radius:3px;display:inline-block;}
.coh-fila{display:grid;grid-template-columns:minmax(96px,120px) 1fr 46px;align-items:center;gap:10px;padding:5px 0;}
.coh-mes{font-size:12px;color:var(--tinta);}
.coh-tot{font-family:var(--mono);font-size:11.5px;color:var(--tinta-suave);text-align:right;}
.coh-barra{display:flex;height:26px;border-radius:5px;overflow:hidden;background:var(--gris);}
.coh-seg{display:flex;align-items:center;justify-content:center;color:#fff;font-size:10.5px;
  font-weight:700;cursor:pointer;transition:filter .12s;white-space:nowrap;overflow:hidden;}
.coh-seg:hover{filter:brightness(1.12);}
.coh-seg.sel{outline:2px solid var(--ancla);outline-offset:-2px;}
.coh-vacio{font-size:11px;color:var(--tinta-suave);padding-left:8px;align-self:center;}
.coh-pill{display:inline-block;padding:2px 8px;border-radius:10px;font-size:10.5px;font-weight:700;white-space:nowrap;}
.coh-pill.g{background:var(--gana-soft);color:var(--gana);}
.coh-pill.p{background:var(--pierde-soft);color:var(--pierde);}
.coh-pill.a{background:var(--gris);color:var(--tinta-suave);}
