/* Utilidades CSP — Fase 1 + Fase 2.
   Reemplazan inline styles repetitivos (style="...") por clases, para poder
   endurecer style-src más adelante (sacar 'unsafe-inline'). NO cambian el
   look: son exactamente los mismos valores que estaban inline. */

/* --- Anchos fijos (inputs / columnas de tabla) --- */
.w-32px  { width: 32px; }
.w-36px  { width: 36px; }
.w-42px  { width: 42px; }
.w-50px  { width: 50px; }
.w-60px  { width: 60px; }
.w-90px  { width: 90px; }
.w-100px { width: 100px; }
.w-110px { width: 110px; }
.w-120px { width: 120px; }
.w-130px { width: 130px; }
.w-140px { width: 140px; }
.w-160px { width: 160px; }
.w-170px { width: 170px; }
.w-190px { width: 190px; }
.w-200px { width: 200px; }
.w-2-5rem { width: 2.5rem; }
.w-9rem  { width: 9rem; }
.w-11rem { width: 11rem; }

/* --- Max-width puntuales --- */
.max-w-80  { max-width: 80px; }
.max-w-320 { max-width: 320px; }
.max-w-380 { max-width: 380px; }
.max-w-600 { max-width: 600px; }

/* --- Font-size puntuales (íconos y textos chicos) --- */
.fs-0-7rem { font-size: 0.7rem; }
.fs-1-5rem { font-size: 1.5rem; }
.fs-2rem   { font-size: 2rem; }
.fs-3rem   { font-size: 3rem; }
/* Ícono del shield en la pantalla de activación (font-size + color de marca). */
.icono-activar { font-size: 2.5rem; color: #0b5394; }

/* --- Varios --- */
.cursor-pointer { cursor: pointer; }
.list-none { list-style: none; }
.text-dorado { color: #b8860b; }  /* aviso de dimensiones de logo */
.opacity-55 { opacity: 0.55; }    /* filas de RC inactivas (atenuadas) */

/* Caja con scroll interno (listado de remitos pendientes). */
.scroll-380 { max-height: 380px; overflow-y: auto; }

/* Honeypot anti-bots del formulario de registro: fuera de pantalla, invisible
   pero presente en el DOM para que un bot lo complete y lo descartemos. */
.honeypot { position: absolute; left: -9999px; top: -9999px;
            height: 0; width: 0; overflow: hidden; }

/* --- Avatares: TAMAÑO (el color va por data-avatar-bg + static/js/avatar.js,
   CSSOM, porque es dinámico por usuario). font-size ≈ round(size*0.4). --- */
.avatar-32  { width: 32px;  height: 32px;  font-size: 13px; }
.avatar-40  { width: 40px;  height: 40px;  font-size: 16px; }
.avatar-80  { width: 80px;  height: 80px;  font-size: 32px; }
.avatar-120 { width: 120px; height: 120px; font-size: 48px; }

/* Estado inicial de la imagen de Cropper (antes de que Cropper tome el control
   en runtime; sus estilos runtime son CSSOM, no caen bajo style-src). */
.cropper-img-init { max-width: 100%; display: block; }

/* htmx: indicadores de carga. htmx normalmente INYECTA estas reglas como un
   <style> en el <head>, lo que viola style-src; lo desactivamos vía
   htmx.config.includeIndicatorStyles=false (base.html) y las declaramos acá. */
.htmx-indicator { opacity: 0; transition: opacity 200ms ease-in; }
.htmx-request .htmx-indicator { opacity: 1; }
.htmx-request.htmx-indicator { opacity: 1; }

/* display:none SIN !important (a diferencia de .d-none de Bootstrap): para
   elementos que el JS muestra/oculta con element.style.display — el inline del
   JS debe poder ganarle a la clase. */
.oculto { display: none; }

/* --- Preview del email en la config de empresa. Los colores son los de marca
   por defecto de OBYRA: sirven de fallback antes de que corra el JS de la
   pantalla, que sobreescribe el background con el color real del tenant en
   vivo (header/btn/strip.style.background). --- */
.email-preview-strip  { height: 4px; background: #7fb53a; }
.email-preview-header { background: #1A374D; color: #fff; padding: 14px 18px; }
.email-preview-body   { background: #fff; padding: 18px; }
.email-preview-btn    { display: inline-block; padding: 10px 22px; background: #1A374D;
                        color: #fff; border-radius: 6px; font-weight: 600; font-size: 14px; }
.email-preview-logo   { max-height: 32px; margin-bottom: 6px; border: 0; }
.logo-actual-box      { max-height: 60px; padding: 8px; border-radius: 6px; }

/* --- Matriz comparativa de cotizaciones: en mobile (xs, <576px) la tabla se
   apila como tarjetas para que la comparación siga siendo legible sin scroll
   horizontal. Cada celda muestra su etiqueta vía data-label (::before). En
   desktop es una tabla normal (estas reglas no aplican). Los highlights de
   Bootstrap (table-success/table-info en la celda, table-active en la fila)
   siguen funcionando porque solo cambia el layout, no el fondo. --- */
@media (max-width: 575.98px) {
  .tabla-cotizaciones thead { display: none; }
  .tabla-cotizaciones,
  .tabla-cotizaciones tbody,
  .tabla-cotizaciones tr,
  .tabla-cotizaciones td { display: block; width: 100%; }

  .tabla-cotizaciones tr {
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: .5rem;
    margin-bottom: .5rem;
    padding: .25rem .5rem;
  }

  .tabla-cotizaciones td {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 1rem;
    text-align: right;
    border: 0;
    padding: .4rem .25rem;
  }
  /* Etiqueta de la columna a la izquierda de cada celda apilada. */
  .tabla-cotizaciones td::before {
    content: attr(data-label);
    font-weight: 600;
    color: var(--bs-secondary-color, #6c757d);
    text-align: left;
    margin-right: 1rem;
  }
  /* La celda de proveedor encabeza la tarjeta: sin etiqueta, ancho completo. */
  .tabla-cotizaciones td.celda-proveedor {
    display: block;
    text-align: left;
    border-bottom: 1px solid var(--bs-border-color, #dee2e6);
    margin-bottom: .25rem;
    padding-bottom: .5rem;
  }
  .tabla-cotizaciones td.celda-proveedor::before { content: none; }
}
