/* ════════════════════════════════════════════════════
   modals.css — Overlay, auth modal, team modal
   ════════════════════════════════════════════════════ */

/* ── Toast ───────────────────────────────────────── */
.ciqa-toast {
  position: fixed; bottom: 28px; right: 28px; z-index: 9999;
  max-width: 340px; padding: 13px 18px; border-radius: 10px;
  font-size: 13.5px; font-weight: 500; line-height: 1.4;
  box-shadow: 0 6px 24px rgba(0,0,0,.18);
  pointer-events: none; opacity: 0;
  transition: opacity .25s, transform .25s;
  transform: translateY(10px);
}
.ciqa-toast-in  { opacity: 1; transform: translateY(0); }
.ciqa-toast-out { opacity: 0; transform: translateY(10px); }
.ciqa-toast-info { background: var(--deep, #0d2a36); color: #fff; }
.ciqa-toast-warn { background: #744210; color: #fefcbf; border: 1px solid #d69e2e; }
.ciqa-toast-ok   { background: #1c4532; color: #c6f6d5; border: 1px solid #38a169; }
.ciqa-toast-err  { background: #742a2a; color: #fff5f5; border: 1px solid #e53e3e; }

/* ── Shared overlay ──────────────────────────────── */
.overlay {
  position: fixed; inset: 0; z-index: 500; background: rgba(8,6,24,.65);
  backdrop-filter: blur(4px); display: none; align-items: center; justify-content: center; padding: 20px;
}
.overlay.open { display: flex; }

/* Bloqueo de scroll con modal/drawer abierto.
   El JS setea overflow:hidden en <body>, pero como <html> tiene
   overflow-x:hidden (tokens.css) ese hidden NO se propaga al viewport
   y la página seguía scrolleando detrás del modal. El corte tiene
   que hacerse en <html>. Cubre los 7 overlays y el menú móvil. */
html:has(.overlay.open),
html:has(.mobile-nav.open) { overflow: hidden; }

/* ── Auth modal ──────────────────────────────────── */
.modal {
  background: var(--white); border-radius: 18px; width: 100%; max-width: 452px;
  max-height: calc(100vh - 48px);
  display: flex; flex-direction: column;
  box-shadow: var(--shlg); animation: mIn .22s ease;
}
@keyframes mIn { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:none} }
/* Cierre: mismo camino que la entrada, invertido — más rápido que abrir
   (180ms vs 220ms) porque despedirse debe sentirse más ágil que llegar. */
.modal.closing, .team-modal.closing { animation: mOut .18s ease forwards; }
@keyframes mOut { from{opacity:1;transform:none} to{opacity:0;transform:translateY(10px)} }
@media (prefers-reduced-motion: reduce) {
  .modal, .team-modal { animation: none; }
  .modal.closing, .team-modal.closing { animation: none; }
}
.modal-head  { padding: 26px 26px 0; display: flex; justify-content: space-between; align-items: flex-start; flex-shrink: 0; }
.modal-title { font-size: 21px; font-weight: 800; color: var(--deep); }
.modal-sub   { font-size: 13.5px; color: var(--muted); margin-top: 3px; }
.modal-close {
  width: 30px; height: 30px; border-radius: 7px; background: var(--slate);
  border: none; cursor: pointer; display: flex; align-items: center; justify-content: center;
  font-size: 16px; color: var(--muted); transition: background .15s; flex-shrink: 0;
}
.modal-close:hover { background: var(--border); }
.modal-tabs  { display: flex; padding: 18px 26px 0; border-bottom: 1px solid var(--border); margin-top: 18px; flex-shrink: 0; }
.tab-btn {
  font-size: 13.5px; font-weight: 600; padding: 9px 14px;
  background: none; border: none; cursor: pointer; color: var(--muted);
  border-bottom: 2.5px solid transparent; margin-bottom: -1px; transition: all .15s;
}
.tab-btn.on  { color: var(--deep); border-bottom-color: var(--deep); }
.modal-body  { padding: 22px 26px 26px; overflow-y: auto; flex: 1; }
.tab-panel   { display: none; }
.tab-panel.on { display: block; }
.m-alert     { padding: 10px 12px; border-radius: 7px; font-size: 13px; margin-bottom: 14px; display: none; }
.m-alert-err { background: #FEF2F2; color: #9B1C1C; border: 1px solid #FECACA; }
.m-alert-ok  { background: #EDFAF4; color: #1A6A48; border: 1px solid #A7E3C9; }
.m-alert-info { background: #EFF6FF; color: #1e40af; border: 1px solid #BFDBFE; }
/* Checklist de requisitos de contraseña — se tilda en vivo mientras se
   escribe (ver _actualizarPwdChecklist en auth.js). Reemplaza a una
   barra de fuerza abstracta: acá se ve exactamente qué falta. */
.pwd-req { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.pwd-req li {
  font-size: 12px; color: var(--muted); display: flex; align-items: center; gap: 7px;
  transition: color .15s;
}
.pwd-req li::before { content: '○'; font-size: 8px; color: var(--border); }
.pwd-req li.met { color: #276749; }
.pwd-req li.met::before { content: '✓'; font-size: 11px; font-weight: 800; color: #276749; }
.form-divider { display: flex; align-items: center; gap: 10px; margin: 16px 0; font-size: 12px; color: var(--muted); }
.form-divider::before, .form-divider::after { content:''; flex:1; height:1px; background: var(--border); }

/* ── Team modal ──────────────────────────────────── */
.team-modal {
  background: var(--white); border-radius: 20px;
  width: 640px; max-width: 94vw; max-height: 82vh;
  display: flex; flex-direction: column;
  box-shadow: 0 24px 60px rgba(0,0,0,.25); overflow: hidden;
  animation: mIn .22s ease;
}
.tm-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  padding: 24px 28px 18px; border-bottom: 1px solid var(--border); flex-shrink: 0;
}
.tm-title { font-size: 20px; font-weight: 700; color: var(--text); margin-bottom: 2px; }
.tm-sub   { font-size: 13px; color: var(--muted); }
.tm-body  { overflow-y: auto; flex: 1; min-height: 0; padding: 24px 28px; display: flex; flex-direction: column; gap: 28px; }
.tm-group-title {
  font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .09em;
  color: var(--deep); padding-bottom: 10px; border-bottom: 2px solid var(--border); margin-bottom: 14px;
}
.tm-g-agua  { color: var(--teal2); border-color: var(--teal); }
.tm-g-suelo { color: #7A5410; border-color: #C49A26; }
.tm-g-aire  { color: #2878C8; border-color: #4EA0E0; }
.tm-g-lab   { color: #1A7A50; border-color: #2A9E6A; }
.tm-g-audit { color: var(--deep); border-color: var(--deep); }
.tm-g-soporte { color: #8F3A22; border-color: #C0563A; }
.tm-members { display: flex; flex-direction: column; }
.tm-member  {
  display: flex; align-items: center; gap: 16px;
  padding: 14px 12px; border-bottom: 1px solid var(--border); transition: background .15s;
}
.tm-member:last-child { border-bottom: none; }
/* :not(.tm-member--jefe) — si no, el hover pisa el degradé del área con
   el shorthand "background" (que resetea background-image a "none"). */
.tm-member:hover:not(.tm-placeholder):not(.tm-member--jefe) { background: var(--slate); }

/* Marca leve para jefes de área y directores: el tono más oscuro de la
   card de esa área en "Equipo del centro" (.alc-agua/.alc-suelo/etc, ver
   sections.css) a blanco puro (#fff), monótono de izquierda a derecha —
   100% de intensidad pegado al borde izquierdo, aclarando sin pausas
   hasta blanco (nunca clarito → oscuro → claro, eso se ve como una línea
   a mitad de camino). Corta al 33% del ancho de la fila (1/3 con color,
   2/3 blanco) — proporción, no distancia fija, para que se mantenga sin
   importar el ancho del modal. */
.tm-member--jefe { padding-left: 12px; border-radius: 8px; }
.tm-member--jefe.av-agua    { background-image: linear-gradient(to right, var(--teal2), #fff 33%); }
.tm-member--jefe.av-suelo   { background-image: linear-gradient(to right, #8B6914,      #fff 33%); }
.tm-member--jefe.av-aire    { background-image: linear-gradient(to right, #2878C8,      #fff 33%); }
.tm-member--jefe.av-lab     { background-image: linear-gradient(to right, #1A7A50,      #fff 33%); }
.tm-member--jefe.av-audit   { background-image: linear-gradient(to right, var(--deep2), #fff 33%); }
.tm-member--jefe.av-soporte { background-image: linear-gradient(to right, #8F3A22,      #fff 33%); }
.tm-member--jefe.av-slate   { background-image: linear-gradient(to right, var(--muted), #fff 33%); }
/* El degradé al 100% de intensidad detrás del avatar de iniciales (sin
   foto) tapa el tinte pastel bajo de .av-* y las iniciales pierden
   contraste — acá se le da un fondo blanco sólido propio, quedan las
   iniciales con su color de área intactas. */
.tm-member--jefe .tm-avatar { background: rgba(255,255,255,.92); }
.tm-placeholder { opacity: .45; }
.tm-photo { flex-shrink: 0; }
.tm-photo-img {
  width: 120px; height: 120px; border-radius: 12px;
  object-fit: cover; object-position: center top;
  display: block;
}
.tm-avatar {
  width: 120px; height: 120px; border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  font-size: 28px; font-weight: 800; flex-shrink: 0;
}
.tm-name  { font-size: 15px; font-weight: 600; color: var(--text); }
.tm-cargo { font-size: 13px; color: var(--muted); margin-top: 3px; }
.tm-note-text {
  font-size: 13px; color: var(--muted); line-height: 1.7;
  padding: 14px 16px; background: var(--slate); border-radius: var(--r);
}
.tm-empty {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 48px 24px; gap: 14px; text-align: center;
}
.tm-empty-icon { color: var(--border); }
.tm-empty-text { font-size: 14px; color: var(--muted); max-width: 280px; line-height: 1.6; }

/* ── Modal perfil de usuario ─────────────────────── */
.user-session-modal { max-width: 380px; }

.us-head {
  display: flex; align-items: center; gap: 14px;
  padding: 22px 20px 16px;
}
.us-avatar {
  width: 52px; height: 52px; border-radius: 50%; flex-shrink: 0;
  background: var(--deep); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 22px; font-weight: 800;
}
.us-info  { flex: 1; min-width: 0; }
.us-name  { font-size: 14px; font-weight: 700; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.us-email { font-size: 12px; color: var(--muted); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.us-tabs {
  display: flex; border-bottom: 1px solid var(--border); margin: 0 20px;
}
.us-tab {
  flex: 1; padding: 9px 0; font-size: 13px; font-weight: 600; color: var(--muted);
  background: none; border: none; border-bottom: 2px solid transparent;
  cursor: pointer; transition: all .15s; margin-bottom: -1px; font-family: inherit;
}
.us-tab.on { color: var(--deep); border-bottom-color: var(--deep); }
.us-tab:hover:not(.on) { color: var(--text); }

.us-panel { display: none; padding: 16px 20px; }
.us-panel.on { display: block; }

.prof-grid { margin: 0; display: flex; flex-direction: column; gap: 10px; }
.prof-row  { display: grid; grid-template-columns: 100px 1fr; gap: 8px; align-items: baseline; }
.prof-row dt { font-family: var(--font-accent); font-size: 11.5px; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.prof-row dd { font-family: var(--font-mono); font-size: 13px; color: var(--text); margin: 0; word-break: break-word; }

.us-divider { height: 1px; background: var(--border); margin: 0 20px; }
.us-actions { padding: 12px 16px 18px; display: flex; flex-direction: column; gap: 8px; }
.us-btn {
  display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 11px 14px; border-radius: 10px; font-size: 13.5px; font-weight: 600;
  border: none; cursor: pointer; transition: all .15s; text-decoration: none;
  font-family: inherit;
}
.us-btn svg { width: 17px; height: 17px; flex-shrink: 0; }
.us-btn-primary { background: var(--deep); color: #fff; }
.us-btn-primary:hover { background: var(--teal2); }
.us-btn-danger  { background: #FEF2F2; color: #9B1C1C; }
.us-btn-danger:hover  { background: #FECACA; }

/* ── Modal análisis ──────────────────────────────── */
.analisis-modal {
  width: 620px; max-width: 95vw; max-height: 82vh;
}
.analisis-modal-body {
  padding: 16px 26px 8px; overflow-y: auto; flex: 1; display: flex; flex-direction: column; gap: 20px;
}
.analisis-modal-footer {
  padding: 14px 26px; border-top: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between; flex-shrink: 0;
}
.analisis-count { font-size: 13px; color: var(--muted); font-weight: 500; }
.am-group { }
.am-group-name {
  font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .09em;
  color: var(--deep); margin-bottom: 10px; padding-bottom: 6px; border-bottom: 1px solid var(--border);
}
.am-items { display: flex; flex-wrap: wrap; gap: 6px; }
.am-item {
  display: flex; align-items: center; gap: 6px;
  border: 1.5px solid var(--border); border-radius: 7px; padding: 6px 12px;
  cursor: pointer; font-size: 13px; transition: all .12s; user-select: none;
  background: var(--white);
}
.am-item input { display: none; }
.am-item:hover { border-color: var(--deep); background: var(--slate); }
.am-item.checked {
  background: rgba(var(--deep-rgb),.08); border-color: var(--deep); color: var(--deep); font-weight: 600;
}
.am-item.checked::before {
  content: '✓'; font-size: 11px; color: var(--deep); font-weight: 800;
}

/* Ítems "padre" (Metales pesados, BTEX, PAHs...): no se seleccionan solos,
   siempre junto con al menos uno de sus hijos — ver _toggleParentAnalisis/
   _toggleChildAnalisis en form.js. */
.am-parent { width: 100%; margin-bottom: 4px; }
.am-parent-label {
  display: inline-flex; align-items: center; gap: 6px;
  border: 1.5px solid var(--border); border-radius: 7px; padding: 6px 12px;
  cursor: pointer; font-size: 13px; font-weight: 600; transition: all .12s; user-select: none;
  background: var(--white); margin-bottom: 6px;
}
.am-parent-label input { display: none; }
.am-parent-label:hover { border-color: var(--deep); background: var(--slate); }
.am-parent-label.checked {
  background: rgba(var(--deep-rgb),.08); border-color: var(--deep); color: var(--deep);
}
.am-parent-label.checked::before { content: '✓'; font-size: 11px; color: var(--deep); font-weight: 800; }
.am-parent-label.partial {
  background: rgba(var(--deep-rgb),.05); border-color: var(--deep); color: var(--deep);
}
.am-parent-label.partial::before { content: '–'; font-size: 13px; color: var(--deep); font-weight: 800; }
.am-children {
  display: flex; flex-wrap: wrap; gap: 6px;
  padding-left: 16px; margin-left: 4px; border-left: 2px solid var(--border);
}
