/* ============================================================
   mOS — Mobilus Operating System
   Base de identidad visual compartida
   Versión: 2.0 · Mayo 2026
   ============================================================
   Base: DataLab v1.0 + componentes Studio
   Uso: importar en cualquier plataforma del mOS
   <link rel="stylesheet" href="assets/css/style-base.css">
   ============================================================ */


/* ------------------------------------------------------------
   GOOGLE FONTS
   ------------------------------------------------------------ */
@import url('https://fonts.googleapis.com/css2?family=Syne:wght@400;500;600;700;800&family=DM+Sans:ital,wght@0,300;0,400;0,500;1,300&display=swap');

@import url('https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/tabler-icons.min.css');


/* ------------------------------------------------------------
   VARIABLES GLOBALES
   ------------------------------------------------------------ */
:root {

  /* Colores principales */
  --mobilus-azul:         #1c96fc;
  --mobilus-azul-dark:    #0d7de8;
  --mobilus-naranja:      #f46e23;
  --mobilus-naranja-dark: #e05e1a;

  /* Colores de UI */
  --mobilus-gris:         #3c4b56;
  --mobilus-fondo:        #f0f4f8;
  --mobilus-blanco:       #ffffff;
  --mobilus-borde:        #e0e6eb;
  --mobilus-verde:        #71c650;

  /* Colores de estado */
  --mobilus-exito:        #71c650;
  --mobilus-error:        #e24b4a;
  --mobilus-alerta:       #ef9f27;
  --mobilus-info:         #378add;

  /* Versiones dim para badges y fondos de estado */
  --dim-azul:             rgba(28,150,252,.12);
  --dim-naranja:          rgba(244,110,35,.12);
  --dim-verde:            rgba(113,198,80,.12);
  --dim-rojo:             rgba(226,75,74,.12);
  --dim-amarillo:         rgba(239,159,39,.12);

  /* Tipografía */
  --font-titulo:          'Syne', sans-serif;
  --font-cuerpo:          'DM Sans', sans-serif;

  /* Radios de borde */
  --radio-xl:             20px;
  --radio-lg:             14px;
  --radio-md:             10px;
  --radio-sm:             8px;
  --radio-pill:           20px;

  /* Sombras */
  --sombra-suave:         0 2px 12px rgba(28,150,252,.08);
  --sombra-media:         0 4px 20px rgba(28,150,252,.10);
  --sombra-fuerte:        0 8px 40px rgba(28,150,252,.12);
  --sombra-naranja:       0 4px 16px rgba(244,110,35,.25);

  /* Gradientes */
  --gradiente-azul:       linear-gradient(135deg, #1c96fc 0%, #0d7de8 100%);
  --gradiente-naranja:    linear-gradient(135deg, #f46e23 0%, #e05e1a 100%);

  /* Transiciones */
  --transicion:           all .15s ease;
  --transicion-media:     all .2s ease;
  --transicion-lg:        all .3s cubic-bezier(.32,.72,0,1);
}


/* ------------------------------------------------------------
   RESET BASE
   ------------------------------------------------------------ */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html, body {
  font-family: var(--font-cuerpo);
  background: var(--mobilus-fondo);
  color: var(--mobilus-gris);
  min-height: 100vh;
  -webkit-font-smoothing: antialiased;
}

a { color: var(--mobilus-azul); text-decoration: none; }
a:hover { opacity: .8; }
button { font-family: var(--font-cuerpo); cursor: pointer; }
input, textarea, select { font-family: var(--font-cuerpo); }


/* ------------------------------------------------------------
   FONDO DECORATIVO
   ------------------------------------------------------------
   ⚠️ USO CORRECTO — SOLO en un <div> decorativo, NUNCA en <body>
   pointer-events: none se hereda a todos los hijos y desactiva
   TODOS los clics de la página si se aplica al <body>.

   ✅ Correcto:
   <body>
     <div class="mobilus-bg"></div>
     <main style="position:relative; z-index:1;">...</main>
   </body>

   ❌ Nunca:
   <body class="mobilus-bg">
   ------------------------------------------------------------ */
.mobilus-bg {
  position: fixed; inset: 0;
  background:
    radial-gradient(ellipse 70% 60% at 15% 10%, rgba(28,150,252,.08) 0%, transparent 65%),
    radial-gradient(ellipse 50% 50% at 85% 90%, rgba(244,110,35,.06) 0%, transparent 65%);
  pointer-events: none;
  z-index: 0;
}

/* Blindaje — si por error queda en <body>, restaura los clics
   de todos sus hijos directos. Red de seguridad, no sustituye
   corregir el HTML al patrón correcto de arriba. */
body.mobilus-bg > * {
  pointer-events: auto;
}


/* ------------------------------------------------------------
   TIPOGRAFÍA
   ------------------------------------------------------------ */
.titulo-xl  { font-family: var(--font-titulo); font-size: 32px; font-weight: 800; line-height: 1.2; }
.titulo-lg  { font-family: var(--font-titulo); font-size: 24px; font-weight: 700; line-height: 1.3; }
.titulo-md  { font-family: var(--font-titulo); font-size: 18px; font-weight: 700; }
.titulo-sm  { font-family: var(--font-titulo); font-size: 15px; font-weight: 700; }

.texto-lg   { font-size: 16px; line-height: 1.7; }
.texto-md   { font-size: 14px; line-height: 1.6; }
.texto-sm   { font-size: 13px; line-height: 1.5; }
.texto-xs   { font-size: 12px; line-height: 1.4; }

.texto-suave   { opacity: .6; }
.texto-azul    { color: var(--mobilus-azul); }
.texto-naranja { color: var(--mobilus-naranja); }

.etiqueta {
  font-size: 11px; font-weight: 500;
  text-transform: uppercase; letter-spacing: .06em;
  color: var(--mobilus-gris); opacity: .5;
}

.numero-grande {
  font-family: var(--font-titulo);
  font-size: 28px; font-weight: 700;
  color: var(--mobilus-gris); line-height: 1;
}


/* ------------------------------------------------------------
   LOGOTIPO mOS
   ------------------------------------------------------------ */
/*
  Uso:
  <div class="mos-logo-nombre"><span>Studio</span></div>
  <div class="mos-logo-sub">Mobilus · mOS</div>
*/
.mos-logo-nombre {
  font-family: var(--font-titulo);
  font-size: 16px; font-weight: 700;
  color: var(--mobilus-gris); letter-spacing: -.01em;
}
.mos-logo-nombre span { color: var(--mobilus-azul); }

.mos-logo-sub {
  font-size: 11px; color: var(--mobilus-gris); opacity: .45;
  margin-top: 2px; letter-spacing: .04em;
  text-transform: uppercase;
}

/* Marca legado (compatibilidad DataLab) */
.marca-mobilus { font-family: var(--font-titulo); font-weight: 800; color: var(--mobilus-azul); letter-spacing: -.5px; }
.marca-sub     { font-size: 11px; font-weight: 400; color: var(--mobilus-gris); opacity: .5; text-transform: uppercase; letter-spacing: .06em; display: block; }


/* ------------------------------------------------------------
   CARDS
   ------------------------------------------------------------ */
.card {
  background: var(--mobilus-blanco);
  border-radius: var(--radio-xl);
  border: 1px solid var(--mobilus-borde);
  box-shadow: var(--sombra-media);
  overflow: hidden;
}

.card-md {
  background: var(--mobilus-blanco);
  border-radius: var(--radio-lg);
  border: 1px solid var(--mobilus-borde);
  box-shadow: var(--sombra-suave);
  overflow: hidden;
}

.card-header-azul {
  background: var(--gradiente-azul);
  padding: 28px 36px;
  position: relative; overflow: hidden;
}
.card-header-azul::before {
  content: ''; position: absolute;
  top: -40px; right: -40px;
  width: 180px; height: 180px;
  border-radius: 50%; background: rgba(255,255,255,.06);
}

/* Estructura interna de card (nuevo) */
.card-cabeza    { display: flex; align-items: center; justify-content: space-between; margin-bottom: .75rem; }
.card-titulo    { font-family: var(--font-titulo); font-size: 14px; font-weight: 600; color: var(--mobilus-gris); }
.card-cuerpo    { font-size: 13px; color: var(--mobilus-gris); opacity: .75; line-height: 1.5; }
.card-pie       { display: flex; align-items: center; justify-content: space-between; margin-top: .75rem; padding-top: .75rem; border-top: 1px solid var(--mobilus-borde); }


/* ------------------------------------------------------------
   BOTONES
   ------------------------------------------------------------ */
.btn-primario {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 13px 24px;
  background: var(--mobilus-naranja); color: var(--mobilus-blanco);
  border: none; border-radius: var(--radio-md);
  font-family: var(--font-titulo); font-size: 14px; font-weight: 700;
  cursor: pointer; text-decoration: none;
  transition: var(--transicion-media);
  box-shadow: var(--sombra-naranja);
}
.btn-primario:hover  { background: var(--mobilus-naranja-dark); }
.btn-primario:active { transform: scale(.98); }
.btn-primario-lg     { padding: 16px 32px; font-size: 16px; }

.btn-secundario {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 11px 20px;
  background: var(--mobilus-blanco); color: var(--mobilus-gris);
  border: 1px solid var(--mobilus-borde); border-radius: var(--radio-md);
  font-family: var(--font-cuerpo); font-size: 14px; font-weight: 500;
  cursor: pointer; text-decoration: none;
  transition: var(--transicion);
}
.btn-secundario:hover { border-color: var(--mobilus-azul); color: var(--mobilus-azul); background: #eef7ff; }

.btn-azul { background: var(--mobilus-azul); color: var(--mobilus-blanco); box-shadow: 0 4px 16px rgba(28,150,252,.25); border: none; }
.btn-azul:hover { background: var(--mobilus-azul-dark); }

/* Botón pequeño */
.btn-sm {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 12px; padding: 5px 12px;
  border-radius: var(--radio-sm);
  border: 1px solid var(--mobilus-borde);
  background: none; color: var(--mobilus-gris);
  cursor: pointer; transition: var(--transicion);
}
.btn-sm:hover { background: var(--mobilus-fondo); }

/* Botón full width (login / mobile) */
.btn-full {
  width: 100%; padding: 14px;
  border-radius: var(--radio-md); border: none;
  font-size: 15px; font-weight: 500; cursor: pointer;
}
.btn-full.btn-primario { background: var(--mobilus-naranja); color: var(--mobilus-blanco); }
.btn-full.btn-azul     { background: var(--mobilus-azul);    color: var(--mobilus-blanco); }

/* Botón peligro */
.btn-peligro {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 13px; padding: 6px 14px;
  border-radius: var(--radio-sm);
  border: 1px solid var(--mobilus-error);
  background: var(--dim-rojo); color: var(--mobilus-error);
  cursor: pointer; transition: var(--transicion);
}
.btn-peligro:hover { background: var(--mobilus-error); color: var(--mobilus-blanco); }


/* ------------------------------------------------------------
   BADGES
   ------------------------------------------------------------ */
.badge         { display: inline-block; padding: 3px 10px; border-radius: var(--radio-pill); font-size: 12px; font-weight: 500; }
.badge-azul    { background: #eef7ff; color: var(--mobilus-azul); }
.badge-naranja { background: #fff3ed; color: var(--mobilus-naranja); }
.badge-verde   { background: #f0fae9; color: #4a9e2f; }
.badge-rojo    { background: #fff0f0; color: #c0392b; }
.badge-gris    { background: var(--mobilus-fondo); color: var(--mobilus-gris); }
.badge-morado  { background: #f3eeff; color: #7c4dff; }
.badge-amarillo{ background: #fff8e6; color: #8a6000; }

/* Estados de contenido (Studio / flujos) */
.est-programado { background: var(--mobilus-fondo);  color: var(--mobilus-gris); border-radius: var(--radio-pill); padding: 3px 10px; font-size: 12px; font-weight: 500; }
.est-bocetado   { background: #eef7ff;               color: #0a5fa0;             border-radius: var(--radio-pill); padding: 3px 10px; font-size: 12px; font-weight: 500; }
.est-escrito    { background: #fff8e6;               color: #8a6000;             border-radius: var(--radio-pill); padding: 3px 10px; font-size: 12px; font-weight: 500; }
.est-producido  { background: #fff3ed;               color: #a84400;             border-radius: var(--radio-pill); padding: 3px 10px; font-size: 12px; font-weight: 500; }
.est-publicado  { background: #f0fae9;               color: #2d7a1f;             border-radius: var(--radio-pill); padding: 3px 10px; font-size: 12px; font-weight: 500; }

/* Temperatura de prioridad */
.temp-tranquilo { background: #f0fae9; color: #2d7a1f; border-radius: var(--radio-pill); padding: 3px 10px; font-size: 12px; font-weight: 500; }
.temp-atencion  { background: #fff8e6; color: #8a6000; border-radius: var(--radio-pill); padding: 3px 10px; font-size: 12px; font-weight: 500; }
.temp-urgente   { background: #fff0f0; color: #c0392b; border-radius: var(--radio-pill); padding: 3px 10px; font-size: 12px; font-weight: 500; }

/* Barra lateral de temperatura en tarjeta */
.temp-bar        { width: 3px; border-radius: 99px; align-self: stretch; min-height: 36px; flex-shrink: 0; }
.temp-bar-verde  { background: var(--mobilus-verde); }
.temp-bar-amarillo { background: var(--mobilus-alerta); }
.temp-bar-rojo   { background: var(--mobilus-error); }


/* ------------------------------------------------------------
   FORMULARIOS
   ------------------------------------------------------------ */
.campo        { margin-bottom: 16px; }
.campo label  { display: block; font-size: 13px; font-weight: 500; margin-bottom: 6px; }
.campo label .req { color: var(--mobilus-naranja); margin-left: 2px; }

.input-base {
  width: 100%; padding: 12px 14px;
  border: 1.5px solid var(--mobilus-borde); border-radius: var(--radio-md);
  font-family: var(--font-cuerpo); font-size: 14px; color: var(--mobilus-gris);
  background: #f7fafd; outline: none;
  transition: border-color .2s, box-shadow .2s, background .2s;
}
.input-base:focus { border-color: var(--mobilus-azul); background: var(--mobilus-blanco); box-shadow: 0 0 0 3px rgba(28,150,252,.10); }
.input-base::placeholder { color: var(--mobilus-gris); opacity: .4; }

.textarea-base {
  width: 100%; padding: 12px 14px;
  border: 1.5px solid var(--mobilus-borde); border-radius: var(--radio-md);
  font-family: var(--font-cuerpo); font-size: 14px; color: var(--mobilus-gris);
  background: #f7fafd; outline: none; resize: vertical; min-height: 80px; line-height: 1.6;
  transition: border-color .2s;
}
.textarea-base:focus { border-color: var(--mobilus-azul); background: var(--mobilus-blanco); }

.select-base {
  width: 100%; padding: 12px 14px;
  border: 1.5px solid var(--mobilus-borde); border-radius: var(--radio-md);
  font-family: var(--font-cuerpo); font-size: 14px; color: var(--mobilus-gris);
  background: #f7fafd; outline: none; cursor: pointer; appearance: none;
  transition: border-color .2s;
}
.select-base:focus { border-color: var(--mobilus-azul); }

.input-icono-wrap             { position: relative; }
.input-icono-wrap i           { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); font-size: 17px; color: var(--mobilus-gris); opacity: .35; pointer-events: none; }
.input-icono-wrap .input-base { padding-left: 42px; }

/* Switch — toggle reutilizable (origen: Orbit, promovido al mOS)
   Uso:
   <label class="switch-linea">
     <span class="switch-texto"><b>Texto de la opción</b></span>
     <span class="switch">
       <input type="checkbox" id="miToggle">
       <span class="switch-track"></span>
     </span>
   </label>
*/
.switch-linea { display: flex; align-items: center; justify-content: space-between; gap: 16px; cursor: pointer; }
.switch-texto b { font-size: 14px; font-weight: 600; }

.switch { position: relative; display: inline-block; width: 44px; height: 24px; flex-shrink: 0; }
.switch input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; z-index: 1; }
.switch-track { position: absolute; inset: 0; background: var(--mobilus-borde); border-radius: 999px; transition: background .2s; }
.switch-track::before {
  content: ''; position: absolute; top: 3px; left: 3px;
  width: 18px; height: 18px; background: var(--mobilus-blanco);
  border-radius: 50%; transition: transform .2s;
  box-shadow: 0 1px 3px rgba(0,0,0,.2);
}
.switch input:checked + .switch-track { background: var(--mobilus-azul); }
.switch input:checked + .switch-track::before { transform: translateX(20px); }


/* ------------------------------------------------------------
   ALERTAS
   ------------------------------------------------------------ */
.alerta        { border-radius: var(--radio-sm); padding: 10px 14px; font-size: 13px; margin-bottom: 16px; display: flex; align-items: center; gap: 8px; }
.alerta-error  { background: #fff2f0; border: 1px solid #ffd6d0; color: #c0392b; }
.alerta-exito  { background: #f0fae9; border: 1px solid #c3e6a8; color: #2d7a1f; }
.alerta-info   { background: #eef7ff; border: 1px solid #a8d4fd; color: #0c5a9e; }
.alerta-alerta { background: #fff8e6; border: 1px solid #ffe9a0; color: #8a6000; }


/* ------------------------------------------------------------
   TABLAS
   ------------------------------------------------------------ */
.tabla-wrap {
  background: var(--mobilus-blanco);
  border: 1px solid var(--mobilus-borde);
  border-radius: var(--radio-lg);
  overflow: hidden;
}

.tabla-cabeza {
  display: grid;
  padding: .5rem 1.25rem;
  border-bottom: 1px solid var(--mobilus-borde);
  background: var(--mobilus-fondo);
}

.tabla-th { font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: .05em; color: var(--mobilus-gris); opacity: .5; }

.tabla-fila {
  display: grid;
  padding: .75rem 1.25rem;
  border-bottom: 1px solid var(--mobilus-borde);
  align-items: center;
  transition: background .1s;
}
.tabla-fila:last-child { border-bottom: none; }
.tabla-fila:hover      { background: var(--mobilus-fondo); }

.tabla-celda       { font-size: 13px; color: var(--mobilus-gris); opacity: .75; }
.tabla-celda-titulo { font-size: 14px; font-weight: 500; color: var(--mobilus-gris); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-right: 8px; }


/* ------------------------------------------------------------
   NAVEGACIÓN LATERAL (sidebar)
   ------------------------------------------------------------ */
.sidebar {
  width: 210px; min-height: 100vh;
  background: var(--mobilus-blanco);
  border-right: 1px solid var(--mobilus-borde);
  display: flex; flex-direction: column;
  position: fixed; top: 0; left: 0; z-index: 100;
  box-shadow: var(--sombra-suave);
}

.sidebar-logo   { padding: 1.25rem; border-bottom: 1px solid var(--mobilus-borde); }
.sidebar-nav    { padding: .75rem; flex: 1; }
.sidebar-footer { padding: .75rem 1rem 1rem; border-top: 1px solid var(--mobilus-borde); }

.sidebar-item {
  display: flex; align-items: center; gap: 9px;
  padding: .5rem .75rem; border-radius: var(--radio-md);
  font-size: 13.5px; color: var(--mobilus-gris); opacity: .7;
  cursor: pointer; transition: var(--transicion);
  margin-bottom: 2px; font-weight: 400; text-decoration: none;
}
.sidebar-item:hover        { background: var(--mobilus-fondo); opacity: 1; }
.sidebar-item.activo       { background: var(--dim-azul); color: var(--mobilus-azul); opacity: 1; font-weight: 500; }
.sidebar-item i            { font-size: 16px; flex-shrink: 0; }

.sidebar-seccion {
  font-size: 10px; font-weight: 500;
  text-transform: uppercase; letter-spacing: .06em;
  color: var(--mobilus-gris); opacity: .35;
  padding: .75rem .75rem .25rem;
}


/* ------------------------------------------------------------
   MODALES
   ------------------------------------------------------------ */
.modal-overlay {
  display: none; position: fixed; inset: 0;
  background: rgba(0,0,0,.35); z-index: 200;
  align-items: center; justify-content: center;
}
.modal-overlay.abierto { display: flex; }

.modal {
  background: var(--mobilus-blanco);
  border-radius: var(--radio-xl);
  padding: 2rem; width: 460px; max-width: 90vw;
  box-shadow: var(--sombra-fuerte);
  max-height: 90vh; overflow-y: auto;
}

.modal-titulo   { font-family: var(--font-titulo); font-size: 18px; font-weight: 700; margin-bottom: 4px; color: var(--mobilus-gris); }
.modal-sub      { font-size: 13px; color: var(--mobilus-gris); opacity: .5; margin-bottom: 1.5rem; }
.modal-acciones { display: flex; gap: 8px; margin-top: 1.5rem; justify-content: flex-end; }

/* Bottom sheet mobile */
.sheet-overlay {
  position: fixed; inset: 0;
  background: rgba(0,0,0,.5); z-index: 200;
  display: flex; align-items: flex-end;
  opacity: 0; pointer-events: none;
  transition: opacity .25s;
}
.sheet-overlay.abierto { opacity: 1; pointer-events: all; }

.sheet {
  background: var(--mobilus-blanco);
  border-radius: var(--radio-xl) var(--radio-xl) 0 0;
  padding: 20px 20px calc(env(safe-area-inset-bottom) + 24px);
  width: 100%; transform: translateY(100%);
  transition: transform .3s cubic-bezier(.32,.72,0,1);
  max-height: 90vh; overflow-y: auto;
}
.sheet-overlay.abierto .sheet { transform: translateY(0); }
.sheet-asa    { width: 36px; height: 4px; border-radius: 2px; background: var(--mobilus-borde); margin: 0 auto 20px; }
.sheet-titulo { font-family: var(--font-titulo); font-size: 18px; font-weight: 700; margin-bottom: 16px; }


/* ------------------------------------------------------------
   TOAST (notificación flotante)
   ------------------------------------------------------------ */
.toast {
  position: fixed; top: 60px; left: 50%;
  transform: translateX(-50%) translateY(-10px);
  background: var(--mobilus-gris); color: var(--mobilus-blanco);
  border-radius: var(--radio-pill);
  padding: 9px 18px; font-size: 13px;
  z-index: 300; opacity: 0;
  transition: var(--transicion-media);
  white-space: nowrap; pointer-events: none;
  box-shadow: var(--sombra-media);
}
.toast.visible { opacity: 1; transform: translateX(-50%) translateY(0); }

/*
  Uso JS:
  function mostrarToast(msg) {
    const t = document.getElementById('toast');
    t.textContent = msg;
    t.classList.add('visible');
    setTimeout(() => t.classList.remove('visible'), 2500);
  }
*/


/* ------------------------------------------------------------
   FILTROS Y TABS
   ------------------------------------------------------------ */
.filtros-row { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; margin-bottom: .75rem; }

.filtro-btn {
  font-size: 12px; padding: 5px 14px;
  border-radius: var(--radio-pill);
  border: 1px solid var(--mobilus-borde);
  background: none; cursor: pointer;
  color: var(--mobilus-gris); transition: var(--transicion);
}
.filtro-btn:hover  { background: var(--mobilus-fondo); }
.filtro-btn.activo { background: var(--mobilus-azul); border-color: var(--mobilus-azul); color: var(--mobilus-blanco); }

.tabs-bar { display: flex; gap: 4px; background: var(--mobilus-fondo); border-radius: var(--radio-md); padding: 3px; width: fit-content; }

.tab { font-size: 12px; padding: 5px 16px; border-radius: var(--radio-sm); cursor: pointer; color: var(--mobilus-gris); transition: var(--transicion); border: none; background: none; }
.tab.activo { background: var(--mobilus-blanco); color: var(--mobilus-gris); font-weight: 500; box-shadow: var(--sombra-suave); }


/* ------------------------------------------------------------
   ESTADO VACÍO
   ------------------------------------------------------------ */
.estado-vacio       { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 3rem 1.5rem; text-align: center; }
.estado-vacio-icono { font-size: 36px; margin-bottom: .75rem; opacity: .25; }
.estado-vacio-titulo{ font-family: var(--font-titulo); font-size: 15px; font-weight: 600; color: var(--mobilus-gris); margin-bottom: 6px; }
.estado-vacio-sub   { font-size: 13px; color: var(--mobilus-gris); opacity: .5; }


/* ------------------------------------------------------------
   BARRA DE PROGRESO
   ------------------------------------------------------------ */
.progreso-track { height: 6px; background: var(--mobilus-borde); border-radius: 3px; overflow: hidden; }
.progreso-fill  { height: 100%; background: var(--gradiente-azul); border-radius: 3px; transition: width .4s ease; }


/* ------------------------------------------------------------
   ANIMACIONES
   ------------------------------------------------------------ */
@keyframes fadeUp  { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeIn  { from { opacity: 0; } to { opacity: 1; } }
@keyframes slideIn { from { opacity: 0; transform: translateX(-12px); } to { opacity: 1; transform: translateX(0); } }

.anim-fadeUp  { animation: fadeUp  .4s ease both; }
.anim-fadeIn  { animation: fadeIn  .3s ease both; }
.anim-slideIn { animation: slideIn .3s ease both; }
.anim-delay-1 { animation-delay: .05s; }
.anim-delay-2 { animation-delay: .10s; }
.anim-delay-3 { animation-delay: .15s; }
.anim-delay-4 { animation-delay: .20s; }


/* ------------------------------------------------------------
   DIVISORES
   ------------------------------------------------------------ */
.divisor    { height: 1px; background: var(--mobilus-borde); margin: 1.25rem 0; }
.divisor-sm { height: 1px; background: var(--mobilus-borde); margin: .75rem 0; }


/* ------------------------------------------------------------
   UTILIDADES DE LAYOUT
   ------------------------------------------------------------ */
.d-flex          { display: flex; }
.align-center    { align-items: center; }
.justify-between { justify-content: space-between; }
.justify-center  { justify-content: center; }
.gap-4           { gap: 4px; }
.gap-8           { gap: 8px; }
.gap-12          { gap: 12px; }
.gap-16          { gap: 16px; }
.gap-24          { gap: 24px; }

.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.grid-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 12px; }
.grid-4 { display: grid; grid-template-columns: repeat(4,1fr); gap: 12px; }
.col-completo { grid-column: 1 / -1; }

.mb-4  { margin-bottom: 4px; }
.mb-8  { margin-bottom: 8px; }
.mb-12 { margin-bottom: 12px; }
.mb-16 { margin-bottom: 16px; }
.mb-24 { margin-bottom: 24px; }
.mb-32 { margin-bottom: 32px; }
.p-16  { padding: 16px; }
.p-24  { padding: 24px; }
.p-32  { padding: 32px; }

.text-center  { text-align: center; }
.text-right   { text-align: right; }
.w-full       { width: 100%; }
.opacity-60   { opacity: .6; }
.opacity-40   { opacity: .4; }

.scroll-limpio { overflow-y: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.scroll-limpio::-webkit-scrollbar { display: none; }


/* ------------------------------------------------------------
   LAYOUT CON SIDEBAR
   ------------------------------------------------------------ */
/*
  Estructura base:
  <body>
    <div class="mobilus-bg"></div>
    <aside class="sidebar">...</aside>
    <main class="main-contenido">...</main>
  </body>
*/
.main-contenido {
  margin-left: 210px;
  padding: 2rem;
  position: relative;
  z-index: 1;
  min-height: 100vh;
}


/* ------------------------------------------------------------
   RESPONSIVE
   ------------------------------------------------------------ */
@media (max-width: 768px) {
  .oculto-mobile { display: none !important; }
  .grid-2 { grid-template-columns: 1fr; }
  .grid-3 { grid-template-columns: 1fr; }
  .grid-4 { grid-template-columns: 1fr 1fr; }
  .main-contenido { margin-left: 0; padding: 1rem; }
}

@media (min-width: 769px) {
  .oculto-desktop { display: none !important; }
}
