/*
 INFISAD Enterprise 11.9.24 · Contrast Shield
 Capa transversal de legibilidad.
 Objetivo: corregir únicamente combinaciones donde el texto pierde contraste,
 sin rediseñar los temas ni los módulos.
*/
:root{
  --if-readable-dark:#111827;
  --if-readable-light:#ffffff;
  --if-readable-muted:#4b5563;
}

/* Controles: nunca permitir texto invisible por herencia de un tema. */
body input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]),
body textarea,
body select{
  opacity:1!important;
}
body input::placeholder,
body textarea::placeholder{
  color:#6b7280!important;
  -webkit-text-fill-color:#6b7280!important;
  opacity:1!important;
}
body input:disabled,
body input[readonly],
body textarea:disabled,
body textarea[readonly],
body select:disabled,
body [aria-disabled="true"]{
  opacity:1!important;
}

/*
 Windows/Chrome puede renderizar el popup nativo de <select> con una paleta
 diferente de la página. Fuera del Superadministrador usamos una combinación
 explícita de alto contraste. El Superadministrador conserva las reglas 11.9.23.
*/
body:not(.superadmin-shell) select option,
body:not(.superadmin-shell) select optgroup{
  background:#ffffff!important;
  color:#111827!important;
  -webkit-text-fill-color:#111827!important;
}

/*
 Caso confirmado en admin/client-expediente.php:
 app.css crea tarjetas .detail-grid con fondo #f8fafb, mientras el tema oscuro
 del Superadministrador forzaba <b>/<small> a colores claros.
 La tarjeta sigue siendo clara; sólo se corrige su texto.
*/
body.superadmin-shell .detail-grid>div{
  color:#172536!important;
}
body.superadmin-shell .detail-grid>div :is(
  h1,h2,h3,h4,h5,h6,p,span,small,strong,b,em,i,label,legend,a,code
){
  color:inherit!important;
  -webkit-text-fill-color:currentColor!important;
}
body.superadmin-shell .detail-grid>div small{
  color:#64748b!important;
  -webkit-text-fill-color:#64748b!important;
}
body.superadmin-shell .detail-grid>div b,
body.superadmin-shell .detail-grid>div strong{
  color:#203b50!important;
  -webkit-text-fill-color:#203b50!important;
}

/* Estados apagados: conservar semántica sin sacrificar lectura. */
body .module-summary .off{
  color:#4b5563!important;
  -webkit-text-fill-color:#4b5563!important;
}
body :is(.empty,.empty-state,[class*="-empty"]){
  opacity:1!important;
}

/* Clases colocadas por el motor JS cuando detecta contraste insuficiente. */
.if-contrast-dark{
  color:var(--if-readable-dark)!important;
  -webkit-text-fill-color:var(--if-readable-dark)!important;
}
.if-contrast-light{
  color:var(--if-readable-light)!important;
  -webkit-text-fill-color:var(--if-readable-light)!important;
}

/* Mantener iconos gráficos fuera de la corrección tipográfica. */
svg.if-contrast-dark,svg.if-contrast-light,
canvas.if-contrast-dark,canvas.if-contrast-light{
  color:inherit!important;
  -webkit-text-fill-color:initial!important;
}
