/* =============================================================================
   af_shared.css  --  Estilos compartidos del modulo Activo Fijo
   Carpeta: wwwroot/    Version 1.0.2
   Se carga DESPUES de etradie.css y ANTES de etradie-tipografia.css.

   Solo entra aqui lo que usan dos o mas pantallas del modulo. Lo que sea de
   una sola pantalla vive en su <style>; cuando se repite, sube aqui y se
   borra del origen.
   ============================================================================= */

/* =============================================================================
   MODALES
   etradie.css ya trae modal-overlay, modal-box, modal-hd, modal-close y
   modal-body. Falta el pie: los botones de accion nunca pegan contra el
   borde inferior (regla de Ed, 10/09/2026).
   ============================================================================= */
.modal-box.af-ancho{ max-width:880px; }
.modal-box.af-medio{ max-width:680px; }

.af-modal-ft{
  display:flex; align-items:center; justify-content:flex-end; gap:10px;
  padding:14px 20px 18px;
  border-top:1px solid var(--et-line);
}
.af-modal-ft .af-ft-izq{ margin-right:auto; }

.af-form{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:14px 16px; }
.af-form .col-1{ grid-column:span 1; }
.af-form .col-2{ grid-column:span 2; }
.af-form .col-1,.af-form .col-2{width:100%;max-width:none;min-width:0;padding:0;}
.af-cell-detail{font:inherit;color:inherit;border:0;background:transparent;text-align:inherit;padding:0;cursor:pointer}.af-cell-detail:hover{text-decoration:underline}.af-cell-detail:focus-visible{outline:3px solid #4e73df;outline-offset:3px;border-radius:3px}
@media (max-width:680px){
  .af-form{ grid-template-columns:1fr; }
  .af-form .col-2{ grid-column:span 1; }
}
.af-campo label{
  display:block; font-size:11.5px; font-weight:700; color:var(--et-ink);
  margin-bottom:5px; letter-spacing:.01em;
}
.af-campo .form-control{ height:36px; font-size:13px; }
.af-campo textarea.form-control{ height:auto; }
.af-campo .ayuda{ font-size:11px; color:var(--et-ink-muted); margin-top:4px; }
.af-campo .req{ color:var(--et-danger); }

.af-seccion{
  grid-column:1 / -1; margin-top:6px; padding-top:12px;
  border-top:1px solid var(--et-line);
  font-size:12px; font-weight:700; color:var(--et-primary);
  text-transform:uppercase; letter-spacing:.04em;
}
.af-seccion:first-child{ margin-top:0; padding-top:0; border-top:none; }

/* Pestanas dentro de un modal (ficha del activo) */
.af-mtabs{ display:flex; gap:4px; padding:0 20px; border-bottom:1px solid var(--et-line); flex-wrap:wrap; }
.af-mtab{
  padding:10px 12px; border:none; background:none; cursor:pointer;
  font-size:12.5px; font-weight:600; color:var(--et-ink-muted);
  border-bottom:2px solid transparent;
}
.af-mtab:hover{ color:var(--et-primary); }
.af-mtab.is-activa{ color:var(--et-primary); border-bottom-color:var(--et-primary); }

/* Pares dato/valor de solo lectura */
.af-datos{ display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:12px 18px; }
@media (max-width:680px){ .af-datos{ grid-template-columns:repeat(2, minmax(0,1fr)); } }
.af-dato .lb{ font-size:11px; color:var(--et-ink-muted); text-transform:uppercase; letter-spacing:.03em; }
.af-dato .vl{ font-size:13.5px; color:var(--et-ink); font-weight:600; margin-top:2px; }
.af-dato .vl.vacio{ color:var(--et-ink-muted); font-weight:400; font-style:italic; }

/* =============================================================================
   ENCABEZADO
   ============================================================================= */
.af-bc{ font-size:12.5px; margin:3px 0 0; color:var(--et-ink-muted); }
.af-bc .mod{ color:var(--et-ink-soft); font-weight:600; }
.af-bc .sep{ margin:0 5px; }
.af-bc .sub{ color:var(--et-accent); font-weight:600; }

/* =============================================================================
   BLOQUE "REQUIEREN ATENCION"
   Lo accionable va primero y cada renglon trae el boton que lo resuelve.
   Una alerta sin accion no es una alerta.
   ============================================================================= */
.af-panel{
  background:var(--et-surface); border:1px solid var(--et-line);
  border-radius:12px; box-shadow:0 1px 2px rgba(26,34,54,.04);
  margin-bottom:18px;
}
.af-panel-hd{
  display:flex; align-items:center; justify-content:space-between;
  gap:12px; padding:14px 18px; border-bottom:1px solid var(--et-line);
}
.af-panel-hd h3{
  margin:0; font-size:15px; font-weight:700; color:var(--et-ink);
  letter-spacing:-.01em; display:flex; align-items:center; gap:9px;
}
.af-panel-hd h3 i{ font-size:14px; }
/* .af-link vive suelta, no anidada en el encabezado: tambien la usa el boton
   Limpiar de la barra de filtros, y ahi se quedaba sin estilo (se veia como
   un boton del navegador con su caja negra). */
.af-link{
  font-size:12.5px; font-weight:600; color:var(--et-primary);
  background:none; border:none; padding:0; cursor:pointer;
  display:inline-flex; align-items:center; gap:6px; white-space:nowrap;
}
.af-link:hover{ color:var(--et-primary-600); text-decoration:underline; }
.af-link:focus-visible{ outline:2px solid var(--et-primary); outline-offset:3px; border-radius:4px; }
.af-panel-bd{ padding:6px 0; }

.af-aten{
  display:flex; align-items:center; gap:12px;
  padding:11px 18px; border-bottom:1px solid var(--et-surface-2);
}
.af-aten:last-child{ border-bottom:none; }
.af-aten:hover{ background:var(--et-surface-2); }
.af-aten-pri{
  flex:0 0 auto; min-width:26px; height:22px; padding:0 7px;
  border-radius:6px; font-size:11px; font-weight:700;
  display:inline-flex; align-items:center; justify-content:center;
}
.af-aten-pri.p1{ background:#FDE7EA; color:var(--et-danger); }
.af-aten-pri.p2{ background:#FDF2E1; color:#B9791F; }
.af-aten-pri.p3{ background:var(--et-primary-50); color:var(--et-primary); }
.af-aten-txt{ flex:1 1 auto; font-size:13.5px; color:var(--et-ink); }
.af-aten-txt b{ font-weight:700; }
.af-aten-sub{ font-size:12px; color:var(--et-ink-muted); margin-top:2px; }
.af-aten-btn{
  flex:0 0 auto; height:30px; padding:0 14px; border-radius:8px;
  font-size:12.5px; font-weight:600; cursor:pointer;
  background:var(--et-surface); color:var(--et-primary);
  border:1px solid var(--et-primary);
  transition:all 180ms cubic-bezier(.2,.8,.2,1);
}
.af-aten-btn:hover{ background:var(--et-primary); color:#fff; }

/* =============================================================================
   PESTANAS DE LA LISTA DE TRABAJO
   ============================================================================= */
.af-tabs{ display:flex; gap:6px; flex-wrap:wrap; padding:12px 18px 0; }
.af-tab{
  height:30px; padding:0 13px; border-radius:8px;
  background:var(--et-surface-2); border:1px solid var(--et-line);
  font-size:12.5px; font-weight:600; color:var(--et-ink-soft); cursor:pointer;
  display:inline-flex; align-items:center; gap:7px;
  transition:all 180ms cubic-bezier(.2,.8,.2,1);
}
.af-tab:hover{ border-color:var(--et-primary); color:var(--et-primary); }
.af-tab.is-activa{ background:var(--et-primary); border-color:var(--et-primary); color:#fff; }
.af-tab .n{ font-size:11.5px; opacity:.85; }

/* Barra de filtros pegada a la lista: nunca separar un control de lo que
   controla. Se queda fija al hacer scroll cuando la lista es larga. */
.af-filtros{
  position:sticky; top:0; z-index:5;
  display:flex; gap:10px; flex-wrap:wrap; align-items:center;
  padding:12px 18px; background:var(--et-surface);
  border-bottom:1px solid var(--et-line);
}
.af-filtros .form-control{ height:34px; font-size:13px; }
.af-filtros .af-buscar{ flex:1 1 220px; max-width:340px; }
.af-filtros .af-f-der{ margin-left:auto; display:flex; gap:10px; align-items:center; }

/* Chip de filtro aplicado desde un KPI: se ve y se puede quitar. */
.af-chip-filtro{
  display:inline-flex; align-items:center; gap:8px;
  height:28px; padding:0 6px 0 12px; border-radius:999px;
  background:var(--et-primary-50); color:var(--et-primary);
  font-size:12.5px; font-weight:600;
}
.af-chip-filtro button{
  width:20px; height:20px; border-radius:50%; border:none; cursor:pointer;
  background:rgba(42,59,110,.12); color:var(--et-primary); font-size:10px; line-height:1;
}
.af-chip-filtro button:hover{ background:var(--et-primary); color:#fff; }

/* =============================================================================
   TABLA DE ACTIVOS
   Densidad operativa: diez renglones visibles sin scroll a 1080px.
   ============================================================================= */
.af-tabla{ width:100%; border-collapse:collapse; font-size:13px; }
.af-tabla thead th{
  background:linear-gradient(135deg, var(--et-grid-hd-from, #4E73DF), var(--et-grid-hd-to, #17A2B8));
  color:#fff; font-size:11.5px; font-weight:700; text-transform:uppercase;
  letter-spacing:.03em; padding:9px 12px; text-align:left; white-space:nowrap;
}
.af-tabla tbody td{
  padding:9px 12px; border-bottom:1px solid var(--et-line);
  color:var(--et-ink); vertical-align:middle;
}
.af-tabla tbody tr{ cursor:pointer; transition:background 150ms; }
.af-tabla tbody tr:hover{ background:var(--et-surface-2); }
.af-tabla .num{ text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
.af-tabla .et-link{
  color:var(--et-primary); font-weight:700; text-decoration:none;
}
.af-tabla .desc{ font-size:11.5px; color:var(--et-ink-muted); margin-top:1px; }
.af-tabla .vacio{ color:var(--et-ink-muted); font-style:italic; }

/* Pastilla de estado */
.af-pill{
  display:inline-flex; align-items:center; gap:6px;
  font-size:12px; font-weight:600; white-space:nowrap;
}
.af-pill::before{ content:''; width:7px; height:7px; border-radius:50%; }
.af-pill.ok::before  { background:var(--et-success); }
.af-pill.ok          { color:var(--et-success); }
.af-pill.warn::before{ background:var(--et-warning); }
.af-pill.warn        { color:#B9791F; }
.af-pill.err::before { background:var(--et-danger); }
.af-pill.err         { color:var(--et-danger); }
.af-pill.info::before{ background:var(--et-info); }
.af-pill.info        { color:var(--et-info); }
.af-pill.off::before { background:var(--et-ink-muted); }
.af-pill.off         { color:var(--et-ink-muted); }

.af-btn-fila{
  height:28px; padding:0 11px; border-radius:7px;
  font-size:12px; font-weight:600; cursor:pointer;
  background:var(--et-surface); color:var(--et-primary);
  border:1px solid var(--et-line);
}
.af-btn-fila:hover{ border-color:var(--et-primary); background:var(--et-primary-50); }

/* =============================================================================
   ESTADOS: carga, vacio y error
   Un vacio azul no dice lo mismo que un vacio verde. Que "todo bien" y
   "algo fallo" se vean igual es desinformar.
   ============================================================================= */
.af-estado{ padding:34px 18px; text-align:center; }
.af-estado i{ font-size:26px; display:block; margin-bottom:10px; }
.af-estado .tit{ font-size:14px; font-weight:700; color:var(--et-ink); }
.af-estado .sub{ font-size:12.5px; color:var(--et-ink-muted); margin-top:4px; }
.af-estado.info i{ color:var(--et-info); }
.af-estado.ok   i{ color:var(--et-success); }
.af-estado.err  i{ color:var(--et-danger); }

.af-skel{
  height:13px; border-radius:6px; margin:9px 0;
  background:linear-gradient(90deg, var(--et-surface-2) 25%, #EEF1F7 37%, var(--et-surface-2) 63%);
  background-size:400% 100%;
  animation:af-skel 1.3s ease-in-out infinite;
}
@keyframes af-skel{ 0%{background-position:100% 50%} 100%{background-position:0 50%} }
@media (prefers-reduced-motion: reduce){
  .af-skel{ animation:none; }
  .et-toast{ transition:none; }
}

/* =============================================================================
   REJILLA DE PANELES Y GRAFICAS
   ============================================================================= */
.af-grid{ display:grid; gap:16px; margin-bottom:18px; }
.af-grid.c2{ grid-template-columns:repeat(2, minmax(0,1fr)); }
.af-grid.c3{ grid-template-columns:repeat(3, minmax(0,1fr)); }
.af-grid.c4{ grid-template-columns:repeat(4, minmax(0,1fr)); }
@media (max-width:1024px){
  .af-grid.c3, .af-grid.c4{ grid-template-columns:repeat(2, minmax(0,1fr)); }
}
@media (max-width:640px){
  .af-grid.c2, .af-grid.c3, .af-grid.c4{ grid-template-columns:1fr; }
  .af-filtros{ position:static; }
}

.af-leyenda{ display:flex; flex-direction:column; gap:7px; font-size:12.5px; }
.af-leyenda .it{ display:flex; align-items:center; gap:8px; }
.af-leyenda .pt{ width:9px; height:9px; border-radius:50%; flex:0 0 auto; }
.af-leyenda .nm{ flex:1 1 auto; color:var(--et-ink-soft); }
.af-leyenda .vl{ font-weight:700; color:var(--et-ink); }

/* Barra de magnitud (valor por ubicacion) */
.af-barra{ display:flex; align-items:center; gap:10px; padding:7px 0; font-size:12.5px; }
.af-barra .nm{ flex:0 0 130px; color:var(--et-ink-soft); }
.af-barra .tr{ flex:1 1 auto; height:9px; border-radius:999px; background:var(--et-surface-2); overflow:hidden; }
.af-barra .fl{ height:100%; border-radius:999px; background:var(--et-primary); }
.af-barra .vl{ flex:0 0 78px; text-align:right; font-weight:700; color:var(--et-ink); font-variant-numeric:tabular-nums; }

/* Lista de proximos eventos */
.af-evento{ display:flex; gap:11px; align-items:flex-start; padding:9px 0; border-bottom:1px solid var(--et-surface-2); }
.af-evento:last-child{ border-bottom:none; }
.af-evento .pt{ width:8px; height:8px; border-radius:50%; margin-top:6px; flex:0 0 auto; background:var(--et-info); }
.af-evento .fc{ flex:0 0 62px; font-size:12px; font-weight:700; color:var(--et-ink-soft); }
.af-evento .tx{ flex:1 1 auto; font-size:12.5px; color:var(--et-ink); }

/* Contadores compactos (movimientos del mes, estado del portafolio) */
.af-mini{ display:flex; align-items:center; gap:11px; padding:10px 0; }
.af-mini .ic{
  width:34px; height:34px; border-radius:9px; flex:0 0 auto;
  display:flex; align-items:center; justify-content:center; font-size:14px;
}
.af-mini .vl{ font-size:20px; font-weight:700; color:var(--et-ink); line-height:1.1; letter-spacing:-.02em; }
.af-mini .lb{ font-size:11.5px; color:var(--et-ink-muted); margin-top:1px; }

/* Aviso de que todavia no hay corrida de depreciacion */
.af-sin-corrida{
  display:flex; align-items:center; gap:10px;
  background:var(--et-primary-50); border:1px solid #D6DEF8;
  border-radius:10px; padding:11px 14px; margin-bottom:16px;
  font-size:12.5px; color:var(--et-primary-700);
}
.af-sin-corrida i{ font-size:14px; color:var(--et-primary); }
.af-sin-corrida button{
  margin-left:auto; height:30px; padding:0 14px; border-radius:8px;
  border:1px solid var(--et-primary); background:var(--et-primary); color:#fff;
  font-size:12.5px; font-weight:600; cursor:pointer;
}
.af-sin-corrida button:hover{ background:var(--et-primary-600); }

/* El boton y el modal de ayuda no se imprimen: en papel no hay donde pulsarlos */
@media print{
  .et-ayuda-btn, .modal-overlay, .af-filtros, .af-tabs{ display:none !important; }
}
