/* ─── DESIGN TOKENS ──────────────────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#F7F6F3; --surface:#FFFFFF; --s2:#F9F9F8; --border:#EAEAEA;
  --text:#111111; --muted:#6B6B6B; --faint:#C8C8C8;
  --red-bg:#FDEBEC;  --red-t:#9F2F2D;
  --blue-bg:#E1F3FE; --blue-t:#1A6B8A;
  --green-bg:#EDF3EC;--green-t:#2D6E30;
  --yellow-bg:#FBF3DB;--yellow-t:#7A5C10;
  --purple-bg:#F0ECFE;--purple-t:#5A2D8A;
  --orange-bg:#FFF0E6;--orange-t:#8A4A10;
  --indigo-bg:#E8EFFE;--indigo-t:#2A4D8A;
  --gray-bg:#F5F5F3;  --gray-t:#555555;
  --brand:#4A9B3F;
  --accent:#4A9B3F;
  --font-ui:'Hanken Grotesk',system-ui,-apple-system,'Segoe UI',sans-serif;
  --font-display:'Fraunces','Hanken Grotesk',Georgia,serif;
  --font-data:'IBM Plex Mono','SFMono-Regular','Consolas',monospace;
  --z-header:50; --z-modal:200; --z-login:9999;
  /* ── Severity palette ── */
  --sev-crit:#B02020; --sev-alta:#C86020; --sev-med:#C0960A;
  /* ── Shadows ── */
  --shadow-sm:0 2px 8px rgba(0,0,0,.08);
  --shadow-md:0 4px 16px rgba(0,0,0,.12);
  --shadow-lg:0 8px 32px rgba(0,0,0,.20);
  --radius:2px;
  /* ── Escala tipográfica ── */
  --kpi-val:20px;          /* valor numérico en KPI strips de módulo */
  --section-hdr:11px;      /* título de sección/grupo (uppercase 700) */
  --body-row:13px;         /* texto principal de fila de datos */
}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* Accesibilidad: respetar preferencia de menos movimiento (H13) */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
}
html,body{height:100%;overflow:hidden}
body{
  font-family:var(--font-ui);background:var(--bg);color:var(--text);line-height:1.6;font-size:14px;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='.025'/%3E%3C/svg%3E");
}
.mono{font-family:var(--font-data)}

/* ─── APP SHELL ──────────────────────────────────────────────────────────────── */
.app{display:flex;flex-direction:column;height:100dvh}

/* ─── HEADER ─────────────────────────────────────────────────────────────────── */
.hdr{
  flex-shrink:0;display:flex;align-items:stretch;height:62px;
  background:var(--surface);border-bottom:2px solid var(--brand);
  z-index:var(--z-header);
}
.hdr-brand{display:flex;align-items:center;padding:0 0 0 20px;gap:14px;flex-shrink:0}
.hdr-logo{height:40px;width:auto;max-width:180px;display:block;flex-shrink:0;object-fit:contain;object-position:left center}
.hdr-brand-appname{font-size:12px;font-weight:600;color:var(--text);white-space:nowrap;letter-spacing:-.01em;line-height:1.2}
.hdr-vdiv{width:1px;background:var(--border);align-self:stretch;margin:12px 0;flex-shrink:0}
.hdr-context{
  display:flex;align-items:center;gap:8px;padding:0 16px;
  font-size:12px;color:var(--muted);min-width:0;flex:1;
}
.hdr-ctx-app{font-weight:600;color:var(--text);white-space:nowrap;cursor:pointer}
.hdr-ctx-app:hover{color:var(--brand)}
.hdr-ctx-sep{color:var(--faint)}
.hdr-ctx-project{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:6px}
.hdr-spacer{flex:1;min-width:8px}
.hdr-conexion{display:flex;align-items:center;gap:8px;padding:0 16px;flex-shrink:0}
.api-badge{font-size:10px;padding:3px 8px;border:1px solid var(--border);border-radius:var(--radius);color:var(--muted);font-family:var(--font-data);white-space:nowrap}
.api-badge.connected{background:var(--green-bg);color:var(--green-t);border-color:var(--green-bg)}
.api-badge.sp{background:#EEF2F8;color:#0078D4;border-color:#BDD5F0}
.ms-user-hdr{font-size:10px;color:#0078D4;border:1px solid #BDD5F0;padding:3px 8px;border-radius:var(--radius);font-family:var(--font-data);white-space:nowrap}
.hdr-user-block{display:none;align-items:center;gap:8px;padding:0 12px;flex-shrink:0}
.hdr-user-avatar{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;flex-shrink:0}
.hdr-user-info{display:flex;flex-direction:column;gap:1px;min-width:0}
.hdr-user-name{font-size:11px;font-weight:600;color:var(--text);white-space:nowrap}
.hdr-user-meta{font-size:9px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}
.hdr-logout-btn{font-size:9px;background:none;border:1px solid var(--border);color:var(--muted);padding:3px 8px;cursor:pointer;font-family:inherit;border-radius:var(--radius);white-space:nowrap}
.hdr-logout-btn:hover{border-color:var(--text);color:var(--text)}
.hdr-sync{display:flex;align-items:center;padding:0 8px;flex-shrink:0}
.hdr-sync-btn{display:flex;align-items:center;gap:5px;background:none;border:1px solid var(--border);color:var(--muted);padding:3px 9px;cursor:pointer;font-family:inherit;font-size:9px;border-radius:var(--radius);white-space:nowrap;transition:all .12s}
.hdr-sync-btn:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}
.hdr-sync-btn:disabled{opacity:.5;cursor:not-allowed}
@keyframes syncSpin{to{transform:rotate(360deg)}}
.hdr-actions{display:flex;align-items:center;gap:12px;padding:0 20px 0 12px;flex-shrink:0}
.hdr-date{font-size:10px;color:var(--muted);font-family:var(--font-data);white-space:nowrap;text-align:right;line-height:1.4}
.btn-cfg,.sb-new-btn,.sug-btn{background:var(--text);color:#fff;border:none;cursor:pointer;border-radius:var(--radius);font-family:inherit;transition:opacity .12s}
.btn-cfg:hover,.sb-new-btn:hover,.sug-btn:hover{opacity:.82}
.btn-cfg{padding:5px 12px;font-size:10px;white-space:nowrap}
.btn-cfg.secondary{background:transparent;color:var(--text);border:1px solid var(--border)}
.btn-cfg.secondary:hover{border-color:var(--text)}

/* ─── MAIN LAYOUT ────────────────────────────────────────────────────────────── */
.main-layout{flex:1;display:flex;overflow:hidden;position:relative}
.hdr-menu-btn{display:none;background:none;border:none;font-size:20px;color:var(--text);cursor:pointer;padding:0 6px 0 16px;line-height:1;flex-shrink:0}
.sb-backdrop{display:none}
.sb-mobile-actions{display:none;flex-direction:column;gap:6px;padding:12px 14px;border-top:1px solid var(--border);flex-shrink:0}
.sb-mob-act{font-size:13px;font-weight:500;text-align:left;background:none;border:1px solid var(--border);border-radius:var(--radius);padding:9px 12px;color:var(--text);cursor:pointer;font-family:inherit}
.sb-mob-out{color:var(--danger);border-color:transparent}

/* ─── SIDEBAR ────────────────────────────────────────────────────────────────── */
.sidebar{
  width:272px;flex-shrink:0;background:var(--surface);
  border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden;
}
.sb-head{flex-shrink:0}
.sb-section{padding:10px 14px;border-bottom:1px solid var(--border)}
.sb-label{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin-bottom:7px;display:flex;align-items:center;justify-content:space-between}
.sb-label-clear{font-size:9px;font-weight:400;text-transform:none;color:var(--muted);background:none;border:none;cursor:pointer;font-family:inherit;padding:0}
.sb-label-clear:hover{color:var(--text)}
.search-input{width:100%;padding:6px 9px;font-size:11px;border:1px solid var(--border);background:var(--bg);border-radius:var(--radius);font-family:inherit;color:var(--text);outline:none;transition:border-color .12s;box-sizing:border-box}
.search-input:focus{border-color:var(--text)}
.filter-group{margin-bottom:5px}
.filter-group:last-child{margin-bottom:0}
.filter-select{width:100%;padding:5px 7px;font-size:11px;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);font-family:inherit;color:var(--text);outline:none;cursor:pointer}
.filter-select:focus{border-color:var(--text)}
.sb-results{padding:8px 14px;font-size:10px;color:var(--muted);border-bottom:1px solid var(--border);flex-shrink:0;display:flex;align-items:center;justify-content:space-between}
.sb-results-count{font-family:var(--font-data);font-weight:500}
.sb-new-btn{font-size:10px;font-weight:600;padding:3px 10px}
/* ── Restricciones por rol ── */
#app[data-user-role="asistente"] .sb-new-btn,
#app[data-user-role="profesional"] .sb-new-btn{display:none}

/* ══ GATING DE MENÚ POR ROL (declarativo, sin MutationObserver) ══
   Matriz §3 de docs/diseno-dashboard-roles.md. Cada rol ve solo lo que usa.
   La cabecera del grupo "La Oficina" se oculta cuando el grupo queda vacío. */

/* Asistente (n3): sin plata (Finanzas), sin admin de la casa (todo "La Oficina"
   salvo Equipo), sin Inteligencia. Grupo "La Oficina" queda solo con Equipo. */
#app[data-user-role="asistente"] #sb-nav-proveedores,
#app[data-user-role="asistente"] #sb-nav-servicios,
#app[data-user-role="asistente"] #sb-nav-clientes,
#app[data-user-role="asistente"] #sb-nav-oficina,
#app[data-user-role="asistente"] #sb-nav-intel,
#app[data-user-role="asistente"] #sb-nav-finanzas-global{display:none}

/* Profesional (n4): menú mínimo. Portafolio: solo Mis proyectos, Cronograma,
   Documentos. "La Oficina" oculta por completo (incluida su cabecera). */
#app[data-user-role="profesional"] #sb-nav-intel,
#app[data-user-role="profesional"] #sb-nav-alertas,
#app[data-user-role="profesional"] #sb-nav-raid,
#app[data-user-role="profesional"] #sb-nav-finanzas-global,
#app[data-user-role="profesional"] #sb-nav-informes,
#app[data-user-role="profesional"] #sb-nav-equipo,
#app[data-user-role="profesional"] #sb-nav-proveedores,
#app[data-user-role="profesional"] #sb-nav-servicios,
#app[data-user-role="profesional"] #sb-nav-clientes,
#app[data-user-role="profesional"] #sb-nav-oficina,
#app[data-user-role="profesional"] #sb-group-hdr-oficina,
#app[data-user-role="profesional"] #sb-group-oficina{display:none}

/* CINTURÓN 2 (respaldo visual): las tarjetas de plata del strip nunca se ven
   para n>2, aunque un render dejara el nodo. El cinturón 1 (no generar HTML)
   vive en renderDashKPIs(). Los KPIs operativos solo para el asistente. */
#app[data-user-role="asistente"] .dash-kpi-money,
#app[data-user-role="profesional"] .dash-kpi-money{display:none}

/* CINTURÓN 2 · pestañas de la ficha de proyecto restringidas por rol (espeja
   _PROJ_TAB_MIN_NIVEL en state.js). El cinturón 1 (no renderizar + fail-closed en
   switchProjTab) vive en state.js/02-portafolio.js.
   · Finanzas (dinero, money gate ≤2): oculta a asistente Y profesional.
   · Administrativa (contrato) y Control (RAID): oculta solo al profesional. */
#app[data-user-role="asistente"] .proj-tab-btn[data-tab="finanzas"],
#app[data-user-role="profesional"] .proj-tab-btn[data-tab="finanzas"],
#app[data-user-role="profesional"] .proj-tab-btn[data-tab="administrativa"],
#app[data-user-role="profesional"] .proj-tab-btn[data-tab="control"]{display:none}
.dash-kpi-ops-only{display:none}
#app[data-user-role="asistente"] .dash-kpi-ops-only{display:flex}
#app[data-user-role="asistente"] .dash-sep.dash-kpi-ops-only{display:block}

.proj-list{overflow-y:auto;flex:1}

/* ─── PROJECT LIST ITEMS ─────────────────────────────────────────────────────── */
.proj-item{
  padding:12px 16px 12px 13px;border-bottom:1px solid var(--border);
  border-left:3px solid transparent;cursor:pointer;transition:background .1s,border-color .1s;
}
.proj-item:hover{background:var(--bg)}
.proj-item.sel{background:var(--bg);padding-left:11px}
.proj-item-top{display:flex;align-items:flex-start;justify-content:space-between;gap:6px;margin-bottom:2px}
.proj-item-name{font-size:12px;font-weight:600;line-height:1.3;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.proj-item-company{font-size:10px;color:var(--muted);margin-bottom:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.proj-item-chips{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:6px}
.proj-item-foot{display:flex;align-items:center;justify-content:space-between;gap:8px}
.proj-progress-wrap{display:flex;align-items:center;gap:5px;flex:1}
.proj-progress-bar{height:3px;background:var(--border);flex:1;border-radius:var(--radius);overflow:hidden}
.proj-progress-fill{height:100%;background:var(--brand);border-radius:var(--radius);transition:width .3s}
.proj-progress-pct{font-size:9px;font-family:var(--font-data);color:var(--muted);white-space:nowrap}
.proj-item-days{font-size:9px;font-family:var(--font-data);white-space:nowrap;flex-shrink:0}
.list-empty{padding:24px 16px;text-align:center;font-size:11px;color:var(--muted);line-height:1.6}

/* ─── SEMAPHORE DOTS ─────────────────────────────────────────────────────────── */
.sem-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;margin-top:3px}
.sem-dot.sem-ok{background:#4A9B3F}
.sem-dot.sem-warn{background:#B89A20}
.sem-dot.sem-alert{background:#9F2F2D}
.sem-chip{font-size:9px;font-weight:700;padding:2px 7px;border-radius:var(--radius);text-transform:uppercase;letter-spacing:.06em}
.sem-chip-ok{background:var(--green-bg);color:var(--green-t)}
.sem-chip-warn{background:var(--yellow-bg);color:var(--yellow-t)}
.sem-chip-alert{background:var(--red-bg);color:var(--red-t)}

/* ─── CONTENT AREA ───────────────────────────────────────────────────────────── */
.content{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg)}
.content-panel{flex:1;display:none;flex-direction:column;overflow:hidden}
.content-panel.on{display:flex}

/* ─── DASHBOARD ──────────────────────────────────────────────────────────────── */
.dash-kpi-bar{
  flex-shrink:0;display:flex;align-items:stretch;background:var(--surface);
  border-bottom:1px solid var(--border);overflow-x:auto;
}
.dash-kpi{display:flex;flex-direction:column;justify-content:center;padding:9px 12px;min-width:110px;flex:1}
.dash-kpi-tipos{flex:2;min-width:140px}
.dash-tipo-chip{font-size:9px;font-weight:700;padding:2px 7px;border-radius:var(--radius);border:1px solid;display:inline-flex;align-items:center;margin:1px 3px 1px 0;white-space:nowrap;line-height:1.5}
.dash-kpi-val{font-size:clamp(11px,1vw,13px);font-family:var(--font-data);font-weight:700;line-height:1;font-feature-settings:'tnum' 1;white-space:nowrap;min-width:0}
.dash-kpi-lbl{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-top:4px}
.dash-sep{width:1px;background:var(--border);flex-shrink:0;align-self:stretch;margin:10px 0}
.dash-sep-fin{width:2px;background:var(--brand);opacity:.25;margin:6px 0}
.dash-body{flex:1;display:grid;grid-template-columns:1fr 260px;overflow:hidden}
.dash-pipeline{overflow-y:auto;padding:24px;display:flex;flex-direction:column;gap:28px}
.dash-upcoming{border-left:1px solid var(--border);overflow-y:auto;background:var(--surface);display:flex;flex-direction:column}
.dash-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:40px;text-align:center}
.dash-empty-title{font-size:15px;font-weight:600;margin-bottom:8px}
.dash-empty-sub{font-size:12px;color:var(--muted);line-height:1.6}

/* ─── DASHBOARD · CIFRA ESTRELLA POR ROL (#dash-hero) ─────────────────────────
   Un solo indicador de color junto al número (punto), nunca fondo de color
   primario detrás. Display = Fraunces; la cifra en font-data (tabular). */
.dash-hero{flex-shrink:0;background:var(--surface);border-bottom:1px solid var(--border);
  padding:18px 20px 16px;display:flex;align-items:flex-end;justify-content:space-between;gap:16px}
.dash-hero-main{min-width:0}
.dash-hero-lbl{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-bottom:6px}
.dash-hero-figure{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.dash-hero-dot{width:11px;height:11px;border-radius:50%;flex-shrink:0;align-self:center}
.dash-hero-dot.ok{background:var(--green-t)} .dash-hero-dot.warn{background:var(--yellow-t)} .dash-hero-dot.alt{background:var(--red-t)}
.dash-hero-val{font-family:var(--font-display)!important;font-size:clamp(30px,5vw,44px);font-weight:600;line-height:1;letter-spacing:-.01em;color:var(--text)}
.dash-hero-figure.hero-ok .dash-hero-val{color:var(--green-t)}
.dash-hero-figure.hero-warn .dash-hero-val{color:var(--yellow-t)}
.dash-hero-figure.hero-alt .dash-hero-val{color:var(--red-t)}
.dash-hero-unit{font-family:var(--font-data);font-size:15px;color:var(--muted);font-weight:600}
.dash-hero-sub{font-size:12px;color:var(--text);margin-top:8px;line-height:1.5}
.dash-hero-sub-muted{color:var(--muted)}
.dash-hero-tag{display:inline-block;font-size:10px;font-weight:700;padding:2px 8px;border-radius:var(--radius);text-transform:uppercase;letter-spacing:.05em}
.dash-hero-tag.ok{background:var(--green-bg);color:var(--green-t)}
.dash-hero-tag.warn{background:var(--yellow-bg);color:var(--yellow-t)}
.dash-hero-tag.alt{background:var(--red-bg);color:var(--red-t)}
.dash-hero-src{font-size:9px;color:var(--faint);font-family:var(--font-data);text-align:right;flex-shrink:0;align-self:flex-end;max-width:200px}

/* ─── DASHBOARD · CUERPO ADAPTABLE POR ROL (#dash-role-body) ──────────────── */
/* Director/Coord/Asistente: bloques compactos sobre el mapa (no crece). */
.dash-role-body{flex-shrink:0;overflow-y:auto;max-height:42vh;background:var(--bg);padding:0}
/* Profesional: el cuerpo ES el contenido principal (Mi Día + proyectos) → llena
   y hace scroll; no hay mapa ni strip que compitan. */
#app[data-user-role="profesional"] .dash-role-body{flex:1;min-height:0;max-height:none}
.dash-sec{padding:16px 20px;border-bottom:1px solid var(--border)}
.dash-sec-hdr{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-bottom:12px}
.dash-salud-row{display:flex;gap:24px;flex-wrap:wrap}
.dash-salud-item{display:flex;align-items:center;gap:7px}
.dash-salud-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}
.dash-salud-dot.ok{background:var(--green-t)} .dash-salud-dot.warn{background:var(--yellow-t)} .dash-salud-dot.alt{background:var(--red-t)}
.dash-salud-n{font-size:18px;font-weight:700;color:var(--text)}
.dash-salud-lbl{font-size:11px;color:var(--muted)}
.dash-accesos{display:flex;gap:8px;flex-wrap:wrap}
.dash-acceso-chip{font-size:11px;font-weight:600;padding:6px 14px;border:1px solid var(--border);background:var(--surface);
  color:var(--text);border-radius:var(--radius);cursor:pointer;font-family:inherit;transition:border-color .12s,color .12s}
.dash-acceso-chip:hover{border-color:var(--text)}
/* Tira compacta director: salud (izq) + accesos (der) en una línea */
.dash-strip{display:flex;align-items:center;justify-content:space-between;gap:16px 24px;flex-wrap:wrap}
.dash-strip-salud{gap:20px;flex:1;min-width:0}
.dash-strip .dash-salud-n{font-size:15px}
.dash-strip-accesos{justify-content:flex-end;margin-left:auto}
.dash-strip-empty{font-size:11px;color:var(--muted)}
@media(max-width:560px){
  .dash-strip{flex-direction:column;align-items:stretch;gap:12px}
  .dash-strip-salud{gap:10px 16px}
  .dash-strip-accesos{justify-content:flex-start;margin-left:0}
}
.dash-upcoming-list{display:flex;flex-direction:column}
.dash-prof-midia{padding:16px 20px;border-bottom:1px solid var(--border)}
.dash-prof-midia .midia-body{margin-top:4px}

/* ─── DASHBOARD PIPELINE GROUPS ─────────────────────────────────────────────── */
.dash-group{}
.dash-group-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.dash-group-count{font-size:11px;color:var(--muted);background:var(--bg);padding:1px 7px;border-radius:10px;border:1px solid var(--border)}
.dash-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}

/* ─── DASHBOARD CARDS ────────────────────────────────────────────────────────── */
.dash-card{
  background:var(--surface);border:1px solid var(--border);padding:14px 16px;
  cursor:pointer;transition:border-color .12s,transform .1s;
}
.dash-card:hover{border-color:var(--text);transform:translateY(-1px)}
.dash-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:6px;margin-bottom:2px}
.dash-card-name{font-size:12px;font-weight:600;line-height:1.3;flex:1;min-width:0}
.dash-card-company{font-size:10px;color:var(--muted);margin-bottom:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-card-prog-wrap{margin-bottom:8px}
.dash-card-prog-bar{height:3px;background:var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:3px}
.dash-card-prog-fill{height:100%;background:var(--brand);border-radius:var(--radius)}
.dash-card-ents{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.ent-mini-dot{width:8px;height:8px;border-radius:50%}

/* ─── PORTFOLIO OVERVIEW ENRICHMENTS ─────────────────────────────────────────── */
.dash-card-health{font-size:10px;font-weight:700;font-family:var(--font-data);padding:2px 7px;border-radius:var(--radius);flex-shrink:0;line-height:1.4}
.dash-card-health.ok  {background:var(--green-bg);color:var(--green-t)}
.dash-card-health.warn{background:var(--yellow-bg);color:var(--yellow-t)}
.dash-card-health.alt {background:var(--red-bg);color:var(--red-t)}
.dash-card-alert-badge{font-size:9px;font-weight:700;padding:1px 5px;border-radius:8px;line-height:14px;white-space:nowrap;flex-shrink:0}
.dash-card-alert-badge.crit{background:var(--sev-crit);color:#fff}
.dash-card-alert-badge.alta{background:var(--sev-alta);color:#fff}
.dash-card-alert-badge.med {background:var(--sev-med);color:#fff}
.dash-card-mod-bar{display:flex;align-items:center;gap:0;margin-top:8px;padding-top:8px;border-top:1px solid var(--border)}
.dash-card-mod-item{display:flex;flex-direction:column;align-items:center;flex:1;gap:3px;padding:0 2px}
.dash-card-mod-lbl{font-size:7px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.dash-card-mod-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.dash-card-mod-dot.ok  {background:#4A9B3F}
.dash-card-mod-dot.warn{background:var(--sev-med)}
.dash-card-mod-dot.alert{background:var(--sev-crit)}

/* ─── UPCOMING PANEL ─────────────────────────────────────────────────────────── */
.upcoming-title{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);padding:14px 16px 8px;border-bottom:1px solid var(--border);flex-shrink:0}
.upcoming-empty{padding:20px 16px;font-size:11px;color:var(--muted);text-align:center}
.upcoming-item{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .1s}
.upcoming-item:hover{background:var(--bg)}
.upcoming-item-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.upcoming-item-body{flex:1;min-width:0}
.upcoming-item-name{font-size:11px;font-weight:500;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.upcoming-item-proj{font-size:9px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.upcoming-item-date{font-size:10px;flex-shrink:0;white-space:nowrap}

/* ─── PROJECT WORKSPACE ──────────────────────────────────────────────────────── */
.proj-tab-nav{
  flex-shrink:0;display:flex;align-items:flex-end;background:var(--surface);
  border-bottom:1px solid var(--border);padding:0 20px;
  overflow-x:auto;scrollbar-width:none;
}
.proj-tab-nav::-webkit-scrollbar{display:none}
/* Riel de dos niveles: rótulo de área (metadato tenue) arriba, pestañas abajo.
   Agrupa por aire (sin líneas divisorias). Documentos = transversal, empujado a la derecha. */
.ptab-group{display:flex;flex-direction:column;gap:4px;position:relative}
.ptab-group + .ptab-group{margin-left:38px}
.ptab-area{
  font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.09em;
  color:#9A9A9A;padding-left:14px;white-space:nowrap;user-select:none;pointer-events:none;
  transition:color .15s;
}
.ptab-group:has(.proj-tab-btn.on) .ptab-area{color:#707070}
/* Documentos = transversal: una sola divisoria marca el cambio de zona (no es una fase) */
.ptab-group-trans{margin-left:44px}
.ptab-group-trans::before{content:"";position:absolute;left:-22px;bottom:7px;width:1px;height:20px;background:var(--border)}
.ptab-row{display:flex}
.proj-tab-btn{padding:9px 14px;font-size:13px;font-weight:500;border:none;background:none;cursor:pointer;color:var(--muted);border-bottom:2px solid transparent;transition:color .15s,border-color .15s;font-family:inherit;letter-spacing:.01em;margin-bottom:-1px;white-space:nowrap}
.proj-tab-btn:hover{color:var(--text)}
.proj-tab-btn.on{color:var(--text);border-bottom-color:var(--brand);font-weight:600}
@media (max-width:640px){
  .ptab-group + .ptab-group{margin-left:24px}
  .proj-tab-btn{font-size:12px;padding:9px 11px}
}
.proj-tab-spacer{flex:1;align-self:stretch;min-width:24px}
.proj-tab-content{flex:1;display:none;flex-direction:column;overflow-y:auto}
.proj-tab-content.on{display:flex}
.btn-edit-proj{font-size:11px;font-weight:500;padding:5px 11px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);cursor:pointer;white-space:nowrap;font-family:inherit}
.btn-edit-proj:hover{border-color:var(--brand);color:var(--brand)}
.btn-del-proj{font-size:11px;font-weight:500;padding:5px 11px;border:1px solid transparent;border-radius:var(--radius);background:none;color:var(--muted);cursor:pointer;white-space:nowrap;font-family:inherit}
.btn-del-proj:hover{border-color:#FACACA;color:var(--sev-crit);background:var(--red-bg)}

/* ─── FICHA ──────────────────────────────────────────────────────────────────── */
.ficha-wrap{padding:0;display:flex;flex-direction:column;gap:0;flex:1;overflow:hidden}

/* Hero: nombre protagonista */
.ficha-hero{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 16px;background:var(--surface);border-bottom:2px solid var(--border);gap:16px;flex-shrink:0}
.ficha-hero-left{flex:1;min-width:0}
.ficha-hero-name{font-size:22px;font-weight:700;letter-spacing:-.025em;color:var(--text);line-height:1.15;margin-bottom:9px;font-family:var(--font-display)}
.ficha-hero-meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.ficha-hero-company{font-size:12px;color:var(--muted)}
.ficha-hero-dot{color:var(--faint)}
.ficha-hero-actions{flex-shrink:0;padding-top:3px}

/* KPI strip */
.ficha-kpi-strip{display:grid;grid-template-columns:repeat(6,1fr);border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}
.ficha-kpi{padding:12px 16px;border-right:1px solid var(--border);display:flex;flex-direction:column;gap:3px}
.ficha-kpi:last-child{border-right:none}
.ficha-kpi-val{font-size:var(--kpi-val);font-weight:700;font-family:var(--font-data);line-height:1;color:var(--text)}
.ficha-kpi-val.ok{color:var(--green-t)}
.ficha-kpi-val.warn{color:var(--yellow-t)}
.ficha-kpi-val.alert{color:var(--red-t)}
.ficha-kpi-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:600;line-height:1.3}
.ficha-kpi-sub{font-size:9px;color:var(--muted);margin-top:1px}

/* Grid y columnas */
.ficha-grid{display:grid;grid-template-columns:1fr 1fr;gap:0;flex:1;background:var(--border);overflow:hidden}
.ficha-col{background:var(--surface);padding:20px 24px;display:flex;flex-direction:column;gap:0;overflow-y:auto}
.ficha-col:first-child{border-right:1px solid var(--border)}

/* Títulos de sección — prominentes */
.ficha-section-title{
  font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;
  color:var(--text);padding-bottom:8px;margin-bottom:14px;
  border-bottom:2px solid var(--border);position:relative;
}
.ficha-section-title::after{content:'';position:absolute;bottom:-2px;left:0;width:20px;height:2px;background:var(--brand)}

.ficha-progress-inline{display:flex;align-items:center;gap:7px}
.ficha-prog-bar{height:4px;width:80px;background:var(--border);border-radius:var(--radius);overflow:hidden}
.ficha-prog-fill{height:100%;background:var(--brand);border-radius:var(--radius)}
.ficha-field-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;margin-bottom:16px}
.ficha-field.full{grid-column:1/-1}
.ficha-field-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:2px}
.ficha-field-val{font-size:12px;font-weight:500}
.ficha-field-val.mono{font-family:var(--font-data);font-size:11px}
.ficha-desc{margin-bottom:14px}
.ficha-desc-text{font-size:12px;color:var(--muted);line-height:1.6}
.ficha-fin-cards{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:10px}
.ficha-fin-card{border:1px solid var(--border);padding:10px 12px;background:var(--bg)}
.ficha-fin-card.ok{background:var(--green-bg);border-color:transparent}
.ficha-fin-card.pending{background:var(--yellow-bg);border-color:transparent}
.ficha-fin-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-bottom:3px}
.ficha-fin-val{font-size:14px;font-weight:600;font-family:var(--font-data)}
.ficha-fin-sub{font-size:10px;color:var(--muted);font-family:var(--font-data)}
.ficha-pay-bar{height:5px;background:var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:16px}
.ficha-pay-fill{height:100%;background:var(--green-t);border-radius:var(--radius)}
.ficha-ent-summary{display:flex;flex-direction:column;gap:5px;margin-bottom:8px}
.ficha-ent-row{display:flex;align-items:center;gap:7px}
.ent-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.ent-dot-pendiente{background:#BBBBBB}
.ent-dot-en_proceso{background:#B89A20}
.ent-dot-entregado{background:#1A6B8A}
.ent-dot-aprobado{background:#4A9B3F}
.ent-dot-pagado{background:#2A4D8A}
.ficha-ent-lbl{font-size:11px;flex:1;color:var(--muted)}
.ficha-ent-count{font-family:var(--font-data);font-size:11px;font-weight:500}
.ficha-ent-empty{font-size:11px;color:var(--muted)}
.ficha-contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.ficha-contact-block{}
.ficha-contact-name{font-size:12px;font-weight:600}
.ficha-contact-meta{font-size:11px;color:var(--muted)}
.contact-link{color:var(--text);text-decoration:none}
.contact-link:hover{text-decoration:underline;color:var(--brand)}

/* ─── FICHA NUEVA (side-nav layout) ─────────────────────────────────────────── */
/* compact header */
.fic-hdr{display:flex;align-items:center;gap:16px;padding:10px 20px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0}
.fic-hdr-left{flex:1;min-width:0}
.fic-hdr-meta{display:flex;align-items:center;gap:6px;margin-bottom:3px}
.fic-nombre{font-size:15px;font-weight:700;color:var(--text);margin:0 0 4px;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fic-chips{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-bottom:3px}
.fic-hdr-right{display:flex;align-items:center;gap:10px;flex-shrink:0}
.fic-hdr-btns{display:flex;gap:6px}

/* health badge (compact, in header) */
.fic-health-badge{display:flex;flex-direction:column;align-items:center;padding:5px 10px;border-radius:4px;border:1px solid transparent;min-width:46px}
.fic-health-badge.pinfo-health-ok{background:#EDF3EC;border-color:#4A9B3F}
.fic-health-badge.pinfo-health-warn{background:#FFF8E1;border-color:#B89A20}
.fic-health-badge.pinfo-health-alert{background:#FFF0F0;border-color:var(--sev-crit)}
.fic-health-num{font-size:17px;font-weight:700;font-family:var(--font-data);line-height:1}
.pinfo-health-ok .fic-health-num{color:#2D6E30}
.pinfo-health-warn .fic-health-num{color:#8A6A00}
.pinfo-health-alert .fic-health-num{color:var(--sev-crit)}
.fic-health-lbl{font-size:8px;text-transform:uppercase;color:var(--muted)}

/* progress block (in header) */
.fic-prog-block{display:flex;flex-direction:column;gap:3px;min-width:130px}
.fic-prog-bar{height:5px;background:var(--border);border-radius:2px;overflow:hidden}
.fic-prog-fill{height:100%;background:var(--brand);border-radius:2px}
.fic-prog-meta{display:flex;justify-content:space-between}
.fic-prog-pct{font-size:10px;font-weight:700;font-family:var(--font-data)}
.fic-days{font-size:10px;color:var(--muted)}
.fic-days.warn{color:#B89A20}
.fic-days.alert{color:var(--sev-crit)}

/* layout: nav + panel */
.fic-layout{display:flex;flex:1;overflow:hidden}
.fic-nav{width:176px;flex-shrink:0;border-right:1px solid var(--border);overflow-y:auto;background:var(--surface);display:flex;flex-direction:column;padding:8px 0}
.fic-panel{flex:1;overflow-y:auto;min-width:0;padding-bottom:40px}

/* sections */
.fic-section{padding:16px 20px;display:flex;flex-direction:column;gap:14px}
.fic-fields-grid{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px;display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px 16px}
.fic-fields-grid .ficha-field.full{grid-column:1/-1}

/* resumen section */
.fic-resumen-top{display:flex;align-items:stretch;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:2px}
.fic-health-full{display:flex;align-items:center;gap:10px;padding:12px 16px;border-right:1px solid var(--border);flex-shrink:0;min-width:120px}
.fic-health-full.pinfo-health-ok{background:#EDF3EC}
.fic-health-full.pinfo-health-warn{background:#FFF8E1}
.fic-health-full.pinfo-health-alert{background:#FFF0F0}
.fic-health-full-num{font-size:28px;font-weight:700;font-family:var(--font-data);line-height:1}
.pinfo-health-ok .fic-health-full-num{color:#2D6E30}
.pinfo-health-warn .fic-health-full-num{color:#8A6A00}
.pinfo-health-alert .fic-health-full-num{color:var(--sev-crit)}
.fic-health-full-meta{display:flex;flex-direction:column;gap:1px}
.fic-health-full-label{font-size:11px;font-weight:700}
.pinfo-health-ok .fic-health-full-label{color:#2D6E30}
.pinfo-health-warn .fic-health-full-label{color:#8A6A00}
.pinfo-health-alert .fic-health-full-label{color:var(--sev-crit)}
.fic-health-full-sub{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}

/* KPI row inside resumen */
.fic-kpi-row{display:flex;flex:1}
.fic-kpi-cell{flex:1;padding:10px 14px;border-right:1px solid var(--border);text-align:center;display:flex;flex-direction:column;justify-content:center}
.fic-kpi-cell:last-child{border-right:none}
.fic-kpi-val{font-size:14px;font-weight:700;font-family:var(--font-data);line-height:1;margin-bottom:2px;color:var(--text);white-space:nowrap;min-width:0}
.fic-kpi-val.warn{color:#B89A20}
.fic-kpi-val.alert{color:var(--sev-crit)}
.fic-kpi-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}

/* completitud block */
.fic-comp-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px}
.fic-comp-hdr{display:flex;justify-content:space-between;font-size:10px;margin-bottom:6px;color:var(--muted)}
.fic-comp-bar{height:6px;background:var(--border);border-radius:3px;overflow:hidden;margin-bottom:6px}
.fic-comp-fill{height:100%;background:var(--brand);border-radius:3px}
.fic-comp-fill.warn{background:#D4A017}
.fic-comp-fill.alert{background:var(--sev-crit)}
.fic-comp-missing{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
.fic-comp-tag{font-size:9px;padding:2px 6px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--muted)}

/* ─── ENTREGABLES TAB ────────────────────────────────────────────────────────── */
.ent-wrap{display:flex;flex-direction:column;flex:1}
.ent-header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;gap:12px}
.ent-fin-summary{display:flex;align-items:center;gap:0;flex:1;flex-wrap:wrap;gap:12px}
.ent-fin-item{display:flex;flex-direction:column;gap:2px}
.ent-fin-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.ent-fin-val{font-size:13px;font-weight:600}
.ent-fin-sep{width:1px;height:28px;background:var(--border)}
.ent-pay-bar-wrap{display:flex;align-items:center;gap:6px;margin-left:4px}
.ent-pay-bar{width:80px;height:4px;background:var(--border);border-radius:var(--radius);overflow:hidden}
.ent-pay-fill{height:100%;background:var(--green-t);border-radius:var(--radius)}
.ent-list{flex:1;overflow-y:auto;padding:16px 24px;display:flex;flex-direction:column;gap:8px}
.ent-row{background:var(--surface);border:1px solid var(--border);padding:14px 16px;display:flex;align-items:flex-start;gap:14px;transition:border-color .12s}
.ent-row:hover{border-color:var(--text)}
.ent-row-num{font-family:var(--font-data);font-size:11px;color:var(--faint);flex-shrink:0;margin-top:2px;width:20px}
.ent-row-body{flex:1;min-width:0}
.ent-row-top{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.ent-row-name{font-size:13px;font-weight:600;flex:1;min-width:0}
.ent-row-desc{font-size:11px;color:var(--muted);margin-bottom:6px;line-height:1.4}
.ent-row-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ent-row-fecha{font-size:11px;color:var(--muted)}
.ent-row-days{font-size:11px}
.ent-row-valor{font-size:12px;font-weight:500;color:var(--text)}
.ent-row-actions{display:flex;flex-direction:column;align-items:flex-end;gap:5px;flex-shrink:0}
.ent-row-done{font-size:9px;color:var(--green-t);font-weight:700;text-transform:uppercase;letter-spacing:.06em}
.ent-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center;gap:8px;color:var(--muted)}
.ent-empty-icon{font-size:28px;color:var(--faint)}

/* ─── FICHA PAGOS (lista vertical con entregables) ───────────────────────────── */
.ficha-pagos-list{display:flex;flex-direction:column;gap:5px;margin-top:6px}
.ficha-pago-item{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;transition:border-color .12s}
.ficha-pago-item.pago-ok{background:var(--green-bg);border-color:#B8D8B9}
.ficha-pago-hdr{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;gap:8px;flex-wrap:wrap}
.ficha-pago-info{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ficha-pago-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:600}
.ficha-pago-val{font-size:12px;font-weight:600;color:var(--text)}
.ficha-pago-fecha{font-size:9px;color:var(--muted)}
.ficha-pago-footer{display:flex;align-items:center;gap:6px;flex-shrink:0}
.ficha-pago-status{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.ficha-pago-status.ok{color:var(--green-t)}
.ficha-pago-status.ready{color:var(--blue-t)}
.ficha-pago-btn{font-size:9px;background:none;border:1px solid var(--border);padding:3px 7px;cursor:pointer;border-radius:var(--radius);font-family:inherit;color:var(--muted);transition:all .12s;white-space:nowrap}
.ficha-pago-btn.ok{border-color:var(--brand);color:var(--brand)}
.ficha-pago-btn:hover{border-color:var(--text);color:var(--text)}
.ficha-pago-ents{padding:4px 10px 8px;border-top:1px solid var(--border)}
.ficha-pago-item.pago-ok .ficha-pago-ents{border-top-color:#B8D8B9}
.ficha-pago-ent-row{display:flex;align-items:center;gap:6px;padding:2px 0;font-size:11px}
.ficha-pago-ent-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ficha-pago-ent-lbl{font-size:9px;color:var(--muted);white-space:nowrap}
.ficha-pago-no-ents{font-size:10px;color:var(--muted);font-style:italic;padding:4px 10px 8px;border-top:1px solid var(--border)}

/* ─── PAGO GROUPS (pestaña Entregables) ─────────────────────────────────────── */
.ent-groups{display:flex;flex-direction:column;gap:0;padding:16px}
.pago-group{margin-bottom:12px}
.pago-group:last-child{margin-bottom:0}
.pago-group-hdr{display:flex;align-items:center;justify-content:space-between;padding:9px 14px;background:var(--surface);border:1px solid var(--border);border-radius:2px 2px 0 0;gap:10px;flex-wrap:wrap}
.pago-group-hdr-unlinked{background:var(--bg)}
.pago-group-info{display:flex;align-items:center;gap:10px}
.pago-group-label{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--muted)}
.pago-group-monto{font-size:13px;font-weight:600;color:var(--text)}
.pago-group-right{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pago-gs-badge{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;border-radius:var(--radius);white-space:nowrap}
.pago-gs-badge.ok{background:var(--green-bg);color:var(--green-t)}
.pago-gs-badge.ready{background:var(--blue-bg);color:var(--blue-t)}
.pago-gs-badge.pending{background:var(--gray-bg);color:var(--gray-t)}
.pago-group-toggle{font-size:9px;background:none;border:1px solid var(--border);padding:3px 8px;cursor:pointer;border-radius:var(--radius);font-family:inherit;color:var(--muted);transition:all .12s;white-space:nowrap}
.pago-group-toggle.ok{border-color:var(--brand);color:var(--brand)}
.pago-group-toggle:hover{border-color:var(--text);color:var(--text)}
.pago-group-add{font-size:9px;background:none;border:1px solid var(--border);padding:3px 8px;cursor:pointer;border-radius:var(--radius);font-family:inherit;color:var(--muted);transition:all .12s;white-space:nowrap}
.pago-group-add:hover{border-color:var(--text);color:var(--text)}
.pago-group-body{border:1px solid var(--border);border-top:none;border-radius:0 0 2px 2px;overflow:hidden}
.pago-group-body .ent-row{border-bottom:1px solid var(--border)}
.pago-group-body .ent-row:last-child{border-bottom:none}
.pago-group-empty{padding:12px 16px;font-size:11px;color:var(--muted);font-style:italic}

/* ─── FICHA: HERO DATES ──────────────────────────────────────────────────────── */
.ficha-hero-dates{display:flex;align-items:center;gap:8px;margin-bottom:9px;font-size:11px;color:var(--text)}
.ficha-date-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:600}
.ficha-date-sep{color:var(--faint)}

/* ─── FICHA: DOCUMENTOS ──────────────────────────────────────────────────────── */
.ficha-docs-list{display:flex;flex-direction:column;gap:4px;margin-bottom:6px}
.ficha-doc-item{display:flex;align-items:center;gap:8px;padding:6px 8px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);transition:border-color .12s}
.ficha-doc-item:hover{border-color:var(--muted)}
.ficha-doc-name{font-size:11px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);text-decoration:none}
a.ficha-doc-name:hover{text-decoration:underline;color:var(--brand)}
.ficha-docs-empty{font-size:11px;color:var(--muted);margin-bottom:6px}

/* ─── ACTIVIDADES TAB ────────────────────────────────────────────────────────── */
.act-wrap{display:flex;flex-direction:column;flex:1;min-height:0}
.act-header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;gap:12px}
.act-stats{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.act-stat{display:flex;flex-direction:column;gap:2px;min-width:40px}
.act-stat-val{font-size:var(--kpi-val);font-weight:700;font-family:var(--font-data);line-height:1}
.act-stat-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:600}
.act-stat-sep{width:1px;height:28px;background:var(--border);flex-shrink:0}
.act-filters{display:flex;align-items:center;gap:8px;padding:10px 24px;background:var(--bg);border-bottom:1px solid var(--border);flex-shrink:0}
.act-list{flex:1;overflow-y:auto;padding:16px 24px;display:flex;flex-direction:column;gap:6px}
/* act-row legacy helpers (usados por otros contextos) */
.act-row-days{font-size:10px;font-family:var(--font-data);white-space:nowrap}
.act-row-done-date{font-size:10px;color:var(--green-t)}
.act-row-ent{font-size:10px;color:var(--muted);font-style:italic;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}
.act-row-notas{font-size:11px;color:var(--muted);margin-top:5px;padding-top:5px;border-top:1px solid var(--border);line-height:1.4}
.act-row-actions{display:flex;flex-direction:column;align-items:flex-end;gap:5px;flex-shrink:0}
.act-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center;gap:8px;color:var(--muted);flex:1}
.act-empty-icon{font-size:28px;color:var(--faint)}
.act-empty-text{font-size:12px;line-height:1.6;max-width:360px}

/* ─── COMING SOON PLACEHOLDER ────────────────────────────────────────────────── */
.coming-soon{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:40px;text-align:center}
.cs-icon{font-size:32px;color:var(--faint)}
.cs-title{font-size:16px;font-weight:600;color:var(--text)}
.cs-sub{font-size:12px;color:var(--muted);line-height:1.6;max-width:400px}

/* ─── UTILITY TEXT COLORS ────────────────────────────────────────────────────── */
.txt-ok{color:var(--green-t)}
.txt-warn{color:var(--yellow-t)}
.txt-alert{color:var(--red-t)}
.days-ok{color:var(--muted)}
.days-warn{color:var(--yellow-t)}
.days-alert{color:var(--red-t)}

/* ─── LOGIN SCREEN ───────────────────────────────────────────────────────────── */
.login-overlay{
  position:fixed;inset:0;z-index:var(--z-login);display:flex;
  align-items:center;justify-content:center;
  background:#0E0E0E;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='.05'/%3E%3C/svg%3E");
}
.login-card{
  display:flex;width:100%;max-width:1040px;height:620px;
  border-radius:var(--radius);overflow:hidden;
  box-shadow:0 32px 96px rgba(0,0,0,.65);
  margin:20px;
}
.login-panel-left{
  width:420px;flex-shrink:0;background:#111111;
  display:flex;flex-direction:column;padding:48px;
  position:relative;overflow:hidden;
  border-left:3px solid var(--brand);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='.07'/%3E%3C/svg%3E");
}
.login-panel-left::after{
  content:'';position:absolute;bottom:0;right:-40px;
  width:320px;height:320px;
  background:radial-gradient(circle at 70% 90%, rgba(74,155,63,.18) 0%, transparent 60%);
  pointer-events:none;
}
.login-logo{height:80px;width:auto;max-width:240px;object-fit:contain;object-position:left center;margin-bottom:auto}
.login-display{margin-bottom:32px;position:relative;z-index:1}
.login-d-eyebrow{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.2em;color:var(--brand);margin-bottom:14px}
.login-d-title{font-family:var(--font-ui);font-size:52px;font-weight:700;line-height:1.0;color:#ffffff;letter-spacing:-.03em}
.login-d-title span{color:var(--brand)}
.login-d-accent{width:32px;height:3px;background:var(--brand);margin-top:22px;border-radius:1px}
.login-tagline{display:flex;gap:7px;flex-wrap:wrap;position:relative;z-index:1}
.login-tag-pill{
  font-size:10px;font-weight:500;font-family:var(--font-ui);
  color:rgba(255,255,255,.5);padding:4px 11px;
  border-radius:var(--radius);
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.09);
  letter-spacing:.03em;white-space:nowrap;
}
.login-panel-right{flex:1;display:flex;align-items:center;justify-content:center;padding:52px;background:#ffffff}
.login-form-inner{width:100%;max-width:320px}
.login-inst-badge{
  display:inline-flex;align-items:center;gap:7px;
  font-family:var(--font-data);font-size:9px;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--brand);
  padding:4px 10px;border:1px solid rgba(74,155,63,.25);
  border-radius:var(--radius);background:rgba(74,155,63,.06);margin-bottom:28px;
}
.login-inst-badge::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--brand);flex-shrink:0}
.login-form-heading{
  font-family:var(--font-ui);font-size:34px;font-weight:700;
  letter-spacing:-.025em;color:var(--text);position:relative;padding-bottom:14px;margin-bottom:0;
}
.login-form-heading::after{
  content:'';position:absolute;bottom:0;left:0;width:32px;height:2px;background:var(--brand);border-radius:1px;
}
.login-form-sub{font-size:13px;color:var(--muted);margin-bottom:32px;line-height:1.6;margin-top:18px;font-family:var(--font-ui)}
.login-status{font-size:12px;color:var(--muted);margin-top:16px;min-height:18px}
.login-status.err{color:var(--red-t)}
.login-noaccess-msg{font-size:12px;color:var(--red-t);background:var(--red-bg);border:1px solid #F5CACA;padding:10px 14px;border-radius:var(--radius);line-height:1.5}
.login-divider{display:flex;align-items:center;gap:12px;margin:22px 0}
.login-divider::before,.login-divider::after{content:'';flex:1;height:1px;background:var(--border)}
.login-divider-txt{font-size:10px;color:var(--faint);font-family:var(--font-data);letter-spacing:.06em;flex-shrink:0}
.login-offline-block{display:flex;flex-direction:column;gap:8px}
.login-privacy{margin-top:24px;font-size:10.5px;line-height:1.55;color:var(--muted);font-family:var(--font-ui);border-top:1px solid var(--border);padding-top:14px}
.login-privacy a{color:var(--muted);text-decoration:underline}
.login-privacy a:hover{color:var(--text)}

/* ─── NOTIFICACIONES ─────────────────────────────────────────────────────────── */
.hdr-notif{position:relative;display:flex;align-items:center;padding:0 4px;flex-shrink:0}
.notif-btn{background:none;border:none;cursor:pointer;color:var(--muted);padding:6px 8px;border-radius:var(--radius);position:relative;transition:color .12s;line-height:1;display:flex;align-items:center}
.notif-btn:hover{color:var(--text)}
.notif-btn.has-alert{color:var(--red-t)}
.notif-btn.has-warn{color:var(--yellow-t)}
.notif-badge{position:absolute;top:2px;right:2px;min-width:15px;height:15px;border-radius:8px;font-size:8px;font-weight:700;font-family:var(--font-data);display:flex;align-items:center;justify-content:center;padding:0 3px;line-height:1;pointer-events:none}
.notif-badge.alert{background:var(--red-t);color:#fff}
.notif-badge.warn{background:var(--yellow-t);color:#fff}
.notif-panel{position:absolute;top:calc(100% + 6px);right:0;width:380px;max-height:min(560px,80vh);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-md);z-index:1100;display:none;border-radius:var(--radius);flex-direction:column}
.notif-panel.open{display:flex}
.notif-panel-hdr{padding:11px 16px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);border-bottom:1px solid var(--border);flex-shrink:0}
.notif-kpi-row{display:flex;gap:8px;padding:12px 16px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--s2)}
.notif-kpi-chip{flex:1;display:flex;flex-direction:column;align-items:center;padding:10px 6px 8px;border-radius:3px}
.notif-kpi-chip.kc-alert{background:var(--red-bg)}
.notif-kpi-chip.kc-alta {background:var(--orange-bg)}
.notif-kpi-chip.kc-warn {background:var(--yellow-bg)}
.notif-kpi-chip.kc-msg  {background:var(--blue-bg)}
.notif-kpi-chip.kc-ok   {background:var(--green-bg)}
.notif-kpi-num{font-size:26px;font-weight:700;line-height:1;font-family:var(--font-data)}
.notif-kpi-chip.kc-alert .notif-kpi-num{color:var(--red-t)}
.notif-kpi-chip.kc-alta  .notif-kpi-num{color:var(--orange-t)}
.notif-kpi-chip.kc-warn  .notif-kpi-num{color:var(--yellow-t)}
.notif-kpi-chip.kc-msg   .notif-kpi-num{color:var(--blue-t)}
.notif-kpi-chip.kc-ok    .notif-kpi-num{color:var(--green-t)}
.notif-kpi-lbl{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-top:4px}
#notif-list{overflow-y:auto;flex:1;min-height:0}
.notif-dot-alta{background:var(--orange-t)}
.notif-ver-mas{padding:9px 16px;font-size:10px;font-weight:600;color:var(--brand);cursor:pointer;border-bottom:1px solid var(--border);text-align:center}
.notif-ver-mas:hover{background:var(--bg)}
.notif-item{display:flex;align-items:flex-start;gap:10px;padding:10px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .1s}
.notif-item:hover{background:var(--bg)}
.notif-item:last-child{border-bottom:none}
.notif-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;margin-top:3px}
.notif-dot-alert{background:var(--red-t)}
.notif-dot-warn{background:var(--yellow-t)}
.notif-dot-ok{background:var(--green-t)}
.notif-body{flex:1;min-width:0}
.notif-texto{font-size:11px;font-weight:500;line-height:1.4;color:var(--text)}
.notif-proyecto{font-size:9px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.notif-empty{padding:20px 16px;font-size:11px;color:var(--muted);text-align:center}

/* ─── GESTIÓN DOCUMENTAL GLOBAL ─────────────────────────────────────────────── */
#docs-global-content{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
.gdoc-header{padding:16px 24px 12px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--surface)}
.gdoc-title{font-size:15px;font-weight:700;color:var(--text);margin-bottom:10px}
.gdoc-kpi-row{display:flex;gap:24px}
.gdoc-kpi{display:flex;flex-direction:column}
.gdoc-kpi-n{font-size:20px;font-weight:700;font-family:var(--font-data);color:var(--text);line-height:1}
.gdoc-kpi-l{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-top:3px}
.gdoc-filter-bar{display:flex;align-items:center;gap:8px;padding:8px 24px;border-bottom:1px solid var(--border);background:var(--s2);flex-shrink:0;flex-wrap:wrap}
.gdoc-body{flex:1;overflow-y:auto;min-height:0}
.gdoc-proj{border-bottom:1px solid var(--border)}
.gdoc-proj-hdr{display:flex;align-items:center;gap:8px;padding:10px 20px;cursor:pointer;background:var(--surface);transition:background .1s;user-select:none}
.gdoc-proj-hdr:hover{background:var(--bg)}
.gdoc-proj-chevron{font-size:9px;transition:transform .15s;color:var(--muted);flex-shrink:0;display:inline-block}
.gdoc-proj-chevron.open{transform:rotate(90deg)}
.gdoc-proj-nombre{font-size:12px;font-weight:700;color:var(--text);flex:1}
.gdoc-proj-cnt{font-size:10px;color:var(--muted);white-space:nowrap}
.gdoc-proj-body{background:var(--bg);display:none;padding:8px 8px 12px}
.gdoc-proj-body.open{display:block}
/* Árbol de carpetas */
.dtree-root{padding:0}
.dtree-folder{margin:1px 0}
.dtree-folder-hdr{display:flex;align-items:center;gap:6px;padding:5px 8px;border-radius:2px;cursor:default;user-select:none}
.dtree-folder-hdr:hover{background:rgba(0,0,0,.05)}
.dtree-folder-icon{width:14px;height:14px;object-fit:contain;flex-shrink:0;display:inline-block}
.dtree-folder-nombre{font-size:11px;font-weight:600;color:var(--text);flex:1}
.dtree-folder-cnt{font-size:9px;color:var(--muted);margin-right:4px}
.dtree-folder-acts{display:flex;gap:2px;opacity:0;transition:opacity .1s}
.dtree-folder-hdr:hover .dtree-folder-acts{opacity:1}
.dtree-act-btn{background:none;border:none;padding:2px 5px;font-size:10px;color:var(--muted);cursor:pointer;border-radius:2px;font-family:inherit}
.dtree-act-btn:hover{background:var(--border);color:var(--text)}
.dtree-doc{display:flex;align-items:center;gap:8px;padding:4px 8px;border-radius:2px;cursor:pointer}
.dtree-doc:hover{background:rgba(0,0,0,.05)}
.dtree-doc-nombre{flex:1;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.dtree-doc-estado{flex-shrink:0}
.dtree-doc-actions{display:flex;gap:2px;opacity:0;transition:opacity .1s}
.dtree-doc:hover .dtree-doc-actions{opacity:1}
.dtree-empty{font-size:11px;color:var(--muted);padding:8px 16px;font-style:italic}
.dtree-add-row{padding:6px 8px;border-top:1px dashed var(--border);margin-top:4px}
.dtree-add-doc-btn{background:none;border:1px dashed var(--brand);color:var(--brand);border-radius:2px;padding:3px 10px;font-size:10px;font-weight:600;cursor:pointer;font-family:inherit}
.dtree-add-doc-btn:hover{background:var(--green-bg)}
.docv-view-toggle .btn-sm{padding:3px 10px;font-size:10px;border:1px solid var(--border);background:var(--bg);border-radius:2px;cursor:pointer;font-family:inherit;color:var(--muted)}
.docv-view-toggle .btn-sm.active{background:var(--text);color:#fff;border-color:var(--text)}
.docv-view-toggle .btn-sm:hover:not(.active){background:var(--border)}
/* btn-sm fuera de docv-view-toggle (global view toggle, filter bar) */
.btn-sm{padding:3px 10px;font-size:10px;border:1px solid var(--border);background:var(--bg);border-radius:2px;cursor:pointer;font-family:inherit;color:var(--muted)}
.btn-sm.active{background:var(--text);color:#fff;border-color:var(--text)}
.btn-sm:hover:not(.active){background:var(--border)}
/* Botón de acción rojo (eliminar) en árbol */
.dtree-act-del{color:var(--red-t)!important}
.dtree-act-del:hover{background:var(--red-bg)!important;color:var(--red-t)!important}
/* Botones de acción en header de proyecto (global panel) */
.gdoc-proj-act-btn{background:var(--brand);color:#fff;border:none;border-radius:2px;padding:3px 9px;font-size:10px;font-weight:600;cursor:pointer;font-family:inherit;white-space:nowrap}
.gdoc-proj-act-btn:hover{opacity:.85}
/* Toggle archivados en filtro global */
.gdoc-arch-toggle{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);cursor:pointer;white-space:nowrap}
.gdoc-arch-toggle input{cursor:pointer;accent-color:var(--brand)}
/* Botones de vista (lista/iconos) en panel global */
.gdoc-view-btns{display:flex;gap:3px;margin-left:auto}
/* ─── ICON GRID ───────────────────────────────────────────────────────────────── */
.gdoc-icon-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px;padding:4px 2px}
.gdoc-icon-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 10px 10px;background:var(--surface);border:1px solid var(--border);border-radius:4px;cursor:pointer;transition:box-shadow .15s,border-color .15s;overflow:hidden;text-align:center}
.gdoc-icon-card:hover{border-color:var(--brand);box-shadow:var(--shadow-sm)}
.gdoc-icon-card-img{width:40px;height:40px;object-fit:contain;flex-shrink:0}
.gdoc-icon-card-name{font-size:10px;font-weight:600;color:var(--text);line-height:1.3;word-break:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:100%}
.gdoc-icon-card-badge{font-size:8px;margin-top:2px}
.gdoc-icon-card-overlay{position:absolute;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;gap:6px;opacity:0;transition:opacity .15s;border-radius:4px}
.gdoc-icon-card:hover .gdoc-icon-card-overlay{opacity:1}
.gdoc-icon-card-btn{background:rgba(255,255,255,.92);border:none;border-radius:2px;padding:4px 7px;font-size:11px;cursor:pointer;font-family:inherit;color:var(--text)}
.gdoc-icon-card-btn:hover{background:#fff}
.gdoc-icon-card-del{color:var(--red-t)!important}
.gdoc-icon-card-del:hover{background:var(--red-bg)!important}

/* ─── DOCUMENT NAVIGATOR ─────────────────────────────────────────────────────── */
/* Breadcrumb + action bar */
.docnav-hdr{display:flex;align-items:center;gap:8px;padding:10px 20px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0;flex-wrap:wrap}
.docnav-bc{display:flex;align-items:center;gap:6px;flex:1;min-width:0;overflow:hidden}
.docnav-bc-root{font-size:12px;font-weight:700;color:var(--text)}
.docnav-bc-icon{width:16px;height:16px;object-fit:contain;flex-shrink:0;display:inline-block;vertical-align:middle;margin-right:4px}
.docnav-back{background:none;border:none;font-size:12px;font-weight:600;color:var(--brand);cursor:pointer;padding:0;font-family:inherit}
.docnav-back:hover{text-decoration:underline}
.docnav-bc-sep{font-size:12px;color:var(--faint)}
.docnav-bc-current{font-size:12px;font-weight:700;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Action buttons */
.docnav-btn-doc{background:var(--brand);color:#fff;border:none;border-radius:2px;padding:5px 12px;font-size:11px;font-weight:600;cursor:pointer;font-family:inherit;white-space:nowrap;flex-shrink:0}
.docnav-btn-doc:hover{opacity:.85}
.docnav-btn-carp{background:var(--surface);color:var(--brand);border:1px solid var(--brand);border-radius:2px;padding:4px 12px;font-size:11px;font-weight:600;cursor:pointer;font-family:inherit;white-space:nowrap;flex-shrink:0}
.docnav-btn-carp:hover{background:var(--green-bg)}
/* Scrollable content area */
.docnav-scroll{flex:1;overflow-y:auto;min-height:0;display:flex;flex-direction:column}
/* ─── CATEGORY FOLDER CARDS ──────────────────────────────────────────────────── */
.doccat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:14px;padding:20px 24px;flex-shrink:0}
.doccat-card{display:flex;flex-direction:column;gap:8px;padding:16px 14px 12px;background:var(--surface);border:2px solid var(--border);border-radius:6px;cursor:pointer;transition:border-color .15s,box-shadow .15s;user-select:none}
.doccat-card:hover{border-color:var(--brand);box-shadow:var(--shadow-sm)}
.doccat-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:4px}
.doccat-card-icon{width:44px;height:44px;object-fit:contain;flex-shrink:0;display:block}
.doccat-card-acts{display:flex;gap:2px;opacity:0;transition:opacity .1s}
.doccat-card:hover .doccat-card-acts{opacity:1}
.doccat-card-name{font-size:12px;font-weight:700;color:var(--text);line-height:1.3}
.doccat-card-footer{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:2px}
.doccat-card-cnt{font-size:10px;color:var(--muted)}
.doccat-card-proj{border-color:var(--border)}
.doccat-oblig{font-size:9px;font-weight:700;background:var(--green-bg);color:var(--green-t);padding:1px 5px;border-radius:2px}
.doccat-oblig.miss{background:var(--yellow-bg);color:var(--yellow-t)}
/* ─── DOCUMENT CARDS ────────────────────────────────────────────────────────── */
.doccard-icon{width:36px;height:40px;object-fit:contain}
.doccard-badges{display:flex;gap:4px;flex-wrap:wrap;align-items:center;margin-top:2px}
.doccard-badges .badge{font-size:8px;padding:1px 5px}
.doccard-vence{font-size:8px;font-weight:700;padding:1px 5px;border-radius:2px}
.doccard-vence.alert{background:var(--red-bg);color:var(--red-t)}
.doccard-vence.warn{background:var(--yellow-bg);color:var(--yellow-t)}
.doccard-open{font-size:10px;font-weight:600;color:var(--brand);text-decoration:none;margin-left:auto;white-space:nowrap;flex-shrink:0}
.doccard-open:hover{text-decoration:underline}
.doccard-archived{opacity:.55}

/* ─── SUGERENCIAS ─────────────────────────────────────────────────────────────── */
.ficha-sug-bar{background:var(--s2);border-bottom:1px solid var(--border);padding:10px 24px;flex-shrink:0;display:flex;flex-direction:column;gap:5px}
.sug-bar-title{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-bottom:2px}
.sug-item{display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);border-left-width:3px}
.sug-item.sug-alert{border-left-color:var(--red-t);background:var(--red-bg)}
.sug-item.sug-warn{border-left-color:var(--yellow-t);background:var(--yellow-bg)}
.sug-item.sug-ok{border-left-color:var(--green-t);background:var(--green-bg)}
.sug-item.sug-info{border-left-color:var(--faint)}
.sug-icono{font-size:11px;flex-shrink:0;opacity:.65;font-style:normal}
.sug-body{flex:1;min-width:0}
.sug-texto{font-size:11px;line-height:1.4;color:var(--text)}
.sug-btn{font-size:9px;font-weight:600;padding:3px 10px;flex-shrink:0;white-space:nowrap}

/* ─── DOCUMENTOS TAB V2 ──────────────────────────────────────────────────────── */
.docv-wrap{display:flex;flex-direction:column;flex:1;min-height:0}
.docv-top{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;gap:12px}
.docv-summary{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12px}
.docv-stat{color:var(--muted)}
.docv-stat.ok{color:var(--brand)}
.docv-stat.warn{color:var(--yellow-t)}
.docv-stat.muted{color:var(--faint)}
.docv-stat-sep{color:var(--faint)}
.docv-filter-bar{display:flex;align-items:center;gap:12px;padding:8px 24px;background:var(--bg);border-bottom:1px solid var(--border);flex-shrink:0;flex-wrap:wrap}
.docv-filter-select{font-size:11px;padding:5px 8px;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:var(--radius);cursor:pointer;font-family:inherit;outline:none}
.docv-filter-select:focus{border-color:var(--text)}
.docv-archived-toggle{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);cursor:pointer;user-select:none}
.docv-archived-toggle input{cursor:pointer}
.docv-sections{flex:1;overflow-y:auto;display:flex;flex-direction:column}
.docv-section{border-bottom:1px solid var(--border)}
.docv-section:last-child{border-bottom:none}
.docv-section-hd{display:flex;align-items:center;justify-content:space-between;padding:9px 20px;background:var(--s2);border-bottom:1px solid var(--border)}
.docv-section-title{font-size:var(--section-hdr);font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);display:flex;align-items:center;gap:8px}
.docv-section-count{font-size:10px;font-weight:400;color:var(--muted);background:var(--bg);padding:0 6px;border:1px solid var(--border);border-radius:10px}
.docv-empty{padding:20px 24px;font-size:11px;color:var(--muted);font-style:italic;text-align:center}
.docv-empty-global{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 24px;text-align:center;color:var(--text);flex:1}
.docv-row{display:flex;align-items:flex-start;gap:12px;padding:10px 20px;border-bottom:1px solid var(--border);transition:background .1s}
.docv-row:hover{background:var(--s2)}
.docv-row:last-child{border-bottom:none}
.docv-row-archived{opacity:.5}
.docv-row-icon{flex-shrink:0;padding-top:2px}
.docv-file-icon{width:26px;height:26px;object-fit:contain;display:block}
.docv-row-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.docv-row-main{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.docv-row-name{font-size:var(--body-row);font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px}
.docv-row-name-link{cursor:pointer;color:var(--brand)}
.docv-row-name-link:hover{text-decoration:underline}
.docv-row-ver{font-size:10px;color:var(--muted);font-family:var(--font-data);padding:1px 5px;border:1px solid var(--border);border-radius:var(--radius)}
.docv-row-desc{font-size:11px;color:var(--muted);line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:500px}
.docv-row-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.docv-row-date{font-size:10px;color:var(--muted);font-family:var(--font-data)}
.docv-row-resp{font-size:10px;color:var(--muted)}
.docv-row-link{font-size:10px;color:var(--brand);text-decoration:none}
.docv-row-link:hover{text-decoration:underline}
.docv-row-acts{display:flex;gap:2px;flex-shrink:0;align-self:center;margin-left:6px;opacity:0;transition:opacity .15s}
.docv-row:hover .docv-row-acts{opacity:1}
.docv-row-edit,.docv-row-move,.docv-row-del{background:none;border:none;cursor:pointer;color:var(--muted);font-size:13px;padding:4px 6px;border-radius:var(--radius);transition:background .1s,color .1s}
.docv-row-edit:hover,.docv-row-move:hover{background:var(--border);color:var(--text)}
.docv-row-del:hover{background:var(--red-bg);color:var(--red-t)}
/* Dashboard documental */
.doc-dash-hdr{display:flex;align-items:center;gap:16px;padding:12px 20px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;flex-wrap:wrap}
.doc-dash-left{display:flex;flex-direction:column;gap:6px;min-width:160px}
.doc-sem-chip{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;padding:3px 9px;border-radius:var(--radius);display:inline-block;width:fit-content}
.doc-sem-ok{background:var(--green-bg);color:var(--green-t);border:1px solid #c3dfc2}
.doc-sem-warn{background:var(--yellow-bg);color:var(--yellow-t);border:1px solid #e5d87a}
.doc-sem-alert{background:var(--red-bg);color:var(--red-t);border:1px solid #f4b5b5}
.doc-cov-bar-wrap{display:flex;align-items:center;gap:6px}
.doc-cov-bar{flex:1;height:4px;background:var(--border);border-radius:var(--radius);overflow:hidden;min-width:60px}
.doc-cov-fill{height:100%;background:var(--brand);border-radius:var(--radius);transition:width .3s}
.doc-cov-fill.warn{background:var(--yellow-t)}
.doc-cov-fill.alert{background:var(--red-t)}
.doc-cov-pct{font-size:11px;font-weight:700;white-space:nowrap}
.doc-cov-lbl{font-size:10px;color:var(--muted);white-space:nowrap}
.doc-dash-kpis{display:flex;gap:0;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;flex-shrink:0}
.doc-kpi{padding:6px 14px;border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:center;gap:2px;min-width:56px}
.doc-kpi:last-child{border-right:none}
.doc-kpi-n{font-size:var(--kpi-val);font-weight:700;font-family:var(--font-data);line-height:1;color:var(--text)}
.doc-kpi-l{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);white-space:nowrap}
/* Alertas documentales */
.doc-alerts-strip{display:flex;flex-direction:column;gap:0;flex-shrink:0;border-bottom:1px solid var(--border)}
.doc-alert-item{font-size:11px;padding:6px 20px;border-bottom:1px solid var(--border)}
.doc-alert-item:last-child{border-bottom:none}
.doc-alert-alert{background:var(--red-bg);color:var(--red-t)}
.doc-alert-warn{background:var(--yellow-bg);color:var(--yellow-t)}
.doc-pendientes-panel{background:#FFFBEB;border-bottom:2px solid #FCD34D;flex-shrink:0;padding:10px 20px}
.doc-pendientes-hdr{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.doc-pendientes-title{font-size:11px;font-weight:700;color:#92400E;text-transform:uppercase;letter-spacing:.05em}
.doc-pendientes-cnt{font-size:11px;font-weight:700;background:#FCD34D;color:#78350F;border-radius:10px;padding:1px 7px;margin-left:auto}
.doc-pendientes-list{display:flex;flex-direction:column;gap:4px}
.doc-pendientes-item{display:flex;align-items:center;gap:10px;padding:6px 10px;background:#FFF;border:1px solid #FDE68A;border-radius:var(--radius)}
.doc-pendientes-dot{width:7px;height:7px;border-radius:50%;background:#D97706;flex-shrink:0}
.doc-pendientes-info{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}
.doc-pendientes-lbl{font-size:12px;font-weight:600;color:#78350F}
.doc-pendientes-tipo{font-size:10px;color:#92400E;opacity:.75}
.doc-pendientes-btn{font-size:11px;font-weight:600;padding:3px 10px;border:1px solid #D97706;border-radius:var(--radius);background:#FEF3C7;color:#92400E;cursor:pointer;flex-shrink:0}
.doc-pendientes-btn:hover{background:#FDE68A}
.doc-alert-info{background:var(--blue-bg);color:var(--blue-t)}
/* Obligatorios en sección */
.doc-oblig-cnt{font-size:10px;color:var(--brand);font-weight:600}
.doc-oblig-cnt.miss{color:var(--red-t)}
/* Tags en fila */
.doc-tag-oblig{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 5px;border-radius:var(--radius);background:var(--indigo-bg);color:var(--indigo-t);border:1px solid #c5d3f5;white-space:nowrap}
.doc-tag-principal{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 5px;border-radius:var(--radius);background:var(--green-bg);color:var(--green-t);border:1px solid #c3dfc2;white-space:nowrap}
/* Vencimiento en fila */
.docv-row-vence{margin-top:1px}
.doc-vence-tag{font-size:10px;font-weight:600;padding:1px 6px;border-radius:var(--radius);display:inline-block}
.doc-vence-tag.ok{background:var(--green-bg);color:var(--green-t)}
.doc-vence-tag.warn{background:var(--yellow-bg);color:var(--yellow-t)}
.doc-vence-tag.alert{background:var(--red-bg);color:var(--red-t)}
/* Preview overlay */
.doc-preview-modal{display:flex;flex-direction:column;width:90vw;max-width:1100px;height:85vh;background:var(--surface);border-radius:4px;overflow:hidden;box-shadow:var(--shadow-lg);border:1px solid var(--border);animation:modalIn .22s ease}
.doc-preview-hdr{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--bg);border-bottom:1px solid var(--border);flex-shrink:0;gap:12px}
.doc-preview-body{flex:1;overflow:hidden;background:#f0f0ee;display:flex;align-items:center;justify-content:center}

/* ─── GESTIÓN FINANCIERA ──────────────────────────────────────────────────────── */
.fin-wrap{display:flex;flex-direction:column;flex:1;min-height:0}
.fin-kpi-strip{display:grid;grid-template-columns:repeat(4,1fr);border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}
.fin-kpi{padding:12px 16px;border-right:1px solid var(--border);display:flex;flex-direction:column;gap:3px}
.fin-kpi:last-child{border-right:none}
.fin-kpi-val{font-size:var(--kpi-val);font-weight:700;font-family:var(--font-data);line-height:1;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.fin-kpi-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:600;line-height:1.3}
/* Layout principal: columna izquierda fija + columna derecha protagonista */
.fin-layout{display:flex;flex:1;overflow:hidden;min-height:0}
.fin-left{width:248px;min-width:248px;display:flex;flex-direction:column;overflow-y:auto;border-right:1px solid var(--border);background:var(--surface)}
.fin-right{flex:1;display:flex;flex-direction:column;overflow-y:auto;background:var(--surface);min-width:0}
.fin-panel{padding:16px 18px;display:flex;flex-direction:column}
.fin-col-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid var(--border);position:relative;flex-shrink:0}
.fin-col-hdr::after{content:'';position:absolute;bottom:-2px;left:0;width:20px;height:2px;background:var(--brand)}
.fin-sep{height:1px;background:var(--border);margin:14px 0}
/* Rubros */
.fin-rubro-item{background:var(--bg);border:1px solid var(--border);padding:8px 10px;border-radius:var(--radius)}
.fin-rubro-top{display:flex;align-items:center;gap:6px;margin-bottom:4px;flex-wrap:wrap}
.fin-rubro-desc{flex:1;font-size:10px;color:var(--muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fin-rubro-val{font-size:11px;font-weight:600}
.fin-rubro-bar-wrap{display:flex;align-items:center;gap:6px}
.fin-rubro-bar{flex:1;height:3px;background:var(--border);border-radius:var(--radius);overflow:hidden}
.fin-rubro-fill{height:100%;background:var(--brand);border-radius:var(--radius);transition:width .3s}
.fin-rubro-fill.over{background:var(--red-t)}
.fin-total-row{display:flex;justify-content:space-between;align-items:center;font-size:11px;font-weight:700;padding:8px 0 0;border-top:1px solid var(--border);margin-top:4px}
/* Gastos — tabla */
.fin-gasto-table-wrap{overflow-x:auto;margin-bottom:8px}
.fin-gasto-table{width:100%;border-collapse:collapse;font-size:11px;min-width:780px}
.fin-gasto-table thead th{padding:7px 10px;background:var(--bg);border-bottom:2px solid var(--border);font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);white-space:nowrap;text-align:left}
.fin-gasto-table tbody td{padding:7px 10px;border-bottom:1px solid var(--border);vertical-align:middle}
.fin-gasto-table tbody tr.fgt-row:hover td{background:var(--s2)}
.fin-gasto-table tfoot td{padding:8px 10px;font-size:11px;font-weight:700;border-top:2px solid var(--border);background:var(--bg)}
.fgt-footer-lbl{color:var(--muted);text-align:right}
.fgt-nil{color:var(--muted)}

/* Capa 2 · Fase C — Rentabilidad (costo cargado + margen real) */
.txt-neg{color:var(--red-t)}
.fin-rent{border-top:8px solid var(--bg)}
.fin-rent-head{display:flex;align-items:flex-start;gap:16px;padding:16px 20px 10px;border-bottom:1px solid var(--border);flex-shrink:0}
.fin-rent-title{font-size:14px;font-weight:700;font-family:var(--font-display,inherit)}
.fin-rent-help{font-size:11px;color:var(--muted);margin-top:2px;max-width:56ch;line-height:1.4}
.fin-modo-toggle{display:flex;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-left:auto;flex-shrink:0}
.fin-modo-btn{background:none;border:none;padding:5px 12px;font-size:11px;font-weight:600;cursor:pointer;color:var(--muted);white-space:nowrap;transition:background .12s,color .12s}
.fin-modo-btn.on{background:var(--brand);color:#fff}
.fin-modo-btn:not(.on):hover{background:var(--s2)}
.fin-modo-btn:focus-visible{outline:2px solid var(--brand);outline-offset:1px}
.fin-rent-empty{padding:24px 20px;font-size:12px;color:var(--muted);line-height:1.5;max-width:60ch}
.fin-rent-table-wrap{overflow-x:auto;padding:14px 18px 18px}
.fin-rent-modo-badge{font-size:10px;color:var(--muted);margin-bottom:8px}
.fin-rent-modo-badge strong{color:var(--text);font-weight:700}
.fin-rent-oh{color:var(--muted)}
.fin-rent-warn{font-size:9px;color:var(--red-t);font-weight:600;white-space:nowrap}
/* Column widths */
.fgt-fecha{width:78px}
.fgt-cat{width:110px}
.fgt-prov{min-width:130px}
.fgt-desc{min-width:120px;max-width:180px}
.fgt-uds{width:90px;text-align:center}
.fgt-punit{width:90px;text-align:right}
.fgt-total{width:100px;text-align:right;font-weight:700}
.fgt-fp{width:100px}
.fgt-sop{width:56px;text-align:center}
.fgt-acc{width:90px}
/* Cell content */
.fgt-prov-name{font-weight:600;color:var(--text)}
.fgt-prov-id{font-size:9px;color:var(--muted);margin-top:1px;font-family:var(--font-data)}
.fgt-desc-txt{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px;color:var(--muted)}
.fgt-sop-link{color:var(--brand);font-size:13px;text-decoration:none;font-weight:600}
.fgt-sop-link:hover{opacity:.7}
.fgt-actions{display:flex;gap:4px;align-items:center}
.fgt-btn-edit{font-size:10px;padding:3px 8px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);cursor:pointer;font-family:inherit}
.fgt-btn-edit:hover{border-color:var(--brand);color:var(--brand)}
.fgt-btn-del{font-size:12px;padding:2px 6px;border:1px solid transparent;border-radius:var(--radius);background:none;color:var(--muted);cursor:pointer;line-height:1}
.fgt-btn-del:hover{border-color:#FACACA;color:var(--sev-crit);background:var(--red-bg)}
/* Forma de pago chips */
.gasto-fp-chip{display:inline-block;font-size:9px;font-weight:700;padding:2px 7px;border-radius:10px;text-transform:uppercase;letter-spacing:.04em}
.gasto-fp-efectivo{background:#DCFCE7;color:#166534}
.gasto-fp-transferencia{background:#DBEAFE;color:#1E40AF}
.gasto-fp-credito{background:#FEF3C7;color:#92400E}
/* Formulario gastos — layouts auxiliares */
.gf-row-3{display:flex;gap:10px;align-items:flex-end;margin-bottom:10px}
.gf-row-4{display:flex;gap:10px;align-items:flex-end;margin-bottom:10px}
.gf-total-field{background:var(--bg);font-weight:700;color:var(--brand)}
/* Pagos mini (panel izquierdo) */
.fin-pago-mini{background:var(--bg);border:1px solid var(--border);padding:8px 10px;border-radius:var(--radius);margin-bottom:6px}
.fin-pago-mini-hdr{display:flex;align-items:center;gap:6px;margin-bottom:3px}
.fin-pago-mini-lbl{font-size:10px;font-weight:600}
.fin-pago-mini-ents{display:flex;flex-direction:column;gap:3px;margin-top:5px}
.fin-pago-mini-ent{font-size:10px;color:var(--muted);display:flex;align-items:center;gap:5px;overflow:hidden}
.fin-pago-mini-ent span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.fin-pago-mini-actions{display:flex;gap:4px;margin-top:7px}
/* Helpers */
.fin-empty{font-size:11px;color:var(--muted);padding:20px 0;text-align:center;line-height:1.6}
.fin-creditos-list{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.fin-crd-item{background:var(--s2);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;display:flex;flex-direction:column;gap:4px}
.fin-crd-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.fin-crd-desc{font-size:12px;font-weight:600;color:var(--text);flex:1;min-width:0}
.fin-crd-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:11px;color:var(--muted)}
.fin-crd-entidad{font-size:11px;color:var(--muted)}
.fin-crd-venc{font-size:10px;font-family:var(--font-data)}
.fin-crd-notas{font-size:10px;color:var(--muted);font-style:italic}
.fin-rubros,.fin-gastos{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.fin-rubro-actions,.fin-gasto-actions{display:flex;align-items:center;gap:4px;margin-left:auto;flex-shrink:0}
.fin-rubro-nums{display:flex;align-items:baseline;gap:4px;font-size:10px;margin-bottom:4px}
.fin-rubro-sep{color:var(--muted)}
.fin-rubro-pct{margin-left:auto;font-size:10px;font-weight:700;color:var(--muted)}
.fin-rubro-pct.txt-alert{color:var(--red-t)}
.fin-gasto-fecha{font-size:10px;color:var(--muted)}
.fin-gasto-prov{font-weight:600;color:var(--text)}
.fin-gasto-soporte{display:inline-block;font-size:10px;color:var(--brand);text-decoration:none;margin-top:3px}
.fin-gasto-soporte:hover{text-decoration:underline}
.doc-link{color:var(--text);text-decoration:none;font-size:12px;font-weight:500}
.doc-link:hover{color:var(--brand);text-decoration:underline}

/* ─── GRÁFICAS FINANCIERAS ───────────────────────────────────────────────────── */
.fin-charts-strip{display:grid;grid-template-columns:repeat(4,1fr);border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0;overflow:hidden}
.fin-chart-cell{padding:10px 14px;display:flex;flex-direction:column;gap:4px;min-width:0;overflow:hidden;border-right:1px solid var(--border)}
.fin-chart-cell:last-child{border-right:none}
.fin-chart-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);flex-shrink:0}
.fin-chart-canvas-wrap{position:relative;height:120px;overflow:hidden}

/* ─── CRONOGRAMA / GANTT ─────────────────────────────────────────────────────── */
.gnt-wrap{display:flex;flex-direction:column;flex:1;overflow:auto;min-height:0;font-size:11px}
.gnt-header{display:flex;flex-shrink:0;background:var(--surface);border-bottom:2px solid var(--border);position:sticky;top:0;z-index:4}
.gnt-lbl{width:180px;min-width:180px;padding:0 12px;display:flex;align-items:center;gap:6px;overflow:hidden;border-right:1px solid var(--border);flex-shrink:0;position:sticky;left:0;background:var(--surface);z-index:3}
.gnt-lbl-hdr{height:32px;background:var(--s2);z-index:5}
.gnt-lbl-sec{height:24px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:var(--bg)}
.gnt-lbl-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--text);min-width:0}
.gnt-proj-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;color:var(--text)}
.gnt-track{flex:1;position:relative;min-width:var(--gnt-track-min,600px);overflow:hidden;min-height:36px}
.gnt-track-hdr{height:32px;background:var(--s2)}
.gnt-track-sec{height:24px;background:var(--bg)}
.gnt-month{position:absolute;top:0;height:100%;display:flex;align-items:center;padding-left:6px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);border-left:1px solid var(--border);white-space:nowrap;pointer-events:none}
.gnt-today-lbl{position:absolute;top:0;transform:translateX(-50%);font-size:8px;font-weight:700;color:var(--red-t);white-space:nowrap;padding:0 3px;pointer-events:none;line-height:32px}
.gnt-row{display:flex;align-items:center;border-bottom:1px solid var(--border);min-height:32px}
.gnt-row:hover .gnt-track{background:rgba(0,0,0,.015)}
.gnt-row-act{min-height:26px}
.gnt-sec{display:flex;align-items:stretch;border-bottom:1px solid var(--border)}
.gnt-today{position:absolute;top:0;bottom:0;width:1px;background:var(--red-t);opacity:.5;pointer-events:none;z-index:1}
.gnt-bar{position:absolute;top:50%;transform:translateY(-50%);height:16px;border-radius:var(--radius);display:flex;align-items:center;overflow:hidden;transition:opacity .1s}
.gnt-bar:hover{opacity:.85;z-index:2}
.gnt-bar-proj{height:20px;background:var(--brand);opacity:.9}
.gnt-bar-label{font-size:9px;font-weight:600;color:#fff;padding:0 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none}
.gnt-bar-tip{font-size:9px;font-weight:600;color:#fff;padding:0 5px;white-space:nowrap;pointer-events:none}
.gnt-bar-ent{height:14px;opacity:.85}
.gnt-ent-pendiente{background:var(--faint)}
.gnt-ent-en_proceso{background:var(--yellow-t)}
.gnt-ent-entregado{background:#1A6B8A}
.gnt-ent-aprobado,.gnt-ent-pagado{background:var(--brand)}
.gnt-bar-act{height:8px;border-radius:1px;opacity:.8}
.gnt-act-pendiente{background:var(--faint)}
.gnt-act-en_proceso{background:var(--yellow-t)}
.gnt-act-realizada{background:var(--brand)}
.gnt-act-cancelada{background:var(--red-t);opacity:.4}
.gnt-bar-late{outline:1px solid var(--red-t);outline-offset:-1px}
.gnt-ent-nomig{font-size:9px;color:var(--yellow-t);font-weight:600}
.gnt-nobar{position:absolute;left:8px;top:50%;transform:translateY(-50%);font-size:10px;color:var(--muted)}
.gnt-nodata{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--muted);text-align:center;padding:48px}
.gnt-nodata-icon{font-size:36px;color:var(--faint)}
.gnt-nodata-txt{font-size:12px;line-height:1.6}

/* ─── INFORMACIÓN DEL PROYECTO — BLOQUES PINFO ──────────────────────────────── */
.pinfo-header{display:flex;gap:20px;align-items:flex-start;padding:20px 24px 16px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0}
.pinfo-header-main{flex:1;min-width:0}
.pinfo-header-top{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.pinfo-codigo{font-size:10px;font-weight:700;color:var(--brand);font-family:var(--font-data);background:var(--green-bg);padding:2px 7px;border-radius:var(--radius)}
.pinfo-sigla{font-size:10px;font-weight:600;color:var(--muted);background:var(--s2);padding:2px 7px;border-radius:var(--radius);border:1px solid var(--border)}
.pinfo-nombre{font-size:20px;font-weight:700;line-height:1.2;color:var(--text);margin-bottom:8px;letter-spacing:-.01em}
.pinfo-chips{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-bottom:6px}
.pinfo-locked-badge{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:2px 7px;background:var(--gray-bg);color:var(--muted);border-radius:var(--radius)}
.pinfo-sub{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);flex-wrap:wrap;margin-bottom:6px}
.pinfo-sub-sep{color:var(--faint)}
.pinfo-sub-tag{font-size:10px;color:var(--muted)}
.pinfo-dates{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);margin-bottom:8px}
.pinfo-date-arr{color:var(--faint)}
.pinfo-prog-wrap{display:flex;align-items:center;gap:8px}
.pinfo-prog-bar{flex:1;height:4px;background:var(--border);border-radius:var(--radius);overflow:hidden;max-width:200px}
.pinfo-prog-fill{height:100%;background:var(--brand);border-radius:var(--radius);transition:width .3s}
.pinfo-prog-pct{font-size:10px;font-weight:700;font-family:var(--font-data);color:var(--muted)}
.pinfo-header-side{display:flex;flex-direction:column;align-items:flex-end;gap:12px;flex-shrink:0}
.pinfo-kpi-strip{display:flex;align-items:center;gap:4px;padding:10px 14px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius)}
.pinfo-kpi{text-align:center;padding:0 10px}
.pinfo-kpi-val{font-size:13px;font-weight:700;font-family:var(--font-data);line-height:1.2;margin-bottom:2px}
.pinfo-kpi-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.pinfo-kpi-sep{width:1px;height:28px;background:var(--border)}
.pinfo-header-btns{display:flex;gap:7px}
/* Bloques de contenido */
.pinfo-block{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:0}
.pinfo-block-hdr{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;border-bottom:1px solid var(--border);background:var(--s2)}
.pinfo-block-title{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
.pinfo-edit-btn{font-size:10px;font-weight:500;color:var(--brand);background:none;border:none;cursor:pointer;padding:0;font-family:inherit}
.pinfo-edit-btn:hover{text-decoration:underline}
.pinfo-block-body{padding:0}
.pinfo-fields{padding:12px 14px;display:flex;flex-direction:column;gap:9px}
.pinfo-field{display:flex;flex-direction:column;gap:2px}
.pinfo-field-lbl{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.pinfo-field-val{font-size:12px;color:var(--text);line-height:1.5}
.pinfo-field-grid{padding:12px 14px;display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}
.pinfo-text-block{padding:0 14px 12px}
.pinfo-text-lbl{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-bottom:4px}
.pinfo-text-val{font-size:12px;color:var(--text);line-height:1.6;background:var(--bg);padding:8px 10px;border-left:2px solid var(--border);border-radius:1px}
.pinfo-obs-wrap{padding:0 14px 12px;display:flex;flex-direction:column;gap:8px}
.pinfo-tags{padding:0 14px 12px;display:flex;gap:5px;flex-wrap:wrap}
.pinfo-empty{padding:20px 14px;text-align:center;font-size:11px;color:var(--muted);line-height:1.6}
/* Resumen financiero compacto */
.pinfo-fin-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;padding:10px 14px}
.pinfo-fin-card{text-align:center;padding:8px 6px;background:var(--bg);border-radius:var(--radius);border:1px solid var(--border)}
.pinfo-fin-card.ok{background:var(--green-bg);border-color:var(--green-bg)}
.pinfo-fin-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:3px}
.pinfo-fin-val{font-size:11px;font-weight:700;font-family:var(--font-data)}
.pinfo-fin-bar-wrap{padding:0 14px 10px}
.pinfo-fin-bar{height:4px;background:var(--border);border-radius:var(--radius);overflow:hidden}
.pinfo-fin-bar-fill{height:100%;background:var(--brand);border-radius:var(--radius);transition:width .3s}
/* Calendario de pagos compacto */
.pinfo-pagos-list{padding:8px 14px 12px;display:flex;flex-direction:column;gap:5px}
.pinfo-pago-item{display:flex;align-items:center;gap:8px;padding:6px 8px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);font-size:11px;flex-wrap:wrap}
.pinfo-pago-lbl{font-weight:600;color:var(--muted);white-space:nowrap}
.pinfo-pago-val{font-weight:700;font-family:var(--font-data);flex:1;min-width:0}
.pinfo-pago-st{font-size:10px;color:var(--muted)}
.pinfo-pago-st.ok{color:var(--green-t);font-weight:600}
.pinfo-pago-st.ready{color:var(--brand);font-weight:600}
.pinfo-pago-btn{font-size:10px;font-weight:500;padding:3px 8px;border:1px solid var(--border);background:transparent;cursor:pointer;font-family:inherit;border-radius:var(--radius);white-space:nowrap}
.pinfo-pago-btn.ok{border-color:var(--brand);color:var(--brand)}
.pinfo-pago-btn:hover{border-color:var(--text);color:var(--text)}

/* ─── PROJECT FORM BLOCK LAYOUT ─────────────────────────────────────────────── */
.pf-modal{width:min(920px,96vw)}
.pf-block{border-bottom:1px solid var(--border)}
.pf-block-hdr{display:flex;align-items:center;gap:10px;padding:14px 24px 10px;cursor:default}
.pf-block-num{width:22px;height:22px;border-radius:50%;background:var(--brand);color:#fff;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.pf-block-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
.pf-block-body{padding:0 24px 18px}
/* field-grid system */
.field-grid{display:grid;gap:10px 16px;margin-bottom:10px}
.fg-2{grid-template-columns:1fr 1fr}
.fg-3{grid-template-columns:1fr 1fr 1fr}
.fg-4{grid-template-columns:1fr 1fr 1fr 1fr}
.fg-421{grid-template-columns:2fr 1fr 1fr}
.fg-span2{grid-column:span 2}
.fg-span3{grid-column:span 3}
/* tieneContrato radio toggle */
.pf-contrato-toggle{margin-bottom:10px}
.pf-toggle-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:6px}
.pf-toggle-group{display:flex;gap:8px}
.pf-toggle-opt{display:flex;align-items:center;gap:6px;cursor:pointer;font-size:12px;padding:5px 12px;border:1px solid var(--border);border-radius:var(--radius);transition:border-color .12s,background .12s}
.pf-toggle-opt:has(input:checked){border-color:var(--brand);background:var(--green-bg);color:var(--green-t);font-weight:600}
.pf-toggle-opt input{accent-color:var(--brand)}

/* ─── ADMINISTRATIVA FORM / VIEW ─────────────────────────────────────────────── */
.adm-check-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px}
.adm-check-opt{display:flex;align-items:center;gap:8px;cursor:pointer;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius);transition:border-color .12s,background .12s}
.adm-check-opt:has(input:checked){border-color:var(--brand);background:var(--green-bg);color:var(--green-t)}
.adm-check-opt input{accent-color:var(--brand);width:14px;height:14px;flex-shrink:0}
.adm-check-label{font-size:12px;line-height:1.4}
.adm-req-list{padding:10px 14px;display:flex;flex-direction:column;gap:2px}
.adm-req-item{display:flex;align-items:center;gap:8px;font-size:12px;padding:5px 0;border-bottom:1px solid var(--border)}
.adm-req-item:last-child{border-bottom:none}
.adm-req-icon{font-size:12px;width:16px;text-align:center;flex-shrink:0;font-family:var(--font-data)}
.adm-req-item.done{color:var(--green-t)}
.adm-req-item.done .adm-req-icon{color:var(--brand);font-weight:700}
.adm-req-item.pending{color:#8A6A00}
.adm-req-item.pending .adm-req-icon{color:#D4A017}
.adm-req-item.off{color:var(--muted)}
.adm-req-badge-pend{margin-left:auto;font-size:9px;font-weight:700;padding:2px 6px;border-radius:10px;background:#FEF3C7;color:#92400E;border:1px solid #FCD34D}
.adm-alert-list{padding:8px 14px;display:flex;flex-direction:column;gap:4px}
.adm-alert-item{display:flex;align-items:flex-start;gap:8px;font-size:11px;padding:7px 8px;border-radius:var(--radius);line-height:1.5}
.adm-alert-icon{flex-shrink:0;margin-top:1px}
.adm-alert-item.adm-alert-alert{background:var(--red-bg);color:var(--red-t);border:1px solid var(--red-bg)}
.adm-alert-item.adm-alert-warn{background:var(--yellow-bg);color:var(--yellow-t);border:1px solid var(--yellow-bg)}
.adm-alert-item.adm-alert-info{background:var(--bg);color:var(--muted);border:1px solid var(--border)}
.adm-setup-banner{margin:24px;padding:24px;border:2px dashed var(--border);border-radius:4px;text-align:center;background:var(--bg)}
.adm-setup-title{font-size:13px;font-weight:700;color:var(--text);margin-bottom:6px}
.adm-setup-sub{font-size:12px;color:var(--muted);margin-bottom:16px;line-height:1.6}

/* Completitud administrativa */
.adm-comp-chip{display:flex;flex-direction:column;gap:3px}
.adm-comp-bar-wrap{display:flex;align-items:center;gap:6px}
.adm-comp-bar{flex:1;height:4px;background:var(--border);border-radius:3px;overflow:hidden;max-width:260px}
.adm-comp-fill{height:100%;background:var(--brand);border-radius:3px;transition:width .3s}
.adm-comp-pct{font-size:11px;font-weight:600;font-family:var(--font-data);color:var(--text);min-width:28px}
.adm-comp-lbl{font-size:10px;color:var(--muted)}

/* Requisito con fecha inline */
.adm-req-fecha{margin-left:auto;font-size:10px;color:var(--muted);font-family:var(--font-data)}

/* Alert-list fuera del bloque (en header) */
.adm-alert-list.adm-alert-standalone{padding:0 24px 12px}

/* ─── PLANEACIÓN TAB ─────────────────────────────────────────────────────────── */
.pln-wrap{display:flex;flex-direction:column;height:100%;overflow:hidden}
.pln-layout{display:flex;flex:1;overflow:hidden}

/* ── Left nav ── */
.pln-nav{width:192px;flex-shrink:0;border-right:1px solid var(--border);overflow-y:auto;background:var(--surface);display:flex;flex-direction:column;padding:8px 0}
.pln-nav-item{display:flex;align-items:center;gap:9px;padding:8px 16px 8px 13px;cursor:pointer;border-left:2px solid transparent;transition:background .1s;user-select:none}
.pln-nav-item:hover{background:var(--s2)}
.pln-nav-item.on{background:var(--s2);border-left-color:var(--brand)}
.pln-nav-icon{font-size:11px;color:var(--muted);width:14px;text-align:center;flex-shrink:0}
.pln-nav-label{font-size:12px;font-weight:500;color:var(--muted);flex:1;line-height:1}
.pln-nav-item.on .pln-nav-label{color:var(--text);font-weight:600}
.pln-nav-item.on .pln-nav-icon{color:var(--brand)}
.pln-nav-count{font-size:9px;font-family:var(--font-data);color:var(--muted);background:var(--bg);border:1px solid var(--border);padding:1px 5px;border-radius:var(--radius);flex-shrink:0}
.pln-nav-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.pln-nav-dot.ok{background:var(--brand)}
.pln-nav-dot.warn{background:#D4A017}
.pln-nav-dot.miss{background:var(--border)}
.pln-nav-sep{height:1px;background:var(--border);margin:6px 12px}

/* ── Right content panel ── */
.pln-content-panel{flex:1;overflow-y:auto;min-width:0;padding-bottom:40px}
.pln-panel-hdr{display:flex;align-items:center;justify-content:space-between;padding:13px 24px;border-bottom:1px solid var(--border);background:var(--surface);position:sticky;top:0;z-index:1}
.pln-panel-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--text)}
.pln-panel-actions{display:flex;gap:8px;align-items:center}
.pln-empty{padding:28px 24px;font-size:12px;color:var(--muted);font-style:italic;text-align:center}

/* ── Alcance: read / edit ── */
.pln-alcance-view{padding:20px 24px;display:flex;flex-direction:column;gap:18px}
.pln-alc-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 24px}
.pln-alc-field{display:flex;flex-direction:column;gap:5px}
.pln-alc-field.full{grid-column:1/-1}
.pln-alc-label{font-size:9px;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);font-weight:700}
.pln-alc-value{font-size:13px;color:var(--text);line-height:1.6}
.pln-alc-empty{font-size:12px;color:var(--faint);font-style:italic}
.pln-inline-form{padding:16px 24px;display:flex;flex-direction:column;gap:10px}
.pln-inline-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}

/* ── Fases: card grid ── */
.pln-fase-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px;padding:20px 24px}
.pln-fase-card{border:1px solid var(--border);border-radius:var(--radius);border-left:3px solid var(--border);background:var(--surface);padding:14px 14px 12px;display:flex;flex-direction:column;gap:8px;position:relative;transition:box-shadow .12s}
.pln-fase-card:hover{box-shadow:0 2px 8px rgba(0,0,0,.07)}
.pln-fase-card.planificada{border-left-color:#BBBBBB}
.pln-fase-card.en_curso{border-left-color:#D4A017}
.pln-fase-card.completada{border-left-color:var(--brand)}
.pln-fase-card.suspendida{border-left-color:var(--sev-crit)}
.pln-fase-card-hdr{display:flex;align-items:flex-start;gap:8px}
.pln-fase-card-order{font-size:9px;font-family:var(--font-data);font-weight:700;color:#fff;background:var(--muted);width:17px;height:17px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px}
.pln-fase-card.completada .pln-fase-card-order{background:var(--brand)}
.pln-fase-card.en_curso .pln-fase-card-order{background:#D4A017}
.pln-fase-card-name{font-size:12px;font-weight:600;color:var(--text);line-height:1.35;flex:1}
.pln-fase-card-desc{font-size:11px;color:var(--muted);line-height:1.4}
.pln-fase-card-dates{font-size:10px;font-family:var(--font-data);color:var(--muted)}
.pln-fase-card-ftr{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:2px}
.pln-fase-card-edit{position:absolute;top:8px;right:8px;background:none;border:none;cursor:pointer;color:var(--muted);font-size:11px;padding:2px 5px;border-radius:var(--radius);opacity:0;transition:opacity .1s,background .1s}
.pln-fase-card:hover .pln-fase-card-edit{opacity:1}
.pln-fase-card-edit:hover{background:var(--border);color:var(--text)}
.pln-fase-card-move{position:absolute;bottom:8px;right:8px;display:flex;flex-direction:column;gap:1px;opacity:0;transition:opacity .1s}
.pln-fase-card:hover .pln-fase-card-move{opacity:1}
.pln-fase-move-btn{background:none;border:1px solid var(--border);cursor:pointer;color:var(--muted);font-size:8px;padding:1px 4px;border-radius:3px;line-height:1;transition:background .1s,color .1s}
.pln-fase-move-btn:hover:not(:disabled){background:var(--s2);color:var(--text)}
.pln-fase-move-btn:disabled{opacity:.25;cursor:default}
.pln-fase-comp-chip{display:inline-flex;align-items:center;gap:3px;font-size:9px;font-weight:600;color:var(--brand);background:var(--green-bg);padding:2px 7px;border-radius:10px}

/* ── Detalle fase (modal solo lectura) ── */
.plnfd-badges{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:2px}
.plnfd-desc{font-size:12px;color:var(--text2);line-height:1.5;padding:6px 0;border-bottom:1px solid var(--border)}
.plnfd-fields{display:flex;flex-direction:column;gap:6px;padding:4px 0}
.plnfd-row{display:flex;align-items:baseline;gap:8px;font-size:12px}
.plnfd-lbl{font-size:10px;font-weight:600;color:var(--muted);min-width:130px;flex-shrink:0;text-transform:uppercase;letter-spacing:.04em}
.plnfd-val{color:var(--text)}
.plnfd-section-title{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-top:8px;margin-bottom:4px}
.plnfd-comp-list{display:flex;flex-direction:column;gap:4px}
.plnfd-comp-row{display:flex;align-items:center;gap:8px;padding:4px 6px;background:var(--s2);border-radius:4px}
.plnfd-comp-order{font-size:9px;font-weight:700;color:#fff;background:var(--brand);width:16px;height:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;opacity:.8}
.plnfd-comp-name{font-size:11px;font-weight:600;color:var(--text)}
.plnfd-comp-desc{font-size:10px;color:var(--muted);flex:1}

/* ── Fase: formulario componentes ── */
.plnf-comp-toggle-row{padding:10px 0 4px;border-top:1px solid var(--border);margin-top:4px}
.plnf-comp-row{display:flex;align-items:center;gap:7px;padding:5px 0;border-bottom:1px solid var(--border)}
.plnf-comp-row:last-child{border-bottom:none}
.plnf-comp-del{background:none;border:none;cursor:pointer;font-size:12px;padding:2px 5px;border-radius:var(--radius);flex-shrink:0;opacity:.5;transition:opacity .1s}
.plnf-comp-del:hover{opacity:1;background:rgba(220,38,38,.08)}

/* ── Entregables: table ── */
.pln-table-wrap{overflow-x:auto}
.pln-table{width:100%;border-collapse:collapse;font-size:12px}
.pln-table th{text-align:left;font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:700;padding:8px 10px;background:var(--s2);border-bottom:2px solid var(--border);white-space:nowrap}
.pln-table th:first-child{padding-left:24px}
.pln-table th:last-child{padding-right:16px;width:36px}
.pln-table td{padding:9px 10px;border-bottom:1px solid var(--border);vertical-align:middle}
.pln-table td:first-child{padding-left:24px}
.pln-table td:last-child{padding-right:16px}
.pln-table tbody tr:hover{background:var(--s2)}
.pln-table tbody tr:last-child td{border-bottom:none}
.pln-table-name{font-weight:600;color:var(--text);display:block}
.pln-table-sub{font-size:11px;color:var(--muted);margin-top:2px;display:block}
.pln-table-date{font-size:10px;font-family:var(--font-data);color:var(--muted);white-space:nowrap}
.pln-table-grp td{padding:5px 10px 5px 24px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);background:var(--bg);border-bottom:1px solid var(--border)}
.pln-table-edit{background:none;border:none;cursor:pointer;color:var(--muted);font-size:11px;padding:2px 5px;border-radius:var(--radius);transition:background .1s,color .1s;font-family:inherit}
.pln-table-edit:hover{background:var(--border);color:var(--text)}
.pln-table-del{background:none;border:none;cursor:pointer;color:var(--muted);font-size:11px;padding:2px 5px;border-radius:var(--radius);transition:color .1s;font-family:inherit}
.pln-table-del:hover{color:#B02020}
.pln-tag-oblig{font-size:9px;font-weight:700;padding:2px 5px;background:#FDE8E8;color:var(--sev-crit);border-radius:var(--radius);text-transform:uppercase;letter-spacing:.04em;flex-shrink:0}

/* ── Hitos: vertical timeline ── */
.pln-timeline{padding:20px 24px;display:flex;flex-direction:column}
.pln-tl-item{display:flex;gap:14px}
.pln-tl-marker{display:flex;flex-direction:column;align-items:center;width:68px;min-width:68px;flex-shrink:0}
.pln-tl-date{font-size:9px;font-family:var(--font-data);color:var(--muted);text-align:center;line-height:1.3;white-space:normal;padding-top:2px;width:100%;overflow:hidden;word-break:break-word}
.pln-tl-dot{width:10px;height:10px;border-radius:50%;background:var(--muted);margin:6px 0;flex-shrink:0;border:2px solid var(--surface);box-shadow:0 0 0 1px var(--border)}
.pln-tl-dot.ok{background:var(--brand);box-shadow:0 0 0 1px var(--brand)}
.pln-tl-dot.alert{background:var(--sev-crit);box-shadow:0 0 0 1px var(--sev-crit)}
.pln-tl-line{flex:1;width:1px;background:var(--border);min-height:16px;margin:0 auto}
.pln-tl-item:last-child .pln-tl-line{display:none}
.pln-tl-content{flex:1;padding-bottom:22px;min-width:0}
.pln-tl-name{font-size:12px;font-weight:600;color:var(--text);line-height:1.35}
.pln-tl-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:5px}
.pln-tl-sub{font-size:11px;color:var(--muted);margin-top:4px}
.pln-tl-edit{background:none;border:none;cursor:pointer;color:var(--muted);font-size:11px;padding:2px 5px;border-radius:var(--radius);transition:background .1s,color .1s;font-family:inherit}
.pln-tl-edit:hover{background:var(--border);color:var(--text)}
.pln-tl-del{background:none;border:none;cursor:pointer;color:var(--faint);font-size:11px;padding:2px 4px;border-radius:var(--radius);transition:color .1s;font-family:inherit}
.pln-tl-del:hover{color:#B02020}

/* ── Contexto: rows grouped ── */
.pln-ctx-group{margin-bottom:0}
.pln-ctx-group-hd{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);padding:9px 24px 6px;background:var(--bg);border-bottom:1px solid var(--border);border-top:1px solid var(--border)}
.pln-ctx-group:first-child .pln-ctx-group-hd{border-top:none}
.pln-row{display:flex;flex-direction:column;gap:4px;padding:10px 24px;border-bottom:1px solid var(--border);transition:background .1s}
.pln-row:last-child{border-bottom:none}
.pln-row:hover{background:var(--s2)}
.pln-row-main{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pln-row-name{font-size:12px;font-weight:500;color:var(--text);flex:1;min-width:0}
.pln-row-sub{font-size:11px;color:var(--muted)}
.pln-row-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pln-row-date{font-size:10px;color:var(--muted);font-family:var(--font-data)}
.pln-row-edit{background:none;border:none;cursor:pointer;color:var(--muted);font-size:12px;padding:2px 5px;border-radius:var(--radius);transition:background .1s,color .1s;flex-shrink:0;opacity:0}
.pln-row:hover .pln-row-edit{opacity:1}
.pln-row-edit:hover{background:var(--border);color:var(--text)}

/* ── Marco temporal ── */
.pln-marco-dates{display:flex;gap:24px;flex-wrap:wrap;padding:16px 24px;border-bottom:1px solid var(--border)}
.pln-marco-date-item{display:flex;flex-direction:column;gap:3px}
.pln-marco-date-label{font-size:9px;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);font-weight:700}
.pln-marco-date-val{font-size:13px;font-weight:600;color:var(--text);font-family:var(--font-data)}

/* ── Historial ── */
.pln-hist-row{display:flex;gap:12px;padding:9px 24px;border-bottom:1px solid var(--border);font-size:11px}
.pln-hist-row:last-child{border-bottom:none}
.pln-hist-date{font-family:var(--font-data);font-size:10px;color:var(--muted);min-width:80px;flex-shrink:0}
.pln-hist-tipo{color:var(--muted);flex-shrink:0;min-width:120px}
.pln-hist-desc{color:var(--text);flex:1;min-width:0}

/* ─── PLANEACIÓN: DASHBOARD HEADER ──────────────────────────────────────────── */
.pln-dash-hdr{display:flex;align-items:center;gap:16px;padding:12px 20px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;flex-wrap:wrap}
.pln-dash-left{display:flex;align-items:center;gap:12px;flex-shrink:0}
.pln-sem-chip{font-size:10px;font-weight:700;padding:3px 9px;border-radius:var(--radius);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}
.pln-sem-ok{background:var(--green-bg);color:var(--green-t)}
.pln-sem-warn{background:var(--yellow-bg);color:var(--yellow-t)}
.pln-sem-alert{background:var(--red-bg);color:var(--red-t)}
.pln-madurez-bar-wrap{display:flex;align-items:center;gap:6px}
.pln-madurez-bar{width:90px;height:5px;background:var(--border);border-radius:3px;overflow:hidden;flex-shrink:0}
.pln-madurez-fill{height:100%;background:var(--brand);border-radius:3px;transition:width .3s}
.pln-madurez-fill.warn{background:#D4A017}
.pln-madurez-fill.alert{background:var(--sev-crit)}
.pln-madurez-pct{font-size:11px;font-family:var(--font-data);font-weight:700;color:var(--text)}
.pln-madurez-lbl{font-size:10px;color:var(--muted)}
.pln-dash-kpis{display:flex;gap:0;border-left:1px solid var(--border);padding-left:16px;flex-wrap:wrap}
.pln-kpi{display:flex;flex-direction:column;align-items:center;padding:4px 12px;border-right:1px solid var(--border)}
.pln-kpi:last-child{border-right:none}
.pln-kpi-n{font-size:var(--kpi-val);font-weight:700;font-family:var(--font-data);color:var(--text);line-height:1.1}
.pln-kpi-miss{color:var(--muted)}
.pln-kpi-l{font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:600}
.pln-alerts-strip{display:flex;flex-direction:column;border-bottom:1px solid var(--border);flex-shrink:0}
.pln-alert-item{padding:6px 20px;font-size:11px;border-bottom:1px solid rgba(0,0,0,.05)}
.pln-alert-item:last-child{border-bottom:none}
.pln-alert-alert{background:var(--red-bg);color:var(--red-t)}
.pln-alert-warn{background:var(--yellow-bg);color:var(--yellow-t)}
.pln-alert-info{background:var(--blue-bg);color:var(--blue-t)}

/* ─── PINFO ENHANCEMENTS: HEALTH · COMPLETITUD · NAV · CHANGELOG ────────────── */

/* Health score chip */
.pinfo-health-block{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.pinfo-health-chip{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:4px;border:1px solid var(--border)}
.pinfo-health-chip.pinfo-health-ok   {background:#EDF3EC;border-color:#4A9B3F}
.pinfo-health-chip.pinfo-health-warn {background:#FFF8E1;border-color:#B89A20}
.pinfo-health-chip.pinfo-health-alert{background:#FFF0F0;border-color:var(--sev-crit)}
.pinfo-health-score{font-size:26px;font-weight:700;font-family:var(--font-data);line-height:1;min-width:32px;text-align:center}
.pinfo-health-ok   .pinfo-health-score{color:#2D6E30}
.pinfo-health-warn .pinfo-health-score{color:#8A6A00}
.pinfo-health-alert .pinfo-health-score{color:var(--sev-crit)}
.pinfo-health-meta{display:flex;flex-direction:column;gap:2px}
.pinfo-health-label{font-size:12px;font-weight:600;color:var(--text)}
.pinfo-health-sublabel{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}

/* Completitud bar */
.pinfo-completitud{display:flex;flex-direction:column;gap:3px}
.pinfo-completitud-bar-wrap{display:flex;align-items:center;gap:6px}
.pinfo-completitud-bar{flex:1;height:5px;background:var(--border);border-radius:3px;overflow:hidden}
.pinfo-completitud-fill{height:100%;background:var(--brand);border-radius:3px;transition:width .3s}
.pinfo-completitud-pct{font-size:11px;font-weight:600;font-family:var(--font-data);color:var(--text);min-width:28px;text-align:right}
.pinfo-completitud-lbl{font-size:10px;color:var(--muted)}

/* Smart nav grid */
.pinfo-nav-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:0;border:1px solid var(--border);border-radius:4px;overflow:hidden;margin-bottom:14px}
.pinfo-nav-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;padding:12px 8px 10px;background:var(--surface);border:none;border-right:1px solid var(--border);cursor:pointer;transition:background .12s;text-align:center}
.pinfo-nav-card:last-child{border-right:none}
.pinfo-nav-card:hover{background:var(--s2)}
.pinfo-nav-card.pinfo-nav-alert{background:#FFF5F5}
.pinfo-nav-card.pinfo-nav-alert:hover{background:#FFECEC}
.pinfo-nav-card.pinfo-nav-warn{background:#FFFBE6}
.pinfo-nav-card.pinfo-nav-warn:hover{background:#FFF6D0}
.pinfo-nav-icon{font-size:16px;color:var(--brand);line-height:1}
.pinfo-nav-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.pinfo-nav-kpi{font-size:11px;font-weight:600;color:var(--text);font-family:var(--font-data)}
.pinfo-nav-dot{position:absolute;top:6px;right:8px;width:6px;height:6px;border-radius:50%;background:var(--sev-crit)}
.pinfo-nav-dot.warn{background:var(--sev-med)}

/* ─── PDASH: PANEL DE ALERTAS DEL PROYECTO ───────────────────────────────── */
.pdash-alerts-panel{flex-shrink:0;border-bottom:1px solid var(--border)}
.pdash-alerts-hdr{
  display:flex;align-items:center;gap:8px;padding:7px 24px;
  background:var(--s2);border-bottom:1px solid var(--border);
  font-size:10px;
}
.pdash-alerts-ttl{font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.pdash-alerts-cnt{font-size:9px;font-weight:700;padding:1px 6px;border-radius:8px;line-height:16px;white-space:nowrap}
.pdash-badge-crit{background:var(--sev-crit);color:#fff}
.pdash-badge-alta{background:var(--sev-alta);color:#fff}
.pdash-badge-med {background:var(--sev-med);color:#fff}
.pdash-alerts-sev-note{font-size:10px;color:var(--muted)}
.pdash-alerts-body{display:flex;flex-direction:column}
.pdash-alerts-more{
  padding:6px 24px;font-size:11px;color:var(--brand);cursor:pointer;
  border-top:1px solid var(--border);font-weight:500;
  background:var(--bg);transition:background .1s;
}
.pdash-alerts-more:hover{background:var(--s2)}
.pdash-alerts-extra{flex-direction:column}
.pdash-alt-st{font-size:9px;color:var(--muted);font-style:italic;white-space:nowrap}

/* Badge de alerta en header del proyecto */
.pdash-alert-count-badge{
  font-size:10px;font-weight:600;padding:3px 10px;border-radius:var(--radius);
  margin-top:4px;display:inline-block;width:fit-content;
}
.pdash-alert-count-badge.crit{background:var(--red-bg);color:var(--red-t);border:1px solid #f4b5b5}
.pdash-alert-count-badge.alta{background:var(--orange-bg);color:var(--orange-t);border:1px solid #f4c09a}
.pdash-alert-count-badge.med {background:var(--yellow-bg);color:var(--yellow-t);border:1px solid #e5d87a}

/* Classification change log */
.pinfo-changelog{margin-top:10px}
.pinfo-changelog-toggle{background:none;border:none;cursor:pointer;font-size:11px;font-weight:600;color:var(--muted);padding:0;text-align:left;transition:color .1s}
.pinfo-changelog-toggle:hover{color:var(--text)}
.pinfo-changelog-body{margin-top:6px;border:1px solid var(--border);border-radius:3px;overflow:hidden}
.pinfo-changelog-row{display:flex;align-items:baseline;gap:8px;padding:6px 10px;border-bottom:1px solid var(--border);font-size:11px;flex-wrap:wrap}
.pinfo-changelog-row:last-child{border-bottom:none}
.pinfo-changelog-date{font-family:var(--font-data);font-size:10px;color:var(--muted);min-width:72px;flex-shrink:0}
.pinfo-changelog-campo{font-weight:600;color:var(--text);min-width:80px;flex-shrink:0}
.pinfo-changelog-arrow{color:var(--muted)}
.pinfo-changelog-vals{flex:1;color:var(--text)}
.pinfo-changelog-vals em{color:var(--muted);font-style:normal;text-decoration:line-through}
.pinfo-changelog-vals strong{color:var(--brand)}
.pinfo-changelog-actor{font-size:10px;color:var(--muted);flex-shrink:0}

/* Responsive: nav grid collapses to 3 cols */
@media(max-width:900px){
  .pinfo-nav-grid{grid-template-columns:repeat(3,1fr)}
  .pinfo-nav-card:nth-child(3){border-right:none}
  .pinfo-nav-card:nth-child(4){border-top:1px solid var(--border)}
}

/* ─── EQUIPO Y ACTORES ───────────────────────────────────────────────────────── */
.equipo-view{display:flex;flex-direction:column;gap:0}
.eq-header-card{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;border-bottom:1px solid var(--border);background:var(--surface)}
.eq-header-inner{display:flex;align-items:center;gap:10px}
.eq-header-dot{width:10px;height:10px;border-radius:50%;background:var(--brand);flex-shrink:0}
.eq-header-info{}
.eq-header-label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);line-height:1}
.eq-header-name{font-size:13px;font-weight:600;color:var(--text);margin-top:2px}
.eq-header-lider{font-weight:400;color:var(--muted)}
.eq-sections-wrap{display:grid;grid-template-columns:1fr 1fr}
.eq-section{border-right:1px solid var(--border)}
.eq-section:last-child{border-right:none}
.eq-section-hd{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;border-bottom:1px solid var(--border);background:var(--s2)}
.eq-section-title{font-size:var(--section-hdr);font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.btn-add-sm{font-size:11px;font-weight:500;color:var(--brand);background:none;border:1px solid currentColor;border-radius:var(--radius);padding:3px 8px;cursor:pointer;transition:background .12s,color .12s}
.btn-add-sm:hover{background:var(--brand);color:#fff;border-color:var(--brand)}
.eq-empty{padding:20px;font-size:12px;color:var(--muted);text-align:center;font-style:italic}
.eq-row{display:flex;flex-direction:column;gap:3px;padding:10px 20px;border-bottom:1px solid var(--border);transition:background .1s}
.eq-row:hover{background:var(--s2)}
.eq-row:last-child{border-bottom:none}
.eq-row-muted{opacity:.6}
.eq-row-main{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.eq-row-name{font-size:var(--body-row);font-weight:600;color:var(--text)}
.eq-row-rol{font-size:11px;color:var(--muted)}
.eq-row-area{font-size:10px;color:var(--muted);padding:1px 5px;border:1px solid var(--border);border-radius:var(--radius)}
.eq-row-tipo{font-size:10px;font-weight:500;color:var(--indigo-t);background:var(--indigo-bg);padding:1px 6px;border-radius:var(--radius)}
.eq-row-sub{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:11px;color:var(--muted)}
.eq-row-ctc{color:var(--muted)}
.eq-row-date{font-size:10px;color:var(--muted);font-family:var(--font-data)}
.eq-row-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.eq-row-edit{background:none;border:1px solid var(--border);cursor:pointer;color:var(--muted);font-size:11px;font-family:inherit;padding:3px 10px;border-radius:3px;transition:background .1s,color .1s,border-color .1s}
.eq-row-edit:hover{background:var(--border);color:var(--text);border-color:var(--muted)}
.eq-row-del{background:none;border:1px solid transparent;cursor:pointer;color:var(--muted);font-size:11px;font-family:inherit;padding:3px 10px;border-radius:3px;transition:background .1s,color .1s,border-color .1s}
.eq-row-del:hover{background:var(--red-bg);color:var(--red-t);border-color:var(--red-bg)}

/* ─── EQUIPO REDISEÑADO ───────────────────────────────────────────────────────── */

/* Dashboard header */
.eq-dashboard{display:flex;align-items:flex-start;gap:16px;padding:16px 24px;border-bottom:1px solid var(--border);background:var(--surface)}
.eq-dash-resp{flex:1;min-width:0}
.eq-dash-resp-label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:3px}
.eq-resp-name{font-size:14px;font-weight:700;color:var(--text)}
.eq-resp-sub{font-size:11px;color:var(--muted);margin-top:1px}
.eq-resp-vac{color:var(--muted);font-weight:400;font-style:italic}
.eq-dash-right{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex-shrink:0}

/* Cobertura chip */
.eq-cov-chip{display:flex;flex-direction:column;align-items:center;padding:6px 12px;border-radius:6px;border:1px solid var(--border);min-width:70px}
.eq-cov-ok{background:var(--green-bg);border-color:var(--green-t)}
.eq-cov-warn{background:#FFF8E1;border-color:#B89A20}
.eq-cov-alert{background:var(--red-bg);border-color:var(--sev-crit)}
.eq-cov-pct{font-size:18px;font-weight:800;font-family:var(--font-data);line-height:1}
.eq-cov-ok .eq-cov-pct{color:var(--green-t)}
.eq-cov-warn .eq-cov-pct{color:#B89A20}
.eq-cov-alert .eq-cov-pct{color:var(--sev-crit)}
.eq-cov-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-top:1px}

/* Stats row */
.eq-stats-row{display:flex;gap:10px}
.eq-stat{display:flex;flex-direction:column;align-items:center}
.eq-stat-n{font-size:15px;font-weight:700;font-family:var(--font-data);color:var(--text);line-height:1}
.eq-stat-l{font-size:9px;color:var(--muted);text-align:center}

/* Cobertura checks strip */
.eq-cov-checks{display:flex;flex-wrap:wrap;gap:6px;padding:8px 24px;border-bottom:1px solid var(--border);background:var(--s2)}
.eq-cov-check{display:flex;align-items:center;gap:4px;font-size:10px;padding:2px 7px;border-radius:10px;border:1px solid var(--border);background:var(--surface)}
.eq-cov-check.ok{color:var(--green-t);border-color:var(--green-t);background:var(--green-bg)}
.eq-cov-check.miss-crit{color:var(--sev-crit);border-color:var(--sev-crit);background:var(--red-bg)}
.eq-cov-check.miss{color:var(--muted)}

/* Alerts strip */
.eq-alerts-strip{padding:6px 24px;border-bottom:1px solid var(--border)}

/* Filter bar */
.eq-filter-bar{display:flex;gap:0;padding:0 24px;border-bottom:2px solid var(--border);background:var(--surface)}
.eq-filter-btn{background:none;border:none;border-bottom:2px solid transparent;padding:8px 12px;font-size:11px;font-weight:500;color:var(--muted);cursor:pointer;margin-bottom:-2px;transition:color .1s,border-color .1s}
.eq-filter-btn.on{color:var(--brand);border-bottom-color:var(--brand)}
.eq-filter-btn:hover:not(.on){color:var(--text)}

/* Row expanded */
.eq-row-top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.eq-row-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}
.eq-row-meta2{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:2px}
.eq-row-cargo{font-size:11px;color:var(--muted)}
.eq-row-dedicacion{font-size:10px;font-weight:600;font-family:var(--font-data);color:var(--brand);background:var(--s2);padding:1px 5px;border-radius:3px}
.eq-row-vencida{background:var(--red-bg)}
.eq-row-venc-label{font-size:10px;color:var(--sev-crit);font-weight:500;margin-top:2px}

/* Responsable badge */
.eq-resp-badge{font-size:9px;font-weight:700;color:var(--brand);background:color-mix(in srgb,var(--brand) 12%,transparent);padding:1px 6px;border-radius:10px;border:1px solid color-mix(in srgb,var(--brand) 30%,transparent);white-space:nowrap}

/* Función tags */
.eq-row-funcs{display:flex;gap:4px;flex-wrap:wrap;margin-top:3px}
.eq-func-tag{font-size:9px;font-weight:600;padding:1px 6px;border-radius:3px;text-transform:uppercase;letter-spacing:.04em}
.eq-func-aprueba{color:#1A5A8A;background:#E6F0FF}
.eq-func-supervisa{color:#6A3A8A;background:#F0E8FF}
.eq-func-ejecuta{color:#2D6E30;background:#EDF3EC}
.eq-func-principal{color:var(--brand);background:color-mix(in srgb,var(--brand) 10%,transparent)}
.eq-func-acceso{color:#8A4A10;background:#FFF0E6}

/* Form: checkboxes de equipo */
.eq-check-row{padding:4px 0}
.eq-checks-group{display:flex;flex-direction:column;gap:8px}
.eq-check-label{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:var(--text);cursor:pointer;line-height:1.4}
.eq-check-label input[type="checkbox"]{margin-top:1px;accent-color:var(--brand)}

/* ─── EJECUCIÓN: DASHBOARD HEADER ───────────────────────────────────────────── */
.ejc-dash-hdr{display:flex;align-items:stretch;gap:0;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;flex-wrap:wrap}
/* Tile de avance (izquierda) */
.ejc-dash-avance{display:flex;flex-direction:column;justify-content:center;gap:8px;padding:14px 20px;border-right:1px solid var(--border);min-width:220px}
.ejc-dash-avance-top{display:flex;align-items:center;gap:10px}
.ejc-sem-chip{font-size:10px;font-weight:700;padding:3px 9px;border-radius:var(--radius);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}
.ejc-sem-ok{background:var(--green-bg);color:var(--green-t)}
.ejc-sem-warn{background:var(--yellow-bg);color:var(--yellow-t)}
.ejc-sem-alert{background:var(--red-bg);color:var(--red-t)}
.ejc-avance-wrap{display:flex;align-items:center;gap:10px}
.ejc-avance-bar{position:relative;width:140px;height:10px;background:var(--border);border-radius:5px;overflow:hidden;flex-shrink:0}
.ejc-avance-esp-fill{position:absolute;top:0;left:0;height:100%;background:rgba(0,0,0,.1);border-radius:5px}
.ejc-avance-real-fill{position:absolute;top:0;left:0;height:100%;background:var(--brand);border-radius:5px;transition:width .3s}
.ejc-avance-real-fill.warn{background:#D4A017}
.ejc-avance-real-fill.alert{background:var(--sev-crit)}
.ejc-avance-nums{display:flex;flex-direction:column;gap:1px}
.ejc-avance-pct{font-size:18px;font-weight:700;font-family:var(--font-data);color:var(--text);line-height:1}
.ejc-avance-pct.warn{color:#8A6A00}
.ejc-avance-pct.alert{color:var(--sev-crit)}
.ejc-avance-plan{font-size:10px;color:var(--muted)}
/* Tiles de KPI (derecha) */
.ejc-dash-tiles{display:flex;flex:1;flex-wrap:wrap}
.ejc-kpi-tile{display:flex;flex-direction:column;justify-content:center;padding:10px 18px;border-right:1px solid var(--border);min-width:130px;flex:1}
.ejc-kpi-tile:last-child{border-right:none}
.ejc-kpi-tile-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:700;margin-bottom:4px}
.ejc-kpi-tile-val{font-size:17px;font-weight:700;font-family:var(--font-data);color:var(--text);line-height:1.1}
.ejc-kpi-tile-val.ok{color:#2D6E30}
.ejc-kpi-tile-val.warn{color:#8A6A00}
.ejc-kpi-tile-val.alert{color:var(--sev-crit)}
.ejc-kpi-tile-val.miss{color:var(--muted);font-weight:400;font-size:12px}
.ejc-kpi-tile-sub{font-size:10px;color:var(--muted);margin-top:2px;line-height:1.3}
.ejc-kpi-tile-sub .alert{color:var(--sev-crit);font-weight:600}
.ejc-kpi-tile-sub .warn{color:#8A6A00;font-weight:600}
/* Mantener clases legacy para compatibilidad con otros usos */
.ejc-dash-left{display:flex;align-items:center;gap:12px;flex-shrink:0}
.ejc-dash-kpis{display:flex;gap:0;flex-wrap:wrap}
.ejc-kpi{display:flex;flex-direction:column;align-items:center;padding:4px 12px;border-right:1px solid var(--border)}
.ejc-kpi:last-child{border-right:none}
.ejc-kpi-n{font-size:var(--kpi-val);font-weight:700;font-family:var(--font-data);color:var(--text);line-height:1.1}
.ejc-kpi-l{font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:600}
.ejc-kpi-miss{color:var(--muted)}
.ejc-kpi-ok{color:#2D6E30}
.ejc-kpi-warn{color:#8A6A00}
.ejc-kpi-alert{color:var(--sev-crit)}
.ejc-alerts-strip{display:flex;flex-direction:column;border-bottom:1px solid var(--border);flex-shrink:0}
.ejc-alert-item{padding:6px 20px;font-size:11px;border-bottom:1px solid rgba(0,0,0,.05)}
.ejc-alert-item:last-child{border-bottom:none}
.ejc-alert-alert{background:var(--red-bg);color:var(--red-t)}
.ejc-alert-warn{background:var(--yellow-bg);color:var(--yellow-t)}
.ejc-alert-info{background:var(--blue-bg);color:var(--blue-t)}
.ejc-wrap{display:flex;flex-direction:column;height:100%;overflow:hidden}
.ejc-layout{display:flex;flex:1;overflow:hidden}
.ejc-nav{width:180px;flex-shrink:0;border-right:1px solid var(--border);overflow-y:auto;background:var(--surface);display:flex;flex-direction:column;padding:8px 0}
.ejc-nav-item{display:flex;align-items:center;gap:9px;padding:8px 16px 8px 13px;cursor:pointer;border-left:2px solid transparent;transition:background .1s;user-select:none}
.ejc-nav-item:hover{background:var(--s2)}
.ejc-nav-item.on{background:var(--s2);border-left-color:var(--brand)}
.ejc-nav-icon{font-size:11px;color:var(--muted);width:14px;text-align:center;flex-shrink:0}
.ejc-nav-label{font-size:12px;font-weight:500;color:var(--muted);flex:1;line-height:1}
.ejc-nav-item.on .ejc-nav-label{color:var(--text);font-weight:600}
.ejc-nav-item.on .ejc-nav-icon{color:var(--brand)}
.ejc-nav-count{font-size:9px;font-family:var(--font-data);color:var(--muted);background:var(--bg);border:1px solid var(--border);padding:1px 5px;border-radius:var(--radius);flex-shrink:0}
.ejc-nav-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.ejc-nav-dot.ok{background:var(--brand)}
.ejc-nav-dot.warn{background:#D4A017}
.ejc-nav-dot.alert{background:var(--sev-crit)}
.ejc-nav-dot.miss{background:var(--border)}
.ejc-nav-sep{height:1px;background:var(--border);margin:6px 12px}
.ejc-content-panel{flex:1;overflow-y:auto;min-width:0;padding-bottom:40px}
.ejc-acts-fase-group{border-bottom:1px solid var(--border)}
.ejc-acts-fase-group-hdr{padding:8px 16px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);background:var(--s2);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ejc-fase-grp-collapsible{cursor:pointer;user-select:none;transition:background .12s}
.ejc-fase-grp-collapsible:hover{background:var(--s3)}
.ejc-fase-grp-toggle{background:none;border:none;cursor:pointer;font-size:10px;color:var(--muted);padding:0 2px;border-radius:3px;line-height:1;flex-shrink:0;transition:color .12s}
.ejc-fase-grp-toggle:hover{color:var(--text)}
.ejc-fase-grp-toggle.open{color:var(--brand,#2D6E30)}
.ejc-comp-group{border-bottom:1px solid var(--border);background:var(--surface)}
.ejc-comp-group:last-child{border-bottom:none}
.ejc-comp-group-hdr{padding:6px 16px 6px 28px;display:flex;align-items:center;gap:7px;background:var(--surface);border-bottom:1px solid var(--border)}
.ejc-comp-grp-order{font-size:8px;font-weight:700;color:#fff;background:var(--brand);width:14px;height:14px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;opacity:.7}
.ejc-comp-grp-name{font-size:10px;font-weight:600;color:var(--text);letter-spacing:.02em}
.ejc-comp-grp-desc{font-size:10px;color:var(--muted);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ejc-comp-group .ejc-act-inline-list{padding-left:28px}
.ejc-comp-group .ejc-act-inline-empty{padding-left:44px;font-size:11px;color:var(--faint);padding-top:5px;padding-bottom:5px}
.ejc-fase-grp-name{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.ejc-fase-grp-meta{display:flex;align-items:center;gap:5px;margin-left:4px}
.ejc-fase-avance-lbl{font-size:9px;font-family:var(--font-data);color:var(--text);font-weight:600}
.ejc-acts-all-body{display:flex;flex-direction:column}
.ejc-ctx-panel{margin:16px 16px 8px;border:1px solid var(--border);border-radius:var(--radius);background:var(--s2);overflow:hidden}
.ejc-ctx-hdr{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;border-bottom:1px solid var(--border);background:var(--surface)}
.ejc-ctx-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.ejc-ctx-group{padding:4px 0}
.ejc-ctx-group-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--faint);padding:6px 14px 2px}
.ejc-ctx-item{display:flex;align-items:center;gap:8px;padding:5px 14px;font-size:11px;border-bottom:1px solid var(--border)}
.ejc-ctx-item:last-child{border-bottom:none}
.ejc-ctx-item.ejc-ctx-late{background:rgba(220,38,38,.04)}
.ejc-ctx-icon{flex-shrink:0;color:var(--muted);font-size:10px}
.ejc-ctx-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.ejc-ctx-date{font-size:10px;font-family:var(--font-data);color:var(--muted);white-space:nowrap}
.ejc-ctx-late .ejc-ctx-date{color:var(--red-t);font-weight:600}
.ejc-section{border-bottom:1px solid var(--border)}
.ejc-section-hdr{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;background:var(--s2)}
.ejc-section-title{font-size:var(--section-hdr);font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.07em}
.ejc-cnt{font-size:11px;font-weight:400;color:var(--muted);text-transform:none;letter-spacing:0;margin-left:4px}
.ejc-empty{padding:16px 20px;font-size:12px;color:var(--muted);font-style:italic}
.ejc-fases-table{width:100%;border-collapse:collapse;font-size:12px}
.ejc-fases-table th{padding:7px 12px;text-align:left;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border-bottom:1px solid var(--border);background:var(--s2)}
.ejc-fases-table td{padding:8px 12px;border-bottom:1px solid var(--border);vertical-align:middle}
.ejc-fases-table tr:last-child td{border-bottom:none}
.ejc-fases-table tr.ejc-row-late td{background:#FFF5F5}
.ejc-mini-bar-wrap{display:flex;align-items:center;gap:6px}
.ejc-mini-bar{width:60px;height:5px;background:var(--border);border-radius:3px;overflow:hidden;flex-shrink:0}
.ejc-mini-fill{height:100%;background:var(--brand);border-radius:3px}
.ejc-mini-fill.ok{background:#4A9B3F}
.ejc-mini-fill.alert{background:var(--sev-crit)}
.ejc-mini-pct{font-size:11px;font-family:var(--font-data);color:var(--text)}
.ejc-tag-late{font-size:9px;font-weight:700;padding:2px 5px;background:#FDE8E8;color:var(--sev-crit);border-radius:var(--radius);text-transform:uppercase;letter-spacing:.04em}
.ejc-corte-list{display:flex;flex-direction:column;gap:0}
.ejc-corte-card{padding:12px 20px;border-bottom:1px solid var(--border)}
.ejc-corte-card:last-child{border-bottom:none}
.ejc-corte-hdr{display:flex;align-items:center;gap:10px;margin-bottom:4px;flex-wrap:wrap}
.ejc-corte-fecha{font-size:11px;font-family:var(--font-data);font-weight:600;color:var(--text);min-width:100px}
.ejc-corte-tipo{font-size:10px;padding:2px 6px;background:var(--s2);border:1px solid var(--border);border-radius:var(--radius);color:var(--muted)}
.ejc-corte-pct{font-size:12px;font-weight:700;font-family:var(--font-data);color:var(--brand)}
.ejc-corte-resp{font-size:11px;color:var(--muted);flex:1}
.ejc-corte-actions{display:flex;gap:4px;margin-left:auto}
.ejc-corte-resumen{font-size:12px;color:var(--text);margin-bottom:4px}
.ejc-corte-block{font-size:11px;color:var(--muted);margin-top:2px}
.ejc-corte-block-lbl{font-weight:600;color:var(--text)}
.ejc-nov-list{display:flex;flex-direction:column;gap:0}
.ejc-nov-row{display:flex;flex-direction:column;gap:4px;padding:10px 20px;border-bottom:1px solid var(--border)}
.ejc-nov-row:last-child{border-bottom:none}
.ejc-nov-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ejc-nov-fecha{font-size:11px;font-family:var(--font-data);color:var(--muted);min-width:100px}
.ejc-nov-tipo{font-size:10px;padding:2px 6px;background:var(--s2);border:1px solid var(--border);border-radius:var(--radius);color:var(--muted)}
.ejc-nov-desc{font-size:12px;color:var(--text)}
.ejc-nov-impact{font-size:11px;color:var(--muted)}
.ejc-nov-impact-lbl{font-weight:600;color:var(--text)}
.ejc-nov-actions{display:flex;gap:4px;margin-top:2px}
.ejc-comp-ok{color:#2D6E30;font-weight:600}
.ejc-comp-warn{color:#8A6A00;font-weight:600}
.ejc-comp-alert{color:var(--sev-crit);font-weight:600}

/* ─── SIDEBAR NAV ─────────────────────────────────────────────────────────────── */
.sb-nav{display:flex;flex-direction:column;gap:2px;padding:10px 10px 8px;border-bottom:1px solid var(--border);flex-shrink:0}
.sb-nav-btn{width:100%;display:flex;align-items:center;gap:9px;padding:8px 10px 8px 9px;border-radius:6px;border:none;border-left:3px solid transparent;background:transparent;font-size:12px;font-weight:500;color:var(--muted);cursor:pointer;transition:background .12s,color .12s,border-color .12s;position:relative;text-align:left;font-family:inherit;line-height:1}
.sb-nav-btn:hover{background:var(--s2);color:var(--text)}
.sb-nav-btn:hover svg{opacity:.8}
.sb-nav-btn.on{background:var(--green-bg);color:var(--brand);border-left-color:var(--brand);font-weight:600}
.sb-nav-btn.on svg{opacity:1;color:var(--brand)}
.sb-nav-btn svg{flex-shrink:0;opacity:.45;transition:opacity .12s}
.sb-nav-lbl{flex:1;white-space:nowrap}
.sb-nav-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--sev-crit);color:#fff;font-size:8px;font-weight:700;line-height:1;pointer-events:none;flex-shrink:0}
.sb-projects-hdr{padding:10px 14px 2px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--faint);flex-shrink:0}

/* ── Grupos colapsables del nav (reutiliza .sb-label: 9px/700 uppercase, --muted) ── */
.sb-group-hdr{width:100%;padding:9px 10px 5px;margin-bottom:0;background:none;border:none;cursor:pointer;font-family:inherit;gap:6px}
.sb-group-hdr:hover{color:var(--text)}
.sb-group-hdr:focus-visible{outline:2px solid var(--brand);outline-offset:-2px;border-radius:4px}
.sb-group-name{flex:1;text-align:left}
.sb-group-chevron{flex-shrink:0;opacity:.45;transition:transform .15s ease,opacity .12s}
.sb-group-hdr:hover .sb-group-chevron{opacity:.7}
.sb-group-hdr[aria-expanded="false"] .sb-group-chevron{transform:rotate(-90deg)}
.sb-group-badge{margin-left:2px}
/* contenedor colapsable: solo animar max-height/opacity, sin ease-in */
.sb-group{display:flex;flex-direction:column;gap:2px;overflow:hidden;max-height:600px;opacity:1;transition:max-height .18s ease,opacity .18s ease}
.sb-group.sb-group-collapsed{max-height:0;opacity:0;pointer-events:none}
@media (prefers-reduced-motion: reduce){
  .sb-group-chevron{transition:none}
  .sb-group{transition:none}
}

/* ─── EQUIPO PORTAFOLIO ──────────────────────────────────────────────────────── */
.eqp-kpi-bar{display:flex;align-items:center;gap:0;padding:16px 24px;background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap;gap:8px}
.eqp-kpi{display:flex;flex-direction:column;align-items:center;padding:0 20px}
.eqp-kpi-n{font-size:var(--kpi-val);font-weight:700;color:var(--text);line-height:1.1}
.eqp-kpi-l{font-size:11px;color:var(--muted);margin-top:2px;white-space:nowrap}
.eqp-kpi-ok{color:#2D6E30}
.eqp-sep{width:1px;height:36px;background:var(--border);flex-shrink:0}
.eqp-kpi-actions{margin-left:auto;display:flex;align-items:center;gap:8px}

.eqp-toolbar{display:flex;gap:8px;padding:12px 24px;border-bottom:1px solid var(--border);background:var(--surface)}
.eqp-toolbar .search-input{flex:1;min-width:0}
.eqp-toolbar .filter-select{width:180px;flex-shrink:0}

.eqp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;padding:20px 24px}
.eqp-empty{padding:40px 24px;color:var(--muted);font-size:13px;text-align:center}

.eqp-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:box-shadow .15s}
.eqp-card:hover{box-shadow:0 2px 8px rgba(0,0,0,.08)}

.eqp-card-main{display:flex;align-items:flex-start;gap:12px}
.eqp-card-avatar{width:40px;height:40px;border-radius:50%;color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0;letter-spacing:.02em;text-shadow:0 1px 2px rgba(0,0,0,.25)}
.eqp-card-info{flex:1;min-width:0}
.eqp-card-name{font-size:14px;font-weight:600;color:var(--text);line-height:1.2}
.eqp-card-cargo{font-size:12px;color:var(--text);margin-top:1px}
.eqp-card-area{font-size:11px;color:var(--muted);margin-top:2px}
.eqp-card-contact{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px}
.eqp-contact-item{font-size:11px;color:var(--muted)}

.eqp-card-proyectos{display:flex;flex-wrap:wrap;gap:5px;min-height:22px}
.eqp-card-actions{display:flex;gap:6px;padding-top:10px;border-top:1px solid var(--border);margin-top:4px}
.eqp-rol-badge{display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:600;padding:2px 8px;border-radius:10px;margin-top:4px;width:fit-content;letter-spacing:.01em}
.prs-acceso-section{border-top:1px solid var(--border);padding-top:14px;margin-top:8px;display:flex;flex-direction:column;gap:10px}
.prs-acceso-header{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.prs-acceso-radios{display:flex;gap:20px}
.prs-radio-lbl{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text);cursor:pointer}
.prs-acceso-block{display:flex;flex-direction:column;gap:8px;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:12px}
.prs-acceso-hint{font-size:11px;color:var(--muted);line-height:1.5}
.eqp-proy-badge{font-size:11px;padding:2px 8px;border-radius:10px;background:#E8F0FE;color:#2A4D8A;border:1px solid #C5D4F5;cursor:pointer;white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis;transition:background .12s}
.eqp-proy-badge:hover{background:#C5D4F5}
.eqp-proy-none{font-size:11px;color:var(--muted);font-style:italic}
.eq-row-contact{display:flex;flex-wrap:wrap;gap:8px;margin-top:3px}
.eq-row-dato{font-size:11px;color:var(--muted)}
.pf-block-hint{font-size:10px;color:var(--muted);font-weight:400;margin-left:auto}

/* ─── Bloque financiero del miembro (asignación y costo) ─────────────────────── */
.eqm-dedic-note{font-size:11px;color:var(--muted);line-height:1.5}
.eqm-field-hint{display:block;font-size:10px;color:var(--muted);margin-top:3px;line-height:1.4}
.eqm-money{margin-top:14px;border:1px solid var(--border);border-left:3px solid var(--text);
  border-radius:4px;padding:14px;background:var(--bg)}
.eqm-money-hdr{display:flex;align-items:center;gap:6px;font-size:10px;font-weight:600;
  text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:12px}
.eqm-lock{filter:grayscale(1);opacity:.75;font-size:11px}
.eqm-costo-preview{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-top:12px;
  padding-top:12px;border-top:1px dashed var(--border)}
.eqm-costo-lbl{font-size:11px;color:var(--muted)}
.eqm-costo-val{font-size:20px;font-weight:600;color:var(--text);line-height:1}
.eqm-costo-estado{font-size:10px;font-weight:600;padding:2px 8px;border-radius:3px;
  text-transform:uppercase;letter-spacing:.03em}
.eqm-costo-estado.imputado{background:#E7F1E9;color:#1F6B3B;border:1px solid #C3E0CB}
.eqm-costo-estado.pendiente{background:#FBEFD6;color:#8A5A00;border:1px solid #F0D9A8}
/* Agregado del proyecto (lo ve el PM: solo el total, sin desglose por persona) */
.eqm-agg{margin:0 0 14px;border:1px solid var(--border);border-radius:6px;
  padding:14px 16px;background:var(--bg);display:flex;flex-direction:column;gap:10px}
.eqm-agg-hdr{display:flex;align-items:center;justify-content:space-between;gap:10px}
.eqm-agg-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.eqm-agg-total{font-size:24px;font-weight:600;color:var(--text);line-height:1;font-variant-numeric:tabular-nums}
.eqm-agg-total .eqm-agg-cur{font-size:13px;color:var(--muted);font-weight:500;margin-left:4px}
.eqm-agg-sub{font-size:11px;color:var(--muted);line-height:1.5}
.eqm-agg-pend{color:#8A5A00}
/* Desglose por persona: SOLO Dir/Fin */
.eqm-brk{border-top:1px solid var(--border);padding-top:10px;display:flex;flex-direction:column;gap:6px}
.eqm-brk-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:12px}
.eqm-brk-name{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.eqm-brk-meta{font-size:10px;color:var(--muted);margin-left:6px}
.eqm-brk-val{font-variant-numeric:tabular-nums;color:var(--text);white-space:nowrap}
.eqm-brk-val.pend{color:#8A5A00;font-style:italic}

/* ─── PAGOS PROGRAMADOS (PARTIDAS) · Fase B ─────────────────────────────────── */
.eqm-partidas{margin-top:14px;padding-top:14px;border-top:1px dashed var(--border)}
.eqm-part-hd{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}
.eqm-part-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.eqm-part-tag{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}
.eqm-part-note{font-size:10px;color:var(--muted);line-height:1.5;margin-bottom:8px}
.eqm-part-warn{color:#8A5A00}
.eqm-part-empty{font-size:11px;color:var(--muted);line-height:1.5;padding:8px 0}
.eqm-part-list{display:flex;flex-direction:column;gap:5px;margin-bottom:8px}
.eqm-part-row{display:grid;grid-template-columns:auto 96px 1fr auto;align-items:center;gap:8px}
.eqm-part-row.manual{grid-template-columns:auto 1fr 1.4fr auto auto}
.eqm-part-row.pagada .eqm-part-fecha,.eqm-part-row.pagada .eqm-part-val-inp{opacity:.6}
.eqm-part-n{font-size:10px;color:var(--faint);font-variant-numeric:tabular-nums;width:16px;text-align:right}
.eqm-part-fecha{font-size:12px;color:var(--text);white-space:nowrap}
.eqm-part-val-inp{font-size:12px;padding:5px 8px;height:auto}
.eqm-part-fecha-inp,.eqm-part-ent-sel{font-size:12px;padding:5px 8px;height:auto}
.eqm-part-estado{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;
  padding:2px 7px;border-radius:3px;white-space:nowrap;justify-self:end}
.eqm-part-estado.prog{background:var(--s2);color:var(--muted);border:1px solid var(--border)}
.eqm-part-estado.pagada{background:#E7F1E9;color:#1F6B3B;border:1px solid #C3E0CB}
.eqm-part-estado.libera{background:#FBEFD6;color:#8A5A00;border:1px solid #F0D9A8}
.eqm-part-del{background:none;border:none;color:var(--faint);font-size:16px;line-height:1;cursor:pointer;
  padding:0 4px;border-radius:3px;transition:color .12s,background .12s}
.eqm-part-del:hover{color:#B4231F;background:#F7E9E8}
.eqm-part-del:focus-visible{outline:2px solid var(--text);outline-offset:1px}
.eqm-part-add{background:none;border:1px dashed var(--border);color:var(--text);font-family:inherit;
  font-size:11px;font-weight:500;padding:6px 12px;border-radius:var(--radius);cursor:pointer;transition:border-color .12s}
.eqm-part-add:hover{border-color:var(--text)}
.eqm-part-add:focus-visible{outline:2px solid var(--text);outline-offset:1px}
.eqm-part-cuadre{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-top:10px;padding-top:10px;
  border-top:1px dashed var(--border);font-size:12px}
.eqm-part-cuadre-lbl{font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.eqm-part-cuadre-val{font-variant-numeric:tabular-nums;color:var(--text);font-weight:600}
.eqm-part-cuadre-sep{font-size:10px;color:var(--muted)}
.eqm-part-cuadre-badge{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;
  padding:2px 7px;border-radius:3px;margin-left:auto}
.eqm-part-cuadre-badge.ok{background:#E7F1E9;color:#1F6B3B;border:1px solid #C3E0CB}
.eqm-part-cuadre-badge.warn{background:#FBEFD6;color:#8A5A00;border:1px solid #F0D9A8}

/* ─── ABONOS / ADELANTOS + SALDO PENDIENTE · Fase B · 🔒 Dir/Fin ─────────────── */
.eqm-abonos{margin-top:14px;padding-top:14px;border-top:1px dashed var(--border)}
.eqm-abono-list{display:flex;flex-direction:column;gap:5px;margin-bottom:8px}
.eqm-abono-row{display:grid;grid-template-columns:150px 128px 1fr auto;align-items:center;gap:8px}
.eqm-abono-fecha-inp,.eqm-abono-val-inp,.eqm-abono-nota-inp{font-size:12px;padding:5px 8px;height:auto}
.eqm-saldo{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-top:12px;padding:10px 12px;
  border:1px solid var(--border);border-left:3px solid var(--text);border-radius:4px;background:var(--s2)}
.eqm-saldo-lbl{font-size:10px;text-transform:uppercase;letter-spacing:.05em;font-weight:600;color:var(--muted)}
.eqm-saldo-val{font-size:20px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;line-height:1}
.eqm-saldo-hint{font-size:10px;color:var(--muted);flex-basis:100%}
.eqm-saldo.liq{border-left-color:#1F6B3B}
.eqm-saldo.liq .eqm-saldo-val{color:#1F6B3B}
.eqm-saldo.over{border-left-color:#B4231F}
.eqm-saldo.over .eqm-saldo-val{color:#B4231F}

/* ─── FLUJO DE CAJA ESPERADO (EGRESOS) · Finanzas · 🔒 Dir/Fin ──────────────── */
.fin-flujo{margin:14px 0;border:1px solid var(--border);border-left:3px solid var(--text);
  border-radius:4px;padding:16px;background:var(--surface)}
.fin-flujo-hd{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:4px}
.fin-flujo-title{font-size:12px;font-weight:600;color:var(--text)}
.fin-flujo-lock{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.fin-flujo-sub{font-size:11px;color:var(--muted);line-height:1.5;margin-bottom:14px}
.fin-flujo-empty{font-size:12px;color:var(--muted);padding:6px 0}
.fin-flujo-strip{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.fin-flujo-kpi{display:flex;flex-direction:column;gap:2px}
.fin-flujo-kpi-val{font-size:20px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;line-height:1}
.fin-flujo-kpi-lbl{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.fin-flujo-timeline{display:flex;flex-direction:column}
.fin-flujo-mes{border-top:1px solid var(--border);padding:10px 0}
.fin-flujo-mes:last-child{border-bottom:1px solid var(--border)}
.fin-flujo-mes-hd{display:flex;align-items:baseline;gap:10px}
.fin-flujo-mes-lbl{font-size:12px;font-weight:600;color:var(--text);text-transform:capitalize;min-width:96px}
.fin-flujo-mes-bar-wrap{flex:1;max-width:340px;height:8px;background:var(--s2);border:1px solid var(--border);
  border-radius:4px;overflow:hidden;align-self:center}
.fin-flujo-mes-bar{height:100%;min-width:3px;background:var(--text);border-radius:4px}
.fin-flujo-mes-tot{font-size:13px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap}
.fin-flujo-mes-n{font-size:10px;color:var(--muted);white-space:nowrap}
.fin-flujo-det{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}
.fin-flujo-det-row{display:grid;grid-template-columns:76px 1fr auto auto;align-items:baseline;gap:10px;
  font-size:12px;padding-left:106px}
.fin-flujo-det-fecha{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.fin-flujo-det-quien{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fin-flujo-det-quien .fin-flujo-det-ent{display:block;font-size:10px;color:var(--muted)}
.fin-flujo-det-val{font-variant-numeric:tabular-nums;color:var(--text);white-space:nowrap}
.fin-flujo-det-badge{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;
  padding:1px 6px;border-radius:3px;white-space:nowrap}
.fin-flujo-det-badge.prog{background:var(--s2);color:var(--muted);border:1px solid var(--border)}
.fin-flujo-det-badge.pagada{background:#E7F1E9;color:#1F6B3B;border:1px solid #C3E0CB}
.fin-flujo-det-badge.libera{background:#FBEFD6;color:#8A5A00;border:1px solid #F0D9A8}
.fin-flujo-det-badge.abono{background:#EDE9F7;color:#4A3D8A;border:1px solid #D6CEE8}
.fin-flujo-det-prov{display:inline-block;font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;
  color:var(--muted);border:1px solid var(--border);border-radius:3px;padding:0 5px;margin-left:6px;vertical-align:middle}

/* ─── COMPROMISOS CON PROVEEDORES · Finanzas · 🔒 Dir/Fin ───────────────────── */
.fin-cmp-list{display:flex;flex-direction:column;border-top:1px solid var(--border)}
.fin-cmp-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:11px 0;border-bottom:1px solid var(--border)}
.fin-cmp-main{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;min-width:180px;flex:1}
.fin-cmp-name{font-size:13px;font-weight:600;color:var(--text)}
.fin-cmp-doc{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}
.fin-cmp-mod{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}
.fin-cmp-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.fin-cmp-val{font-size:13px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}
.fin-cmp-chip{font-size:10px;color:var(--muted);border:1px solid var(--border);border-radius:3px;padding:1px 7px;white-space:nowrap}
.fin-cmp-saldo{display:flex;align-items:baseline;gap:6px;padding:2px 9px;border:1px solid var(--border);
  border-left:2px solid var(--text);border-radius:3px;background:var(--s2)}
.fin-cmp-saldo-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.fin-cmp-saldo .mono{font-size:13px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}
.fin-cmp-saldo.liq{border-left-color:#1F6B3B}
.fin-cmp-saldo.liq .mono{color:#1F6B3B}
.fin-cmp-saldo.over{border-left-color:#B4231F}
.fin-cmp-saldo.over .mono{color:#B4231F}
.fin-cmp-actions{display:flex;gap:6px;align-items:center}

/* ─── RESPONSIVE ─────────────────────────────────────────────────────────────── */
@media(max-width:900px){
  .login-card{height:auto;min-height:560px}
  .login-panel-left{width:280px;padding:36px}
  .login-logo{height:56px}
  .login-d-title{font-size:36px}
  .eq-sections-wrap{grid-template-columns:1fr}
  .eq-section{border-right:none;border-bottom:1px solid var(--border)}
  .eq-section:last-child{border-bottom:none}
  .ficha-grid{grid-template-columns:1fr}
  .ficha-col:first-child{border-right:none;border-bottom:1px solid var(--border)}
  .ficha-kpi-strip{grid-template-columns:repeat(3,1fr)}
  .fin-kpi-strip{grid-template-columns:repeat(3,1fr)}
  .fin-kpi:nth-child(3){border-right:none}
  .fin-kpi:nth-child(4){border-top:1px solid var(--border)}
  .fin-grid{grid-template-columns:1fr}
  .fin-col:first-child{border-right:none;border-bottom:1px solid var(--border)}
  .ficha-kpi:nth-child(3){border-right:none}
  .ficha-kpi:nth-child(4){border-top:1px solid var(--border)}
  .ficha-hero-name{font-size:18px}
  .dash-body{grid-template-columns:1fr}
  .dash-upcoming{display:none}
}
@media(max-width:640px){
  .login-card{height:100%;border-radius:0;margin:0}
  .login-panel-left{display:none}
  .login-panel-right{padding:36px}

  /* Partidas (alta 🔒) — a 360px la fila se apila para caber */
  .eqm-part-row,.eqm-part-row.manual{grid-template-columns:1fr auto;grid-auto-rows:min-content;
    row-gap:6px;column-gap:8px;align-items:center}
  .eqm-part-n{grid-column:1;justify-self:start;width:auto}
  .eqm-part-estado{grid-column:2;grid-row:1}
  .eqm-part-val-inp{grid-column:1 / -1}
  .eqm-part-fecha,.eqm-part-fecha-inp,.eqm-part-ent-sel{grid-column:1 / -1}
  .eqm-part-del{grid-column:2;grid-row:1;justify-self:end}
  .eqm-part-row.manual .eqm-part-del{grid-row:1}

  /* Flujo de caja — timeline sin indent y detalle apilado */
  .fin-flujo{padding:14px}
  .fin-flujo-strip{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}
  .fin-flujo-kpi-val{font-size:18px}
  .fin-flujo-mes-hd{flex-wrap:wrap}
  .fin-flujo-mes-lbl{min-width:0;flex:1 0 auto}
  .fin-flujo-mes-bar-wrap{order:3;flex-basis:100%;max-width:none;margin-top:4px}
  .fin-flujo-det-row{grid-template-columns:1fr auto;padding-left:0;column-gap:8px;row-gap:2px}
  .fin-flujo-det-fecha{grid-column:1 / -1;order:-1}
  .fin-flujo-det-badge{grid-column:2}

  /* Hamburguesa + drawer izquierdo (H7) */
  .hdr-menu-btn{display:flex;align-items:center}
  .hdr-brand-appname,.hdr-vdiv,.hdr-context,.hdr-date{display:none}
  .hdr-logo{height:30px}
  .sidebar{
    position:fixed;top:0;left:0;bottom:0;height:100%;width:84%;max-width:320px;
    z-index:1101;transform:translateX(-100%);transition:transform .25s ease;
    display:flex;box-shadow:var(--shadow-lg);
  }
  .sidebar.open{transform:translateX(0)}
  /* El drawer entero hace scroll como una sola columna (nav + filtros + proyectos).
     padding-bottom con safe-area: que los últimos proyectos y las acciones no
     queden tapados por la barra inferior de Safari / el home indicator. */
  .sidebar{overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:calc(env(safe-area-inset-bottom, 0px) + 80px)}
  .sidebar .proj-list{flex:none;overflow:visible}
  .sb-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.42);z-index:1100;opacity:0;pointer-events:none;transition:opacity .25s}
  .sb-backdrop.open{opacity:1;pointer-events:auto}

  /* Reflow de grids densos */
  .ficha-kpi-strip{grid-template-columns:repeat(2,1fr)}
  .fin-kpi-strip{grid-template-columns:repeat(2,1fr)}
  .fin-charts-strip{grid-template-columns:1fr;overflow:visible}
  .fic-fields-grid,.pinfo-field-grid,.pinfo-fin-row,.ficha-field-grid{grid-template-columns:1fr}
  .ficha-fin-cards,.ficha-contact-grid{grid-template-columns:1fr}
  .pinfo-nav-grid{grid-template-columns:repeat(2,1fr)}
  .dash-cards{grid-template-columns:1fr}
  .fg-2{grid-template-columns:1fr}
  /* La barra de KPIs del portafolio envuelve en vez de cortarse */
  .dash-kpi-bar{flex-wrap:wrap}
  .dash-kpi{min-width:46%}
  .dash-kpi-tipos{min-width:100%}
  .dash-sep,.dash-sep-fin{display:none}
  .ent-form-row{grid-template-columns:1fr!important}

  /* Modales full-width */
  .modal{width:95vw!important;max-width:95vw!important;max-height:92vh}
  .ent-form-body{overflow-y:auto}

  /* Inputs cómodos / anti-zoom iOS (≥16px) */
  .form-input,.form-select,.form-textarea,.search-input,.filter-select{font-size:16px}

  /* Header: solo iconos clave (Mi Día + Notificaciones); el resto va al drawer.
     !important vence el display inline que el JS pone al iniciar sesión. */
  .hdr-conexion,.hdr-sync,.hdr-user-block,.btn-cfg{display:none!important}
  .midia-toggle-lbl{display:none}
  .midia-toggle-btn{padding:6px 9px}
  .sb-mobile-actions{display:flex}

  /* Mi Día y Notificaciones a pantalla completa */
  .main-layout.midia-open .midia-panel{position:fixed;inset:0;width:100%!important;min-width:0!important;z-index:1102;border-left:none}
  .notif-panel{position:fixed;top:58px;left:8px;right:8px;width:auto;max-height:80vh;z-index:1103}

  /* Finanzas: KPIs envuelven (vence el inline de 4 columnas) */
  .fin-kpi-strip{grid-template-columns:repeat(2,1fr)!important}
  /* Barras de tabs con scroll horizontal */
  .raid-tab-bar,.inf-tab-bar,.comm-tab-bar{overflow-x:auto;scrollbar-width:none}

  /* Tablas de datos: scroll horizontal + primera columna fija (estándar responsive) */
  .bi-port-tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .bi-tbl-name,.bi-tbl-th-name{position:sticky;left:0;z-index:2;background:var(--surface)}
  .bi-tbl-th-name{z-index:3}
  .bi-tbl-name{max-width:130px}
}

/* ─── CONTROL ADAPTATIVO (RIC) ───────────────────────────────────────────── */
.ric-wrap{display:flex;flex-direction:column;gap:0;height:100%;overflow-y:auto}

/* Vista ejecutiva */
.ric-executive{display:flex;align-items:center;gap:20px;padding:16px 24px;border-bottom:1px solid var(--border);background:var(--surface);flex-wrap:wrap;gap:16px}
.ric-exec-left{display:flex;align-items:center;gap:12px;flex-shrink:0}
.ric-semaforo{width:18px;height:18px;border-radius:50%;flex-shrink:0}
.ric-sem-verde{background:#22a55a;box-shadow:0 0 0 4px rgba(34,165,90,.15)}
.ric-sem-amarillo{background:#f5a623;box-shadow:0 0 0 4px rgba(245,166,35,.15)}
.ric-sem-rojo{background:#e53935;box-shadow:0 0 0 4px rgba(229,57,53,.15)}
.ric-sem-lbl{font-size:13px;font-weight:600;color:var(--text)}
.ric-sem-sub{font-size:11px;color:var(--muted);margin-top:1px}

/* KPIs */
.ric-kpi-bar{display:flex;gap:12px;flex-wrap:wrap;flex:1}
.ric-kpi{display:flex;flex-direction:column;align-items:center;min-width:72px;padding:6px 12px;background:var(--bg);border:1px solid var(--border);border-radius:6px;gap:2px}
.ric-kpi-n{font-size:22px;font-weight:700;color:var(--text);line-height:1}
.ric-kpi-l{font-size:10px;color:var(--muted);text-align:center;line-height:1.2}
.ric-kpi-alert .ric-kpi-n{color:var(--red-t)}
.ric-kpi-alert{border-color:var(--red-bg);background:var(--red-bg)}
.ric-kpi-warn .ric-kpi-n{color:#b45309}
.ric-kpi-warn{border-color:#fef3c7;background:#fef3c7}

/* Alertas */
.ric-alerts{display:flex;flex-direction:column;gap:4px;padding:10px 24px;background:var(--bg);border-bottom:1px solid var(--border)}
.ric-alert{font-size:12px;padding:6px 10px;border-radius:4px;font-weight:500}
.ric-alert-error{background:#fee2e2;color:#991b1b}
.ric-alert-warn{background:#fef3c7;color:#92400e}
.ric-alert-info{background:#eff6ff;color:#1e40af}

/* Secciones */
.ric-sections{display:flex;flex-direction:column;gap:0;flex:1}
.ric-section{border-bottom:1px solid var(--border);padding:16px 24px}
.ric-section-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.ric-section-title{font-size:13px;font-weight:600;color:var(--text)}
.ric-cnt{font-size:11px;font-weight:400;color:var(--muted);margin-left:6px}
.ric-empty{font-size:12px;color:var(--muted);padding:6px 0;font-style:italic}

/* Filas */
.ric-row{display:flex;flex-direction:column;gap:4px;padding:8px 10px;border-radius:4px;border:1px solid var(--border);margin-bottom:6px;background:var(--surface)}
.ric-row:last-child{margin-bottom:0}
.ric-row-vencida{border-left:3px solid var(--red-t)}
.ric-row-main{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ric-row-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ric-row-titulo{font-size:13px;font-weight:500;color:var(--text);flex:1;min-width:0}
.ric-row-cat{font-size:10px;color:var(--muted);background:var(--bg);border:1px solid var(--border);padding:1px 6px;border-radius:10px}
.ric-row-tipo{font-size:10px;color:var(--muted);background:var(--bg);border:1px solid var(--border);padding:1px 6px;border-radius:10px;white-space:nowrap}
.ric-row-date{font-size:10px;color:var(--muted);font-family:var(--font-data)}
.ric-date-vencida{color:var(--red-t);font-weight:600}
.ric-row-resp{font-size:11px;color:var(--muted);margin-left:auto}

/* Badges de criticidad/severidad */
.ric-badge{display:inline-flex;align-items:center;font-size:10px;font-weight:700;padding:2px 7px;border-radius:10px;white-space:nowrap;letter-spacing:.02em}
.ric-crit-critico{background:var(--red-bg);color:var(--red-t)}
.ric-crit-alto{background:var(--orange-bg);color:var(--orange-t)}
.ric-crit-medio{background:var(--yellow-bg);color:var(--yellow-t)}
.ric-crit-bajo{background:var(--green-bg);color:var(--green-t)}

/* Badges de estado */
.ric-st-badge{display:inline-flex;align-items:center;font-size:10px;font-weight:500;padding:2px 7px;border-radius:10px;white-space:nowrap}
.ric-st-gray{background:var(--gray-bg);color:var(--gray-t)}
.ric-st-blue{background:var(--indigo-bg);color:var(--indigo-t)}
.ric-st-green{background:var(--green-bg);color:var(--green-t)}
.ric-st-yellow{background:var(--yellow-bg);color:var(--yellow-t)}
.ric-st-orange{background:var(--orange-bg);color:var(--orange-t)}
.ric-st-red{background:var(--red-bg);color:var(--red-t)}
.ric-st-muted{background:var(--s2);color:var(--muted)}

/* Criticidad en formulario */
.ric-criticidad-display{font-size:12px;font-weight:600;padding:6px 10px;border-radius:4px;border:1px solid var(--border);background:var(--bg);min-height:34px;display:flex;align-items:center}
/* ── Predicciones ── */
.ric-predicciones{display:flex;flex-direction:column;gap:4px;padding:10px 24px;background:var(--indigo-bg);border-bottom:1px solid var(--border)}
.ric-pred-titulo{font-size:11px;font-weight:700;color:var(--blue-t);margin-bottom:2px;text-transform:uppercase;letter-spacing:.04em}
.ric-pred-item{font-size:12px;color:var(--indigo-t);padding:4px 10px;background:var(--blue-bg);border-radius:4px;border-left:3px solid var(--blue-t);line-height:1.4}
/* ── Analítica ── */
.ric-analitica-section{}
.ric-analitica{display:flex;flex-direction:column;gap:16px}
.ric-analitica-grid{display:flex;gap:24px;flex-wrap:wrap}
.ric-chart-block{display:flex;flex-direction:column;gap:4px;min-width:180px;flex:1}
.ric-chart-title{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px}
.ric-chart-row{display:flex;align-items:center;gap:8px;height:20px}
.ric-chart-label{font-size:11px;color:var(--text);width:62px;flex-shrink:0;text-align:right}
.ric-chart-bar-wrap{flex:1;height:10px;background:var(--bg);border-radius:4px;border:1px solid var(--border);overflow:hidden}
.ric-chart-bar-fill{height:100%;border-radius:4px;transition:width .3s ease;min-width:2px}
.ric-chart-n{font-size:11px;color:var(--muted);font-family:var(--font-data);width:20px;text-align:right;flex-shrink:0}
.ric-bar-rojo{background:var(--red-t)}
.ric-bar-naranja{background:var(--orange-t)}
.ric-bar-amarillo{background:var(--yellow-t)}
.ric-bar-verde{background:var(--brand)}
.ric-bar-azul{background:var(--indigo-t)}
.ric-efectividad{display:flex;gap:12px;flex-wrap:wrap;padding-top:4px;border-top:1px solid var(--border)}
.ric-efec-kpi{display:flex;flex-direction:column;align-items:center;min-width:80px;padding:8px 12px;background:var(--bg);border:1px solid var(--border);border-radius:6px;gap:3px}
.ric-efec-n{font-size:20px;font-weight:700;color:var(--text);line-height:1}
.ric-efec-na{color:var(--muted);font-size:16px}
.ric-efec-ok{color:var(--green-t)}
.ric-efec-warn{color:var(--yellow-t)}
.ric-efec-red{color:var(--red-t)}
.ric-efec-l{font-size:10px;color:var(--muted);text-align:center;line-height:1.2}
/* ── Trazabilidad ── */
.ric-traza-wrap{display:flex;flex-direction:column;gap:8px}
.ric-traza-chain{display:flex;flex-direction:column;gap:0}
.ric-traza-node{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:4px;border:1px solid var(--border);background:var(--surface);font-size:12px}
.ric-traza-node-riesgo{border-left:3px solid var(--orange-t);background:var(--orange-bg)}
.ric-traza-node-inc{border-left:3px solid var(--red-t);background:var(--red-bg)}
.ric-traza-node-cambio{border-left:3px solid var(--indigo-t);background:var(--indigo-bg)}
.ric-traza-icon{font-size:10px;color:var(--muted);flex-shrink:0}
.ric-traza-label{font-size:12px;font-weight:500;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ric-traza-children{display:flex;flex-direction:column;gap:4px;margin-left:20px;padding-left:14px;border-left:2px solid var(--border);padding-top:4px;margin-top:4px}
.ric-traza-child-group{display:flex;flex-direction:column;gap:4px}
.ric-traza-group-lbl{font-size:11px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding:8px 0 4px;margin-top:4px;border-top:1px dashed var(--border)}
/* ─── CIERRE ──────────────────────────────────────────────────────────────── */
.cierre-estado-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 20px}
.cierre-full-col{grid-column:1/-1}
.cierre-cumpl-bar{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.cierre-cumpl-item{display:flex;flex-direction:column;align-items:center;min-width:72px;padding:8px 12px;border:1px solid var(--border);border-radius:6px;background:var(--bg);gap:2px}
.cierre-cumpl-n{font-size:22px;font-weight:700;color:var(--text);line-height:1}
.cierre-cumpl-l{font-size:10px;color:var(--muted);text-align:center}
.cierre-cumpl-ok .cierre-cumpl-n{color:var(--green-t)}
.cierre-cumpl-ok{border-color:var(--green-bg);background:var(--green-bg)}
.cierre-cumpl-blue .cierre-cumpl-n{color:var(--indigo-t)}
.cierre-cumpl-blue{border-color:var(--indigo-bg);background:var(--indigo-bg)}
.cierre-cumpl-warn .cierre-cumpl-n{color:var(--yellow-t)}
.cierre-cumpl-warn{border-color:var(--yellow-bg);background:var(--yellow-bg)}
.cierre-prog-wrap{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.cierre-prog-bar{flex:1;height:8px;background:var(--bg);border-radius:4px;border:1px solid var(--border);overflow:hidden}
.cierre-prog-fill{height:100%;background:var(--brand);border-radius:4px;transition:width .3s}
.cierre-prog-pct{font-size:11px;color:var(--muted);white-space:nowrap;font-family:var(--font-data)}
.cierre-row-resuelto{opacity:.55}
.cierre-sin-resp{color:var(--red-t)!important;font-style:italic}
.cierre-reutilizable{font-size:9px;font-weight:700;padding:2px 6px;border-radius:10px;background:var(--blue-bg);color:var(--blue-t);border:1px solid var(--border);white-space:nowrap}
.cierre-leccion-rec{font-size:11px;color:var(--muted);flex:1;font-style:italic}

/* ── EJECUCIÓN + ACTIVIDADES FUSIONADAS ─────────────────────────────────── */
/* Fase toggle / sub-panel */
.ejc-fase-toggle{background:none;border:none;cursor:pointer;font-size:10px;color:var(--muted);padding:0 4px;line-height:1;transition:color .12s;flex-shrink:0}
.ejc-fase-toggle:hover{color:var(--text)}
.ejc-fase-acts-badge{font-size:9px;font-family:var(--font-data);font-weight:700;padding:1px 5px;border-radius:8px;background:var(--s3);color:var(--muted);white-space:nowrap;flex-shrink:0}
.ejc-fase-acts-badge.has-acts{background:#E8F0FE;color:#1A4E7A}
.ejc-fase-acts-badge.has-venc{background:#FDE8E8;color:var(--sev-crit)}
.ejc-fase-acts-panel{display:none;padding:0 12px 10px 36px;background:var(--s1);border-top:1px solid var(--border)}
.ejc-fase-acts-panel.open{display:block}

/* Actividad inline dentro de fase */
.ejc-act-inline-list{display:flex;flex-direction:column;gap:0;margin-top:0}
.ejc-act-inline-row{display:flex;align-items:center;gap:8px;padding:8px 14px;font-size:11px;transition:background .1s;border-bottom:1px solid var(--border)}
.ejc-act-inline-row:last-child{border-bottom:none}
.ejc-act-inline-row:hover{background:var(--s1)}
.ejc-act-inline-row.done{opacity:.55}
.ejc-act-inline-row.cancelled{opacity:.3}
.ejc-act-inline-tipo{flex-shrink:0}
.ejc-act-inline-titulo{flex:1;font-weight:500;color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ejc-act-inline-resp{font-size:10px;color:var(--muted);white-space:nowrap;max-width:110px;overflow:hidden;text-overflow:ellipsis}
.ejc-act-inline-fecha{font-size:10px;font-family:var(--font-data);color:var(--muted);white-space:nowrap}
.ejc-act-inline-days{font-size:10px;font-family:var(--font-data);white-space:nowrap}
.ejc-act-inline-prio{font-size:9px;font-weight:700;padding:1px 4px;border-radius:3px;white-space:nowrap;flex-shrink:0}
.ejc-act-inline-actions{display:flex;gap:5px;flex-shrink:0}
.ejc-act-inline-empty{font-size:11px;color:var(--muted);padding:10px 14px;font-style:italic}
/* Botones de acción de actividad */
.act-btn-advance{font-size:11px;font-weight:600;padding:4px 10px;border-radius:var(--radius);border:1px solid var(--brand);color:var(--brand);background:var(--green-bg);cursor:pointer;white-space:nowrap;transition:background .1s,color .1s}
.act-btn-advance:hover{background:var(--brand);color:#fff}
.act-btn-edit{font-size:11px;padding:4px 10px;border-radius:var(--radius);border:1px solid var(--border);color:var(--muted);background:var(--surface);cursor:pointer;transition:border-color .1s,color .1s}
.act-btn-edit:hover{border-color:var(--text);color:var(--text)}
.act-btn-del{font-size:11px;padding:4px 10px;border-radius:var(--radius);border:1px solid transparent;color:var(--muted);background:none;cursor:pointer;transition:color .1s,border-color .1s}
.act-btn-del:hover{border-color:#FACACA;color:var(--sev-crit)}
.act-btn-reprog{font-size:11px;padding:4px 10px;border-radius:var(--radius);border:1px solid var(--border);color:var(--orange-t);background:var(--orange-bg);cursor:pointer;white-space:nowrap;transition:background .1s,border-color .1s}
.act-btn-reprog:hover{border-color:var(--orange-t)}
.act-btn-rep{font-size:11px;padding:4px 10px;border-radius:var(--radius);border:1px solid var(--border);color:var(--indigo-t);background:var(--indigo-bg);cursor:pointer;white-space:nowrap;transition:background .1s,border-color .1s}
.act-btn-rep:hover{border-color:var(--indigo-t)}
.act-badge-reprog{font-size:9px;font-weight:700;padding:2px 6px;border-radius:3px;background:var(--orange-bg);color:var(--orange-t);border:1px solid #F5D5B0;cursor:default;flex-shrink:0}
.act-badge-rep-btn{font-size:9px;font-weight:600;padding:2px 6px;border-radius:3px;background:var(--indigo-bg);color:var(--indigo-t);border:1px solid #C8D8F5;cursor:pointer;flex-shrink:0;transition:background .1s}
.act-badge-rep-btn:hover{background:#D8E8FE}
.ejc-act-card{display:flex;flex-direction:column;border-bottom:1px solid var(--border)}
.ejc-act-card:last-child{border-bottom:none}
.ejc-act-card.done .ejc-act-inline-row{opacity:.55}
.ejc-act-card.cancelled .ejc-act-inline-row{opacity:.3}
.ejc-act-reportes{border-top:1px solid var(--border);background:var(--s2);padding:8px 14px 10px;display:flex;flex-direction:column;gap:8px}
.ejc-rep-item{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;display:flex;flex-direction:column;gap:3px}
.ejc-rep-item-hdr{display:flex;gap:10px;align-items:center}
.ejc-rep-fecha{font-size:10px;font-family:var(--font-data);color:var(--muted);white-space:nowrap}
.ejc-rep-usuario{font-size:10px;font-weight:600;color:var(--text)}
.ejc-rep-texto{font-size:12px;color:var(--text);line-height:1.5;white-space:pre-wrap}
.ejc-rep-doc{font-size:11px;color:var(--indigo-t);text-decoration:none;display:inline-flex;align-items:center;gap:4px;margin-top:2px}
.ejc-rep-doc:hover{text-decoration:underline}
.ejc-fase-add-btn{margin-top:6px;font-size:11px;color:var(--brand);background:none;border:1px dashed var(--border);border-radius:4px;padding:4px 10px;cursor:pointer;transition:border-color .12s,color .12s;width:100%}
.ejc-fase-add-btn:hover{border-color:var(--brand);color:var(--brand)}

/* Panel actividades generales */
.ejc-acts-generales{border-top:2px solid var(--border);margin-top:0}
.ejc-acts-generales .ejc-section-hdr{background:var(--s1)}

/* Prioridad badges */
.act-prio-alta{font-size:9px;font-weight:700;padding:1px 5px;border-radius:3px;background:#FDE8E8;color:var(--sev-crit);border:1px solid #FACACA}
.act-prio-media{font-size:9px;font-weight:700;padding:1px 5px;border-radius:3px;background:#FFF8E1;color:#8A6A00;border:1px solid #F5E7A0}
.act-prio-baja{font-size:9px;font-weight:700;padding:1px 5px;border-radius:3px;background:#F0F4F0;color:#2D6E30;border:1px solid #C8DFC8}

/* Resumen de actividades en header de Ejecución */
.ejc-acts-kpi-strip{display:flex;gap:16px;padding:8px 20px;background:var(--s1);border-bottom:1px solid var(--border);flex-wrap:wrap}
.ejc-acts-kpi{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)}
.ejc-acts-kpi-n{font-weight:700;font-family:var(--font-data);color:var(--text)}
.ejc-acts-kpi-n.ok{color:#2D6E30}
.ejc-acts-kpi-n.warn{color:#8A6A00}
.ejc-acts-kpi-n.alert{color:var(--sev-crit)}

/* ── CRONOGRAMA REDISEÑADO — TIMELINE ───────────────────────────────────── */
/* Toggle de vista */
.gnt-vista-bar{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;gap:12px;flex-wrap:wrap}
.gnt-vista-toggle{display:flex;border:1px solid var(--border);border-radius:4px;overflow:hidden}
.gnt-vista-btn{background:none;border:none;padding:4px 14px;font-size:11px;cursor:pointer;color:var(--muted);transition:background .12s,color .12s}
.gnt-vista-btn.on{background:var(--brand);color:#fff}
.gnt-vista-btn:not(.on):hover{background:var(--s2)}
.gnt-leyenda{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gnt-ley-item{display:flex;align-items:center;gap:4px;font-size:10px;color:var(--muted)}
.gnt-ley-dot{width:10px;height:10px;border-radius:var(--radius);flex-shrink:0}
.gnt-ley-dot-fase{background:#1A4E7A;opacity:.7}
.gnt-ley-dot-hito{background:#C06000;border-radius:50%}
.gnt-ley-dot-act{background:#5A2D8A;opacity:.7}
.gnt-ley-dot-fc{background:#555;border-radius:50%}
.gnt-ley-dot-pago{background:var(--brand);border-radius:50%}

/* Secciones de la timeline */
.gnt-section-hdr{display:flex;align-items:stretch;border-bottom:1px solid var(--border)}
.gnt-section-lbl{width:180px;min-width:180px;padding:5px 12px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:var(--s2);border-right:1px solid var(--border);flex-shrink:0;display:flex;align-items:center;position:sticky;left:0;z-index:3}
.gnt-section-track{flex:1;background:var(--s2);min-width:var(--gnt-track-min,600px);position:relative}

/* Fila de fase (bloque) */
.gnt-fase-row{display:flex;align-items:stretch;border-bottom:1px solid var(--border);min-height:34px}
.gnt-fase-lbl{width:180px;min-width:180px;padding:0 8px 0 10px;border-right:1px solid var(--border);flex-shrink:0;display:flex;align-items:center;gap:5px;overflow:hidden;cursor:pointer;background:var(--surface);transition:background .1s;position:sticky;left:0;z-index:3}
.gnt-fase-lbl:hover{background:var(--s1)}
.gnt-fase-toggle-icon{font-size:9px;color:var(--muted);flex-shrink:0;width:10px}
.gnt-fase-nombre{font-size:11px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
.gnt-fase-track{flex:1;position:relative;min-width:var(--gnt-track-min,600px)}
/* Barra de fase planificada */
.gnt-bar-fase-plan{position:absolute;top:50%;transform:translateY(-50%);height:18px;border-radius:3px;background:#1A4E7A;opacity:.22;pointer-events:none}
/* Barra de fase real */
.gnt-bar-fase-real{position:absolute;top:50%;transform:translateY(-7px);height:14px;border-radius:var(--radius);display:flex;align-items:center;overflow:hidden;transition:opacity .1s;cursor:default}
.gnt-bar-fase-real:hover{opacity:.85}
.gnt-bar-fase-real.ok{background:#2D6E30;opacity:.75}
.gnt-bar-fase-real.warn{background:#8A6A00;opacity:.75}
.gnt-bar-fase-real.alert{background:var(--sev-crit);opacity:.75}
.gnt-bar-fase-real.none{background:#1A4E7A;opacity:.6}
.gnt-fase-pct-lbl{font-size:9px;font-weight:700;color:#fff;padding:0 5px;white-space:nowrap;pointer-events:none}

/* Sub-filas de actividades/hitos dentro de una fase */
.gnt-sub-rows{display:flex;flex-direction:column}
.gnt-sub-rows.closed{display:none}
.gnt-sub-row{display:flex;align-items:center;border-bottom:1px dashed var(--border);min-height:22px}
.gnt-sub-row:last-child{border-bottom:none}
.gnt-sub-lbl{width:180px;min-width:180px;padding:0 8px 0 22px;border-right:1px solid var(--border);flex-shrink:0;display:flex;align-items:center;gap:5px;overflow:hidden;position:sticky;left:0;background:var(--surface);z-index:3}
.gnt-sub-lbl-text{font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);flex:1}
.gnt-sub-track{flex:1;position:relative;min-width:var(--gnt-track-min,600px);min-height:22px}
/* Barra de actividad en sub-fila */
.gnt-bar-sub-act{position:absolute;top:50%;transform:translateY(-50%);height:10px;border-radius:var(--radius);opacity:.75;transition:opacity .1s}
.gnt-bar-sub-act:hover{opacity:1;z-index:2}
.gnt-bar-sub-act.pendiente{background:#AAAAAA}
.gnt-bar-sub-act.en_proceso{background:#C09000}
.gnt-bar-sub-act.realizada{background:#2D6E30}
.gnt-bar-sub-act.cancelada{background:var(--sev-crit);opacity:.35}

/* Marcadores de hito (◆) */
.gnt-hito-marker{position:absolute;top:50%;transform:translate(-50%,-50%);width:10px;height:10px;border-radius:1px;rotate:45deg;background:#C06000;z-index:3;cursor:default;transition:transform .1s}
.gnt-hito-marker:hover{transform:translate(-50%,-50%) scale(1.4)}
.gnt-hito-marker.alcanzado{background:#2D6E30}
.gnt-hito-marker.omitido{background:#AAAAAA}
.gnt-hito-marker.vencido{background:var(--sev-crit)}
.gnt-hito-tip{position:absolute;top:50%;left:50%;transform:translate(-50%,-200%);background:var(--text);color:#fff;font-size:9px;padding:3px 7px;border-radius:3px;white-space:nowrap;z-index:10;pointer-events:none;display:none}
.gnt-hito-marker:hover .gnt-hito-tip{display:block}

/* Marcadores de fecha clave */
.gnt-fc-marker{position:absolute;top:0;bottom:0;width:2px;background:#444;opacity:.5;z-index:2;cursor:default}
.gnt-fc-marker:hover{opacity:.9}
.gnt-fc-lbl-txt{position:absolute;top:2px;left:4px;font-size:8px;font-weight:600;color:#444;white-space:nowrap;max-width:80px;overflow:hidden;text-overflow:ellipsis;pointer-events:none}
/* Fila compacta para fechas clave */
.gnt-fc-row{display:flex;align-items:center;border-bottom:1px dashed var(--border);min-height:24px}
.gnt-fc-row-lbl{width:180px;min-width:180px;padding:0 8px 0 12px;border-right:1px solid var(--border);flex-shrink:0;display:flex;align-items:center;gap:5px;position:sticky;left:0;background:var(--surface);z-index:3}
.gnt-fc-dot{width:7px;height:7px;border-radius:50%;background:#555;flex-shrink:0}
.gnt-fc-row-text{font-size:10px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gnt-fc-row-track{flex:1;position:relative;min-height:24px;min-width:var(--gnt-track-min,600px)}
.gnt-fc-pin{position:absolute;top:0;bottom:0;width:2px;background:#555;opacity:.5}
.gnt-fc-pin-lbl{position:absolute;top:50%;transform:translateY(-50%);left:5px;font-size:9px;color:var(--muted);white-space:nowrap;font-family:var(--font-data)}
/* Compromisos de pago (verde = señal de dato: el dinero). El monto se gatea por rol en JS. */
.gnt-pago-dot{border-radius:50%}
.gnt-pago-monto{color:var(--green-t);font-weight:700;font-family:var(--font-data)}
.gnt-pago-chip{margin-left:5px;padding:0 4px;font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--green-t);background:var(--green-bg);border-radius:var(--radius)}

/* ── CRONOGRAMA — CALENDARIO ────────────────────────────────────────────── */
.gcal-wrap{display:flex;flex-direction:column;flex:1;overflow-y:auto;padding:16px 20px;gap:16px}
.gcal-nav{display:flex;align-items:center;justify-content:space-between;padding:0 4px}
.gcal-nav-title{font-size:14px;font-weight:600;color:var(--text);text-transform:capitalize}
.gcal-nav-btn{background:none;border:1px solid var(--border);border-radius:3px;padding:4px 10px;cursor:pointer;font-size:13px;color:var(--muted);transition:background .1s,color .1s}
.gcal-nav-btn:hover{background:var(--s2);color:var(--text)}
.gcal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--border);border:1px solid var(--border);border-radius:4px;overflow:hidden}
.gcal-dow{background:var(--s2);padding:5px 0;text-align:center;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.gcal-cell{background:var(--surface);min-height:64px;padding:4px;display:flex;flex-direction:column;gap:2px;position:relative;cursor:pointer;transition:background .08s}
.gcal-cell.other-month{background:var(--s1);cursor:default}
.gcal-cell.today{background:#EEF2F5}
.gcal-cell:not(.other-month):hover{background:var(--bg)}
.gcal-cell.selected{background:#EEF5EE!important}
.gcal-cell.selected .gcal-day-num{color:var(--brand);font-weight:700}
.gcal-day-num{font-size:11px;font-family:var(--font-data);color:var(--muted);line-height:1;margin-bottom:2px;font-weight:500}
.gcal-cell.today .gcal-day-num{background:var(--brand);color:#fff;width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px}
.gcal-event{font-size:9px;padding:1px 4px;border-radius:var(--radius);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:default;line-height:1.5}
.gcal-event.fase{background:#E8F0FE;color:#1A4E7A;border-left:2px solid #1A4E7A}
.gcal-event.actividad{background:#F3EEF8;color:#5A2D8A;border-left:2px solid #5A2D8A}
.gcal-event.hito{background:#FFF0E0;color:#C06000;border-left:2px solid #C06000;font-weight:600}
.gcal-event.entregable{background:#EEF5EE;color:#2D6E30;border-left:2px solid #2D6E30}
.gcal-event.fecha_clave{background:#F5F5F3;color:#444;border-left:2px solid #888}
.gcal-event.pago{background:var(--green-bg);color:var(--green-t);border-left:2px solid var(--brand)}
.gcal-event.vencido{border-color:var(--red-t)!important;opacity:.8}
.gcal-more{font-size:9px;color:var(--muted);padding:0 3px;cursor:default}
/* Calendar side panel */
.gcal-layout{display:flex;flex:1;overflow:hidden;min-height:0}
.gcal-main{flex:1;display:flex;flex-direction:column;overflow-y:auto;padding:16px 20px;gap:16px;min-width:0}
.gcal-side{width:272px;min-width:272px;border-left:1px solid var(--border);display:flex;flex-direction:column;overflow-y:auto;background:var(--surface)}
.gcal-side-hdr{padding:12px 14px;border-bottom:1px solid var(--border);display:flex;align-items:flex-start;justify-content:space-between;gap:8px;flex-shrink:0}
.gcal-side-date{font-size:12px;font-weight:600;color:var(--text);text-transform:capitalize;line-height:1.4}
.gcal-side-body{padding:12px 14px;display:flex;flex-direction:column;gap:10px}
.gcal-side-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 16px;text-align:center;color:var(--muted);font-size:11px;line-height:1.7}
.gcal-side-empty-ico{font-size:30px;color:var(--faint);margin-bottom:2px}
.gcal-side-no-evs{font-size:11px;color:var(--muted);padding:6px 0;text-align:center;line-height:1.7}
.gcal-side-sec{display:flex;flex-direction:column;gap:4px}
.gcal-side-sec-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:2px}
.gcal-side-ev{padding:8px 10px;border-radius:var(--radius);background:var(--bg);border:1px solid var(--border);display:flex;flex-direction:column;gap:4px}
.gcal-side-ev.vencido{border-color:var(--red-bg)}
.gcal-side-ev.pago{border-left:2px solid var(--brand)}
.gcal-side-ev-top{display:flex;align-items:flex-start;justify-content:space-between;gap:6px;flex-wrap:wrap}
.gcal-side-ev-name{font-size:11px;font-weight:500;color:var(--text);line-height:1.3}
.gcal-side-ev-meta{font-size:10px;color:var(--muted);line-height:1.4;margin-top:1px}
.gcal-side-ev-fields{display:flex;flex-direction:column;gap:3px;margin-top:4px;padding-top:4px;border-top:1px solid var(--border)}
.gcal-side-ev-fields:empty{display:none}
.gcal-side-ev-field{display:flex;gap:5px;font-size:10px;align-items:baseline}
.gcal-side-ev-field-lbl{color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em;font-size:9px;white-space:nowrap;flex-shrink:0}

/* ─── SISTEMA DE ALERTAS KPI ──────────────────────────────────────────────── */
/* Bandas de alerta generadas por kpis.js — usadas en módulos y panel global */
.alt-row{display:flex;align-items:flex-start;gap:10px;padding:8px 20px;border-bottom:1px solid rgba(0,0,0,.04);font-size:11px;line-height:1.45;transition:background .1s}
.alt-row:last-child{border-bottom:none}
.alt-row:hover{filter:brightness(.97)}

.alt-critica{background:var(--red-bg);color:var(--red-t);border-left:3px solid var(--sev-crit)}
.alt-alta   {background:var(--orange-bg);color:var(--orange-t);border-left:3px solid var(--sev-alta)}
.alt-media  {background:var(--yellow-bg);color:var(--yellow-t);border-left:3px solid var(--sev-med)}
.alt-info   {background:var(--blue-bg);color:var(--blue-t);border-left:3px solid var(--indigo-t)}

/* Chip de severidad */
.alt-sev-chip{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 6px;border-radius:var(--radius);white-space:nowrap;flex-shrink:0;margin-top:1px}
.alt-critica .alt-sev-chip{background:var(--sev-crit);color:#fff}
.alt-alta    .alt-sev-chip{background:var(--sev-alta);color:#fff}
.alt-media   .alt-sev-chip{background:var(--sev-med);color:#fff}
.alt-info    .alt-sev-chip{background:var(--indigo-t);color:#fff}

/* Cuerpo del mensaje */
.alt-msg{flex:1;min-width:0}
.alt-msg-txt{font-weight:500}
.alt-msg-src{font-size:10px;opacity:.75;margin-top:1px}

/* Acciones de alerta */
.alt-actions{display:flex;align-items:center;gap:4px;flex-shrink:0}
.alt-btn{font-size:9px;font-weight:600;padding:2px 7px;border-radius:var(--radius);cursor:pointer;font-family:inherit;border:1px solid currentColor;background:transparent;transition:opacity .1s;white-space:nowrap}
.alt-btn:hover{opacity:.75}

/* Panel de alertas (usado en módulos) */
.alt-panel{display:flex;flex-direction:column;border-bottom:1px solid var(--border);flex-shrink:0}
.alt-panel-hdr{display:flex;align-items:center;justify-content:space-between;padding:7px 20px;background:var(--s2);border-bottom:1px solid var(--border);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.alt-panel-hdr-count{font-family:var(--font-data);font-weight:400;color:var(--red-t)}
.alt-panel-empty{padding:10px 20px;font-size:11px;color:var(--muted);font-style:italic}

/* Dot indicador en tarjetas/tabs */
.alt-indicator-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.alt-indicator-dot.critica{background:var(--sev-crit)}
.alt-indicator-dot.alta   {background:var(--sev-alta)}
.alt-indicator-dot.media  {background:var(--sev-med)}
.alt-indicator-dot.info   {background:var(--indigo-t)}

/* Badge de conteo en tab */
.alt-tab-badge{font-size:8px;font-weight:700;padding:0 5px;border-radius:8px;min-width:16px;text-align:center;line-height:16px;display:inline-block;vertical-align:middle;margin-left:4px}
.alt-tab-badge.critica{background:var(--sev-crit);color:#fff}
.alt-tab-badge.alta   {background:var(--sev-alta);color:#fff}
.alt-tab-badge.media  {background:var(--sev-med);color:#fff}
.alt-tab-badge.info   {background:var(--indigo-t);color:#fff}

/* ─── PANEL GLOBAL DE ALERTAS ─────────────────────────────────────────────────── */
#alertas-portafolio-content{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
.palt-header{padding:16px 24px 14px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--surface)}
.palt-title{font-family:var(--font-ui);font-size:15px;font-weight:700;letter-spacing:-.01em;color:var(--text);margin-bottom:12px}
.palt-sev-summary{display:flex;align-items:stretch;gap:10px;flex-wrap:nowrap}
.palt-sev-chip{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:12px 18px 10px;border-radius:3px;cursor:default;min-width:76px;flex:1}
.palt-sev-chip.critica{background:var(--red-bg)}
.palt-sev-chip.alta   {background:var(--orange-bg)}
.palt-sev-chip.media  {background:var(--yellow-bg)}
.palt-sev-chip.info   {background:var(--blue-bg)}
.palt-sev-chip.total  {background:var(--gray-bg);border:1px solid var(--border)}
.palt-sev-num{font-size:28px;font-weight:700;line-height:1;font-family:var(--font-data);margin-bottom:4px}
.palt-sev-chip.critica .palt-sev-num{color:var(--red-t)}
.palt-sev-chip.alta    .palt-sev-num{color:var(--orange-t)}
.palt-sev-chip.media   .palt-sev-num{color:var(--yellow-t)}
.palt-sev-chip.info    .palt-sev-num{color:var(--blue-t)}
.palt-sev-chip.total   .palt-sev-num{color:var(--muted)}
.palt-sev-lbl{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.palt-sev-dot{display:none}
.palt-filter-bar{display:flex;align-items:center;gap:8px;padding:10px 24px;border-bottom:1px solid var(--border);background:var(--s2);flex-shrink:0;flex-wrap:wrap}
.palt-filter-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);white-space:nowrap}
.palt-filter-select{padding:5px 8px;font-size:11px;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);font-family:inherit;color:var(--text);cursor:pointer;outline:none}
.palt-filter-select:focus{border-color:var(--text)}
.palt-filter-clear{margin-left:auto;font-size:10px;color:var(--muted);background:none;border:none;cursor:pointer;font-family:inherit;text-decoration:underline;text-underline-offset:2px;white-space:nowrap}
.palt-filter-clear:hover{color:var(--text)}
.palt-body{flex:1;overflow-y:auto;padding:16px 0}
.palt-section{padding:0 24px;margin-bottom:4px}
.palt-section-hdr{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--border);margin-bottom:2px;cursor:pointer}
.palt-section-name{font-size:11px;font-weight:700;color:var(--text);flex:1}
.palt-section-meta{font-size:10px;color:var(--muted)}
.palt-section-badge{font-size:9px;font-weight:700;padding:1px 6px;border-radius:8px}
.palt-section-badge.crit{background:var(--sev-crit);color:#fff}
.palt-section-badge.alta{background:var(--sev-alta);color:#fff}
.palt-section-badge.med {background:var(--sev-med);color:#fff}
.palt-section-badge.ok  {background:var(--green-bg);color:var(--green-t)}
.palt-section-rows{display:flex;flex-direction:column;margin-bottom:12px}
.palt-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 24px;gap:8px;text-align:center}
.palt-empty-icon{font-size:32px;opacity:.3}
.palt-empty-title{font-size:13px;font-weight:600;color:var(--text)}
.palt-empty-sub{font-size:11px;color:var(--muted)}
.palt-sev-chip.auto-res{background:var(--green-bg);cursor:pointer}
.palt-sev-chip.auto-res .palt-sev-num{color:var(--green-t)}

/* ─── ALERT HISTORY & REABIERTA ─────────────────────────────────────────────── */
.alt-reabierta{border-left-color:#e07a20!important}
.alt-reabierta-badge{display:inline-block;font-size:8px;font-weight:700;text-transform:uppercase;background:var(--orange-bg);color:var(--orange-t);padding:0 4px;border-radius:2px;vertical-align:middle;margin-left:4px}
.alt-auto-resuelta .alt-sev-chip{background:var(--green-bg)!important;color:var(--green-t)!important}
.alt-hist-toggle{background:none;border:none;cursor:pointer;font-size:9px;font-weight:600;color:var(--muted);font-family:inherit;padding:2px 0;text-decoration:underline;text-underline-offset:2px;display:block;margin-top:4px}
.alt-hist-toggle:hover{color:var(--text)}
.alt-hist-panel{background:rgba(0,0,0,.04);border-radius:3px;padding:6px 8px;margin-top:4px;display:flex;flex-direction:column;gap:4px}
.alt-hist-entry{display:flex;align-items:baseline;gap:6px;font-size:9px;flex-wrap:wrap}
.alt-hist-accion{font-weight:700;color:var(--text)}
.alt-hist-fecha{color:var(--muted);flex-shrink:0}
.alt-hist-nota{color:var(--text);font-style:italic;flex:1;min-width:0}
.alt-hist-usr{color:var(--muted);font-size:8px}
.alt-btn-goto{color:var(--brand)!important;border-color:var(--brand)!important}
.alt-btn-goto:hover{opacity:.75}

/* ─── TOAST ──────────────────────────────────────────────────────────────────── */
.toast-host{position:fixed;bottom:24px;right:24px;z-index:calc(var(--z-modal) + 10);display:flex;flex-direction:column-reverse;gap:8px;pointer-events:none}
.toast{pointer-events:auto;display:flex;align-items:center;gap:10px;padding:11px 16px;background:var(--text);color:#fff;font-size:12px;font-family:var(--font-ui);border-radius:var(--radius);box-shadow:var(--shadow-lg);min-width:220px;max-width:360px;line-height:1.4;animation:toastIn .2s ease}
.toast.toast-success{background:var(--green-t)}
.toast.toast-warn{background:var(--yellow-t)}
.toast.toast-error{background:var(--red-t)}
.toast.toast-out{animation:toastOut .2s ease forwards}
@keyframes toastIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@keyframes toastOut{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(8px)}}

/* ─── CONFIRM DIALOG ─────────────────────────────────────────────────────────── */
.confirm-overlay{position:fixed;inset:0;z-index:calc(var(--z-modal) + 5);background:rgba(17,17,17,.4);display:flex;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(2px)}
.confirm-box{background:var(--surface);border:1px solid var(--border);padding:24px;max-width:340px;width:100%;box-shadow:var(--shadow-lg);border-radius:var(--radius);animation:modalIn .18s ease}
.confirm-msg{font-size:13px;color:var(--text);line-height:1.5;margin-bottom:18px}
.confirm-btns{display:flex;justify-content:flex-end;gap:8px}

/* ─── MIGRACIÓN DE ENTREGABLES (modal de unificación) ─────────────────────────── */
.mig-ent-box{max-width:440px}
.mig-ent-title{font-family:var(--font-display,inherit);font-size:16px;font-weight:600;color:var(--text);margin-bottom:8px}
.mig-ent-lead{font-size:13px;color:var(--muted);line-height:1.5;margin-bottom:14px}
.mig-ent-tbl{border:1px solid var(--border);border-radius:var(--radius);max-height:240px;overflow-y:auto;margin-bottom:18px}
.mig-ent-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:7px 12px;border-bottom:1px solid var(--border-soft,var(--border));font-size:12px}
.mig-ent-row:last-child{border-bottom:none}
.mig-ent-head{background:var(--surface-2,#f6f6f7);font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:600;position:sticky;top:0}
.mig-ent-proj{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mig-ent-n{color:var(--text);font-weight:600;flex-shrink:0}

/* Aviso de migración pendiente (banner en Planeación) */
.pln-mig-banner{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 14px;margin-bottom:14px;border:1px solid var(--yellow-t);border-radius:var(--radius);background:var(--surface)}
.pln-mig-banner-txt{font-size:12.5px;color:var(--text);line-height:1.45;flex:1;min-width:200px}
.pln-mig-banner-txt strong{font-weight:600}

/* ─── FORM VALIDATION ────────────────────────────────────────────────────────── */
.form-input.error,.form-select.error,.form-textarea.error{border-color:var(--red-t)}
.field-error{font-size:10px;color:var(--red-t);margin-top:3px;display:block;line-height:1.4}

/* ─── MAPA PORTAFOLIO ────────────────────────────────────────────────────────── */
/* map-content-panel rule no longer needed — .content-panel already has overflow:hidden */
.map-panel-wrap{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;position:relative;z-index:0;isolation:isolate}
.map-wrap{flex:1;min-height:400px;position:relative}
.map-leaflet{position:absolute;inset:0}

/* lista proyectos sin ubicación */
.map-noloc-wrap{flex-shrink:0;border-top:1px solid var(--border);background:var(--surface);max-height:160px;display:flex;flex-direction:column}
.map-noloc-hdr{display:flex;align-items:center;justify-content:space-between;padding:7px 16px;border-bottom:1px solid var(--border);flex-shrink:0}
.map-noloc-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.map-noloc-count{font-size:10px;color:var(--muted);font-family:var(--font-data)}
.map-noloc-list{display:flex;align-items:center;gap:8px;overflow-x:auto;padding:8px 12px;flex-wrap:nowrap;flex:1}
.map-noloc-item{display:flex;align-items:center;gap:6px;padding:6px 10px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;flex-shrink:0;transition:border-color .12s}
.map-noloc-item:hover{border-color:var(--text)}
.map-noloc-info{display:flex;flex-direction:column;gap:1px;max-width:160px}
.map-noloc-nombre{font-size:11px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.map-noloc-empresa{font-size:9px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.map-noloc-btn{font-size:9px;padding:3px 8px;border:1px solid var(--border);border-radius:var(--radius);background:none;color:var(--muted);cursor:pointer;white-space:nowrap;font-family:inherit;flex-shrink:0}
.map-noloc-btn:hover{border-color:var(--brand);color:var(--brand)}

/* popup Leaflet */
.map-leaflet-popup .leaflet-popup-content-wrapper{border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:0;overflow:hidden}
.map-leaflet-popup .leaflet-popup-content{margin:0}
.map-popup{padding:12px 14px;min-width:190px}
.map-popup-nombre{font-size:12px;font-weight:700;color:var(--text);line-height:1.3;margin-bottom:2px}
.map-popup-empresa{font-size:10px;color:var(--muted);margin-bottom:5px}
.map-popup-loc{font-size:10px;color:var(--muted);display:block;margin-bottom:3px}
.map-popup-val{font-size:12px;font-weight:700;font-family:var(--font-data);color:var(--text);margin-bottom:10px}
.map-popup-btn{width:100%;padding:5px 0;border:1px solid var(--brand);border-radius:var(--radius);background:none;color:var(--brand);font-size:10px;font-weight:600;cursor:pointer;font-family:inherit;transition:background .12s,color .12s}
.map-popup-btn:hover{background:var(--brand);color:#fff}

/* geocodificar en formulario */
.pf-geo-cell{display:flex;flex-direction:column;justify-content:flex-end;gap:4px}
.btn-geocode{font-size:11px;padding:7px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);cursor:pointer;font-family:inherit;white-space:nowrap;transition:border-color .12s,color .12s;text-align:left}
.btn-geocode:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}
.btn-geocode:disabled{opacity:.5;cursor:not-allowed}
.pf-geo-status{font-size:10px;color:var(--muted);line-height:1.4;min-height:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pf-geo-status.ok{color:#2D6E30}
.pf-geo-status.err{color:var(--sev-crit)}

/* ─── RAID portafolio ──────────────────────────────────────────────────────── */
.raid-tab-bar{display:flex;gap:0;border-bottom:2px solid var(--border);margin:16px 24px 0;flex-shrink:0}
.raid-tab-btn{padding:8px 18px;font-size:11px;font-weight:600;font-family:inherit;background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;cursor:pointer;color:var(--muted);display:flex;align-items:center;gap:6px;transition:color .12s,border-color .12s}
.raid-tab-btn:hover{color:var(--text)}
.raid-tab-btn.on{color:var(--brand);border-bottom-color:var(--brand)}
.raid-tab-count{font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px;background:var(--s2);color:var(--muted)}
.raid-tab-btn.on .raid-tab-count{background:var(--brand);color:#fff}
.raid-tab-body{padding:16px 24px;overflow-x:auto}
.raid-table{width:100%;border-collapse:collapse;font-size:12px}
.raid-table th{text-align:left;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:6px 10px;border-bottom:2px solid var(--border);white-space:nowrap}
.raid-table td{padding:7px 10px;border-bottom:1px solid var(--border);vertical-align:middle}
.raid-table tr:last-child td{border-bottom:none}
.raid-table tr:hover td{background:var(--s2)}
.raid-proj-cell{font-size:11px;color:var(--muted);max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ric-crit-chip{display:inline-flex;align-items:center;font-size:10px;font-weight:600;padding:2px 7px;border-radius:10px;white-space:nowrap}
.ric-estado-chip{display:inline-flex;align-items:center;font-size:10px;font-weight:500;padding:2px 7px;border-radius:10px;white-space:nowrap}
.raid-corr{padding:0 24px 24px}
.raid-corr-title{font-size:12px;font-weight:700;color:var(--text);margin-bottom:2px;margin-top:8px}
.raid-corr-sub{font-size:10px;color:var(--muted);margin-bottom:10px}
.raid-corr-table{max-width:600px}
.raid-corr-n{text-align:center;font-variant-numeric:tabular-nums;font-weight:600;color:var(--text)}
.raid-corr-total{color:var(--brand)}

/* ─── MÓDULO DE INFORMES ────────────────────────────────────────────────────── */
.inf-tab-bar{display:flex;gap:0;border-bottom:2px solid var(--border);background:var(--surface);flex-shrink:0}
.inf-tab-btn{padding:12px 22px;font-size:12px;font-weight:600;font-family:inherit;background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;cursor:pointer;color:var(--muted);transition:color .12s,border-color .12s;white-space:nowrap}
.inf-tab-btn:hover{color:var(--text)}
.inf-tab-btn.on{color:var(--brand);border-bottom-color:var(--brand)}
.inf-wrap{flex:1;overflow-y:auto;background:var(--bg)}
.inf-report{max-width:960px;margin:0 auto;padding:24px 32px 60px;display:flex;flex-direction:column;gap:20px}
.inf-hdr{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}
.inf-title{font-size:20px;font-weight:700;color:var(--text);line-height:1.2}
.inf-meta{font-size:11px;color:var(--muted);margin-top:5px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.inf-btn-print{display:flex;align-items:center;gap:6px;padding:7px 14px;font-size:11px;font-weight:600;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;font-family:inherit;color:var(--muted);white-space:nowrap;flex-shrink:0;transition:border-color .12s,color .12s}
.inf-btn-print:hover{border-color:var(--brand);color:var(--brand)}
.inf-section{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:18px 20px;display:flex;flex-direction:column;gap:12px}
.inf-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);border-bottom:1px solid var(--border);padding-bottom:8px}
.inf-narrative{font-size:13px;line-height:1.8;color:var(--text)}
.inf-narrative p{margin:0 0 10px}
.inf-narrative p:last-child{margin-bottom:0}
.inf-kpi-row{display:flex;gap:10px;flex-wrap:wrap}
.inf-kpi-card{display:flex;flex-direction:column;align-items:center;padding:12px 18px;background:var(--surface);border:1px solid var(--border);border-radius:8px;min-width:88px;gap:4px;text-align:center}
.inf-kpi-card.ok{background:var(--green-bg);border-color:#c8e6c9}
.inf-kpi-card.warn{background:#fef3c7;border-color:#fde68a}
.inf-kpi-card.alert{background:var(--red-bg);border-color:#fecaca}
.inf-kpi-val{font-size:26px;font-weight:700;color:var(--text);line-height:1;font-family:var(--font-data)}
.inf-kpi-val-sm{font-size:14px}
.inf-kpi-card.ok    .inf-kpi-val{color:var(--green-t)}
.inf-kpi-card.warn  .inf-kpi-val{color:#b45309}
.inf-kpi-card.alert .inf-kpi-val{color:var(--red-t)}
.inf-kpi-lbl{font-size:10px;color:var(--muted);line-height:1.3;text-align:center;white-space:nowrap}
.inf-2col{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.inf-health-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px}
.inf-proj-cell{padding:12px 14px;border-radius:8px;border:1px solid var(--border);background:var(--surface);cursor:pointer;display:flex;flex-direction:column;gap:6px;transition:box-shadow .12s;border-left:3px solid var(--border)}
.inf-proj-cell:hover{box-shadow:0 2px 8px rgba(0,0,0,.08)}
.inf-proj-cell.ok{border-left-color:var(--brand)}
.inf-proj-cell.warn{border-left-color:#b45309}
.inf-proj-cell.alert{border-left-color:var(--sev-crit)}
.inf-proj-cell-top{display:flex;align-items:center;gap:6px}
.inf-proj-cell-name{font-size:12px;font-weight:600;color:var(--text);line-height:1.3}
.inf-proj-cell-meta{font-size:10px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.inf-proj-cell-prog{display:flex;align-items:center;gap:6px}
.inf-proj-cell-pct{font-size:10px;color:var(--muted);white-space:nowrap;font-family:var(--font-data)}
.inf-bar-track{flex:1;height:6px;background:var(--s2);border-radius:3px;overflow:hidden;min-width:40px}
.inf-bar-fill{height:100%;border-radius:3px;transition:width .3s}
.inf-bar-fill.ok{background:var(--brand)}
.inf-bar-fill.warn{background:#b45309}
.inf-bar-fill.alert{background:var(--sev-crit)}
.inf-table-scroll{overflow-x:auto}
.inf-table{width:100%;border-collapse:collapse;font-size:12px}
.inf-table th{text-align:left;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:7px 10px;border-bottom:2px solid var(--border);white-space:nowrap;background:var(--s2)}
.inf-table td{padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:middle}
.inf-table tr:last-child td{border-bottom:none}
.inf-table tr:hover td{background:var(--s2)}
.inf-td-center{text-align:center}
.inf-td-right{text-align:right;font-family:var(--font-data);font-size:11px}
.inf-empty-cell{text-align:center;color:var(--muted);padding:20px !important}
.inf-table-note{font-size:10px;color:var(--muted);margin-top:6px;font-style:italic;line-height:1.5}
.ok-txt{color:var(--green-t) !important}
.warn-txt{color:#b45309 !important}
.alert-txt{color:var(--red-t) !important}
.inf-ok-msg{font-size:11px;color:var(--muted);padding:8px 0;font-style:italic}
.inf-obs-wrap{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:16px 18px;display:flex;flex-direction:column;gap:6px}
.inf-obs-lbl{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.inf-observation{width:100%;padding:10px 12px;font-size:12px;line-height:1.6;border:1px solid var(--border);border-radius:6px;font-family:inherit;color:var(--text);background:var(--bg);resize:vertical;outline:none;box-sizing:border-box;transition:border-color .12s}
.inf-observation:focus{border-color:var(--brand)}
/* Heatmap */
.inf-heatmap-container{display:flex;align-items:flex-start;gap:6px;overflow-x:auto}
.inf-heat-ylabel{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;flex-shrink:0;padding-bottom:28px}
.inf-heat-yaxis{display:flex;flex-direction:column;gap:4px;flex-shrink:0}
.inf-heat-axis-y{height:70px;font-size:10px;color:var(--muted);display:flex;align-items:center;justify-content:flex-end;padding-right:6px;white-space:nowrap}
.inf-heatmap{display:grid;grid-template-columns:repeat(3,80px);grid-template-rows:repeat(3,70px);gap:4px}
.inf-heat-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:6px;cursor:default}
.inf-heat-cell.ric-crit-critico{background:var(--red-bg)}
.inf-heat-cell.ric-crit-alto{background:var(--orange-bg)}
.inf-heat-cell.ric-crit-medio{background:var(--yellow-bg)}
.inf-heat-cell.ric-crit-bajo{background:var(--green-bg)}
.inf-heat-n{font-size:22px;font-weight:700;color:var(--text);line-height:1}
.inf-heat-sublbl{font-size:9px;color:var(--muted);margin-top:2px}
.inf-heat-xaxis{display:grid;grid-template-columns:repeat(3,80px);gap:4px;margin-top:4px}
.inf-heat-axis-x{text-align:center;font-size:10px;color:var(--muted)}
.inf-heat-xlabel{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);text-align:center;margin-top:6px;width:248px}
.inf-heat-legend{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px}
/* Barras financieras */
.inf-bar-chart{display:flex;flex-direction:column;gap:10px}
.inf-bar-row{display:flex;align-items:center;gap:10px}
.inf-bar-label{font-size:11px;color:var(--text);width:160px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.inf-bar-body{flex:1;display:flex;align-items:center;gap:8px;min-width:0}
.inf-bar-presup{height:16px;background:var(--s2);border-radius:8px;min-width:20px;overflow:hidden}
.inf-bar-presup .inf-bar-fill{height:100%;border-radius:8px}
.inf-bar-pct{font-size:10px;white-space:nowrap;font-family:var(--font-data);min-width:30px}
.inf-bar-monto{font-size:10px;color:var(--muted);white-space:nowrap;font-family:var(--font-data)}
.inf-bar-legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:8px;font-size:10px;color:var(--muted)}
.inf-bar-legend-item{display:flex;align-items:center;gap:5px}
.inf-bar-swatch{width:16px;height:8px;border-radius:3px;flex-shrink:0}
.inf-bar-swatch.ok{background:var(--brand)}
.inf-bar-swatch.warn{background:#b45309}
.inf-bar-swatch.alert{background:var(--sev-crit)}
/* Correlación */
.inf-corr-chips{display:flex;flex-wrap:wrap;gap:8px}
.inf-corr-chip{display:flex;align-items:center;gap:8px;background:var(--s2);border:1px solid var(--border);border-radius:6px;padding:8px 14px}
.inf-corr-cat{font-size:12px;font-weight:600;color:var(--text)}
.inf-corr-n{font-size:10px;color:var(--muted);white-space:nowrap}
/* Gráficas del informe (Chart.js) — color=dato con leyenda + fuente al pie (Tufte) */
.inf-chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:18px}
.inf-chart-grid-1{grid-template-columns:minmax(260px,520px)}
.inf-chart-box{display:flex;flex-direction:column;gap:6px;min-width:0}
.inf-chart-lbl{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.inf-chart-canvas{position:relative;height:210px;overflow:hidden;break-inside:avoid;page-break-inside:avoid}
.inf-chart-canvas-sm{height:150px;margin-top:10px}
.inf-chart-src{font-size:10px;color:var(--muted);font-style:italic;line-height:1.4}
/* Selector de proyecto */
.inf-proj-selector{display:flex;align-items:center;gap:10px;padding:8px 0 12px;border-bottom:1px solid var(--border)}
.inf-proj-selector-lbl{font-size:11px;font-weight:600;color:var(--text);white-space:nowrap}

/* ─── HALLAZGOS: los titulares del informe ───────────────────────────────────
   Lidera el documento (lectura de 5s). Cada línea: punto de color por severidad
   + titular en display + cifra en mono + ETIQUETA DE TEXTO. El color nunca es el
   único canal (WCAG 1.4.1): la etiqueta dice "Crítico/Atención/En orden". */
.inf-find{border-left:3px solid var(--text);gap:0}
.inf-find .inf-section-title{margin-bottom:4px}
.inf-find-list{list-style:none;margin:0;padding:0}
.inf-find-item{display:grid;grid-template-columns:9px 1fr auto;column-gap:12px;align-items:start;
  padding:11px 0;border-bottom:1px solid var(--border)}
.inf-find-item:last-child{border-bottom:none;padding-bottom:2px}
.inf-find-dot{width:9px;height:9px;border-radius:50%;margin-top:7px;background:var(--faint);flex-shrink:0}
.inf-find-alert .inf-find-dot{background:var(--red-t)}
.inf-find-warn  .inf-find-dot{background:var(--yellow-t)}
.inf-find-ok    .inf-find-dot{background:var(--green-t)}
.inf-find-txt{font-family:var(--font-display);font-size:15px;font-weight:600;line-height:1.42;color:var(--text)}
.inf-find-fig{font-family:var(--font-data);font-size:14px;font-weight:700;white-space:nowrap;letter-spacing:-.01em}
.inf-find-alert .inf-find-fig{color:var(--red-t)}
.inf-find-warn  .inf-find-fig{color:var(--yellow-t)}
.inf-find-ok    .inf-find-fig{color:var(--green-t)}
.inf-find-tag{align-self:start;margin-top:3px;font-size:9px;font-weight:700;text-transform:uppercase;
  letter-spacing:.07em;padding:2px 7px;border-radius:var(--radius);white-space:nowrap}
.inf-find-tag-alert{background:var(--red-bg);color:var(--red-t)}
.inf-find-tag-warn {background:var(--yellow-bg);color:var(--yellow-t)}
.inf-find-tag-ok   {background:var(--green-bg);color:var(--green-t)}

/* ─── RECOMENDACIONES: tarjetas de acción del documento ──────────────────────
   Espíritu de .ai-card, pero para papel: acento de severidad al filo izquierdo,
   sin botones ni hovers. Severidad = color + palabra (nunca solo color). */
.inf-rec-section{gap:0}
.inf-rec-section .inf-section-title{margin-bottom:12px}
.inf-rec-card{border:1px solid var(--border);border-left:3px solid var(--faint);border-radius:var(--radius);
  padding:12px 14px;background:var(--s2);break-inside:avoid;page-break-inside:avoid}
.inf-rec-card + .inf-rec-card{margin-top:10px}
.inf-rec-critica{border-left-color:var(--sev-crit)}
.inf-rec-alta   {border-left-color:var(--sev-alta)}
.inf-rec-media  {border-left-color:var(--sev-med)}
.inf-rec-baja   {border-left-color:var(--brand)}
.inf-rec-top{display:flex;align-items:baseline;flex-wrap:wrap;gap:5px 10px}
.inf-rec-sev{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;
  padding:2px 7px;border-radius:var(--radius);white-space:nowrap;flex-shrink:0}
.inf-rec-sev-critica{background:var(--red-bg);color:var(--red-t)}
.inf-rec-sev-alta   {background:var(--orange-bg);color:var(--orange-t)}
.inf-rec-sev-media  {background:var(--yellow-bg);color:var(--yellow-t)}
.inf-rec-sev-baja   {background:var(--green-bg);color:var(--green-t)}
.inf-rec-titulo{font-family:var(--font-display);font-size:14px;font-weight:600;line-height:1.35;color:var(--text)}
.inf-rec-proy{margin-left:auto;font-size:10px;color:var(--muted);white-space:nowrap;
  padding-left:10px;border-left:1px solid var(--border)}
.inf-rec-detalle{font-size:12.5px;line-height:1.65;color:var(--text);margin-top:7px}
.inf-rec-accion{display:flex;align-items:baseline;gap:8px;margin-top:9px;padding-top:9px;
  border-top:1px solid var(--border);font-size:12.5px;line-height:1.6;color:var(--text)}
.inf-rec-accion-tag{font-family:var(--font-ui);font-size:9px;font-weight:700;text-transform:uppercase;
  letter-spacing:.07em;color:var(--muted);white-space:nowrap;flex-shrink:0}

/* Portada y pie: solo en papel (ver @media print). En pantalla no existen. */
.inf-print-cover,.inf-print-foot{display:none}

/* Responsive */
@media (max-width:720px){
  .inf-report{padding:16px;gap:14px}
  .inf-2col{grid-template-columns:1fr}
  .inf-bar-label{width:100px}
  .inf-bar-monto{display:none}
  /* 360px: la etiqueta de severidad baja bajo el titular, no lo estrangula */
  .inf-find-item{grid-template-columns:9px 1fr;grid-template-areas:'dot txt' '. tag';row-gap:7px}
  .inf-find-dot{grid-area:dot} .inf-find-txt{grid-area:txt;font-size:14px}
  .inf-find-tag{grid-area:tag;justify-self:start;margin-top:0}
  .inf-rec-proy{margin-left:0;padding-left:0;border-left:none;width:100%}
}
/* ─── EXPORT (imprimir / PDF) ────────────────────────────────────────────────
   El informe deja de ser "una pantalla impresa" y se vuelve entregable: portada
   de marca, pie corrido en cada página y cortes limpios. Todo vive aquí dentro:
   la herramienta en pantalla no se toca. */
@page{ size:A4; margin:16mm 15mm 24mm }

@media print {
  /* 1 · El chasis de la app desaparece; queda el documento.
        html/body vienen con height:100% + overflow:hidden (SPA): sin liberarlos,
        el navegador imprimiría una sola página recortada. */
  html,body{height:auto!important;overflow:visible!important;background:#fff!important}
  body{font-size:11pt;line-height:1.55;color:#111}
  .app{height:auto!important;display:block!important}
  .main-layout{display:block!important;overflow:visible!important}
  .content,.inf-wrap{display:block!important;overflow:visible!important;height:auto!important;background:#fff!important}
  .content-panel.on{display:block!important;overflow:visible!important;height:auto!important}
  .sidebar,.hdr,.inf-tab-bar,.inf-btn-print,.inf-proj-selector,.notif-panel,
  .toast-host,.midia-panel,.hdr-menu-btn,.tour-spot,.tour-banner{display:none!important}
  /* Semáforos, bandas y barras SON el dato: deben salir en papel. */
  *{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important;
    box-shadow:none!important;text-shadow:none!important}

  /* 2 · Portada de marca (una sola, y a página aparte). */
  .inf-print-cover{display:flex!important;flex-direction:column;justify-content:space-between;
    min-height:238mm;break-after:page;page-break-after:always}
  .inf-pc-logo{height:19mm;width:auto;display:block}
  .inf-pc-body{margin-top:auto;padding-bottom:6mm}
  .inf-pc-kicker{font-family:var(--font-ui);font-size:9pt;font-weight:700;text-transform:uppercase;
    letter-spacing:.14em;color:#6B6B6B}
  .inf-pc-title{font-family:var(--font-display);font-size:30pt;font-weight:600;line-height:1.12;
    color:#111;margin-top:5mm;letter-spacing:-.01em}
  .inf-pc-rule{width:28mm;height:2.5pt;background:#111;margin:7mm 0 6mm}
  .inf-pc-meta{display:block;font-size:10pt}
  .inf-pc-row{display:flex;gap:6mm;padding:2.2mm 0;border-bottom:.5pt solid #EAEAEA;max-width:120mm}
  .inf-pc-dt{width:34mm;flex-shrink:0;font-size:8.5pt;font-weight:700;text-transform:uppercase;
    letter-spacing:.07em;color:#6B6B6B;padding-top:.6mm}
  .inf-pc-dd{margin:0;color:#111;font-weight:500}
  .inf-pc-foot{font-size:8.5pt;line-height:1.5;color:#6B6B6B;border-top:.5pt solid #EAEAEA;
    padding-top:3mm;max-width:130mm}

  /* 3 · Pie corrido: `fixed` se repite en cada página impresa (Chrome/WebKit).
        Va en bottom:0 = borde inferior de la caja de contenido (un `bottom` negativo
        NO pinta en el margen: Chrome lo derrama al inicio de la página siguiente).
        Fondo opaco + margen inferior de página holgado para que nunca pise texto.
        Sin número de página: el navegador no expone counter(page) fuera de @page
        y preferimos un pie honesto a un número inventado (el diálogo de impresión
        del sistema puede añadir la numeración). */
  .inf-print-foot{display:flex!important;position:fixed;left:0;right:0;bottom:0;
    align-items:baseline;gap:6px;font-family:var(--font-ui);font-size:7.5pt;color:#6B6B6B;
    background:#fff;border-top:.5pt solid #EAEAEA;padding:1.5mm 0 .5mm;line-height:1.2}
  .inf-pf-org{font-weight:700;color:#111}
  .inf-pf-sep{color:#C8C8C8}
  .inf-pf-date{margin-left:auto;white-space:nowrap}

  /* 4 · El documento: bloque (no flex) para que las páginas corten limpio. */
  .inf-report{display:block!important;max-width:100%;padding:0;margin:0}
  .inf-report > * + *{margin-top:5mm}
  .inf-hdr{border-bottom:1pt solid #111;padding-bottom:3mm}
  .inf-title{font-family:var(--font-display);font-size:16pt}
  .inf-meta{font-size:8.5pt}
  .inf-section{border:.5pt solid #DDD;background:#fff!important;padding:4mm 5mm;
    break-inside:avoid;page-break-inside:avoid}
  .inf-section-title{font-size:8pt}
  .inf-narrative{font-size:10.5pt;line-height:1.6}

  /* 5 · Nada se corta a la mitad. */
  .inf-kpi-card,.inf-rec-card,.inf-find-item,.inf-chart-box,.inf-obs-wrap,
  .inf-proj-cell,.inf-heatmap-container,.inf-corr-chip,.inf-bar-row{
    break-inside:avoid;page-break-inside:avoid}
  .inf-kpi-card{border:.5pt solid #DDD}
  .inf-section-title,.inf-find-txt,.inf-rec-titulo{break-after:avoid;page-break-after:avoid}

  /* 6 · Tablas de papel: encabezado repetido en cada página, filas enteras. */
  .inf-table-scroll{overflow:visible!important}
  .inf-table{break-inside:auto}
  .inf-table thead{display:table-header-group}
  .inf-table tr{break-inside:avoid;page-break-inside:avoid}
  .inf-table tr:hover td{background:transparent!important}
  .inf-table th,.inf-table td{font-size:8.5pt;padding:2mm 2.5mm}

  /* 7 · Hallazgos y recomendaciones en papel. */
  .inf-find-txt{font-size:12.5pt}
  .inf-find-fig{font-size:11.5pt}
  .inf-rec-card{background:#fff!important;border-color:#DDD}
  .inf-rec-detalle,.inf-rec-accion{font-size:10pt}

  /* 8 · Gráficas: una por fila, completas, y el canvas no se estira ni se corta. */
  .inf-chart-grid,.inf-chart-grid-1{display:block!important}
  .inf-chart-box{margin-bottom:5mm;break-inside:avoid;page-break-inside:avoid}
  .inf-chart-canvas{height:180px;max-width:150mm}
  .inf-chart-canvas canvas{max-width:100%!important;height:auto!important}

  /* 9 · Observaciones: se leen como texto, no como formulario. Si el responsable no
        escribió nada, el bloque no va al papel (un recuadro vacío no es información).
        :has() no soportado → degrada al recuadro vacío de siempre, sin romper nada. */
  .inf-observation{border:.5pt solid #DDD;background:#fff!important;resize:none;font-size:10pt}
  .inf-obs-wrap:has(.inf-observation:placeholder-shown){display:none}
}

/* ── COMUNICACIÓN ─────────────────────────────────────────────────────────── */
.comm-tab-bar{display:flex;gap:0;border-bottom:2px solid var(--border);margin:0;flex-shrink:0}
.comm-tab-btn{padding:10px 16px;border:none;background:transparent;font-size:12px;font-weight:500;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:color .12s,border-color .12s;display:flex;align-items:center;gap:5px;font-family:inherit}
.comm-tab-btn:hover{color:var(--text)}
.comm-tab-btn.on{color:var(--brand);border-bottom-color:var(--brand);font-weight:600}
.comm-tab-count{background:var(--brand);color:#fff;font-size:9px;font-weight:700;border-radius:8px;padding:1px 5px;min-width:16px;text-align:center}
.comm-wrap{flex:1;overflow-y:auto;padding:0;display:flex;flex-direction:column;min-height:0}
.comm-feed{display:flex;flex-direction:column;gap:10px;padding:16px 20px 32px;flex:1;overflow-y:auto}
.comm-cat-bar{display:flex;gap:0;border-bottom:1px solid var(--border);flex-shrink:0;overflow-x:auto;background:var(--s2)}
.comm-cat-btn{padding:7px 14px;border:none;background:transparent;font-size:11px;font-weight:500;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;font-family:inherit;display:flex;align-items:center;gap:4px;transition:color .12s}
.comm-cat-btn:hover{color:var(--text)}
.comm-cat-btn.on{color:var(--brand);border-bottom-color:var(--brand);font-weight:600;background:var(--surface)}
.comm-cat-count{background:var(--brand);color:#fff;font-size:8px;font-weight:700;border-radius:8px;padding:1px 4px;min-width:14px;text-align:center}
.comm-feed-filters{display:flex;align-items:center;gap:8px;padding:8px 20px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0;flex-wrap:wrap}
.comm-compose-bar{display:flex;align-items:center;padding:10px 20px;border-bottom:1px solid var(--border);background:var(--s2);flex-shrink:0}
/* Unified compose form */
.comm-form-unified{border-radius:0;border-left:none;border-right:none;border-top:none;border-bottom:2px solid var(--brand)}
.comm-form-dest-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.comm-form-para-lbl{font-size:11px;font-weight:600;color:var(--muted);white-space:nowrap}
.comm-dest-btns{display:flex;gap:0;border:1px solid var(--border);border-radius:5px;overflow:hidden}
.comm-dest-btn{padding:4px 12px;border:none;background:var(--surface);font-size:11px;color:var(--muted);cursor:pointer;font-family:inherit;border-right:1px solid var(--border);transition:background .1s,color .1s}
.comm-dest-btn:last-child{border-right:none}
.comm-dest-btn.on{background:var(--brand);color:#fff;font-weight:600}
.comm-msg-dest{font-size:10px;color:var(--muted);background:var(--s2);border-radius:3px;padding:1px 5px}

/* Filter / header bars (legacy) */
.comm-filter-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid var(--border)}
.comm-filter-sel{height:30px;padding:0 8px;border:1px solid var(--border);border-radius:5px;font-size:12px;background:var(--surface);color:var(--text);cursor:pointer;font-family:inherit}
.comm-new-btn{margin-left:auto;height:30px;padding:0 14px;font-size:12px;font-family:inherit}
.comm-proj-header{display:flex;align-items:center;gap:8px;padding-bottom:12px;border-bottom:1px solid var(--border)}
.comm-proj-select{height:30px;padding:0 8px;border:1px solid var(--border);border-radius:5px;font-size:12px;background:var(--surface);color:var(--text);min-width:200px;flex:1}
.comm-tipo-filter{display:flex;gap:6px;flex-wrap:wrap;padding:8px 0}

/* Message cards */
.comm-msg-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px 14px;cursor:pointer;transition:border-color .12s,box-shadow .12s;position:relative}
.comm-msg-card:hover{border-color:var(--brand-light,#4a9b3f66);box-shadow:0 1px 4px rgba(0,0,0,.06)}
.comm-msg-card.comm-unread{border-left:3px solid var(--brand);background:var(--green-bg)}
.comm-msg-header{display:flex;align-items:flex-start;gap:8px;margin-bottom:6px}
.comm-msg-meta{flex:1;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.comm-msg-autor{font-size:12px;font-weight:600;color:var(--text)}
.comm-msg-proj{font-size:10px;color:var(--muted);background:var(--faint-bg,#F5F5F3);padding:2px 6px;border-radius:4px}
.comm-msg-ts{font-size:10px;color:var(--muted);white-space:nowrap;margin-left:auto}
.comm-msg-body{font-size:13px;color:var(--text);line-height:1.5;margin:4px 0 8px;word-break:break-word;white-space:pre-wrap}
.comm-msg-footer{display:flex;align-items:center;gap:10px}
.comm-unread-dot{width:7px;height:7px;background:var(--brand);border-radius:50%;flex-shrink:0}
.comm-del-btn{background:transparent;border:none;color:var(--muted);cursor:pointer;padding:0 4px;font-size:11px;opacity:.5}
.comm-del-btn:hover{opacity:1;color:var(--alert-red,#B02020)}
.comm-reply-btn{display:flex;align-items:center;gap:4px;background:transparent;border:none;font-size:11px;color:var(--muted);cursor:pointer;padding:2px 6px;border-radius:4px}
.comm-reply-btn:hover{background:var(--border);color:var(--text)}
.comm-reply-count{font-size:10px;color:var(--muted)}

/* Avatar */
.comm-avatar{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;flex-shrink:0}
.comm-avatar-sm{width:22px;height:22px;font-size:9px}
.comm-avatar-xs{width:18px;height:18px;font-size:8px;margin-right:4px}

/* Chips */
.comm-tipo-chip{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:10px;font-size:10px;font-weight:600}
.comm-tipo-mensaje{background:#E8EFF5;color:#1A4E7A}
.comm-tipo-decision{background:#EDF3EC;color:#2D6E30}
.comm-tipo-compromiso{background:#FFF3E0;color:#8A4A10}
.comm-tipo-minuta{background:#F3EFFE;color:#5A2D8A}
.comm-prio-chip{display:inline-flex;padding:2px 7px;border-radius:10px;font-size:10px;font-weight:600}
.comm-prio-normal{background:#F0F0EE;color:#6B6B6B}
.comm-prio-alta{background:#FFF0E6;color:#8A4A10}
.comm-prio-urgente{background:#FFE8E8;color:#B02020}

/* Replies */
.comm-thread{margin-top:10px;padding-left:16px;border-left:2px solid var(--border);display:flex;flex-direction:column;gap:0;position:relative}
.comm-thread-item{display:flex;align-items:flex-start;gap:8px;padding:8px 0;position:relative}
.comm-thread-item.last{padding-bottom:0}
.comm-thread-dot{position:absolute;left:-20px;top:12px;width:8px;height:8px;border-radius:50%;background:var(--surface);border:2px solid var(--border);flex-shrink:0}
.comm-thread-body{flex:1;min-width:0}
.comm-thread-meta{display:flex;align-items:center;gap:6px;margin-bottom:2px}
.comm-resolved-chip{display:inline-flex;align-items:center;gap:3px;background:#e8f5e9;color:#2D6E30;font-size:9px;font-weight:700;border-radius:10px;padding:2px 7px;border:1px solid #a5d6a7;white-space:nowrap}
.comm-resolved{opacity:.85}
.comm-resolve-btn{display:inline-flex;align-items:center;gap:3px;background:transparent;border:1px solid var(--border);font-size:10px;color:var(--muted);cursor:pointer;padding:2px 9px;border-radius:10px;font-family:inherit;transition:border-color .12s,color .12s,background .12s;white-space:nowrap}
.comm-resolve-btn:hover{border-color:var(--brand);color:var(--brand)}
.comm-resolve-btn.resolved{border-color:#2D6E30;color:#2D6E30;background:#e8f5e9}
.comm-adjuntos-list{display:flex;flex-wrap:wrap;gap:5px;margin:6px 0 0}
.comm-adjunto-chip{display:inline-flex;align-items:center;gap:4px;font-size:10px;padding:3px 8px;border-radius:10px;border:1px solid var(--border);background:var(--s2);color:var(--text);text-decoration:none;white-space:nowrap;max-width:220px;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.comm-adjunto-chip:not(.no-url):hover{border-color:var(--brand);color:var(--brand)}
.comm-adjunto-chip.no-url{color:var(--muted);cursor:default}
.comm-form-adjuntos{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 0 0}
.comm-adjunto-btn{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--muted);border:1px dashed var(--border);border-radius:5px;padding:4px 10px;cursor:pointer;background:transparent;font-family:inherit;transition:border-color .12s,color .12s}
.comm-adjunto-btn:hover{border-color:var(--brand);color:var(--brand)}
.comm-adjuntos-preview{display:flex;flex-wrap:wrap;gap:4px;flex:1}
.comm-adj-size{font-size:9px;color:var(--muted);flex-shrink:0}
.comm-adj-del{background:none;border:none;cursor:pointer;color:var(--muted);font-size:10px;padding:0 0 0 3px;line-height:1;flex-shrink:0}
.comm-adj-del:hover{color:var(--red-t)}
.btn-upload-file{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px dashed var(--border);border-radius:5px;cursor:pointer;font-size:14px;flex-shrink:0;transition:border-color .12s,background .12s;background:var(--surface)}
.btn-upload-file:hover{border-color:var(--brand);background:var(--green-bg)}
.comm-reply-card{display:flex;gap:8px;align-items:flex-start}
.comm-reply-body{flex:1}
.comm-reply-meta{display:flex;align-items:center;gap:6px;margin-bottom:2px}
.comm-reply-banner{background:var(--green-bg);border:1px solid var(--brand-light,#4a9b3f44);border-radius:5px;padding:5px 10px;font-size:11px;color:var(--brand);margin-bottom:6px}
.comm-dm-dest-banner{background:var(--indigo-bg);border:1px solid #C8D8F5;border-radius:5px;padding:6px 12px;font-size:12px;color:var(--indigo-t);margin-bottom:8px}

/* Compose form */
.comm-form{background:var(--surface);border:1px solid var(--brand-light,#4a9b3f66);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:8px}
.comm-form-row{display:flex;gap:8px;flex-wrap:wrap}
.comm-form-select{height:30px;padding:0 8px;border:1px solid var(--border);border-radius:5px;font-size:12px;background:#fff;color:var(--text);flex:1;min-width:120px}
.comm-form-input{height:30px;padding:0 8px;border:1px solid var(--border);border-radius:5px;font-size:12px;background:#fff;color:var(--text);flex:1;min-width:120px}
.comm-form-textarea{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:5px;font-size:13px;font-family:inherit;resize:vertical;min-height:70px;box-sizing:border-box}
.comm-form-lbl{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.comm-form-actions{display:flex;gap:8px;justify-content:flex-end}
.comm-add-comp-btn{background:transparent;border:1px dashed var(--border);border-radius:5px;padding:5px 10px;font-size:11px;color:var(--muted);cursor:pointer}
.comm-add-comp-btn:hover{border-color:var(--brand);color:var(--brand)}
.comm-comp-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}

/* Minuta details */
.comm-minuta-detail{background:var(--faint-bg,#F9F9F7);border-radius:5px;padding:8px 10px;margin-top:6px;display:flex;flex-direction:column;gap:6px}
.comm-minuta-section{display:flex;flex-direction:column;gap:4px}
.comm-minuta-lbl{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}
.comm-asistentes{display:flex;flex-wrap:wrap;gap:4px}
.comm-asist-chip{background:#E8EFF5;color:#1A4E7A;padding:2px 8px;border-radius:10px;font-size:11px}
.comm-compromiso{display:flex;align-items:center;gap:6px;font-size:12px}
.comm-compromiso.vencido .comm-compromiso-txt{color:var(--alert-red,#B02020)}
.comm-check{cursor:pointer;font-size:14px;line-height:1;flex-shrink:0}
.comm-check.done{opacity:.5}
.comm-compromiso-txt{flex:1}
.comm-compromiso-resp{font-size:10px;color:var(--muted);background:var(--border);padding:1px 5px;border-radius:3px}
.comm-compromiso-fecha{font-size:10px;color:var(--muted)}
.comm-compromiso-fecha.venc{color:var(--alert-red,#B02020);font-weight:600}

/* Minutas KPIs */
.comm-minutas-kpis{display:flex;gap:12px;flex-wrap:wrap;padding:12px 0;border-bottom:1px solid var(--border)}
.comm-kpi{text-align:center;min-width:80px;padding:8px 12px;background:var(--surface);border:1px solid var(--border);border-radius:6px}
.comm-kpi-val{font-size:20px;font-weight:700;color:var(--text)}
.comm-kpi-lbl{font-size:10px;color:var(--muted);margin-top:2px}
.comm-kpi.comm-kpi-warn .comm-kpi-val{color:#B89A20}
.comm-kpi.comm-kpi-alert .comm-kpi-val{color:var(--alert-red,#B02020)}

/* Analítica */
.comm-analitica-kpis{display:flex;gap:12px;flex-wrap:wrap;padding-bottom:16px;border-bottom:1px solid var(--border)}
.comm-analitica-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;margin-top:12px}
.comm-analitica-section{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:8px}
.comm-analitica-title{font-size:11px;font-weight:700;color:var(--text);text-transform:uppercase;letter-spacing:.08em;border-bottom:1px solid var(--border);padding-bottom:6px}
.comm-abar-row{display:flex;align-items:center;gap:8px;font-size:11px}
.comm-abar-lbl{width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);flex-shrink:0;display:flex;align-items:center}
.comm-abar-track{flex:1;height:8px;background:var(--border);border-radius:4px;overflow:hidden}
.comm-abar-fill{height:100%;background:var(--brand);border-radius:4px;transition:width .3s}
.comm-abar-tipo{background:#1A4E7A}
.comm-abar-persona{border-radius:4px}
.comm-abar-val{width:36px;text-align:right;color:var(--muted);font-size:10px;flex-shrink:0}
.comm-sinact-row{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text);padding:3px 0}
.comm-venc-table{width:100%;border-collapse:collapse;font-size:12px}
.comm-venc-table th{text-align:left;font-size:10px;font-weight:600;color:var(--muted);padding:4px 8px;background:var(--faint-bg,#F5F5F3);text-transform:uppercase;letter-spacing:.05em}
.comm-venc-table td{padding:5px 8px;border-top:1px solid var(--border)}
.comm-venc-table .venc-date{color:var(--alert-red,#B02020);font-weight:600}

/* Empty states */
.comm-empty{color:var(--muted);font-size:13px;text-align:center;padding:40px 20px;background:var(--surface);border:1px dashed var(--border);border-radius:8px}
.comm-empty-sm{color:var(--muted);font-size:11px;padding:8px 0}

/* Documentos de soporte en formulario de actividad */
.af-doc-row{display:flex;gap:6px;align-items:center}
.af-doc-row .af-doc-nombre{flex:1;min-width:0}
.af-doc-row .af-doc-url{flex:2;min-width:0}
.af-doc-remove{flex-shrink:0;background:transparent;border:1px solid var(--border);border-radius:4px;padding:0 8px;height:32px;font-size:16px;line-height:1;color:var(--muted);cursor:pointer;transition:color .15s,border-color .15s}
.af-doc-remove:hover{color:var(--alert-red,#B02020);border-color:var(--alert-red,#B02020)}

/* ── Activity Cards (Ejecución) ── */
/* ─── ACT ROW (nuevo diseño — layout columna completa) ─── */
.act-row{background:var(--surface);border:1px solid var(--border);border-radius:6px;margin-bottom:6px;overflow:hidden;transition:box-shadow .15s,border-color .12s;display:flex}
.act-row:hover{box-shadow:0 2px 10px rgba(0,0,0,.08)}
.act-row.done{opacity:.78}
.act-row.cancelled{opacity:.45}
.act-row-stripe{width:4px;flex-shrink:0}
.act-row--pendiente   .act-row-stripe{background:#9B9B9B}
.act-row--en_proceso  .act-row-stripe,.act-row--en_progreso .act-row-stripe{background:#1A4E7A}
.act-row--realizada   .act-row-stripe{background:#2D6E30}
.act-row--cancelada   .act-row-stripe{background:#C8C8C8}
/* Body: columna completa, todo el ancho */
.act-row-body{flex:1;display:flex;flex-direction:column;gap:0;min-width:0;padding:10px 14px 0}
/* Cabecera: expand + título (wrap) + estado */
.act-row-head{display:flex;align-items:flex-start;gap:7px}
.act-row-expand{background:none;border:none;cursor:pointer;color:var(--muted);font-size:9px;width:18px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;border-radius:3px;transition:background .1s,color .1s;margin-top:2px}
.act-row-expand:hover{background:var(--s2);color:var(--text)}
.act-row-expand.open{color:var(--brand,#2D6E30)}
.act-row-expand-ph{width:18px;flex-shrink:0}
.act-row-title{flex:1;font-size:13px;font-weight:600;color:var(--text);cursor:pointer;line-height:1.4;word-break:break-word;transition:color .1s}
.act-row-title:hover{color:var(--brand,#2D6E30);text-decoration:underline}
.act-row.done      .act-row-title{text-decoration:line-through;color:var(--muted)}
.act-row.cancelled .act-row-title{text-decoration:line-through}
.act-row-estado-badge{flex-shrink:0;margin-left:6px;margin-top:2px}
/* Chips: tipo + prioridad, bajo el título */
.act-row-chips{display:flex;gap:5px;flex-wrap:wrap;padding-left:25px;margin-top:5px}
/* Meta: responsable, fechas, badges */
.act-row-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-left:25px;font-size:11px;margin-top:5px;color:var(--muted)}
/* Barra de acciones al fondo, ancho completo */
.act-row-actions-bar{display:flex;align-items:center;gap:5px;flex-wrap:wrap;padding:7px 0 9px 25px;margin-top:7px;border-top:1px solid var(--border)}
.act-row-btn{background:none;border:1px solid var(--border);border-radius:4px;cursor:pointer;font-size:11px;font-family:inherit;padding:3px 9px;color:var(--text2,var(--muted));transition:background .1s,color .1s;white-space:nowrap}
.act-row-btn:hover{background:var(--s2);color:var(--text)}
.act-row-btn.has-comm{color:var(--brand,#2D6E30);border-color:var(--brand,#2D6E30);font-weight:600}
.act-row-btn-del{border-color:#E8C8C8;color:#B02020;margin-left:auto}
.act-row-btn-del:hover{background:#FFF0F0;color:#B02020}
/* Sub-actividades panel inline */
.act-row-subacts{border-top:2px solid var(--border);background:var(--s2);display:flex;flex-direction:column;gap:0;margin:8px -14px 0}
.act-row-subact{display:flex;align-items:flex-start;gap:8px;padding:7px 14px;border-bottom:1px solid var(--border);font-size:12px}
.act-row-subact:last-child{border-bottom:none}
.act-row-subact.done{background:color-mix(in srgb,var(--s2) 60%,transparent)}
.act-row-subact-titulo{flex:1;color:var(--text);line-height:1.4;word-break:break-word}
.act-row-subact-titulo.tachado{text-decoration:line-through;color:var(--muted)}

.act-card{display:flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--surface);margin-bottom:8px;transition:box-shadow .15s}
.act-card:hover{box-shadow:0 3px 10px rgba(0,0,0,.08)}
.act-card-stripe{width:4px;flex-shrink:0;border-radius:0}
.act-card--pendiente  .act-card-stripe{background:#9B9B9B}
.act-card--en_proceso .act-card-stripe{background:#1A4E7A}
.act-card--realizada  .act-card-stripe{background:#2D6E30}
.act-card--cancelada  .act-card-stripe{background:#C8C8C8}
.act-card.done{opacity:.82}
.act-card.cancelled{opacity:.6}
.act-card-body{flex:1;padding:10px 14px;display:flex;flex-direction:column;gap:7px;min-width:0}
.act-card-top{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}
.act-card-badges{display:flex;gap:4px;align-items:center;flex-shrink:0;flex-wrap:wrap}
.act-card-titulo{flex:1;font-size:13px;font-weight:600;color:var(--text);line-height:1.35;min-width:120px}
.act-card-status-row{display:flex;align-items:center;gap:6px;flex-shrink:0;margin-left:auto}
.act-card-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:11px;color:var(--muted)}
.act-meta-item{display:flex;align-items:center;gap:3px}
.act-days{font-size:11px;font-weight:600;padding:1px 6px;border-radius:4px;background:var(--s2)}
.act-days-ok{color:var(--muted)}
.act-badge-rep{font-size:10px;padding:1px 7px;border-radius:10px;background:#E8EEF4;color:#1A4E7A}
.act-card-actions{display:flex;align-items:center;gap:5px;flex-wrap:wrap;padding-top:6px;border-top:1px solid var(--border)}
.act-btn-advance{background:var(--brand,#2D6E30);color:#fff;border:none;border-radius:var(--radius);padding:4px 11px;font-size:11px;font-weight:600;cursor:pointer;font-family:inherit}
.act-btn-advance:hover{filter:brightness(.9)}
.act-btn-sm{background:var(--s2);border:1px solid var(--border);border-radius:var(--radius);padding:3px 9px;font-size:11px;color:var(--text);cursor:pointer;font-family:inherit}
.act-btn-sm:hover{background:var(--border)}
.act-btn-del-sm{background:transparent;border:1px solid #E8C8C8;border-radius:var(--radius);padding:3px 8px;font-size:11px;color:#B02020;cursor:pointer;margin-left:auto;font-family:inherit}
.act-btn-del-sm:hover{background:#FFF0F0}
.act-card-detail-toggle{background:transparent;border:none;font-size:11px;color:var(--brand,#2D6E30);cursor:pointer;padding:0 2px;white-space:nowrap;font-family:inherit}
.act-card-detail{padding-top:10px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:10px}
.act-det-section{display:flex;flex-direction:column;gap:4px}
.act-det-lbl{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.act-det-text{font-size:12px;color:var(--text);line-height:1.5}
.act-reprog-item{background:var(--s2);border-left:3px solid #B89A20;border-radius:0 5px 5px 0;padding:6px 10px;margin-bottom:4px}
.act-reprog-item-head{font-size:12px;font-weight:600;color:var(--text);margin-bottom:2px}
.act-reprog-item-motivo{font-size:11px;color:var(--muted)}
.act-reprog-item-meta{font-size:10px;color:var(--faint);margin-top:3px}
.act-rep-item2{background:var(--s2);border-radius:5px;padding:7px 10px;margin-bottom:4px}
.act-rep-hdr2{display:flex;gap:10px;margin-bottom:4px;font-size:10px;color:var(--muted)}
.act-doc-link{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--brand,#2D6E30);text-decoration:none;padding:3px 8px;background:var(--s2);border-radius:4px;border:1px solid var(--border)}
.act-doc-link:hover{text-decoration:underline}
.act-docs-grid{display:flex;flex-wrap:wrap;gap:6px}
/* ── Sub-actividades ── */
.act-subacts-list{display:flex;flex-direction:column;gap:4px;margin-top:4px}
.act-subact-item{display:flex;align-items:center;gap:8px;padding:5px 8px;border-radius:5px;background:var(--s2);border:1px solid var(--border)}
.act-subact-item.done{opacity:.7}
.act-subact-check{background:none;border:2px solid var(--border);width:18px;height:18px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:10px;flex-shrink:0;transition:border-color .1s,background .1s,color .1s;color:transparent}
.act-subact-check:hover{border-color:var(--brand)}
.act-subact-check.checked{background:var(--brand);border-color:var(--brand);color:#fff}
.act-subact-titulo{font-size:12px;color:var(--text);flex:1}
.act-subact-titulo.tachado{text-decoration:line-through;color:var(--muted)}
.act-subact-meta{font-size:10px;color:var(--muted);white-space:nowrap}
.act-subact-badge{display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:600;padding:2px 7px;border-radius:10px;background:var(--s2);color:var(--muted);border:1px solid var(--border)}
.act-subact-badge.partial{background:rgba(184,154,32,.12);color:#8A6A00;border-color:rgba(184,154,32,.3)}
.act-subact-badge.all-done{background:var(--green-bg);color:var(--brand);border-color:var(--brand)}
/* ── Evidencias (Mejora A): contador ◈ + bloque de checklist ── */
.act-evi-badge{display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:600;padding:2px 7px;border-radius:10px;background:var(--s2);color:var(--muted);border:1px solid var(--border)}
.act-evi-badge.partial{background:rgba(184,154,32,.12);color:#8A6A00;border-color:rgba(184,154,32,.3)}
.act-evi-badge.all-done{background:var(--green-bg);color:var(--brand);border-color:var(--brand)}
.evi-block{margin-top:4px}
.evi-hdr-ok{color:var(--brand)}
.evi-hdr-pend{color:#8A6A00}
.evi-row{display:flex;align-items:center;flex-wrap:wrap;gap:6px;padding:5px 0;border-bottom:1px solid var(--border);font-size:12px}
.evi-row:last-child{border-bottom:none}
.evi-state{width:16px;text-align:center;font-weight:700}
.evi-row.evi-ok .evi-state{color:var(--brand)}
.evi-row.evi-pend .evi-state{color:var(--muted)}
.evi-label{font-weight:600;color:var(--text)}
.evi-status{font-size:10px;font-weight:600;padding:1px 7px;border-radius:10px}
.evi-status-ok{background:var(--green-bg);color:var(--brand);border:1px solid var(--brand)}
.evi-status-pend{background:rgba(184,154,32,.12);color:#8A6A00;border:1px solid rgba(184,154,32,.3)}
.evi-links{display:inline-flex;flex-wrap:wrap;gap:8px;margin-left:auto}
.evi-upload-btn{cursor:pointer;font-size:11px;font-weight:600;padding:3px 10px;border-radius:var(--radius);border:1px solid var(--border);background:var(--s2);color:var(--text);margin-left:auto}
.evi-upload-btn:hover{border-color:var(--brand);color:var(--brand)}
.evi-upload-btn:focus-within{outline:2px solid var(--brand);outline-offset:2px}
/* ── Reporte: destinatario (Mejora B) ── */
.act-rep-dest{font-size:11px;color:var(--muted);font-weight:600;margin:2px 0}
/* ── Form: sub-actividades ── */
.af-subact-row{display:flex;align-items:center;gap:6px;padding:5px 0;border-bottom:1px solid var(--border);flex-wrap:wrap}
.af-subact-row:last-child{border-bottom:none}
.ejc-act-inline-list{display:flex;flex-direction:column;gap:0;padding:8px 10px}
.ejc-act-gen-list{padding:8px 16px;display:flex;flex-direction:column}

/* ── Gantt Activity Detail Panel ── */
#gnt-act-panel{position:fixed;top:0;right:0;width:340px;height:100vh;background:var(--surface);border-left:1px solid var(--border);box-shadow:-4px 0 20px rgba(0,0,0,.12);z-index:500;display:none;flex-direction:column;overflow:hidden}
#gnt-act-panel-hdr{display:flex;align-items:flex-start;gap:10px;padding:14px 16px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--s2)}
#gnt-act-panel-body{flex:1;overflow-y:auto;padding:14px 16px;display:flex;flex-direction:column;gap:14px}
.gntp-title{font-size:14px;font-weight:700;color:var(--text);line-height:1.3;flex:1}
.gntp-close{background:transparent;border:none;font-size:22px;color:var(--muted);cursor:pointer;line-height:1;padding:0 4px;flex-shrink:0}
.gntp-close:hover{color:var(--text)}
.gntp-badges{display:flex;gap:6px;flex-wrap:wrap}
.gntp-meta{display:flex;flex-direction:column;gap:6px;background:var(--s2);border-radius:6px;padding:10px 12px}
.gntp-meta-row{display:flex;gap:10px;align-items:baseline;font-size:12px}
.gntp-meta-lbl{font-size:10px;font-weight:600;color:var(--muted);text-transform:uppercase;width:72px;flex-shrink:0}
.gntp-meta-val{color:var(--text)}
.gntp-section-title{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border);padding-bottom:4px;margin-bottom:6px}
.gntp-actions{display:flex;gap:8px;padding-top:4px;flex-wrap:wrap}
/* Subactividades read-only (panel de cronograma + side panel calendario). Checklist compacto. */
.gntp-subacts{display:flex;flex-direction:column;gap:3px}
.gntp-subact{display:flex;align-items:flex-start;gap:7px;font-size:12px;line-height:1.4}
.gntp-subact-check{flex-shrink:0;font-size:12px;color:var(--muted);line-height:1.4}
.gntp-subact-check.checked{color:var(--brand)}
.gntp-subact-txt{flex:1;color:var(--text);word-break:break-word}
.gntp-subact-txt.tachado{text-decoration:line-through;color:var(--muted)}

/* ══════════════════════════════════════════════════════════════════════════════
   GASTOS POR FASE — distribución en vista financiera
   ══════════════════════════════════════════════════════════════════════════════ */
.fin-fase-dist-strip{padding:10px 18px 6px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}
.fin-fase-dist-hdr{font-size:9px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px}
.fin-fase-dist-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:6px}
.fin-fase-dist-card{background:var(--s2);border:1px solid var(--border);border-radius:5px;padding:6px 8px;display:flex;flex-direction:column;gap:3px}
.fin-fase-dist-name{font-size:10px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fin-fase-dist-bar-wrap{height:3px;background:var(--border);border-radius:2px;overflow:hidden}
.fin-fase-dist-bar{height:100%;background:var(--brand);border-radius:2px;transition:width .3s}
.fin-fase-dist-meta{display:flex;align-items:center;justify-content:space-between;gap:4px}
.fin-fase-dist-pct{font-size:9px;color:var(--muted);font-weight:600}
.fin-fase-dist-sf .fin-fase-dist-name{color:var(--muted)}

/* Chip de costo en tarjeta de fase (planeación) */
.pln-fase-costo-chip{display:inline-block;font-size:9px;font-weight:700;background:var(--green-bg);color:var(--green-t);padding:2px 6px;border-radius:3px;margin-left:auto}

/* Columna Fase/Actividad en tabla de gastos */
.fgt-fase{min-width:100px}
.fgt-fase-name{font-size:11px;font-weight:600;color:var(--text)}
.fgt-fase-act{font-size:9px;color:var(--muted);margin-top:1px}

/* ══════════════════════════════════════════════════════════════════════════════
   MI DÍA — panel lateral derecho
   ══════════════════════════════════════════════════════════════════════════════ */

/* Sin cambios al grid — se usa el flex existente. Panel controlado por width/overflow */

/* Botón toggle en header */
.midia-toggle-btn{display:flex;align-items:center;gap:5px;background:transparent;border:1px solid var(--border);border-radius:6px;padding:5px 10px;font-size:11px;font-weight:600;color:var(--text-2);cursor:pointer;transition:background .15s,border-color .15s;position:relative}
.midia-toggle-btn:hover{background:var(--s2);border-color:var(--brand);color:var(--brand)}
.midia-toggle-btn.active{background:var(--green-bg);border-color:var(--brand);color:var(--brand)}
.midia-toggle-lbl{font-size:11px}
.midia-toggle-badge{position:absolute;top:-5px;right:-6px;min-width:16px;height:16px;background:var(--red-t);color:#fff;border-radius:8px;font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 3px}

/* Panel principal — cerrado: width:0, abierto: width:248px (animación con flex+transition) */
.midia-panel{width:0;min-width:0;flex-shrink:0;height:100%;display:flex;flex-direction:column;background:var(--surface);border-left:1px solid transparent;overflow:hidden;opacity:0;pointer-events:none;transition:width .25s ease,opacity .2s ease,border-color .25s ease}
.main-layout.midia-open .midia-panel{width:248px;min-width:248px;opacity:1;pointer-events:all;border-left-color:var(--border)}

/* Header del panel */
.midia-hdr{display:flex;align-items:center;justify-content:space-between;padding:10px 12px 8px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--s2)}
.midia-hdr-left{display:flex;align-items:center;gap:6px;color:var(--brand)}
.midia-hdr-title{font-size:12px;font-weight:800;color:var(--text);text-transform:uppercase;letter-spacing:.04em}
.midia-hdr-right{display:flex;align-items:center;gap:6px}
.midia-hdr-date{font-size:9px;color:var(--muted);font-weight:500}
.midia-collapse-btn{background:transparent;border:none;font-size:16px;color:var(--muted);cursor:pointer;line-height:1;padding:0 2px}
.midia-collapse-btn:hover{color:var(--text)}
.midia-cal-btn{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--border);color:var(--muted);cursor:pointer;border-radius:6px;padding:3px;line-height:0}
.midia-cal-btn:hover{color:var(--text);border-color:var(--muted)}
.midia-cal-btn.on{color:#fff;background:#2D6E30;border-color:#2D6E30}

/* Cuerpo scrollable */
.midia-body{flex:1;overflow-y:auto;padding:8px 10px;display:flex;flex-direction:column;gap:0}

/* Secciones del panel */
.midia-section-hdr{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);padding:6px 2px 4px;display:flex;align-items:center;justify-content:space-between}
.midia-section-hdr-count{background:var(--border);color:var(--muted);font-size:8px;padding:1px 5px;border-radius:8px}
.midia-section-empty{font-size:11px;color:var(--muted);padding:6px 4px 8px;font-style:italic}

/* Ítem de tarea */
.midia-item{display:flex;align-items:flex-start;gap:7px;padding:6px 4px;border-radius:5px;border-left:3px solid transparent;transition:background .12s;cursor:default;position:relative}
.midia-item:hover{background:var(--s2)}
.midia-item:hover .midia-item-actions{opacity:1}
/* Prioridades — borde izquierdo */
.midia-item.prio-alta{border-left-color:#e74c3c}
.midia-item.prio-media{border-left-color:#f39c12}
.midia-item.prio-baja{border-left-color:#27ae60}
.midia-item.prio-none{border-left-color:var(--border)}
/* Completado */
.midia-item.done{opacity:.55}
.midia-item.done .midia-item-title{text-decoration:line-through;color:var(--muted)}

/* Checkbox */
.midia-check{flex-shrink:0;width:16px;height:16px;border-radius:4px;border:2px solid var(--border);background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;margin-top:1px;transition:background .12s,border-color .12s}
.midia-check:hover{border-color:var(--brand)}
.midia-check.checked{background:var(--brand);border-color:var(--brand)}
.midia-check.checked::after{content:'';display:block;width:4px;height:7px;border:2px solid #fff;border-top:none;border-left:none;transform:rotate(45deg) translate(-1px,-1px)}

/* Contenido del ítem */
.midia-item-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.midia-item-title{font-size:11px;font-weight:600;color:var(--text);line-height:1.35;word-break:break-word}
.midia-item-meta{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.midia-item-time{font-size:9px;font-weight:700;color:var(--brand);font-variant-numeric:tabular-nums}
.midia-item-time.proxima{color:#e07a20;animation:midia-pulse 1.5s ease-in-out infinite}
@keyframes midia-pulse{0%,100%{opacity:1}50%{opacity:.5}}
.midia-item-proj{font-size:9px;color:var(--brand);background:var(--brand-bg);padding:1px 5px;border-radius:3px;cursor:pointer;max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.midia-item-proj:hover{text-decoration:underline}
.midia-proxima-badge{font-size:8px;font-weight:700;background:#fff3e0;color:#e07a20;padding:1px 5px;border-radius:3px}

/* Chips de tipo */
.midia-tipo-chip{font-size:8px;font-weight:700;padding:1px 5px;border-radius:3px;text-transform:uppercase}
.midia-tipo-tarea{background:#e8f0fe;color:#1a73e8}
.midia-tipo-recordatorio{background:#fff8e1;color:#f9a825}
.midia-tipo-reunion{background:#e6f4ea;color:#1e8e3e}

/* Acciones en hover */
.midia-item-actions{opacity:0;display:flex;gap:2px;flex-shrink:0;margin-top:1px;transition:opacity .12s}
.midia-item-btn{background:transparent;border:1px solid var(--border);border-radius:3px;width:20px;height:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:10px;color:var(--muted);transition:background .1s,color .1s}
.midia-item-btn:hover{background:var(--s2);color:var(--text)}
.midia-item-btn.complete-btn:hover{background:var(--green-bg);color:var(--green-t);border-color:var(--green-t)}
.midia-item-btn.delete-btn:hover{background:#fdecea;color:#c62828;border-color:#c62828}

/* Sección Completadas colapsable */
.midia-done-toggle{display:flex;align-items:center;gap:5px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);cursor:pointer;padding:6px 2px 4px;background:transparent;border:none;width:100%}
.midia-done-toggle:hover{color:var(--text)}
.midia-done-toggle-arrow{transition:transform .2s}
.midia-done-toggle.open .midia-done-toggle-arrow{transform:rotate(90deg)}
.midia-done-list{display:none}
.midia-done-list.open{display:flex;flex-direction:column}

/* Separador visual entre secciones */
.midia-sep{height:1px;background:var(--border);margin:6px 2px}

/* Input rápido de nueva tarea */
.midia-quick-add{display:flex;gap:4px;padding:8px 10px;border-top:1px solid var(--border);flex-shrink:0;background:var(--s2)}
.midia-quick-input{flex:1;padding:6px 10px;font-size:11px;border:1px solid var(--border);border-radius:5px;background:var(--surface);color:var(--text);outline:none;transition:border-color .15s}
.midia-quick-input:focus{border-color:var(--brand)}
.midia-quick-add-btn{width:28px;height:28px;flex-shrink:0;background:var(--brand);border:none;border-radius:5px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#fff;transition:background .15s}
.midia-quick-add-btn:hover{background:var(--brand-hover,var(--brand))}

/* Modal editar — chips de prioridad */
.midia-prio-chips{display:flex;gap:6px;margin-top:4px}
.midia-prio-chip{padding:4px 12px;border-radius:5px;border:2px solid transparent;font-size:11px;font-weight:700;cursor:pointer;background:var(--s2);color:var(--muted);transition:background .12s,border-color .12s,color .12s}
.midia-prio-chip.prio-alta{border-color:#e74c3c}
.midia-prio-chip.prio-media{border-color:#f39c12}
.midia-prio-chip.prio-baja{border-color:#27ae60}
.midia-prio-chip.selected.prio-alta{background:#fdecea;color:#c62828}
.midia-prio-chip.selected.prio-media{background:#fff3e0;color:#e07a20}
.midia-prio-chip.selected.prio-baja{background:#e6f4ea;color:#1e8e3e}

/* ══════════════════════════════════════════════════════════════════════════════
   MI DÍA v2 — vista semanal, progreso, franjas, expandir, EOD, proj-acts
   ══════════════════════════════════════════════════════════════════════════════ */
/* Navegación de semana */
.md-week-nav{display:flex;align-items:center;gap:2px;padding:6px 0 2px}
.md-week-nav-btn{background:none;border:none;cursor:pointer;padding:2px 7px;font-size:18px;color:var(--muted);border-radius:4px;line-height:1;font-weight:300;transition:background .1s,color .1s}
.md-week-nav-btn:hover{background:var(--s2);color:var(--text)}
.md-week-nav-lbl{flex:1;text-align:center;font-size:9px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;padding:0 2px}
.md-week-nav-lbl.current{color:var(--brand)}
/* Strip de días */
.md-week-strip{display:flex;justify-content:space-between;padding:2px 2px 8px;gap:2px}
.md-week-cell{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px 1px;border-radius:5px;cursor:pointer;transition:background .12s}
.md-week-cell:hover{background:var(--s2)}
.md-week-cell.today{background:var(--green-bg)}
.md-week-cell.today .md-week-num{color:var(--brand);font-weight:800}
.md-week-cell.selected{background:var(--s3);box-shadow:inset 0 0 0 1px var(--border)}
.md-week-cell.selected .md-week-num{color:var(--brand)}
.md-week-day{font-size:8px;font-weight:600;text-transform:uppercase;color:var(--muted);letter-spacing:.04em}
.md-week-num{font-size:11px;font-weight:700;color:var(--text)}
.md-week-dot{width:6px;height:6px;border-radius:50%;background:var(--border)}
.md-week-dot.done{background:var(--brand)}
.md-week-dot.overdue{background:#e74c3c}
.md-week-dot.pending{background:#f39c12}
.md-week-dot.empty{background:var(--border)}

.midia-progress-bar{display:flex;align-items:center;justify-content:space-between;padding:4px 4px 8px;gap:6px}
.midia-progress-txt{font-size:10px;color:var(--brand);letter-spacing:-.02em;font-family:var(--font-data)}
.midia-progress-lbl{font-size:9px;color:var(--muted);white-space:nowrap;flex-shrink:0}

.midia-franja-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:5px 2px 2px;display:flex;align-items:center;gap:3px}

.midia-expand-detail{background:var(--s2);border-radius:5px;padding:8px 10px;margin-top:6px;display:flex;flex-direction:column;gap:6px}
/* Fix sobreposición: ocultar botones flotantes cuando el ítem está expandido */
.midia-item.expanded .midia-item-actions{display:none!important}
/* Notas persistentes (del modal de edición) */
.midia-expand-notas{font-size:10px;color:var(--text2);background:var(--s3);border-radius:4px;padding:5px 8px;line-height:1.4;font-style:italic;border-left:2px solid var(--border)}
.midia-expand-proj{font-size:9px}
/* Textarea de observación rápida */
.midia-nota-input{width:100%;font-size:10px;padding:5px 8px;border:1px solid var(--border);border-radius:4px;background:var(--surface);color:var(--text);resize:none;font-family:inherit;line-height:1.4;box-sizing:border-box;transition:border-color .15s}
.midia-nota-input:focus{border-color:var(--brand);outline:none}
/* Tira de botones de acción contextuales */
.midia-action-strip{display:flex;gap:4px;flex-wrap:wrap}
.midia-action-btn{background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:3px 7px;font-size:10px;cursor:pointer;color:var(--text);font-family:inherit;transition:background .1s,border-color .1s,color .1s;white-space:nowrap;line-height:1.4}
.midia-action-btn:hover{background:var(--s3);border-color:var(--muted)}
.midia-action-btn.complete-btn{background:var(--green-bg);border-color:var(--brand);color:var(--brand);font-weight:600}
.midia-action-btn.complete-btn:hover{background:var(--brand);color:#fff}
.midia-action-btn.intento-btn{background:#fff3e0;border-color:#e07a20;color:#b35900}
.midia-action-btn.intento-btn:hover{background:#e07a20;color:#fff}
.midia-action-btn.reprogram-btn{background:#e8f0fe;border-color:#1a73e8;color:#1a4e7a}
.midia-action-btn.reprogram-btn:hover{background:#1a73e8;color:#fff}
.midia-action-btn.delete-btn{border-color:#E8C8C8;color:#B02020}
.midia-action-btn.delete-btn:hover{background:#fdecea;border-color:#c62828}
.midia-action-btn.cerrar-satisf-btn{background:var(--green-bg);border-color:var(--brand);color:var(--brand);font-weight:600}
.midia-action-btn.cerrar-satisf-btn:hover{background:var(--brand);color:#fff}
/* Mini-form reprogramar */
.midia-reprogram-mini{background:var(--s3);border:1px solid var(--border);border-radius:5px;padding:8px;display:flex;flex-direction:column;gap:5px}
/* ── Hilo colaborativo ──────────────────────────────────────────── */
.midia-hilo{display:flex;flex-direction:column;gap:3px;max-height:150px;overflow-y:auto;padding:6px 0 2px;scroll-behavior:smooth}
.midia-hilo-empty{font-size:9px;color:var(--muted);font-style:italic;padding:2px 0}
/* Comentarios: burbujas de chat */
.midia-hilo-msg{display:flex;flex-direction:column;gap:1px;max-width:90%}
.midia-hilo-msg.mine{align-self:flex-end;align-items:flex-end}
.midia-hilo-msg.theirs{align-self:flex-start;align-items:flex-start}
.midia-hilo-autor{font-size:8px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;padding:0 6px}
.midia-hilo-bubble{padding:5px 9px;border-radius:10px;font-size:10px;line-height:1.4;word-break:break-word}
.midia-hilo-bubble.mine{background:var(--brand);color:#fff;border-bottom-right-radius:3px}
.midia-hilo-bubble.theirs{background:var(--s3);color:var(--text);border:1px solid var(--border);border-bottom-left-radius:3px}
.midia-hilo-time{font-size:8px;color:var(--muted);padding:0 6px}
/* Eventos de sistema: compactos, centrados */
.midia-hilo-sys{display:flex;align-items:center;justify-content:center;gap:4px;font-size:9px;color:var(--muted);padding:3px 0}
.midia-hilo-sys-lbl{font-weight:600}
.midia-hilo-sys-nota{font-style:italic}
.midia-hilo-sys-time{margin-left:2px;font-size:8px;opacity:.7}
/* Compositor de comentario */
.midia-hilo-composer{display:flex;gap:4px;padding:5px 0 0;border-top:1px solid var(--border);margin-top:2px}
.midia-hilo-field{flex:1;font-size:10px;padding:5px 8px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--text);font-family:inherit;outline:none;transition:border-color .15s;min-width:0}
.midia-hilo-field:focus{border-color:var(--brand)}
.midia-hilo-btn{border:1px solid var(--border);border-radius:6px;cursor:pointer;font-family:inherit;font-size:10px;padding:5px 8px;background:var(--surface);color:var(--text);transition:background .1s,color .1s;white-space:nowrap;flex-shrink:0}
.midia-hilo-btn.intento{color:#b35900;border-color:#e07a20;background:#fff3e0}
.midia-hilo-btn.intento:hover{background:#e07a20;color:#fff}
.midia-hilo-btn.send{background:var(--brand);color:#fff;border-color:var(--brand);font-weight:600}
.midia-hilo-btn.send:hover{opacity:.85}
/* Historial de trazabilidad (dentro de ítem expandido) */
.midia-historial{border-top:1px solid var(--border);padding-top:5px;margin-top:2px;display:flex;flex-direction:column;gap:2px}
.midia-hist-lbl{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:2px}
.midia-hist-item{display:flex;align-items:baseline;gap:5px;font-size:9px;padding:1px 0}
.midia-hist-icon{flex-shrink:0;width:14px;text-align:center;font-size:10px}
.midia-hist-date{color:var(--muted);white-space:nowrap;flex-shrink:0;font-variant-numeric:tabular-nums}
.midia-hist-nota{color:var(--text);flex:1;word-break:break-word;line-height:1.35}
/* Tab Historial — agrupado por día */
.midia-hist-day{padding:6px 2px 4px}
.midia-hist-day+.midia-hist-day{border-top:1px solid var(--border)}
.midia-hist-day-hdr{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:0 0 4px}
.midia-hist-day-hdr.today{color:var(--brand)}
.midia-hist-day-empty{font-size:10px;color:var(--muted);padding:2px 0;font-style:italic}
.midia-hist-entry{display:flex;align-items:flex-start;gap:5px;padding:3px 0;font-size:10px}
.midia-hist-entry-icon{width:14px;text-align:center;flex-shrink:0;font-size:11px;padding-top:1px}
.midia-hist-entry-time{color:var(--muted);white-space:nowrap;flex-shrink:0;font-variant-numeric:tabular-nums;padding-top:1px;min-width:30px;font-size:9px}
.midia-hist-entry-body{flex:1;display:flex;flex-direction:column;gap:1px}
.midia-hist-entry-task{color:var(--text);font-weight:500;line-height:1.3}
.midia-hist-entry-nota{color:var(--muted);font-style:italic;line-height:1.3;font-size:9px}
.midia-hist-entry-autor{font-weight:700;font-style:normal;color:var(--brand);margin-right:3px}

.midia-eod-banner{background:var(--green-bg);border:1px solid var(--brand);border-radius:8px;padding:10px 12px;margin-top:10px;display:flex;align-items:flex-start;gap:10px}
.midia-eod-emoji{font-size:22px;line-height:1;flex-shrink:0}
.midia-eod-txt{font-size:11px;color:var(--text);line-height:1.5}
.midia-eod-txt strong{color:var(--brand)}

.midia-proj-act{border-left-color:var(--blue-t)!important}
.midia-act-overdue{border-left-color:#e74c3c!important}
.midia-act-overdue .midia-item-title{color:#c62828}

.midia-mover-btn{width:100%;padding:5px;font-size:10px;font-weight:600;color:var(--brand);background:transparent;border:1px dashed var(--brand);border-radius:5px;cursor:pointer;margin-top:4px;font-family:inherit;transition:background .12s}
.midia-mover-btn:hover{background:var(--green-bg)}

/* ── Sin atender (vencidas) ───────────────────────────────────── */
.midia-sin-atender{background:#fef9f0;border:1px solid #f5c57a;border-radius:7px;padding:6px 8px 8px;margin-bottom:8px}
.midia-sin-atender-hdr{display:flex;align-items:center;gap:6px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:#8A4A10;padding:2px 0 6px}
.midia-sin-atender-hdr > span:first-child{flex:1}
.midia-sin-atender-count{background:#f5c57a;color:#7A4A00;font-size:8px;font-weight:700;padding:1px 6px;border-radius:8px;white-space:nowrap}
.midia-sin-atender-all-btn{background:transparent;border:1px solid #c98a30;color:#8A4A10;font-size:9px;font-weight:700;padding:2px 8px;border-radius:4px;cursor:pointer;font-family:inherit;transition:background .12s,color .12s;white-space:nowrap;margin-left:auto}
.midia-sin-atender-all-btn:hover{background:#f5c57a;color:#5A2D00}
/* Badge de días vencida en tarjeta */
.midia-vencida-badge{display:inline-flex;align-items:center;background:#fdecea;color:#c62828;font-size:8px;font-weight:700;padding:1px 5px;border-radius:3px;white-space:nowrap;line-height:1.4;margin-left:2px;vertical-align:middle}
/* Botón →Hoy en acciones rápidas de tarjeta */
.midia-item-btn.midia-ov-hoy{color:#b35900;border-color:#f5c57a;background:#fff8ee;font-weight:700;font-size:9px}
.midia-item-btn.midia-ov-hoy:hover{background:#fdecea;color:#c62828}

.midia-view-date-lbl{font-size:11px;font-weight:700;color:var(--text);padding:4px 2px 8px;text-align:center;border-bottom:1px solid var(--border);margin-bottom:4px}
/* Pestañas Propias / Para mí / Asigné */
.midia-tabs{display:flex;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--surface)}
.midia-tab{flex:1;padding:7px 2px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:color .12s,border-color .12s;font-family:inherit;line-height:1}
.midia-tab:hover{color:var(--text)}
.midia-tab.active{color:var(--brand);border-bottom-color:var(--brand)}
.midia-tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:13px;height:13px;font-size:8px;font-weight:700;background:var(--red-t,#c62828);color:#fff;border-radius:7px;padding:0 3px;margin-left:2px;vertical-align:middle;transition:background .2s}
.midia-tab-badge.has-unread{background:#1A4E7A;animation:badge-pulse 1.4s ease-in-out infinite}

/* ── Secciones colapsables (Mis tareas / Para mí / Asigné) ── */
.midia-sec{border-top:1px solid var(--border);padding-top:2px;margin-top:4px}
.midia-sec:first-child{border-top:none;margin-top:0}
.midia-sec-hdr{display:flex;align-items:center;gap:5px;padding:5px 3px;cursor:pointer;border-radius:4px;user-select:none;transition:background .1s}
.midia-sec-hdr:hover{background:var(--s2)}
.midia-sec-arrow{font-size:8px;color:var(--muted);transition:transform .2s;flex-shrink:0;line-height:1;display:inline-block}
.midia-sec-arrow.open{transform:rotate(90deg)}
.midia-sec-title{flex:1;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.midia-sec-count{font-size:8px;font-weight:700;padding:1px 5px;border-radius:8px;white-space:nowrap;flex-shrink:0}
.midia-sec-body{overflow:hidden;max-height:0;transition:max-height .28s ease}
.midia-sec-body.open{max-height:6000px}
/* Accents por sección */
.sec-propias .midia-sec-title{color:var(--brand)}
.sec-propias .midia-sec-count{background:var(--green-bg);color:var(--brand)}
.sec-parami  .midia-sec-title{color:#1A4E7A}
.sec-parami  .midia-sec-count{background:var(--blue-bg);color:#1A4E7A}
.sec-asigne  .midia-sec-title{color:#8A4A10}
.sec-asigne  .midia-sec-count{background:var(--orange-bg);color:#8A4A10}
.sec-agenda  .midia-sec-title{color:#146E6E}
.sec-agenda  .midia-sec-count{background:var(--blue-bg);color:#146E6E}
.midia-agenda-body{display:flex;flex-direction:column;gap:2px;padding:2px 0}
.midia-evt{display:flex;align-items:center;gap:10px;padding:6px 4px;font-size:12px;border-bottom:1px solid var(--border)}
.midia-evt:last-child{border-bottom:0}
.midia-evt-hora{flex:0 0 58px;color:var(--muted);font-variant-numeric:tabular-nums}
.midia-evt-subj{flex:1;min-width:0;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.midia-evt-join{flex:0 0 auto;font-size:11px;font-weight:700;color:#2D6E30;text-decoration:underline;white-space:nowrap}
.midia-evt-join:hover{color:#255C28}
.midia-evt-pmo{flex:0 0 auto;font-size:9px;font-weight:700;color:#146E6E;background:var(--blue-bg);border-radius:6px;padding:1px 5px;letter-spacing:.03em}
@keyframes badge-pulse{0%,100%{box-shadow:0 0 0 0 rgba(26,78,122,.5)}50%{box-shadow:0 0 0 4px rgba(26,78,122,0)}}
/* Badge de comentarios no leídos en tarjeta */
.midia-unread-badge{display:inline-flex;align-items:center;gap:2px;background:#1A4E7A;color:#fff;font-size:8px;font-weight:700;padding:1px 6px;border-radius:8px;white-space:nowrap;line-height:1.5;margin-left:2px;vertical-align:middle;animation:badge-pulse 1.4s ease-in-out infinite}
/* Badges de asignación en tarjetas */
.midia-asignado-badge{font-size:8px;font-weight:700;padding:1px 5px;border-radius:3px;white-space:nowrap;line-height:1.4}
.midia-asignado-badge.de{background:#fff3e0;color:#b35900}
.midia-asignado-badge.para{background:#e8f0fe;color:#1a4e7a}
.midia-asignado-badge.done{background:var(--green-bg);color:var(--brand)}
/* Vista Asigné — filas de delegados */
.midia-asigne-item{display:flex;flex-direction:column;gap:3px;padding:7px 6px;border-radius:5px;border-left:3px solid #1a73e8;background:var(--surface);margin-bottom:4px;transition:background .12s}
.midia-asigne-item:hover{background:var(--s2)}
.midia-asigne-item.done{opacity:.6;border-left-color:var(--brand)}
.midia-asigne-title{font-size:11px;font-weight:600;color:var(--text);line-height:1.35;word-break:break-word}
.midia-asigne-title.done{text-decoration:line-through;color:var(--muted)}
.midia-asigne-meta{display:flex;align-items:center;gap:5px;flex-wrap:wrap;font-size:9px;color:var(--muted)}
.midia-asigne-hist{font-size:9px;color:var(--muted);background:var(--s2);border-radius:3px;padding:3px 6px;margin-top:2px;line-height:1.4}
/* Tipo llamada */
.midia-tipo-llamada{background:#fce8ff;color:#7b1fa2}
/* Indicador "recibida de" */
.midia-recibida-de{font-size:9px;color:var(--muted);padding:2px 0;font-style:italic}

.midia-date-badge{font-size:8px;font-weight:600;background:var(--yellow-bg);color:var(--yellow-t);padding:1px 5px;border-radius:3px}

/* ══════════════════════════════════════════════════════════════════════════════
   COMUNICACIÓN v2 — menciones, reacciones, chat, buscador, @Yo, comentarios
   ══════════════════════════════════════════════════════════════════════════════ */

/* Buscador de mensajes */
.comm-search-bar{padding:8px 0 0;display:flex;align-items:center;gap:6px}
.comm-search-input{flex:1;padding:6px 10px 6px 30px;font-size:11px;border:1px solid var(--border);border-radius:20px;background:var(--s2);color:var(--text);outline:none;font-family:inherit;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='13' height='13' viewBox='0 0 24 24' fill='none' stroke='%236B6B6B' stroke-width='2'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.35-4.35'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:10px center;transition:border-color .15s}
.comm-search-input:focus{border-color:var(--brand)}
.comm-search-clear{background:none;border:none;font-size:14px;color:var(--muted);cursor:pointer;padding:0 4px;line-height:1;display:none}
.comm-search-clear.visible{display:block}
.comm-search-clear:hover{color:var(--text)}

/* Dropdown @menciones sobre el textarea */
.comm-mention-wrap{position:relative}
.comm-mention-dropdown{position:absolute;left:0;bottom:calc(100% + 4px);background:var(--surface);border:1px solid var(--border);border-radius:6px;box-shadow:var(--shadow-md);z-index:300;min-width:200px;max-height:160px;overflow-y:auto}
.comm-mention-item{display:flex;align-items:center;gap:8px;padding:6px 10px;cursor:pointer;font-size:12px;color:var(--text)}
.comm-mention-item:hover{background:var(--s2)}

/* Chips de @menciones resaltadas en el cuerpo del mensaje */
.comm-mention-chip{display:inline-block;background:var(--indigo-bg);color:var(--indigo-t);border-radius:3px;padding:0 4px;font-size:11px;font-weight:600}
.comm-mention-chip.self{background:var(--green-bg);color:var(--green-t)}

/* Reacciones */
.comm-reactions-row{display:flex;gap:3px;flex-wrap:wrap;padding:4px 0 0}
.comm-reaction-btn{display:inline-flex;align-items:center;gap:2px;background:var(--s2);border:1px solid var(--border);border-radius:10px;padding:2px 7px;font-size:11px;cursor:pointer;transition:background .1s,border-color .1s;font-family:inherit;line-height:1.4}
.comm-reaction-btn:hover{background:var(--indigo-bg);border-color:var(--indigo-t)}
.comm-reaction-btn.active{background:var(--indigo-bg);border-color:var(--indigo-t);font-weight:600}
.comm-reaction-count{font-size:10px;font-weight:600;color:inherit;min-width:10px}

/* Indicador de actividad reciente en avatar */
.comm-avatar-wrap{position:relative;display:inline-flex;flex-shrink:0}
.comm-activity-dot{position:absolute;bottom:0;right:-1px;width:7px;height:7px;border-radius:50%;background:#27ae60;border:1.5px solid var(--surface)}

/* Chat-style por proyecto */
.comm-feed.chat-view{display:flex;flex-direction:column;gap:8px;padding:4px 0}
.comm-chat-bubble{max-width:80%;display:flex;flex-direction:column;gap:3px}
.comm-chat-bubble.own{align-self:flex-end;align-items:flex-end}
.comm-chat-bubble.other{align-self:flex-start;align-items:flex-start}
.comm-chat-meta{font-size:9px;color:var(--muted);display:flex;align-items:center;gap:5px;padding:0 2px}
.comm-chat-body{padding:8px 12px;border-radius:12px;font-size:12px;line-height:1.5;word-break:break-word}
.comm-chat-bubble.own .comm-chat-body{background:var(--brand);color:#fff;border-radius:12px 12px 4px 12px}
.comm-chat-bubble.other .comm-chat-body{background:var(--s2);color:var(--text);border:1px solid var(--border);border-radius:12px 12px 12px 4px}
.comm-chat-ts{font-size:9px;opacity:.7}
.comm-chat-reactions{display:flex;gap:3px;flex-wrap:wrap}
.comm-chat-actions{display:flex;gap:4px;justify-content:flex-end;opacity:0;transition:opacity .12s}
.comm-chat-bubble:hover .comm-chat-actions{opacity:1}

/* Tab @Yo */
.comm-yo-empty{font-size:12px;color:var(--muted);padding:28px 20px;text-align:center;line-height:1.7}
.comm-yo-header{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:6px 0 8px}

/* Comentarios de actividades */
.act-comments-section{display:flex;flex-direction:column;gap:6px;margin-top:6px}
.act-comment-item{display:flex;gap:8px;align-items:flex-start}
.act-comment-avatar{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:8px;font-weight:700;flex-shrink:0}
.act-comment-body{flex:1;background:var(--s2);border-radius:6px;padding:5px 9px}
.act-comment-meta{display:flex;gap:6px;align-items:baseline;margin-bottom:2px}
.act-comment-autor{font-size:10px;font-weight:600;color:var(--text)}
.act-comment-ts{font-size:9px;color:var(--muted)}
.act-comment-txt{font-size:12px;color:var(--text);line-height:1.45}
.act-comment-input-row{display:flex;gap:6px;align-items:center;margin-top:4px}
.act-comment-input{flex:1;padding:5px 9px;font-size:11px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--text);outline:none;font-family:inherit;transition:border-color .15s}
.act-comment-input:focus{border-color:var(--brand)}

/* ══════════════════════════════════════════════════════════════════════════════
   PROVEEDORES — panel, tabla, ficha, autocompletado
   ══════════════════════════════════════════════════════════════════════════════ */

/* Panel header */
.prov-panel-hdr{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 0;flex-shrink:0}
.prov-panel-title{font-size:18px;font-weight:800;color:var(--text);letter-spacing:-.02em}
.prov-panel-sub{font-size:11px;color:var(--muted);margin-top:2px}

/* KPI strip */
.prov-kpi-strip{display:flex;gap:0;padding:12px 24px;border-bottom:1px solid var(--border);flex-shrink:0}
.prov-kpi{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 12px}
.prov-kpi:not(:last-child){border-right:1px solid var(--border)}
.prov-kpi-val{font-size:20px;font-weight:800;color:var(--text);font-family:var(--font-data)}
.prov-kpi-lbl{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}

/* Toolbar */
.prov-toolbar{display:flex;align-items:center;gap:10px;padding:12px 24px;flex-shrink:0;flex-wrap:wrap;border-bottom:1px solid var(--border)}
.prov-search-wrap{position:relative;flex:1;min-width:200px}
.prov-search-input{width:100%;padding:7px 28px 7px 10px;font-size:12px;border:1px solid var(--border);border-radius:6px;background:var(--s2);color:var(--text);outline:none;font-family:inherit;transition:border-color .15s}
.prov-search-input:focus{border-color:var(--brand)}
.prov-search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;font-size:13px;color:var(--muted);cursor:pointer;line-height:1;padding:0}
.prov-search-clear:hover{color:var(--text)}
.prov-filter-row{display:flex;align-items:center;gap:8px}
.prov-estado-btns{display:flex;border:1px solid var(--border);border-radius:5px;overflow:hidden}
.prov-estado-btn{background:transparent;border:none;padding:5px 10px;font-size:11px;cursor:pointer;font-family:inherit;color:var(--muted);transition:background .1s,color .1s}
.prov-estado-btn:hover{background:var(--s2)}
.prov-estado-btn.on{background:var(--brand);color:#fff;font-weight:600}

/* Tabla */
.prov-table-wrap{flex:1;overflow-y:auto;padding:0 24px 16px}
.prov-table{width:100%;border-collapse:collapse;font-size:12px}
.prov-table thead th{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:10px 8px 6px;border-bottom:2px solid var(--border);text-align:left;white-space:nowrap}
.prov-th-num{text-align:right!important}
.prov-table tbody tr{border-bottom:1px solid var(--border);transition:background .1s;cursor:pointer}
.prov-table tbody tr:hover,.prov-tr-open{background:var(--s2)}
.prov-tr-inact{opacity:.6}
.prov-table td{padding:10px 8px;vertical-align:middle}
.prov-td-num{text-align:right;font-family:var(--font-data);font-size:11px;color:var(--text);white-space:nowrap}
.prov-td-doc{font-family:var(--font-data);font-size:11px;color:var(--muted);white-space:nowrap}
.prov-td-contacto{font-size:11px}
.prov-contact-name{font-weight:600;color:var(--text)}
.prov-contact-meta{color:var(--muted);font-size:10px}
.prov-empty{text-align:center;color:var(--muted);font-size:12px;padding:32px 16px;font-style:italic}

/* Avatar */
.prov-avatar{width:30px;height:30px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:800;flex-shrink:0}
.prov-avatar-sm{width:24px;height:24px;border-radius:5px;font-size:8px}
.prov-avatar-lg{width:44px;height:44px;border-radius:8px;font-size:14px;font-weight:800}
.prov-nombre-cell{display:flex;align-items:center;gap:8px}
.prov-nombre{font-weight:600;color:var(--text);font-size:12px}
.prov-inact-chip{display:inline-block;font-size:8px;font-weight:700;background:var(--red-bg);color:var(--red-t);padding:1px 5px;border-radius:3px;margin-top:2px}

/* Categoría chips */
.prov-cat-chip{display:inline-block;font-size:9px;font-weight:700;padding:2px 7px;border-radius:3px;text-transform:uppercase;letter-spacing:.04em}
.prov-cat-hon{background:#F0ECFE;color:#5A2D8A}
.prov-cat-mat{background:#FFF0E6;color:#8A4A10}
.prov-cat-ser{background:#E1F3FE;color:#1A6B8A}
.prov-cat-tra{background:#EDF3EC;color:#2D6E30}
.prov-cat-tec{background:#E8EEF4;color:#1A4E7A}
.prov-cat-otro{background:var(--s2);color:var(--muted)}

/* Acciones en fila */
.prov-row-actions{display:flex;gap:4px;justify-content:flex-end}
.prov-btn-edit,.prov-btn-toggle{background:transparent;border:1px solid var(--border);border-radius:4px;width:26px;height:26px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--muted);transition:background .1s,color .1s,border-color .1s}
.prov-btn-edit:hover{background:var(--indigo-bg);color:var(--indigo-t);border-color:var(--indigo-t)}
.prov-btn-toggle:hover{background:var(--yellow-bg);color:var(--yellow-t);border-color:var(--yellow-t)}

/* Ficha detalle */
.prov-detalle-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;margin:0 24px 16px;box-shadow:var(--shadow-sm);overflow:hidden}
.prov-det-hdr{display:flex;align-items:flex-start;gap:12px;padding:16px 20px;background:var(--s2);border-bottom:1px solid var(--border);position:relative}
.prov-det-hdr-info{flex:1;min-width:0}
.prov-det-nombre{font-size:15px;font-weight:800;color:var(--text);margin-bottom:4px}
.prov-det-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:11px;color:var(--muted)}
.prov-det-contacto{display:flex;flex-wrap:wrap;gap:8px;margin-top:5px;font-size:11px;color:var(--text2)}
.prov-det-link{color:var(--brand);text-decoration:none;font-size:11px}
.prov-det-link:hover{text-decoration:underline}
.prov-det-banco{font-size:11px;color:var(--muted);margin-top:4px}
.prov-det-notas{font-size:11px;color:var(--muted);margin-top:4px;font-style:italic}
.prov-det-close{position:absolute;top:12px;right:14px;background:transparent;border:none;font-size:18px;color:var(--muted);cursor:pointer;line-height:1}
.prov-det-close:hover{color:var(--text)}
.prov-det-proyectos{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 20px;border-bottom:1px solid var(--border);font-size:11px}
.prov-det-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.prov-proj-chip{background:var(--indigo-bg);color:var(--indigo-t);font-size:10px;font-weight:600;padding:2px 8px;border-radius:10px}
.prov-det-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:12px 20px 6px}
.prov-det-empty{font-size:12px;color:var(--muted);padding:12px 20px 16px;font-style:italic}
.prov-det-table{width:100%;border-collapse:collapse;font-size:11px;margin:0 0 8px}
.prov-det-table thead th{font-size:9px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;padding:6px 20px;border-bottom:1px solid var(--border);text-align:left}
.prov-det-table tbody td{padding:7px 20px;border-bottom:1px solid var(--border);color:var(--text)}
.prov-det-table tfoot td{padding:8px 20px;background:var(--s2)}
.prov-det-fecha{white-space:nowrap;font-family:var(--font-data);color:var(--muted)}
.prov-det-monto{text-align:right;font-family:var(--font-data);white-space:nowrap}
.prov-det-desc{color:var(--muted);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Autocompletado en formulario de gasto */
.prov-autocomplete-dd{position:absolute;top:100%;left:0;right:0;background:var(--surface);border:1px solid var(--border);border-radius:6px;box-shadow:var(--shadow-md);z-index:400;max-height:220px;overflow-y:auto;margin-top:2px}
.prov-ac-item{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;transition:background .1s}
.prov-ac-item:hover{background:var(--s2)}
.prov-ac-info{flex:1;min-width:0}
.prov-ac-nombre{font-size:12px;font-weight:600;color:var(--text)}
.prov-ac-meta{font-size:10px;color:var(--muted)}
.prov-rec-chip{display:inline-block;font-size:8px;font-weight:700;background:var(--green-bg);color:var(--green-t);padding:0 4px;border-radius:2px;margin-left:4px}

/* Formulario modal — separadores de sección */
.form-section-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);padding-bottom:2px;border-bottom:1px solid var(--border)}

/* Proveedores — filas de documento (formulario y ficha) */
.prv-doc-row{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid var(--border)}
.prv-doc-row:last-child{border-bottom:none}
.prv-doc-name{font-size:12px;color:var(--text2);min-width:172px;flex-shrink:0}
.prv-doc-chip{font-size:10px;font-weight:600;padding:2px 8px;border-radius:10px;flex-shrink:0;white-space:nowrap}
.prv-doc-chip.ok{background:var(--green-bg);color:var(--brand)}
.prv-doc-chip.pend{background:var(--s2);color:var(--muted)}
.prv-docs-status-list{display:flex;flex-direction:column;padding:4px 0}
.prv-docs-status-row{display:flex;align-items:center;gap:10px;padding:5px 0;border-bottom:1px solid var(--border)}
.prv-docs-status-row:last-child{border-bottom:none}
.prv-doc-link{font-size:11px;color:var(--brand);text-decoration:none;flex-shrink:0;margin-left:auto}
.prv-doc-link:hover{text-decoration:underline}

/* ══════════════════════════════════════════════════════════════════
   MOTOR BI — Panel Inteligencia y sección BI en ficha
   ══════════════════════════════════════════════════════════════════ */

/* ── Portafolio ── */
.bi-port-hdr{padding:20px 24px 10px;border-bottom:1px solid var(--border);background:var(--s2)}
.bi-port-title{font-size:14px;font-weight:800;color:var(--text);letter-spacing:.01em;margin-bottom:6px}
.bi-port-sem-row{display:flex;gap:16px;flex-wrap:wrap}
.bi-port-sem{font-size:11px;font-weight:600}
.bi-port-kpi-row{display:flex;gap:0;border-bottom:2px solid var(--border);flex-wrap:wrap}
.bi-port-kpi{flex:1;min-width:90px;padding:14px 16px;border-right:1px solid var(--border);display:flex;flex-direction:column;gap:3px}
.bi-port-kpi:last-child{border-right:none}
.bi-port-kpi-val{font-size:18px;font-weight:800;color:var(--text);font-family:var(--font-data);line-height:1}
.bi-port-kpi-lbl{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
/* Portafolio: pulso (3 héroe grandes) + detalle (6 compacto) · SCAMPER M */
.bi-port-pulso{border-bottom-width:1px}
.bi-port-pulso .bi-port-kpi-val{font-size:26px}
.bi-port-detalle .bi-port-kpi{padding:10px 16px}
.bi-port-detalle .bi-port-kpi-val{font-size:15px}
.bi-port-tbl-wrap{flex:1;overflow-y:auto;min-height:0}
.bi-port-footer{padding:10px 16px;font-size:9px;color:var(--muted);border-top:1px solid var(--border);background:var(--s2)}
.bi-tbl{width:100%;border-collapse:collapse;font-size:12px}
.bi-tbl thead{position:sticky;top:0;z-index:1;background:var(--s2)}
.bi-tbl th{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:8px 12px;border-bottom:2px solid var(--border);text-align:right;white-space:nowrap}
.bi-tbl-th-name{text-align:left!important}
.bi-tbl-row{cursor:pointer;transition:background .1s}
.bi-tbl-row:hover{background:var(--s2)}
.bi-tbl-row+.bi-tbl-row td{border-top:1px solid var(--border)}
.bi-tbl-name{padding:10px 12px;font-size:12px;font-weight:600;color:var(--text);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bi-tbl-num{padding:10px 12px;text-align:right;font-family:var(--font-data);font-size:12px;color:var(--text);white-space:nowrap}
.bi-tbl-fase{font-size:9px;font-weight:700;color:var(--muted);background:var(--border);padding:1px 5px;border-radius:3px}
.bi-val-ok{color:var(--brand)!important;font-weight:700}
.bi-val-warn{color:#C0960A!important;font-weight:700}
.bi-val-alert{color:#9F2F2D!important;font-weight:700}
.bi-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}

/* ── Sección BI en ficha (3 capas) ── */
.bi-wrap{display:flex;flex-direction:column;gap:20px;padding:16px 4px}
.bi-layer{display:flex;flex-direction:column;gap:10px}
.bi-layer-hdr{display:flex;align-items:flex-start;gap:10px;padding:4px 0}
.bi-layer-icon{font-size:11px;font-weight:700;color:var(--brand);flex-shrink:0;margin-top:2px}
.bi-layer-title{font-size:11px;font-weight:800;color:var(--text);text-transform:uppercase;letter-spacing:.05em}
.bi-layer-sub{font-size:9px;color:var(--muted);margin-top:1px}
/* ── Tarjetas BI v2 — familia del scorecard (.sc-kpi): label arriba, cifra grande, micro a todo ancho ── */
.bi-ind-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:11px}
.bi-ind-card{display:flex;flex-direction:column;background:#fff;border:1px solid #e7e7ec;border-left:3px solid var(--sem,#e7e7ec);border-radius:9px;padding:13px 14px;position:relative;overflow:hidden;min-width:0;transition:box-shadow .12s,transform .12s;cursor:default}
.bi-ind-card:hover{box-shadow:var(--shadow-sm);transform:translateY(-1px)}
.bi-ind-lbl{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#6b6b78;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:25px}
.bi-ind-val{font-family:var(--font-data);font-variant-numeric:tabular-nums;font-size:24px;font-weight:700;line-height:1.05;color:var(--text);margin-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.bi-ind-val small{font-size:13px;color:#6b6b78;font-weight:600}
.bi-ind-pend{background:#fafafa;border-left-color:#ececf0}
.bi-ind-pend .bi-ind-val{color:var(--muted)}
.bi-ind-foot{font-size:10px;color:#6b6b78;margin-top:8px;display:flex;align-items:center;gap:5px}
.bi-ind-foot .dot{width:7px;height:7px;border-radius:50%;background:var(--sem,#9a9aa6);flex-shrink:0}
.bi-ind-hero{grid-column:span 2;padding:15px 17px}
.bi-ind-hero .bi-ind-val{font-size:32px}
.bi-ind-hero .bi-ind-val small{font-size:16px}
.bi-ind-hero .bi-ind-micro{min-height:38px;margin-top:11px}
.bi-ind-hero .bi-spark{height:38px}
.bi-ind-hero .bi-ind-lbl{font-size:10px;-webkit-line-clamp:1;min-height:0}
.bi-ind-hero .bi-ind-foot{font-size:11px;margin-top:10px}
.bi-layer-count{font-size:9.5px;font-weight:600;color:var(--muted);white-space:nowrap;align-self:center;font-family:var(--font-data)}
.bi-layer-bar{display:flex;height:5px;border-radius:3px;overflow:hidden;background:#f0f0f3;margin:2px 0 4px}
.bi-layer-seg{display:block;height:100%}
/* tarjeta focusable (tooltip por teclado) + micro-gráficas v2 (100% ancho) */
.bi-ind-card[tabindex]{cursor:help}
.bi-ind-card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.bi-ind-micro{margin-top:9px;min-height:18px;display:flex;align-items:center}
.bi-spark{display:block;width:100%}
.bi-ind-bar{width:100%;height:5px;background:#ececf0;border-radius:3px;overflow:hidden;position:relative}
.bi-ind-bar i{display:block;height:100%;background:var(--sem,#9a9aa6)}
.bi-ind-bar b{position:absolute;top:-2px;width:1.5px;height:9px;background:#1a1a1a;opacity:.55}
.bi-ind-dots{display:flex;gap:4px}
.bi-ind-dots span{width:6px;height:6px;border-radius:50%;background:var(--sem,#9F2F2D)}
.bi-ind-quiet{background:#fafafa;border-left-color:#dfe7df}
.bi-ind-quiet .bi-ind-val{color:#5f7d5d!important;font-size:20px}
.bi-ind-quiet .bi-ind-micro,.bi-ind-quiet .bi-ind-foot{display:none}
@media(max-width:600px){.bi-ind-grid{grid-template-columns:1fr 1fr;gap:9px}.bi-ind-val{font-size:22px}}
@media(max-width:360px){.bi-ind-grid{grid-template-columns:1fr}.bi-ind-hero{grid-column:span 1}}
/* Línea de "Pendientes" colapsable */
.bi-pend-line{margin-top:9px;font-size:11px;color:#67677a;cursor:pointer;user-select:none;display:flex;align-items:center;gap:6px}
.bi-pend-line:hover{color:#44444f}
.bi-pend-list{margin-top:7px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px}
.bi-pend-item{font-size:10px;color:#5f5f6b;background:#fafafa;border:1px solid #f0f0f3;border-radius:6px;padding:6px 9px;line-height:1.35}
.bi-pend-item b{display:block;color:#44444f;font-weight:600;text-transform:uppercase;font-size:9px;letter-spacing:.03em}
/* Tooltip rico de indicador */
#bi-tip{position:fixed;z-index:9999;width:clamp(250px,80vw,310px);background:#1a1a1f;color:#f5f5f7;border-radius:8px;padding:13px 15px;box-shadow:0 4px 16px rgba(0,0,0,.18);font-family:var(--font-body,system-ui);opacity:0;transform:translateY(4px);transition:opacity .16s cubic-bezier(.2,.8,.2,1),transform .16s cubic-bezier(.2,.8,.2,1);pointer-events:none}
#bi-tip.on{opacity:1;transform:translateY(0)}
.bi-tip-def{font-size:13.5px;line-height:1.35;color:#f5f5f7;font-weight:500}
.bi-tip-sigla{font-family:var(--font-data,monospace);font-weight:800;color:#fff;background:#2f2f37;padding:1px 6px;border-radius:5px;font-size:12px;letter-spacing:.02em}
.bi-tip-meta{display:flex;align-items:baseline;gap:8px;margin:9px 0;padding-bottom:9px;border-bottom:1px solid #34343c}
.bi-tip-val{font-family:var(--font-data,monospace);font-size:18px;font-weight:800}
.bi-tip-chip{font-size:8.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:1.5px 7px;border-radius:8px;background:#2a2a31}
.bi-tip-body section{margin-bottom:8px}
.bi-tip-body h6{font-size:8.5px;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:#8f8f99;margin:0 0 2px}
.bi-tip-body p{font-size:12px;line-height:1.45;margin:0;color:#e6e6ea}
.bi-tip-body .act{border-left:2px solid var(--brand);padding-left:8px}
.bi-tip-body .act h6{color:var(--brand)}
.bi-tip-ft{font-size:8px;color:#9a9aa5;text-transform:uppercase;letter-spacing:.05em;border-top:1px solid #34343c;padding-top:7px;display:flex;justify-content:space-between;gap:8px}
.bi-tip-caret{position:absolute;width:10px;height:10px;background:#1a1a1f;transform:rotate(45deg)}
@media(prefers-reduced-motion:reduce){#bi-tip{transition:none;transform:none}}
@media(max-width:480px){#bi-tip{left:12px!important;right:12px!important;width:auto;bottom:12px;top:auto!important}.bi-tip-caret{display:none}}
.bi-layer-empty{font-size:10px;color:var(--muted);font-style:italic;padding:4px 0}
.bi-wrap-footer{font-size:9px;color:var(--muted);padding:8px 4px;border-top:1px solid var(--border)}
.bi-empty{display:flex;align-items:center;justify-content:center;height:200px;font-size:13px;color:var(--muted);font-style:italic}

/* ── Formulario BIC ── */
.pf-bic-toggle{display:flex;align-items:center;gap:6px;cursor:pointer;user-select:none;padding:4px 0}
.pf-bic-toggle:hover .form-section-lbl{color:var(--brand)}
.pf-bic-toggle-arrow{font-size:9px;color:var(--muted);transition:transform .15s}
.pf-bic-toggle-sub{font-size:9px;color:var(--muted);font-weight:400}
.pf-bic-checks{display:flex;flex-direction:column;gap:6px;margin-top:4px}
.pf-bic-check-lbl{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:var(--text);cursor:pointer;line-height:1.4}
.pf-bic-check-lbl input[type="checkbox"]{margin-top:2px;flex-shrink:0;accent-color:var(--brand)}
.pf-bic-dim{font-size:9px;font-weight:700;color:var(--muted);background:var(--border);padding:1px 4px;border-radius:3px;margin-left:4px}
.pf-bic-ods-grid{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
.pf-bic-ods-chip{background:var(--s2);border:1px solid var(--border);border-radius:4px;padding:4px 8px;font-size:10px;font-weight:600;color:var(--muted);cursor:pointer;transition:background .1s,color .1s,border-color .1s;display:flex;align-items:center;gap:3px}
.pf-bic-ods-chip:hover{background:var(--green-bg);color:var(--brand);border-color:var(--brand)}
.pf-bic-ods-chip.on{background:var(--brand);color:#fff;border-color:var(--brand)}
.pf-bic-ods-lbl{font-weight:400}

/* ── Panel BIC en portafolio ── */
.bi-bic-section{padding:16px;border-top:2px solid var(--border)}
.bi-bic-empty .bi-layer-empty{padding:4px 0}
.bi-bic-kpi-row{display:flex;gap:0;flex-wrap:wrap;background:var(--s2);border:1px solid var(--border);border-radius:6px;overflow:hidden;margin-top:8px}
.bi-bic-kpi{flex:1;min-width:130px;padding:12px 16px;border-right:1px solid var(--border);display:flex;flex-direction:column;gap:3px}
.bi-bic-kpi:last-child{border-right:none}
.bi-bic-kpi-val{font-size:20px;font-weight:800;color:var(--text);font-family:var(--font-data);line-height:1}
.bi-bic-kpi-lbl{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);line-height:1.3}
.bi-bic-ods-chip{display:inline-block;background:var(--blue-bg);color:var(--blue-t);font-size:9px;font-weight:700;padding:2px 7px;border-radius:10px;margin-right:4px;white-space:nowrap}

/* (Estilos .bi-rec-* eliminados: las recomendaciones ya no se repintan en BI;
   viven en el Análisis Innolabs del Resumen. Ver enlace .bi-rec-link en components.css.) */
/* ── Bloque predictivo (Fase 5) ── */
.bi-pred-block{background:var(--s2);border:1px solid var(--border);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:10px}
.bi-pred-tend{margin-left:auto;display:flex;flex-direction:column;align-items:center;gap:2px;flex-shrink:0}
.bi-pred-rows{display:flex;flex-direction:column;gap:2px}
.bi-pred-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:5px 0;border-bottom:1px solid var(--border)}
.bi-pred-row:last-child{border-bottom:none}
.bi-pred-lbl{font-size:11px;color:var(--muted)}
.bi-pred-val{font-size:13px;font-weight:700;font-family:var(--font-data);display:flex;align-items:center;gap:6px}
.bi-pred-dev{font-size:10px;font-weight:600;font-family:var(--font-data);opacity:.85}
.bi-pred-alertas{display:flex;flex-direction:column;gap:5px}
.bi-pred-alerta{display:flex;align-items:flex-start;gap:8px;padding:7px 10px;border-radius:5px;font-size:11px;line-height:1.4;border-left:3px solid}
.bi-pred-alerta-icon{flex-shrink:0;margin-top:1px}
.bi-pred-alert-alta{background:#fdecea;color:#7a2020;border-color:#c62828}
.bi-pred-alert-media{background:#fff8e1;color:#7a5c00;border-color:#f9a825}
.bi-pred-ok{font-size:11px;color:var(--brand);font-weight:600;padding:4px 0}
/* Alertas predictivas en portafolio */
.bi-pred-port-row{display:flex;align-items:flex-start;gap:10px;padding:7px 10px;border-radius:5px;border-left:3px solid}
.bi-pred-port-row.bi-pred-alert-alta{background:#fdecea;border-color:#c62828}
.bi-pred-port-row.bi-pred-alert-media{background:#fff8e1;border-color:#f9a825}
.bi-pred-port-name{font-size:11px;font-weight:700;color:var(--brand);cursor:pointer;white-space:nowrap;flex-shrink:0;min-width:120px}
.bi-pred-port-name:hover{text-decoration:underline}
.bi-pred-port-msg{font-size:11px;color:var(--text);line-height:1.4;flex:1}
/* ── Gráfico de tendencia ── */
.bi-chart-wrap{height:200px;position:relative;background:var(--surface);border-radius:6px;padding:8px;border:1px solid var(--border)}
.bi-trend-tbl-wrap{overflow-x:auto;margin-top:6px}
.bi-trend-tbl{width:100%;border-collapse:collapse;font-size:11px}
.bi-trend-tbl thead th{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:4px 8px;border-bottom:1px solid var(--border);text-align:right}
.bi-trend-tbl thead th:first-child{text-align:left}
.bi-trend-tbl tbody tr+tr td{border-top:1px solid var(--border)}
.bi-trend-fecha{padding:6px 8px;font-family:var(--font-data);font-size:10px;color:var(--muted)}
.bi-trend-num{padding:6px 8px;text-align:right;font-family:var(--font-data);font-size:11px}
/* ── Diagnóstico cruzado ── */
.bi-diag-section{padding:16px;border-top:2px solid var(--border);background:var(--s2)}
.bi-diag-hdr{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-bottom:8px}
.bi-diag-tbl{width:100%;border-collapse:collapse;font-size:11px;margin-bottom:4px}
.bi-diag-th{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:4px 10px;border-bottom:1px solid var(--border);text-align:right}
.bi-diag-th:first-child{text-align:left}
.bi-diag-tbl tbody tr+tr td{border-top:1px solid var(--border)}
.bi-diag-lbl{padding:7px 10px;font-size:11px;font-weight:600;color:var(--text)}
.bi-diag-num{padding:7px 10px;text-align:right;font-family:var(--font-data);font-size:11px;color:var(--text)}
.bi-diag-alert-list{display:flex;flex-direction:column;gap:4px}
.bi-diag-alert-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px;background:var(--surface);border-radius:5px;border:1px solid var(--border)}
.bi-diag-alert-name{font-size:11px;font-weight:600;color:var(--brand);cursor:pointer;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bi-diag-alert-name:hover{text-decoration:underline}
.bi-diag-alert-val{font-size:10px;font-weight:700;white-space:nowrap;font-family:var(--font-data)}
/* ── Bloque EVM ── */
.bi-evm-block{background:var(--s2);border:1px solid var(--border);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:10px}
.bi-evm-headline{margin-left:auto;display:flex;align-items:center;flex-shrink:0}
.bi-evm-tbl{width:100%;border-collapse:collapse}
.bi-evm-th{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);padding:4px 8px;border-bottom:1px solid var(--border);text-align:left}
.bi-evm-row+.bi-evm-row td{border-top:1px solid var(--border)}
.bi-evm-lbl{padding:7px 8px;font-size:11px;color:var(--muted);white-space:nowrap}
.bi-evm-val{padding:7px 8px;font-size:13px;font-weight:700;font-family:var(--font-data);text-align:right;white-space:nowrap}
.bi-evm-sem{padding:7px 4px;text-align:center;width:20px}
.bi-evm-pronostico{font-size:10px;color:var(--muted);padding:6px 8px;background:var(--surface);border-radius:5px;line-height:1.5;border-left:3px solid var(--brand)}

/* ─── OFICINA · centro de costo (Fase D, solo Dir/Fin) ─────────────────────── */
.ofi-cc{padding:16px 24px 18px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--s2)}
.ofi-cc-head{margin-bottom:12px}
.ofi-cc-title{font-family:var(--font-display);font-size:16px;font-weight:600;color:var(--text);letter-spacing:-.01em}
.ofi-cc-help{font-size:11px;color:var(--muted);margin-top:2px}
.ofi-cc-empty{font-size:12px;color:var(--muted);line-height:1.6;padding:6px 0}
/* Cifra estrella: destaca más que los mini-KPIs. Color = resultado. */
.ofi-cc-star{padding:12px 0 14px;margin-bottom:12px;border-bottom:1px solid var(--border)}
.ofi-cc-star-val{font-size:34px;font-weight:800;line-height:1.05;letter-spacing:-.02em}
.ofi-cc-star-val.ok{color:var(--green-t)}
.ofi-cc-star-val.neg{color:var(--red-t)}
.ofi-cc-star-lbl{font-size:12px;font-weight:700;margin-top:4px}
.ofi-cc-star-lbl.ok{color:var(--green-t)}
.ofi-cc-star-lbl.neg{color:var(--red-t)}
.ofi-cc-star-formula{font-size:10px;color:var(--muted);margin-top:3px;font-style:italic}
/* Bloques de mini-KPIs: reusan .prov-kpi-strip pero sin borde inferior propio. */
.ofi-cc-block{margin-bottom:12px}
.ofi-cc-block-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-bottom:5px}
.ofi-cc-kpis{padding:0;border-bottom:none;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}
.ofi-cc-kpis .prov-kpi-val.neg{color:var(--red-t)}
.ofi-cc-proy{font-size:11px;color:var(--muted);line-height:1.6;padding:4px 0}
.ofi-cc-proy strong{color:var(--text);font-family:var(--font-data)}
@media(max-width:520px){
  .ofi-cc{padding:14px 16px}
  .ofi-cc-star-val{font-size:28px}
  .ofi-cc-kpis{flex-wrap:wrap}
  .ofi-cc-kpis .prov-kpi{flex:1 1 100%;border-right:none;border-bottom:1px solid var(--border);align-items:flex-start;text-align:left}
  .ofi-cc-kpis .prov-kpi:last-child{border-bottom:none}
}
