/* ================================================================
   componentes.css — Botones, campos, cards, tablas, navbars
   ================================================================ */

/* ── Botones ──────────────────────────────────────────────── */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  padding: var(--space-3) var(--space-6);
  border: 2px solid transparent;
  border-radius: var(--radius-md);
  font-family: var(--font-body);
  font-size: var(--text-base);
  font-weight: var(--fw-semi);
  line-height: 1;
  cursor: pointer;
  transition: background var(--transition), border-color var(--transition),
              transform var(--transition-fast), box-shadow var(--transition);
  text-decoration: none;
  white-space: nowrap;
  user-select: none;
}
.btn:focus-visible { outline: 3px solid var(--color-primary-light); outline-offset: 2px; }
.btn:active        { transform: scale(0.97); }
.btn:disabled      { opacity: 0.5; cursor: not-allowed; pointer-events: none; }

.btn-primario {
  background: var(--color-primary);
  color: var(--color-white);
  border-color: var(--color-primary);
}
.btn-primario:hover {
  background: var(--color-primary-dark);
  border-color: var(--color-primary-dark);
  box-shadow: var(--shadow-md);
  transform: translateY(-1px);
}

.btn-acento {
  background: var(--color-accent);
  color: var(--color-white);
  border-color: var(--color-accent);
}
.btn-acento:hover {
  background: var(--color-accent-dark);
  border-color: var(--color-accent-dark);
  box-shadow: var(--shadow-md);
  transform: translateY(-1px);
}

.btn-borde {
  background: transparent;
  color: var(--color-primary);
  border-color: var(--color-primary);
}
.btn-borde:hover {
  background: var(--color-primary-pale);
  box-shadow: var(--shadow-sm);
}

.btn-fantasma {
  background: transparent;
  color: var(--color-text-secondary);
  border-color: transparent;
}
.btn-fantasma:hover { background: var(--color-surface-alt); }

.btn-sm {
  padding: var(--space-2) var(--space-4);
  font-size: var(--text-sm);
  border-radius: var(--radius-sm);
}
.btn-lg {
  padding: var(--space-4) var(--space-8);
  font-size: var(--text-lg);
  border-radius: var(--radius-lg);
}
.btn-bloque { width: 100%; }

.btn-outline {
  background: transparent;
  color: var(--color-primary);
  border: 1.5px solid var(--color-border);
}
.btn-outline:hover {
  background: var(--color-primary-pale);
  border-color: var(--color-primary-light);
  box-shadow: var(--shadow-sm);
}

/* ── Campos de formulario ─────────────────────────────────── */
.campo {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  margin-bottom: var(--space-5);
}

.campo-etiqueta {
  font-size: var(--text-sm);
  font-weight: var(--fw-semi);
  color: var(--color-text);
}
.campo-etiqueta .requerido { color: var(--color-accent); margin-left: 2px; }

.campo-entrada,
.campo-seleccion,
.campo-textarea {
  width: 100%;
  padding: var(--space-3) var(--space-4);
  border: 1.5px solid var(--color-border);
  border-radius: var(--radius-md);
  font-family: var(--font-body);
  font-size: var(--text-base);
  color: var(--color-text);
  background: var(--color-surface);
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
  outline: none;
}
.campo-entrada:focus,
.campo-seleccion:focus,
.campo-textarea:focus {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(0, 51, 102, 0.12);
}
.campo-entrada::placeholder,
.campo-textarea::placeholder { color: var(--color-text-muted); }

.campo-entrada.error,
.campo-seleccion.error,
.campo-textarea.error {
  border-color: var(--color-danger);
}
.campo-error {
  font-size: var(--text-xs);
  color: var(--color-danger);
  display: none;
}
.campo-error.visible { display: block; }

/* Campo con icono */
.campo-con-icono { position: relative; }
.campo-con-icono .icono-izq {
  position: absolute;
  left: var(--space-3);
  top: 50%;
  transform: translateY(-50%);
  color: var(--color-text-muted);
  pointer-events: none;
}
.campo-con-icono .campo-entrada { padding-left: calc(var(--space-3) * 2 + 20px); }

/* Toggle contraseña */
.campo-con-icono .btn-toggle-clave {
  position: absolute;
  right: var(--space-3);
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  cursor: pointer;
  color: var(--color-text-muted);
  padding: var(--space-1);
  display: flex;
  align-items: center;
  transition: color var(--transition-fast);
}
.campo-con-icono .btn-toggle-clave:hover { color: var(--color-primary); }

/* Checkbox custom */
.campo-checkbox {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  cursor: pointer;
}
.campo-checkbox input[type="checkbox"] {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
  accent-color: var(--color-primary);
  cursor: pointer;
  margin-top: 2px;
}

/* ── Cards ────────────────────────────────────────────────── */
.card {
  background: var(--color-surface);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--color-border-light);
  overflow: hidden;
  transition: box-shadow var(--transition), transform var(--transition);
}
.card:hover { box-shadow: var(--shadow-md); }

.card-cabecera {
  padding: var(--space-5) var(--space-6);
  border-bottom: 1px solid var(--color-border-light);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
}
.card-cabecera h3 { margin-bottom: 0; }

.card-cuerpo  { padding: var(--space-6); }
.card-pie {
  padding: var(--space-4) var(--space-6);
  border-top: 1px solid var(--color-border-light);
  background: var(--color-surface-alt);
}

/* Stat card */
.stat-card {
  background: var(--color-surface);
  border-radius: var(--radius-xl);
  padding: var(--space-5) var(--space-6);
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--color-border-light);
  display: flex;
  align-items: center;
  gap: var(--space-4);
  transition: box-shadow var(--transition), transform var(--transition);
}
.stat-card:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); }
.stat-icono {
  width: 52px;
  height: 52px;
  border-radius: var(--radius-lg);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.5rem;
  flex-shrink: 0;
}
.stat-icono-azul   { background: var(--color-primary-pale); color: var(--color-primary); }
.stat-icono-rojo   { background: var(--color-accent-pale);  color: var(--color-accent); }
.stat-icono-verde  { background: var(--color-success-bg);   color: var(--color-success); }
.stat-icono-amaril { background: var(--color-warning-bg);   color: var(--color-warning); }

.stat-numero {
  font-family: var(--font-heading);
  font-size: var(--text-3xl);
  font-weight: var(--fw-bold);
  color: var(--color-primary);
  line-height: 1;
}
.stat-etiqueta {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin-top: var(--space-1);
}

/* ── Tablas ───────────────────────────────────────────────── */
.tabla-container {
  overflow-x: auto;
  border-radius: var(--radius-lg);
  border: 1px solid var(--color-border-light);
  box-shadow: var(--shadow-xs);
}

.tabla {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
}

.tabla thead {
  background: var(--color-primary);
  color: var(--color-white);
}
.tabla thead th {
  padding: var(--space-3) var(--space-4);
  text-align: left;
  font-weight: var(--fw-semi);
  font-size: var(--text-xs);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  white-space: nowrap;
}
.tabla tbody tr {
  border-bottom: 1px solid var(--color-border-light);
  transition: background var(--transition-fast);
}
.tabla tbody tr:last-child { border-bottom: none; }
.tabla tbody tr:hover { background: var(--color-primary-pale); }
.tabla tbody td {
  padding: var(--space-3) var(--space-4);
  color: var(--color-text);
  vertical-align: middle;
}
.tabla tfoot td {
  padding: var(--space-3) var(--space-4);
  font-weight: var(--fw-semi);
  background: var(--color-surface-alt);
  border-top: 2px solid var(--color-border);
}

/* Tabla vacía */
.tabla-vacia {
  text-align: center;
  padding: var(--space-12) !important;
  color: var(--color-text-muted);
}

/* ── Alerta inline ────────────────────────────────────────── */
.alerta {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  padding: var(--space-4);
  border-radius: var(--radius-md);
  font-size: var(--text-sm);
  border-left: 4px solid;
}
.alerta-error   { background: var(--color-danger-bg);  border-color: var(--color-danger);  color: var(--color-danger); }
.alerta-exito   { background: var(--color-success-bg); border-color: var(--color-success); color: var(--color-success); }
.alerta-alerta  { background: var(--color-warning-bg); border-color: var(--color-warning); color: var(--color-warning); }
.alerta-info    { background: var(--color-info-bg);    border-color: var(--color-info);    color: var(--color-info); }
.alerta.oculto { display: none; }

/* ── Paginación ───────────────────────────────────────────── */
.paginacion {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  padding: var(--space-4) 0;
}
.paginacion .pagina-btn {
  width: 36px;
  height: 36px;
  border-radius: var(--radius-md);
  border: 1.5px solid var(--color-border);
  background: var(--color-surface);
  color: var(--color-text-secondary);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--text-sm);
  font-weight: var(--fw-semi);
  transition: all var(--transition-fast);
}
.paginacion .pagina-btn:hover,
.paginacion .pagina-btn.activo {
  background: var(--color-primary);
  border-color: var(--color-primary);
  color: var(--color-white);
}

/* ── Form controls ────────────────────────────────────────── */
.form-group { margin-bottom: var(--space-4); }
.form-group label { display: block; font-size: var(--text-sm); font-weight: var(--fw-semi); color: var(--color-text); margin-bottom: var(--space-1); }
.form-group input, .form-group select, .form-group textarea {
  width: 100%; padding: var(--space-2) var(--space-3);
  border: 1.5px solid var(--color-border); border-radius: var(--radius-md);
  font-size: var(--text-sm); color: var(--color-text);
  background: var(--color-surface); transition: border-color var(--transition-fast);
}
.form-group input:focus, .form-group select:focus, .form-group textarea:focus {
  border-color: var(--color-primary-light); outline: none; box-shadow: 0 0 0 3px var(--color-primary-pale);
}
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); }

/* Modal refinements */
.modal-lg { max-width: 720px !important; }

/* ── Modal ────────────────────────────────────────────────── */
.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  backdrop-filter: blur(4px);
  z-index: 7777;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-4);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--transition);
}
.modal-overlay.visible { opacity: 1; pointer-events: auto; }

.modal {
  background: var(--color-surface);
  border-radius: var(--radius-2xl);
  box-shadow: var(--shadow-2xl);
  width: 100%;
  max-width: 560px;
  max-height: 90vh;
  overflow-y: auto;
  transform: scale(0.9) translateY(20px);
  transition: transform var(--transition);
}
.modal-overlay.visible .modal { transform: scale(1) translateY(0); }

.modal-cabecera {
  padding: var(--space-6);
  border-bottom: 1px solid var(--color-border-light);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.modal-cabecera h3 { margin: 0; }
.modal-cuerpo  { padding: var(--space-6); }
.modal-acciones {
  padding: var(--space-4) var(--space-6);
  border-top: 1px solid var(--color-border-light);
  display: flex;
  gap: var(--space-3);
  justify-content: flex-end;
}

/* ── Estados loading / vacío / error ─────────────────────── */
.loading-state,
.empty-state,
.error-state {
  text-align: center;
  padding: var(--space-12) var(--space-6);
  color: var(--color-text-muted);
}
.loading-state i,
.empty-state i,
.error-state i {
  font-size: 2.5rem;
  display: block;
  margin-bottom: var(--space-4);
  color: var(--color-primary-light);
}
.loading-state i { animation: spin 0.8s linear infinite; }
.empty-state i { color: var(--color-border); }
.error-state i { color: var(--color-danger); }
.loading-state h3,
.empty-state h3,
.error-state h3 {
  font-size: var(--text-lg);
  color: var(--color-text);
  margin-bottom: var(--space-2);
}
.loading-state p,
.empty-state p,
.error-state p {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin-bottom: var(--space-5);
  max-width: 360px;
  margin-left: auto;
  margin-right: auto;
}
