@charset "UTF-8";
/* =========================================================================
   DECASA THEME  ·  capa moderna sobre BeyondAdmin (Bootstrap 3.3.1)
   -------------------------------------------------------------------------
   Se carga DESPUES de beyond.min.css y del skin decasa-navy.css.
   Reglas prefijadas con `html` para ganarle en especificidad a las reglas
   `.clase` de Beyond sin recurrir a !important salvo donde Beyond lo usa.

   REGLA DE ORO: esta hoja NO toca display, width, height ni text-align.
   Las vistas traen 813 estilos en linea que dependen de esas propiedades.

   Indice
     1.  Tokens
     2.  Base
     3.  Navbar
     4.  Sidebar
     5.  Page header
     6.  Widget
     7.  Tablas + DataTables
     8.  Botones
     9.  Formularios + Select2
     10. Modales
     11. KPI / databox
     12. Badges, alerts, toastr
     13. Componentes nuevos (.dc-*)
     14. Login
     15. Responsivo
   ========================================================================= */


/* -------------------------------------------------------------------------
   1. TOKENS
   ------------------------------------------------------------------------- */
/* Paleta de marca tomada del logotipo /images/papp500.png:
     cian    #00ADEF  (simbolo)
     grafito #3A3A3C  (wordmark "productividapp")
   El cian puro solo alcanza 2.5:1 sobre blanco, asi que NO se usa como fondo
   de boton ni como color de texto: para eso va --dc-primary (#0077A8, 5.0:1
   con texto blanco). El cian queda para acentos, focus, bordes activos y
   superficies oscuras, donde si contrasta. */
:root{
  --dc-brand:#00ADEF;    --dc-brand-ink:#3A3A3C;

  --dc-primary:#0077A8;  --dc-primary-hover:#00648F;  --dc-primary-soft:#E2F5FD;
  --dc-accent:#00ADEF;   --dc-accent-soft:#E2F5FD;
  --dc-navbar:#3A3A3C;
  --dc-sidebar:#2E2E30;  --dc-sidebar-hover:#3D3D41;  --dc-sidebar-text:#A9AAB0;
  --dc-sidebar-active:#FFFFFF;

  --dc-bg:#F4F6F8;       --dc-surface:#FFFFFF;        --dc-surface-alt:#FAFBFC;
  --dc-border:#DDE1E6;   --dc-border-strong:#C3C8CF;

  --dc-text:#22262B;     --dc-text-muted:#64707B;     --dc-text-faint:#949CA5;

  --dc-success:#2E9E6B;  --dc-success-soft:#E7F5EE;
  --dc-warning:#D98E04;  --dc-warning-soft:#FDF4E3;
  --dc-danger:#D14343;   --dc-danger-soft:#FBECEC;
  --dc-info:#0077A8;     --dc-info-soft:#E2F5FD;

  --dc-radius-sm:6px;  --dc-radius:8px;  --dc-radius-lg:12px;  --dc-radius-pill:999px;

  --dc-shadow-sm:0 1px 2px rgba(16,32,56,.06);
  --dc-shadow-md:0 1px 2px rgba(16,32,56,.05), 0 4px 14px rgba(16,32,56,.07);
  --dc-shadow-lg:0 2px 4px rgba(16,32,56,.06), 0 12px 32px rgba(16,32,56,.13);

  --dc-focus:rgba(0,173,239,.32);
  --dc-trans:.15s ease;
}

html[data-tema="dark"]{
  --dc-brand:#00ADEF;    --dc-brand-ink:#3A3A3C;

  --dc-primary:#00ADEF;  --dc-primary-hover:#33BFF3;  --dc-primary-soft:#102C3A;
  --dc-accent:#33BFF3;   --dc-accent-soft:#0F2733;
  --dc-navbar:#232326;
  --dc-sidebar:#1B1B1D;  --dc-sidebar-hover:#2A2A2E;  --dc-sidebar-text:#9A9BA2;

  --dc-bg:#141416;       --dc-surface:#1D1D20;        --dc-surface-alt:#232327;
  --dc-border:#303035;   --dc-border-strong:#434349;

  --dc-text:#E9EAEC;     --dc-text-muted:#9A9BA2;     --dc-text-faint:#6E6F76;

  --dc-success-soft:#12291F;  --dc-warning-soft:#2B2113;
  --dc-danger-soft:#2E1A1A;   --dc-info-soft:#0F2733;

  --dc-shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --dc-shadow-md:0 1px 2px rgba(0,0,0,.3), 0 4px 14px rgba(0,0,0,.35);
  --dc-shadow-lg:0 2px 4px rgba(0,0,0,.35), 0 12px 32px rgba(0,0,0,.5);
  --dc-focus:rgba(0,173,239,.42);
}


/* -------------------------------------------------------------------------
   2. BASE
   ------------------------------------------------------------------------- */
/* El fondo se declara tambien en <html>: si la pagina resulta mas alta que el
   contenido pintado, el lienzo toma el color de html y no el blanco de Bootstrap.
   Nota historica: gralTables.js calculaba el scrollY de las DataTables a partir
   del alto de .page-container; ya no lo hace (mide el viewport), pero
   jsTablesGral.js sigue dependiendo de el. */
html{
  background-color:var(--dc-bg);
  /* Garantiza que el color de fondo cubra el viewport aunque la pagina sea
     corta. Se pone en <html> y NO en .page-container, cuya altura todavia
     alimenta el scrollY de las DataTables que usan jsTablesGral.js. */
  min-height:100vh;
}
html .main-container,
html .page-container{ background-color:transparent; }
html body{
  background-color:var(--dc-bg);
  /* Beyond deja body{float:left;min-height:100%}, y ese 100% no resuelve
     contra nada porque html no tiene altura fija: el body se queda en la
     altura de su contenido. Donde termina la caja de html el lienzo se pinta
     BLANCO, y en modo oscuro se ve como una franja clara al pie de cualquier
     pantalla corta. Medido: 169 filas blancas en /admin/personal/getinfo.
     Con el body cubriendo el viewport la franja desaparece. */
  min-height:100vh;
  color:var(--dc-text);
  font-family:'Open Sans','Segoe UI',system-ui,-apple-system,sans-serif;
  font-size:13px;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
html .main-container{ background-color:var(--dc-bg); }
html a{ color:var(--dc-accent); }
html a:hover,html a:focus{ color:var(--dc-primary-hover); }
html hr{ border-top-color:var(--dc-border); }

/* Foco visible y consistente en toda la app */
html a:focus-visible,
html .btn:focus-visible,
html .form-control:focus-visible,
html button:focus-visible{
  outline:none;
  box-shadow:0 0 0 3px var(--dc-focus);
  border-radius:var(--dc-radius-sm);
}

/* Scrollbars discretas */
html ::-webkit-scrollbar{ width:10px; height:10px; }
html ::-webkit-scrollbar-track{ background:transparent; }
html ::-webkit-scrollbar-thumb{
  background:var(--dc-border-strong);
  border-radius:var(--dc-radius-pill);
  border:2px solid var(--dc-bg);
}
html ::-webkit-scrollbar-thumb:hover{ background:var(--dc-text-faint); }

/* Beyond pinta el spinner de carga */
html .loading-container .loader{ border-top-color:var(--dc-accent) !important; }


/* -------------------------------------------------------------------------
   3. NAVBAR
   Se pinta en navy para que forme una sola pieza con el sidebar.
   Razon de fondo: el logo de DECASA es un lockup vertical (globo sobre
   palabra, 1806x1187) y a 30px de alto sobre blanco resulta ilegible; sobre
   navy se invierte a blanco y se lee. Ademas el hamburguesa de Beyond viene
   forzado a #fff con especificidad alta, asi que sobre blanco desaparecia.
   ------------------------------------------------------------------------- */
html .navbar,
html .navbar .navbar-inner,
html .navbar.navbar-fixed-top .navbar-inner{
  background:var(--dc-navbar) !important;
  background-image:none !important;
  border:0;
  box-shadow:0 1px 3px rgba(11,18,32,.20);
}
html .navbar .navbar-brand{ padding:0; }
/* papp500.png apila el simbolo (y 0-408) sobre el wordmark (y 467-530). En una
   barra de 45px el lockup completo dejaria la palabra en 4px, ilegible, asi que
   object-fit recorta el PNG al simbolo y el wordmark se compone como texto.
   La razon 33x30 con object-position:top corta justo debajo del simbolo:
   33px de ancho -> 38.9px de alto natural, y el simbolo termina en 30px. */
html .navbar .navbar-brand small{
  display:flex;
  align-items:center;
  gap:9px;
  margin-left:6px;
  /* Beyond fija .navbar-brand{height:45px}; sin esta altura el lockup de 30px
     se pega al borde superior de la barra en vez de centrarse. */
  height:45px;
  font-size:0;
}
html .navbar .navbar-brand small img{
  height:30px !important;
  width:33px !important;
  margin:0;
  object-fit:cover;
  object-position:top center;
  /* El simbolo es cian + grafito; sobre la barra grafito la mitad oscura
     desapareceria, asi que va en blanco solido */
  filter:brightness(0) invert(1);
  opacity:.97;
}
html .navbar .navbar-brand .dc-brand-word{
  color:#fff;
  font-size:16px;
  font-weight:700;
  letter-spacing:-.02em;
  line-height:1;
}
/* Beyond colapsa el ancho de la barra de marca a 50px por debajo de 768px;
   ahi solo cabe el simbolo */
@media (max-width:767px){
  html .navbar .navbar-brand .dc-brand-word{ display:none; }
}

/* Boton de colapso del sidebar (Beyond lo posiciona en left:189px) */
html .navbar .sidebar-collapse{
  background:transparent !important;
  border:0;
  box-shadow:none !important;
}
html .navbar .sidebar-collapse .collapse-icon{
  color:rgba(255,255,255,.65);
  transition:color var(--dc-trans);
}
html .navbar .sidebar-collapse:hover{ box-shadow:none !important; }
html .navbar .sidebar-collapse:hover .collapse-icon{ color:#fff; }

/* Area de cuenta */
html .navbar .navbar-account .account-area > li > a{
  color:rgba(255,255,255,.88);
  transition:background-color var(--dc-trans);
}
html .navbar .navbar-account .account-area > li > a:hover,
html .navbar .navbar-account .account-area > li.open > a{
  background-color:rgba(255,255,255,.10);
}
html .navbar .navbar-account .account-area .profile span{ color:#fff; font-weight:600; }
html .navbar .navbar-account .avatar{ border-radius:var(--dc-radius-pill); overflow:hidden; }
html .navbar .navbar-account .avatar img{ border-color:rgba(255,255,255,.35); }

html .dropdown-menu{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius);
  box-shadow:var(--dc-shadow-lg);
  padding:6px 0;
}
html .dropdown-menu > li > a{
  color:var(--dc-text);
  padding:7px 14px;
  transition:background-color var(--dc-trans);
}
html .dropdown-menu > li > a:hover,
html .dropdown-menu > li > a:focus{
  background-color:var(--dc-accent-soft);
  color:var(--dc-primary);
}
html .dropdown-menu .divider{ background-color:var(--dc-border); }
html .dropdown-login-area .username a,
html .dropdown-login-area .email a{ color:var(--dc-text-muted); }
html .dropdown-login-area .dropdown-footer a{ color:var(--dc-danger); font-weight:600; }

/* Switch de tema claro/oscuro (lo inyecta decasa-theme.js) */
html .dc-tema-toggle{
  background:none; border:0; cursor:pointer;
  height:45px; padding:0 14px;
  color:rgba(255,255,255,.65);
  font-size:15px;
  transition:color var(--dc-trans), background-color var(--dc-trans);
}
html .dc-tema-toggle:hover{ color:#fff; background-color:rgba(255,255,255,.10); }


/* -------------------------------------------------------------------------
   4. SIDEBAR
   Beyond pinta el fondo con .page-sidebar:before (pseudo fijo de 219px).
   ------------------------------------------------------------------------- */
html .page-sidebar:before,
html .page-sidebar.sidebar-fixed:before{
  background-color:var(--dc-sidebar);
  box-shadow:none;
}
html .page-sidebar .sidebar-menu a{
  color:var(--dc-sidebar-text);
  transition:color var(--dc-trans), background-color var(--dc-trans);
}
html .page-sidebar .sidebar-menu a:hover{ color:var(--dc-sidebar-active); }
html .page-sidebar .sidebar-menu > li > a{ border-top:1px solid rgba(255,255,255,.045); }
html .page-sidebar .sidebar-menu > li:last-child > a{ border-bottom:1px solid rgba(255,255,255,.045); }
html .page-sidebar .sidebar-menu > li > a:hover{
  background-color:var(--dc-sidebar-hover);
  border-color:rgba(255,255,255,.045);
}
html .page-sidebar .sidebar-menu a .menu-icon{ color:var(--dc-sidebar-text); opacity:.8; }
html .page-sidebar .sidebar-menu a:hover .menu-icon{ opacity:1; }
html .page-sidebar .sidebar-menu a .menu-expand{ color:var(--dc-sidebar-text); opacity:.6; }

/* Barra indicadora de 4px a la izquierda */
html .page-sidebar .sidebar-menu li:before{ background-color:var(--dc-accent); }
html .page-sidebar .sidebar-menu li:not(.open):hover:before{ background-color:var(--dc-accent); }

html .page-sidebar .sidebar-menu li.open{ background-color:transparent; }
html .page-sidebar .sidebar-menu li.open > a{ color:var(--dc-sidebar-active); }
html .page-sidebar .sidebar-menu li.active > a{
  background-color:var(--dc-sidebar-hover);
  color:var(--dc-sidebar-active);
  font-weight:600;
}
html .page-sidebar .sidebar-menu li.active > a .menu-icon{ color:var(--dc-accent); opacity:1; }

/* Submenu */
html .page-sidebar .sidebar-menu > li > .submenu{
  background-color:rgba(0,0,0,.22);
  box-shadow:none;
}
html .page-sidebar .sidebar-menu .submenu > li > a{ color:var(--dc-sidebar-text); font-size:12.5px; }
html .page-sidebar .sidebar-menu .submenu > li > a:hover{
  color:var(--dc-sidebar-active);
  background-color:rgba(255,255,255,.05);
}
html .page-sidebar .sidebar-menu .submenu > li.active > a{
  color:var(--dc-sidebar-active);
  background-color:rgba(255,255,255,.07);
  font-weight:600;
}

/* --- Sidebar colapsado (.menu-compact) -------------------------------------
   Al colapsar, Beyond NO encoge el menu: convierte .menu-text y .submenu en
   paneles flotantes con fondo BLANCO (#ffffff) y casi blanco (#fbfbfb), y pone
   el hover de los items tambien en blanco. Con el sidebar oscuro eso dejaba el
   texto de los submenus en --dc-sidebar-text (#A9AAB0) sobre blanco, ilegible,
   y el del modulo activo en blanco sobre blanco, invisible.
   Se pintan oscuros para que el desplegable siga al resto del sidebar. */
html .page-sidebar.menu-compact .sidebar-menu > li > a .menu-text,
html .page-sidebar.menu-compact .sidebar-menu > li > a.menu-dropdown > .menu-text{
  background-color:var(--dc-sidebar-hover);
  color:var(--dc-sidebar-active);
  border-bottom:1px solid rgba(255,255,255,.08);
  box-shadow:var(--dc-shadow-lg);
  font-weight:600;
}
html .page-sidebar.menu-compact .sidebar-menu > li > .submenu{
  background:var(--dc-sidebar-hover);
  border-left:0;
  box-shadow:var(--dc-shadow-lg);
}
html .page-sidebar.menu-compact .sidebar-menu > li > .submenu li > a{
  color:var(--dc-sidebar-text);
}
/* Beyond pone estos hover en #ffffff */
html .page-sidebar.menu-compact .sidebar-menu > li > a:hover,
html .page-sidebar.menu-compact .sidebar-menu > li > .submenu li:hover{
  background-color:rgba(255,255,255,.08);
}
html .page-sidebar.menu-compact .sidebar-menu > li > .submenu li:hover > a,
html .page-sidebar.menu-compact .sidebar-menu > li > .submenu li.active > a{
  color:var(--dc-sidebar-active);
}
/* El icono del modulo activo tambien se veia blanco sobre el panel blanco */
html .page-sidebar.menu-compact .sidebar-menu > li.active > a{
  background-color:var(--dc-sidebar-hover);
}
/* Beyond pone color:#262626 en el hover del item, pensado para el panel blanco.
   Sobre el panel oscuro seria texto oscuro sobre oscuro. */
html .page-sidebar.menu-compact .sidebar-menu > li:hover > a,
html .page-sidebar.menu-compact .sidebar-menu > li:hover > a > .menu-text{
  color:var(--dc-sidebar-active);
}

/* Chatbar */
html .page-chatbar{
  background-color:var(--dc-surface);
  border-left:1px solid var(--dc-border);
}
html .page-chatbar .contacts-list .contact:hover{ background-color:var(--dc-surface-alt); }
html .page-chatbar .contact-name{ color:var(--dc-text); font-weight:600; }


/* -------------------------------------------------------------------------
   5. PAGE HEADER
   Beyond lo trae como barra de 40px con degradado SVG en base64.
   ------------------------------------------------------------------------- */
/* Encabezado homologado. En 46 vistas el titulo se mudo a la cabecera de la
   tarjeta y este bloque desaparecio; las 8 que quedan no tienen tarjeta donde
   ponerlo (los tableros, un par de detalles), asi que aqui el .page-header se
   dibuja EXACTAMENTE como un .widget-header: misma altura, mismo tipo, titulo
   y subtitulo en un solo renglon y las acciones a la derecha. */
html .page-header{
  align-items:center;
  background:var(--dc-surface) !important;
  background-image:none !important;
  border:1px solid var(--dc-border);
  border-bottom:1px solid var(--dc-border);
  border-radius:var(--dc-radius-lg);
  box-shadow:var(--dc-shadow-sm);
  display:flex;
  flex-wrap:wrap;
  gap:8px 16px;
  height:auto;
  margin:0 0 16px 0;
  min-height:0;
  padding:12px 18px;
}
html .page-header .header-title{ flex:1 1 auto; min-width:0; }
html .page-header .header-title h1{
  color:var(--dc-text);
  display:inline;
  font-size:13px;
  font-weight:600;
  letter-spacing:0;
  line-height:1.35;
  margin:0;
}
html .page-header .header-buttons,
html .page-header > .pull-right{
  align-items:center;
  display:flex;
  float:none;
  gap:8px;
  margin-left:auto;
}
/* El subtitulo. Se acota a los dos sitios donde de verdad esta: hermano del
   h1 (62 vistas) o dentro del h1 (location/units/index). Antes la regla decia
   solo ".header-title small" y eso alcanzaba tambien a los <small> de las
   leyendas que van pegados a un <img> — «Ult. Posicion», «Actividades»,
   «Historico» — y al volverlos bloque se apilaban uno por renglon encima del
   mapa. Fuera de esos dos casos el <small> se queda en linea. */
/* El subtitulo va en el mismo renglon que el titulo, separado por un punto
   medio, igual que en la cabecera de tarjeta. */
html .page-header .header-title > small,
html .page-header .header-title > h1 > small{
  color:var(--dc-text-muted);
  display:inline;
  font-size:12.5px;
  font-weight:400;
}
html .page-header .header-title > small:before{
  color:var(--dc-text-faint);
  content:"\00b7";
  margin:0 6px;
}
/* Leyendas de iconos dentro del encabezado (3 vistas): icono + etiqueta en el
   mismo renglon, sin que se corten entre si. */
html .page-header .header-title img + small{
  color:var(--dc-text-muted);
  display:inline;
  font-size:11.5px;
  margin-right:14px;
  vertical-align:middle;
  white-space:nowrap;
}
html .page-header .header-title img{ vertical-align:middle; }
/* Beyond trae .page-body{background:#eeeeee;padding:5px 20px 24px}. Se vuelve
   transparente y se le quita el padding lateral, que si no se sumaria al de
   .page-content y dejaria 40px en las 120 vistas que usan .page-body. */
html .page-body{ background:transparent; padding:0 0 28px 0; }

/* Ancho util. Ojo: .container-fluid de Bootstrap trae 15px de padding lateral,
   pero Beyond ya lo anula con .main-container{padding:0}, asi que ahi no hay
   nada que recuperar y sacar .page-container con margenes negativos solo lo
   empuja fuera del viewport.
   Los 15px NO son negociables: todo .row de Bootstrap 3 trae margin:0 -15px y
   los recupera del padding del padre. Con 12px el .row (y con el la vista
   entera) se sale 3px por cada lado y aparece scroll horizontal. Medido en 40
   de las 73 vistas con formulario. */
html .page-content{ padding:0 15px; }


/* -------------------------------------------------------------------------
   6. WIDGET  (la tarjeta del template: .widget > .widget-header + .widget-body)
   Beyond le pone sombra dura por separado al header y al body. Aqui se
   fusionan en una sola tarjeta con elevacion suave.
   ------------------------------------------------------------------------- */
html .widget{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius);
  box-shadow:var(--dc-shadow-md);
  margin:0 0 20px 0;
  overflow:hidden;
}
html .widget.flat{ box-shadow:none; }

html .widget-header{
  box-shadow:none !important;
  border:0;
  border-bottom:1px solid var(--dc-border);
  color:var(--dc-text);
  min-height:46px;
  padding-left:16px;
  padding-right:8px;
}
/* El fondo neutro solo va en los headers sin color propio: si se aplicara a
   todos, el !important le ganaba a .bg-warning / .bg-blue / ... y dejaba en
   blanco los encabezados de colores (los tableros de estatus de ruta). */
html .widget-header:not([class*="bg-"]){
  background:var(--dc-surface) !important;
  background-image:none !important;
}
html .widget-header > .widget-caption{
  color:var(--dc-text);
  font-size:13px;
  font-weight:600 !important;
  letter-spacing:.01em;
  line-height:45px;
}
html .widget-header > .widget-icon{
  color:var(--dc-text-muted);
  line-height:45px;
  font-size:14px;
}
html .widget-header .widget-buttons{ line-height:45px; height:46px; }
html .widget-header .widget-buttons > a{
  color:var(--dc-text-faint);
  transition:color var(--dc-trans);
}
html .widget-header .widget-buttons > a:hover{ color:var(--dc-primary); }

/* La franja de acento: Beyond la declara en 3px blanca y el skin la colorea.
   Se adelgaza a 2px para que no domine la tarjeta. */
html .widget-header.bordered-bottom{ border-bottom-width:2px; }
html .widget-header.bordered-left{ border-left-width:3px; }

/* Encabezados de color solido (.widget-header.bg-blue, .bg-warning, ...) */
html .widget-header[class*="bg-"]{ border-bottom:0; }
html .widget-header[class*="bg-"] > .widget-caption,
html .widget-header[class*="bg-"] i{ color:#fff; }
html .widget-header[class*="bg-"] .widget-buttons > a{ color:rgba(255,255,255,.75); }
html .widget-header[class*="bg-"] .widget-buttons > a:hover{ color:#fff; }

html .widget-body{
  background-color:var(--dc-surface);
  box-shadow:none !important;
  border:0;
  color:var(--dc-text);
  padding:14px;
}
html .widget-body.no-padding{ padding:0; }

/* La barra de acciones arriba de las tablas */
html .table-toolbar{
  padding:0 0 14px 0;
  border:0;
  background:none;
}


/* -------------------------------------------------------------------------
   7. TABLAS + DATATABLES
   ------------------------------------------------------------------------- */
html .table{
  background-color:transparent;
  color:var(--dc-text);
  font-size:12.5px;
  margin-bottom:0;
}
html .table > thead > tr > th{
  background-color:var(--dc-surface-alt);
  color:var(--dc-text-muted);
  font-size:11px;
  font-weight:600;
  letter-spacing:.045em;
  text-transform:uppercase;
  /* 9px y no 12: el padding lateral se paga en CADA columna y las tablas de
     esta app llegan a 13, asi que aqui se recupera mas ancho que en los
     margenes de la pagina. */
  padding:11px 9px;
  border-top:0;
  border-bottom:1px solid var(--dc-border);
  vertical-align:middle;
  white-space:nowrap;
}
html .table > tbody > tr > td{
  padding:9px 9px;
  border-top:1px solid var(--dc-border);
  color:var(--dc-text);
  vertical-align:middle;
}
html .table > tbody > tr:first-child > td{ border-top:0; }

/* Beyond/Bootstrap pintan striped y hover con grises que chocan con el tema */
html .table-striped > tbody > tr:nth-of-type(odd),
html .table-striped > tbody > tr:nth-of-type(odd) > td{
  background-color:var(--dc-surface-alt);
}
html .table-hover > tbody > tr:hover,
html .table-hover > tbody > tr:hover > td{
  background-color:var(--dc-accent-soft);
}
html .table-bordered,
html .table-bordered > thead > tr > th,
html .table-bordered > tbody > tr > td{ border-color:var(--dc-border); }

/* Sin bordes verticales: la retícula completa es lo que mas envejece una tabla.
   Se conserva solo la horizontal. */
html .widget-body > .table-bordered,
html .widget-body > .table-responsive > .table-bordered,
html .dc-table-card .table-bordered{ border-left:0; border-right:0; border-top:0; }
html .widget-body > .table-bordered > thead > tr > th,
html .widget-body > .table-bordered > tbody > tr > td,
html .widget-body > .table-responsive > .table-bordered > thead > tr > th,
html .widget-body > .table-responsive > .table-bordered > tbody > tr > td,
html .dc-table-card .table-bordered > thead > tr > th,
html .dc-table-card .table-bordered > tbody > tr > td{
  border-left:0;
  border-right:0;
}

/* --- DataTables --- */
html .dataTables_wrapper{ color:var(--dc-text-muted); }
html .dataTables_wrapper .dataTables_filter input{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-sm);
  color:var(--dc-text);
  padding:6px 10px;
  transition:border-color var(--dc-trans), box-shadow var(--dc-trans);
}
html .dataTables_wrapper .dataTables_filter input:focus{
  border-color:var(--dc-accent);
  box-shadow:0 0 0 3px var(--dc-focus);
  outline:none;
}
html .dataTables_wrapper .dataTables_info,
html .dataTables_wrapper .dataTables_paginate{
  color:var(--dc-text-muted);
  font-size:12px;
  padding-top:12px;
}
html .dataTables_wrapper .DTTTFooter{ border-top:1px solid var(--dc-border); margin-top:4px; }
html .dataTables_scrollHead,
html .dataTables_scrollHead .dataTables_scrollHeadInner table > thead > tr > th{
  background-color:var(--dc-surface-alt);
}
html table.dataTable thead .sorting,
html table.dataTable thead .sorting_asc,
html table.dataTable thead .sorting_desc{ cursor:pointer; }
html .DTTT_button,
html .DTTT.btn-group a{
  background:var(--dc-surface) !important;
  border:1px solid var(--dc-border) !important;
  border-radius:var(--dc-radius-sm) !important;
  color:var(--dc-text-muted) !important;
  box-shadow:none !important;
}
html .DTTT_button:hover,
html .DTTT.btn-group a:hover{
  border-color:var(--dc-accent) !important;
  color:var(--dc-primary) !important;
}
html .pagination > li > a,
html .pagination > li > span{
  background-color:var(--dc-surface);
  border-color:var(--dc-border);
  color:var(--dc-text-muted);
}
html .pagination > li > a:hover{
  background-color:var(--dc-accent-soft);
  border-color:var(--dc-border);
  color:var(--dc-primary);
}


/* -------------------------------------------------------------------------
   8. BOTONES
   Beyond: border-radius 2px + sombra dura. Aqui: 6px, altura 34, foco claro.
   ------------------------------------------------------------------------- */
html .btn{
  border-radius:var(--dc-radius-sm);
  box-shadow:none;
  font-size:13px;
  font-weight:600;
  line-height:1.4;
  padding:7px 15px;
  border:1px solid transparent;
  transition:background-color var(--dc-trans), border-color var(--dc-trans),
             color var(--dc-trans), box-shadow var(--dc-trans);
}
html .btn:hover{ box-shadow:var(--dc-shadow-sm); }
html .btn:active,
html .btn.active{ box-shadow:inset 0 2px 4px rgba(0,0,0,.12); }
html .btn:focus,
html .btn:focus-visible{
  outline:none;
  box-shadow:0 0 0 3px var(--dc-focus);
}
html .btn-sm,html .btn-xs{ border-radius:var(--dc-radius-sm); }
html .btn-sm{ padding:5px 11px; font-size:12px; }
html .btn-xs{ padding:3px 8px; font-size:11px; }
html .btn.icon-only{ padding-left:0; padding-right:0; }
html .btn-circle{ border-radius:var(--dc-radius-pill); }
/* .shiny es el brillo de gradiente del template */
html .btn.shiny{ background-image:none !important; }

/* Boton neutro: en Beyond es un gris sucio */
html .btn-default,
html .btn.default{
  background-color:var(--dc-surface) !important;
  background-image:none !important;
  border-color:var(--dc-border) !important;
  color:var(--dc-text) !important;
}
html .btn-default:hover,
html .btn.default:hover{
  background-color:var(--dc-surface-alt) !important;
  border-color:var(--dc-border-strong) !important;
}

/* Las variantes de color: se quita el degradado y se fija el hex del tema */
html .btn-primary{ background-color:var(--dc-primary) !important; background-image:none !important; }
html .btn-primary:hover{ background-color:var(--dc-primary-hover) !important; }
html .btn-info{ background-color:var(--dc-info) !important; background-image:none !important; }
html .btn-info:hover{ background-color:#1F6FD8 !important; }
html .btn-success{ background-color:var(--dc-success) !important; background-image:none !important; }
html .btn-success:hover{ background-color:#25835A !important; }
html .btn-warning{ background-color:var(--dc-warning) !important; background-image:none !important; }
html .btn-warning:hover{ background-color:#BC7A03 !important; }
html .btn-danger{ background-color:var(--dc-danger) !important; background-image:none !important; }
html .btn-danger:hover{ background-color:#B63636 !important; }
html .btn-primary,html .btn-info,html .btn-success,
html .btn-warning,html .btn-danger{ color:#fff !important; }

html .btn-group > .btn:first-child{ border-top-left-radius:var(--dc-radius-sm); border-bottom-left-radius:var(--dc-radius-sm); }
html .btn-group > .btn:last-child{ border-top-right-radius:var(--dc-radius-sm); border-bottom-right-radius:var(--dc-radius-sm); }


/* -------------------------------------------------------------------------
   9. FORMULARIOS + SELECT2
   Ojo: .chzn-select (161 usos) lo inicializa Select2 3.4.5, no Chosen,
   y el CSS de Select2 viene compilado DENTRO de beyond.css.
   ------------------------------------------------------------------------- */
html .form-control{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-sm);
  box-shadow:none;
  color:var(--dc-text);
  font-size:13px;
  height:36px;
  padding:7px 11px;
  transition:border-color var(--dc-trans), box-shadow var(--dc-trans);
}
html textarea.form-control{ height:auto; }
html .form-control:focus{
  border-color:var(--dc-accent);
  box-shadow:0 0 0 3px var(--dc-focus);
  outline:none;
  /* beyond.min.css trae .form-control:focus{background-color:#fff;color:#262626};
     sin estas dos lineas el campo enfocado se pone blanco en modo oscuro. */
  background-color:var(--dc-surface);
  color:var(--dc-text);
}
html .form-control[readonly]{ background-color:var(--dc-surface-alt); }
html .form-control[disabled],
html fieldset[disabled] .form-control{
  background-color:var(--dc-surface-alt);
  color:var(--dc-text-faint);
  cursor:not-allowed;
}
html .form-control::-webkit-input-placeholder{ color:var(--dc-text-faint); }
html .form-control::placeholder{ color:var(--dc-text-faint); }

html .control-label,
html label{
  color:var(--dc-text);
  font-size:12.5px;
  font-weight:600;
}
html .help-block{ color:var(--dc-text-muted); font-size:11.5px; }
html .input-group-addon{
  background-color:var(--dc-surface-alt);
  border-color:var(--dc-border);
  color:var(--dc-text-muted);
  border-radius:var(--dc-radius-sm);
}

/* Estados de bootstrapValidator */
html .has-error .form-control{ border-color:var(--dc-danger); }
html .has-error .form-control:focus{ box-shadow:0 0 0 3px rgba(209,67,67,.25); }
html .has-error .control-label,
html .has-error .help-block{ color:var(--dc-danger); }
html .has-success .form-control{ border-color:var(--dc-success); }
html .has-success .control-label{ color:var(--dc-success); }

/* Select2 3.4.5 */
html .select2-container .select2-choice,
html .select2-container-multi .select2-choices{
  background-image:none !important;
  background-color:var(--dc-surface) !important;
  border:1px solid var(--dc-border) !important;
  border-radius:var(--dc-radius-sm) !important;
  box-shadow:none !important;
  color:var(--dc-text) !important;
  height:36px;
  line-height:34px;
}
html .select2-container .select2-choice > .select2-chosen{ color:var(--dc-text); line-height:34px; }
html .select2-container .select2-choice .select2-arrow{
  background:none !important;
  background-image:none !important;
  border-left:1px solid var(--dc-border) !important;
  border-radius:0 var(--dc-radius-sm) var(--dc-radius-sm) 0;
}
/* Deshabilitado: la regla de arriba fija el fondo con !important, asi que sin
   esto un select2 sobre un <select disabled> se sigue viendo activo (se nota en
   las visitas ya iniciadas de routes/main/getinfo). */
html .select2-container-disabled .select2-choice{
  background-color:var(--dc-surface-alt) !important;
  cursor:not-allowed;
}
html .select2-container-disabled .select2-choice > .select2-chosen{ color:var(--dc-text-faint); }
html .select2-container-disabled .select2-choice .select2-arrow{ opacity:.5; }

html .select2-container.select2-container-active .select2-choice,
html .select2-container.select2-dropdown-open .select2-choice{
  border-color:var(--dc-accent) !important;
  box-shadow:0 0 0 3px var(--dc-focus) !important;
}
html .select2-drop{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-sm);
  box-shadow:var(--dc-shadow-lg);
  color:var(--dc-text);
}
html .select2-drop .select2-search input{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-sm);
  color:var(--dc-text);
}
html .select2-results{ background-color:var(--dc-surface); }
html .select2-results .select2-result-label{ color:var(--dc-text); }
html .select2-results .select2-highlighted{
  background-color:var(--dc-accent-soft) !important;
  color:var(--dc-primary) !important;
}
html .select2-results .select2-highlighted .select2-result-label{ color:var(--dc-primary) !important; }

/* Datepicker / timepicker / daterangepicker */
html .datepicker,
html .bootstrap-timepicker-widget.dropdown-menu,
html .daterangepicker{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius);
  box-shadow:var(--dc-shadow-lg);
  color:var(--dc-text);
}
html .datepicker td,html .datepicker th{ color:var(--dc-text); border-radius:var(--dc-radius-sm); }
html .datepicker td.day:hover{ background-color:var(--dc-accent-soft); }
html .datepicker td.active,
html .datepicker td.active:hover{
  background-color:var(--dc-primary) !important;
  background-image:none !important;
  color:#fff !important;
}
html .datepicker td.old,html .datepicker td.new{ color:var(--dc-text-faint); }

/* Wizard / tabs (fuelux + bootstrap)
   Beyond trae .nav-tabs{background:#eee;box-shadow:0 0 4px rgba(0,0,0,.3);top:2px}
   y .tab-content{background:#fbfbfb; misma sombra dura}. Se aplanan. */
html .nav-tabs{
  background-color:transparent;
  box-shadow:none;
  top:0;
  border-bottom:1px solid var(--dc-border);
}
html .tab-content{
  background-color:transparent;
  box-shadow:none;
  border:0;
  /* 15px exactos, no 12: 31 vistas anidan .row dentro de .tab-content y el
     .row se cobra 15px de margen negativo. Con menos, se desborda. */
  padding:18px 15px 0;
}

/* Bootstrap le pone margen negativo de 15px a .form-horizontal .form-group,
   pensando que el .form-group ES la fila. Las vistas de esta app lo anidan
   dentro de algo que ya se cobro ese margen:
     - dentro de un .col-*, que aporta su propio padding de 15px  (31 vistas)
     - dentro de un .row, que ya viene con margin:0 -15px         (mide 8px de
       desborde en admin/products/getinfo y companeras)
   En los dos casos el margen se duplica y el formulario se sale de la tarjeta.
   Se neutraliza en ambos; el colchon lo pone el contenedor. */
html .form-horizontal [class*="col-"] > .form-group,
html .form-horizontal .row > .form-group,
html .form-horizontal > .row > .form-group{
  margin-left:0;
  margin-right:0;
}

/* Bloques colgados directo de un .row, sin columna que los contenga: heredan
   el -15px del .row y no tienen con que devolverlo, asi que quedan pegados al
   borde del viewport. Pasa con .tabbable (config/company/index) y con
   .step-content (dates/main/getlocation, getdateinfo).
   Al .tabbable se le devuelve como padding, porque no es una tarjeta; a
   .step-content como margen, para no descuadrar sus 24px interiores. */
html .row > .tabbable{
  padding-left:15px;
  padding-right:15px;
}
html .row > .step-content,
html .row > #horizontal-form{
  margin-left:15px;
  margin-right:15px;
}
html .nav-tabs > li > a{
  border:0;
  border-bottom:2px solid transparent;
  border-radius:0;
  color:var(--dc-text-muted);
  font-weight:600;
  transition:color var(--dc-trans), border-color var(--dc-trans);
}
html .nav-tabs > li > a:hover{ background-color:transparent; color:var(--dc-primary); }
html .nav-tabs > li.active > a,
html .nav-tabs > li.active > a:hover,
html .nav-tabs > li.active > a:focus{
  background-color:transparent;
  border:0;
  border-bottom:2px solid var(--dc-accent);
  /* Beyond le cuelga box-shadow:0 -2px 3px rgba(0,0,0,.15) para simular la
     pestana levantada; con el fondo plano se ve como una caja gris suelta. */
  box-shadow:none;
  color:var(--dc-primary);
  margin-top:0;
}


/* -------------------------------------------------------------------------
   10. MODALES  (69 instancias de .modal.fade.bs-example-modal-lg)
   ------------------------------------------------------------------------- */
html .modal-content{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-lg);
  box-shadow:var(--dc-shadow-lg);
  color:var(--dc-text);
}
html .modal-header{
  background:var(--dc-surface);
  border-bottom:1px solid var(--dc-border);
  border-radius:var(--dc-radius-lg) var(--dc-radius-lg) 0 0;
  padding:16px 20px;
}
html .modal-header .modal-title{
  color:var(--dc-text);
  font-size:15px;
  font-weight:600;
}
html .modal-header .close{
  color:var(--dc-text-faint);
  opacity:1;
  text-shadow:none;
  transition:color var(--dc-trans);
}
html .modal-header .close:hover{ color:var(--dc-danger); }
html .modal-body{ padding:20px; }
html .modal-footer{
  background-color:var(--dc-surface-alt);
  border-top:1px solid var(--dc-border);
  border-radius:0 0 var(--dc-radius-lg) var(--dc-radius-lg);
  padding:14px 20px;
}
html .modal-backdrop.in{ opacity:.45; }
html[data-tema="dark"] .modal-backdrop.in{ opacity:.65; }
/* Variantes .modal-message.modal-warning / .modal-danger del template */
html .modal-message .modal-header{ border-bottom-width:3px; }


/* -------------------------------------------------------------------------
   11. KPI / DATABOX
   El color de fondo viene de la BD: class="databox-left bg-<?= COLOR ?>".
   Por eso aqui solo se re-forma la tarjeta, nunca se fija su color.
   ------------------------------------------------------------------------- */
html .databox{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius);
  box-shadow:var(--dc-shadow-md);
  overflow:hidden;
  margin-bottom:20px;
}
html .databox.radius-bordered{ border-radius:var(--dc-radius); }
html .databox .databox-right,
html .databox .databox-left{ background-color:transparent; }
html .databox .databox-number{
  color:var(--dc-text);
  font-size:26px;
  font-weight:600;
  letter-spacing:-.02em;
}
html .databox .databox-text{
  color:var(--dc-text-muted);
  font-size:11px;
  font-weight:600;
  letter-spacing:.05em;
  text-transform:uppercase;
}
html .databox .databox-stat{ border-radius:var(--dc-radius-sm); }


/* -------------------------------------------------------------------------
   12. BADGES, ALERTS, TOASTR, TOOLTIPS
   ------------------------------------------------------------------------- */
html .badge,html .label{
  border-radius:var(--dc-radius-pill);
  font-size:11px;
  font-weight:600;
  letter-spacing:.02em;
  padding:3px 9px;
}
html .alert{
  border:1px solid transparent;
  border-radius:var(--dc-radius);
  box-shadow:none;
  font-size:13px;
  padding:12px 16px;
}
html .alert-success{ background-color:var(--dc-success-soft); border-color:var(--dc-success); color:var(--dc-success); }
html .alert-info{    background-color:var(--dc-info-soft);    border-color:var(--dc-info);    color:var(--dc-info); }
html .alert-warning{ background-color:var(--dc-warning-soft); border-color:var(--dc-warning); color:var(--dc-warning); }
html .alert-danger{  background-color:var(--dc-danger-soft);  border-color:var(--dc-danger);  color:var(--dc-danger); }

html .tooltip-inner{
  background-color:var(--dc-text);
  border-radius:var(--dc-radius-sm);
  font-size:12px;
  padding:6px 10px;
}
html #toast-container > div{
  border-radius:var(--dc-radius);
  box-shadow:var(--dc-shadow-lg);
  opacity:1;
}
html .panel{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius);
  box-shadow:var(--dc-shadow-sm);
}
html .panel-heading{ background-color:var(--dc-surface-alt); border-bottom:1px solid var(--dc-border); }
html .well{
  background-color:var(--dc-surface-alt);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius);
  box-shadow:none;
}


/* -------------------------------------------------------------------------
   13. COMPONENTES NUEVOS (.dc-*)  -- opt-in, para las pantallas clave
   Las vistas viejas no los usan; se van adoptando de a poco.
   ------------------------------------------------------------------------- */

/* 13.0 Estado vacio de una grafica.
   Google Charts pinta un recuadro rojo de error cuando el DataTable viene sin
   filas; las vistas que puedan quedarse sin datos escriben esto en su lugar. */
.dc-chart-vacio{
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:10px;
  min-height:220px;
  padding:30px 20px;
  color:var(--dc-text-muted);
  font-size:13.5px;
  text-align:center;
}
.dc-chart-vacio > .fa{ font-size:30px; color:var(--dc-text-faint); }

/* 13.0.1 Caja con scroll para una grafica alta.
   El SVG conserva su alto natural (una barra legible por fila) y es la caja
   la que se recorta; asi el widget no crece sin limite cuando hay muchas
   filas. La leyenda se saca del SVG al encabezado del widget, si no se iria
   fuera de vista al desplazar. */
.dc-chart-scroll{
  overflow-x:hidden;
  /* Solo desplaza cuando el JS marca .is-scroll. Dejarlo en `auto` fijo hacia
     que un sobrante de 1px por redondeo del SVG reservara barra en graficas
     que caben enteras. */
  overflow-y:hidden;
  /* Reserva espacio antes de que Google Charts pinte, para que no salte */
  min-height:240px;
  /* Frena el scroll de la pagina al llegar al final de la caja */
  overscroll-behavior:contain;
}
/* Solo cuando de verdad se recorta: un filo que cierra la caja.
   Se descarto un mask-image de desvanecido porque la mascara alcanza tambien
   a la barra de scroll y la difumina. */
.dc-chart-scroll.is-scroll{
  overflow-y:auto;
  border-bottom:1px solid var(--dc-border);
}
/* El SVG de Google Charts es inline: su hueco de linea base metia 7px de
   sobrante y dejaba la caja "scrolleable" aunque cupiera entera. */
.dc-chart-scroll svg{ display:block; }

/* Barra de scroll siempre visible.
   OJO: no se declara `scrollbar-width`/`scrollbar-color`. Con las propiedades
   estandar presentes, Chrome ignora los pseudo ::-webkit-scrollbar y en macOS
   cae en la barra flotante, que solo asoma mientras se desplaza: sin ninguna
   pista de que la grafica sigue hacia abajo. Con solo los pseudo, la barra se
   dibuja siempre y ocupa ancho real. Firefox usa su barra por omision, que
   tambien es persistente. */
.dc-chart-scroll::-webkit-scrollbar{ width:10px; }
.dc-chart-scroll::-webkit-scrollbar-track{ background:transparent; }
.dc-chart-scroll::-webkit-scrollbar-thumb{
  background:var(--dc-border-strong);
  border:3px solid var(--dc-surface);
  border-radius:var(--dc-radius-pill);
}
.dc-chart-scroll::-webkit-scrollbar-thumb:hover{ background:var(--dc-text-faint); }

/* 13.0.2 Leyenda en HTML para una grafica (vive fuera de la caja con scroll) */
.dc-chart-leyenda{
  display:flex; align-items:center; gap:16px;
  padding-right:10px;
  font-size:12px; color:var(--dc-text-muted);
}
.dc-chart-leyenda > span{ display:flex; align-items:center; gap:6px; }
.dc-chart-leyenda .dc-chip{
  width:10px; height:10px; border-radius:2px;
  display:inline-block;
}
.dc-chip-terminado{ background:var(--dc-success); }
.dc-chip-pendiente{ background:var(--dc-warning); }
/* En pantallas chicas el encabezado se parte: la leyenda pasa a un renglon */
@media (max-width:600px){
  .dc-chart-leyenda{ float:none !important; padding:0 0 10px 16px; line-height:1; height:auto; }
}

/* 13.1 Encabezado de pagina con icono y acciones */
.dc-pagehead{
  display:flex; align-items:center; justify-content:space-between;
  gap:16px; flex-wrap:wrap;
  padding:22px 0 16px 0;
}
.dc-pagehead-left{ display:flex; align-items:center; gap:13px; min-width:0; }
.dc-pagehead-icon{
  width:42px; height:42px; flex:0 0 42px;
  border-radius:var(--dc-radius);
  background:var(--dc-primary-soft);
  color:var(--dc-primary);
  display:inline-flex; align-items:center; justify-content:center;
  font-size:18px;
}
.dc-pagehead-title{ font-size:20px; font-weight:600; letter-spacing:-.01em; margin:0; color:var(--dc-text); }
.dc-pagehead-desc{ font-size:12.5px; color:var(--dc-text-muted); margin-top:2px; }
.dc-pagehead-actions{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }

/* 13.2 Barra de filtros (reemplaza el form-inline suelto de los reportes) */
.dc-filterbar{
  background:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius);
  box-shadow:var(--dc-shadow-sm);
  padding:14px 16px;
  margin-bottom:20px;
}
.dc-filterbar-row{ display:flex; flex-wrap:wrap; align-items:flex-end; gap:12px; }
.dc-field{ display:flex; flex-direction:column; gap:5px; min-width:0; flex:1 1 170px; }
.dc-field > label{
  color:var(--dc-text-muted);
  font-size:11px; font-weight:600;
  letter-spacing:.045em; text-transform:uppercase;
  margin:0;
}
.dc-filterbar-actions{ display:flex; gap:8px; align-items:flex-end; flex:0 0 auto; }

/* 13.3 Tarjeta contenedora de tabla */
.dc-table-card{
  background:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius);
  box-shadow:var(--dc-shadow-md);
  overflow:hidden;
  margin-bottom:20px;
}
.dc-table-card-head{
  display:flex; align-items:center; justify-content:space-between;
  gap:12px; flex-wrap:wrap;
  padding:13px 16px;
  border-bottom:1px solid var(--dc-border);
}
.dc-table-card-title{ font-size:13px; font-weight:600; color:var(--dc-text); }
.dc-table-card-count{
  background:var(--dc-primary-soft);
  color:var(--dc-primary);
  border-radius:var(--dc-radius-pill);
  font-size:11px; font-weight:600;
  padding:2px 9px; margin-left:8px;
}

/* Zona derecha del head de la tarjeta: ahi se monta el buscador del DataTable
   cuando la vista lo reubica (ver jsReportVisits.js). */
.dc-table-card-tools{
  display:flex; align-items:center; gap:8px;
  margin-left:auto;
}
html .dc-table-card-tools .dataTables_filter{
  float:none; margin:0; text-align:left;
}
html .dc-table-card-tools .dataTables_filter label{
  margin:0; font-weight:400;
}
html .dc-table-card-tools .dataTables_filter input{
  width:230px; max-width:100%; margin:0;
}

/* Tabla con scroll vertical dentro de la tarjeta: el header queda fijo y el
   cuerpo es el unico que se desplaza. */
html .dc-table-card .dataTables_wrapper{ padding:0; }
html .dc-table-card .dataTables_scrollBody{
  border-bottom:1px solid var(--dc-border);
}
html .dc-table-card .dataTables_scrollHead{ border-bottom:1px solid var(--dc-border); }
html .dc-table-card .dataTables_wrapper .dataTables_info{ padding:10px 16px; }
html .dc-table-card .DTTTFooter{ margin:0; border-top:0; }

@media (max-width:767px){
  html .dc-table-card-tools{ width:100%; }
  html .dc-table-card-tools .dataTables_filter input{ width:100%; }
}

/* 13.4 KPI */
.dc-kpi{
  position:relative;
  background:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius);
  box-shadow:var(--dc-shadow-md);
  padding:16px 18px 16px 20px;
  margin-bottom:20px;
  overflow:hidden;
  transition:box-shadow var(--dc-trans), transform var(--dc-trans);
  /* Columna flex con min-height: iguala la altura de las tarjetas aunque unas
     traigan barra de proporcion y otras no (Bootstrap 3 no usa flex en .row). */
  display:flex;
  flex-direction:column;
  min-height:134px;
}
.dc-kpi:hover{ box-shadow:var(--dc-shadow-lg); transform:translateY(-1px); }
.dc-kpi:before{
  content:""; position:absolute; left:0; top:0; bottom:0; width:4px;
  background:var(--dc-accent);
}
.dc-kpi--success:before{ background:var(--dc-success); }
.dc-kpi--warning:before{ background:var(--dc-warning); }
.dc-kpi--danger:before{  background:var(--dc-danger); }
.dc-kpi-head{ display:flex; align-items:center; justify-content:space-between; gap:10px; }
.dc-kpi-label{
  color:var(--dc-text-muted);
  font-size:11px; font-weight:600;
  letter-spacing:.05em; text-transform:uppercase;
}
/* Fondo neutro a proposito: el color del icono lo pone una utilidad de Beyond
   (.palegreen, .darkorange...) que sale de la BD y trae !important, asi que el
   par icono/fondo tiene que funcionar con cualquiera de los 33 colores. */
.dc-kpi-icon{
  width:32px; height:32px; flex:0 0 32px;
  border-radius:var(--dc-radius-sm);
  background:var(--dc-surface-alt); color:var(--dc-primary);
  display:inline-flex; align-items:center; justify-content:center;
  font-size:14px;
}
/* Franja izquierda cuando el color viene de la BD: se pinta con bg-<color>.
   Cubre el :before, que es el de las variantes fijas .dc-kpi--success etc. */
.dc-kpi-bar{
  position:absolute; left:0; top:0; bottom:0; width:4px;
  z-index:1;
}
/* Barra de proporcion bajo el numero */
.dc-kpi-meter{
  height:4px;
  border-radius:var(--dc-radius-pill);
  background:var(--dc-surface-alt);
  overflow:hidden;
  margin-top:10px;
}
.dc-kpi-meter > span{
  display:block; height:100%;
  border-radius:var(--dc-radius-pill);
}
.dc-kpi-foot{
  color:var(--dc-text-faint);
  font-size:11.5px;
  margin-top:auto;   /* pegado abajo, para que se alineen entre tarjetas */
  padding-top:7px;
}
.dc-kpi-value{
  color:var(--dc-text);
  font-size:28px; font-weight:600; line-height:1.15;
  letter-spacing:-.025em;
  margin-top:8px;
}
.dc-kpi-delta{ font-size:12px; font-weight:600; margin-top:6px; display:inline-flex; align-items:center; gap:4px; }
.dc-kpi-delta--up{ color:var(--dc-success); }
.dc-kpi-delta--down{ color:var(--dc-danger); }
.dc-kpi-delta small{ color:var(--dc-text-faint); font-weight:400; }

/* 13.5 Pildoras de estatus */
.dc-pill{
  display:inline-flex; align-items:center; gap:5px;
  border-radius:var(--dc-radius-pill);
  font-size:11px; font-weight:600;
  padding:3px 10px;
  white-space:nowrap;
}
.dc-pill:before{ content:""; width:6px; height:6px; border-radius:50%; background:currentColor; }
.dc-pill--success{ background:var(--dc-success-soft); color:var(--dc-success); }
.dc-pill--warning{ background:var(--dc-warning-soft); color:var(--dc-warning); }
.dc-pill--danger{  background:var(--dc-danger-soft);  color:var(--dc-danger); }
.dc-pill--info{    background:var(--dc-info-soft);    color:var(--dc-info); }
.dc-pill--muted{   background:var(--dc-surface-alt);  color:var(--dc-text-muted); }

/* 13.55 Contenido dentro de celdas de tabla
   Las vistas de reportes meten 2-3 datos por celda separados con <br/>.
   Estas clases les dan jerarquia en vez de dejarlos todos del mismo peso. */
.dc-cell-sub{
  display:block;
  color:var(--dc-text-muted);
  font-size:11.5px;
  font-weight:400;
  margin-top:2px;
}
.dc-cell-actions{
  display:flex; flex-wrap:wrap; gap:4px;
  justify-content:center;
  margin-top:6px;
}
.dc-cell-status{ width:26px; height:auto; display:inline-block; }

/* 13.6 Estado vacio */
.dc-empty{ padding:48px 20px; text-align:center; }
.dc-empty-icon{
  width:56px; height:56px; margin:0 auto 14px;
  border-radius:50%;
  background:var(--dc-surface-alt); color:var(--dc-text-faint);
  display:flex; align-items:center; justify-content:center;
  font-size:22px;
}
.dc-empty-title{ color:var(--dc-text); font-size:14px; font-weight:600; }
.dc-empty-desc{ color:var(--dc-text-muted); font-size:12.5px; margin-top:4px; }


/* -------------------------------------------------------------------------
   14. LOGIN
   Markup en application/views/layouts/layout_login.phtml.
   Se conservan #accountForm, inputUsuario, inputPassword, #bSubmit,
   #divpErrorLogin y #pErrorLogin, que es lo que consume login.js.
   ------------------------------------------------------------------------- */
html body.dc-login-page{ margin:0; background:var(--dc-bg); }

.dc-login{ display:flex; min-height:100vh; }

/* --- Panel de marca ---
   Base grafito (#3A3A3C del wordmark) con dos auroras cian (#00ADEF del
   simbolo) y una retisura de puntos. Sobre este fondo el cian si contrasta,
   que es donde el color de marca puede lucir sin castigar la legibilidad. */
.dc-login-brand{
  flex:1 1 47%;
  max-width:660px;
  background:
    radial-gradient(120% 90% at 8% -10%,  rgba(0,173,239,.32) 0%, rgba(0,173,239,0) 55%),
    radial-gradient(90% 70% at 108% 112%, rgba(0,173,239,.20) 0%, rgba(0,173,239,0) 60%),
    linear-gradient(160deg, #3A3A3C 0%, #232325 55%, #151517 100%);
  color:#fff;
  padding:52px 56px;
  display:flex; flex-direction:column; justify-content:space-between; gap:36px;
  position:relative; overflow:hidden;
}
/* Retisura de puntos: da textura sin pesar un solo byte de imagen */
.dc-login-brand:before{
  content:""; position:absolute; inset:0;
  background-image:radial-gradient(rgba(255,255,255,.055) 1px, transparent 1px);
  background-size:22px 22px;
  pointer-events:none;
}
/* Filo cian en el canto que da al formulario */
.dc-login-brand:after{
  content:""; position:absolute; top:0; right:0; bottom:0; width:3px;
  background:linear-gradient(180deg, var(--dc-brand) 0%, rgba(0,173,239,.15) 100%);
}
.dc-login-brand > *{ position:relative; z-index:1; }

/* El lockup es cian + grafito sobre transparente; sobre el panel oscuro la
   mitad grafito se perderia, asi que se recolorea ENTERO al cian de marca.
   La cadena esta calibrada contra #00ADEF: medida en Chrome da #00ADFF. */
.dc-login-logo{
  width:158px; max-width:52%; height:auto;
  filter:brightness(0) invert(47%) sepia(99%) saturate(1700%)
         hue-rotate(168deg) brightness(101%) contrast(101%);
}

.dc-login-pitch{ max-width:30em; }
.dc-login-eyebrow{
  display:inline-block;
  background:rgba(0,173,239,.15);
  border:1px solid rgba(0,173,239,.35);
  border-radius:var(--dc-radius-pill);
  color:#7FD6F7;
  font-size:11px; font-weight:600;
  letter-spacing:.09em; text-transform:uppercase;
  padding:5px 13px;
  margin-bottom:20px;
}
/* beyond.min.css declara h1..h6{font-weight:300 !important}, asi que aqui
   toca responder con !important o el titular sale en delgada. */
.dc-login-brand h2{
  font-size:34px; font-weight:700 !important; line-height:1.18;
  margin:0 0 14px; letter-spacing:-.028em;
  color:#fff;
}
.dc-login-brand p{
  font-size:15.5px; line-height:1.55;
  color:rgba(255,255,255,.70);
  margin:0; max-width:36ch;
}

.dc-login-feats{
  list-style:none; margin:32px 0 0; padding:0;
  border-top:1px solid rgba(255,255,255,.10);
  padding-top:24px;
}
.dc-login-feats li{
  display:flex; align-items:center; gap:13px;
  font-size:14px; color:rgba(255,255,255,.82);
  margin-bottom:14px;
}
.dc-login-feats li:last-child{ margin-bottom:0; }
.dc-login-feats li > .fa{
  flex:0 0 auto;
  width:32px; height:32px; line-height:32px;
  border-radius:var(--dc-radius-pill);
  background:rgba(0,173,239,.16);
  color:var(--dc-brand);
  font-size:14px; text-align:center;
}

.dc-login-legal{ font-size:11.5px; color:rgba(255,255,255,.42); }

/* --- Formulario --- */
.dc-login-form{
  flex:1 1 53%;
  display:flex; align-items:center; justify-content:center;
  padding:40px 24px;
  background:var(--dc-surface);
}
.dc-login-card{ width:100%; max-width:376px; }
/* Solo entra en juego cuando el panel de marca se retira (<= 900px) */
.dc-login-logo-sm{ display:none; width:104px; height:auto; margin:0 0 26px; }
.dc-login-card h1{
  font-size:25px; font-weight:700 !important; color:var(--dc-text);
  margin:0 0 6px; letter-spacing:-.022em;
  /* Beyond le pone display:inline-block, line-height:37px y margin:0 4px al h1 */
  display:block; line-height:1.2; padding:0;
}
.dc-login-sub{ font-size:13.5px; color:var(--dc-text-muted); margin:0 0 28px; }

.dc-login-field{ position:relative; margin-bottom:16px; }
.dc-login-field > label{
  display:block;
  color:var(--dc-text-muted);
  font-size:11px; font-weight:600;
  letter-spacing:.045em; text-transform:uppercase;
  margin-bottom:5px;
}
.dc-login-icon{
  position:absolute; left:13px; top:36px;
  color:var(--dc-text-faint); font-size:14px;
  pointer-events:none; z-index:2;
  transition:color var(--dc-trans);
}
.dc-login-field .form-control{
  height:46px;
  padding-left:37px; padding-right:34px;
  border-radius:var(--dc-radius);
  transition:border-color var(--dc-trans), box-shadow var(--dc-trans);
}
.dc-login-field .form-control:focus{
  border-color:var(--dc-brand);
  box-shadow:0 0 0 3px var(--dc-focus);
}
/* El icono acompana al foco del campo hermano */
.dc-login-field:focus-within > .dc-login-icon{ color:var(--dc-brand); }

/* bootstrapValidator inyecta este icono a la derecha del campo. Bootstrap 3 lo
   posiciona asumiendo label + input pegados; aqui la etiqueta va arriba y en
   versalitas, asi que hay que recolocarlo. */
.dc-login-field .form-control-feedback{
  top:auto; bottom:0; right:0;
  width:34px; height:46px; line-height:46px;
}
.dc-login-field .help-block{ margin-bottom:0; margin-top:5px; }

.dc-login-submit{
  width:100%; height:48px;
  font-size:14.5px; font-weight:600; letter-spacing:.015em;
  margin-top:12px;
  border:0;
  border-radius:var(--dc-radius);
  background:linear-gradient(100deg, var(--dc-brand) 0%, var(--dc-primary) 72%);
  color:#fff;
  box-shadow:0 6px 16px rgba(0,119,168,.28);
  transition:box-shadow var(--dc-trans), transform var(--dc-trans), filter var(--dc-trans);
}
html .dc-login-submit:hover,
html .dc-login-submit:focus{
  background:linear-gradient(100deg, var(--dc-brand) 0%, var(--dc-primary) 72%);
  color:#fff;
  filter:saturate(1.12) brightness(1.06);
  box-shadow:0 9px 22px rgba(0,119,168,.36);
}
html .dc-login-submit:active{ transform:translateY(1px); box-shadow:0 4px 12px rgba(0,119,168,.30); }
html .dc-login-submit:focus{ outline:none; box-shadow:0 0 0 3px var(--dc-focus), 0 9px 22px rgba(0,119,168,.30); }

.dc-login-foot{ margin-top:18px; text-align:center; font-size:12.5px; }

/* En oscuro el panel del formulario sigue a la superficie del tema */
html[data-tema="dark"] .dc-login-form{ background:var(--dc-surface); }
/* En oscuro el lockup ya vive sobre fondo oscuro: tambien va en blanco */
html[data-tema="dark"] .dc-login-logo-sm{ filter:brightness(0) invert(1); opacity:.97; }

/* 14.1 Responsivo del login.
   Por debajo de 900px el panel de marca se retira y la tarjeta toma la
   pantalla completa; ahi entra el lockup pequeno para que la marca no se
   pierda. */
@media (max-width:900px){
  .dc-login-brand{ display:none; }
  .dc-login-form{ flex:1 1 100%; }
  .dc-login-logo-sm{ display:block; }
}
@media (max-width:1200px) and (min-width:901px){
  .dc-login-brand{ padding:40px 38px; }
  .dc-login-brand h2{ font-size:29px; }
  .dc-login-brand p{ font-size:14.5px; }
}
@media (max-height:720px) and (min-width:901px){
  .dc-login-brand{ padding-top:38px; padding-bottom:38px; gap:24px; }
  .dc-login-brand h2{ font-size:29px; }
  .dc-login-feats{ margin-top:22px; padding-top:18px; }
  .dc-login-feats li{ margin-bottom:11px; }
}


/* -------------------------------------------------------------------------
   15. MODO OSCURO: superficies de terceros
   Los tiles de los mapas (HERE / Google / Mapbox) se dejan claros a proposito;
   solo se oscurece el chrome que los rodea.
   ------------------------------------------------------------------------- */
html[data-tema="dark"] .bg-white,
html[data-tema="dark"] .databox.bg-white{ background-color:var(--dc-surface) !important; }
html[data-tema="dark"] .widget-body,
html[data-tema="dark"] .widget-header{ color:var(--dc-text); }
html[data-tema="dark"] .table > tbody > tr > td,
html[data-tema="dark"] .table > thead > tr > th{ color:var(--dc-text); }
html[data-tema="dark"] .close{ color:var(--dc-text-muted); }
html[data-tema="dark"] .modal-content,
html[data-tema="dark"] .dropdown-menu,
html[data-tema="dark"] .popover{ color:var(--dc-text); }
html[data-tema="dark"] .popover,
html[data-tema="dark"] .popover-title{
  background-color:var(--dc-surface);
  border-color:var(--dc-border);
  color:var(--dc-text);
}
/* Contenedores de mapa: marco oscuro, tiles intactos */
html[data-tema="dark"] #map,
html[data-tema="dark"] .wmap,
html[data-tema="dark"] [id^="Map"],
html[data-tema="dark"] [id^="map"]{
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-sm);
}
/* Imagenes y graficas: bajar un poco el brillo para que no deslumbren */
html[data-tema="dark"] .widget-body img:not(.dc-keep-bright){ filter:brightness(.94); }


/* -------------------------------------------------------------------------
   17. FORMULARIOS DE CAPTURA
   73 vistas usan .form-horizontal y ninguna trae una tarjeta propia salvo por
   accidente. Antes de esta seccion, 50 de las 73 provocaban scroll horizontal
   (medido con Chrome headless sobre el layout real) y el campo terminaba hasta
   1000px antes del borde derecho, dejando la pantalla medio vacia.
   Todo se resuelve desde aqui: ninguna de las 73 vistas se edita.
   ------------------------------------------------------------------------- */

/* 17.1 La tarjeta.
   .step-content es el envoltorio de Beyond para el cuerpo de un asistente
   (22 vistas) y #horizontal-form el de los formularios de configuracion
   (7 vistas). Beyond les pone #fbfbfb y una sombra dura de 10px a 0.3 de
   opacidad que es justo lo que hacia ver la pantalla vieja. */
html .step-content,
html #horizontal-form{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-lg);
  box-shadow:var(--dc-shadow-sm);
  /* Los 24px laterales cumplen ademas de colchon para el margin:0 -15px de
     cualquier .row anidado; con los 10px de Beyond se desbordaba 5px. */
  padding:22px 24px;
  margin-bottom:16px;
}
/* Cuando cuelga de la barra de un asistente se pega a ella */
html .wizard + .step-content,
html .wizard-steps + .step-content{
  border-top:0;
  border-top-left-radius:0;
  border-top-right-radius:0;
}
/* Un formulario dentro de un modal ya vive en la tarjeta del modal */
html .modal-body .step-content,
html .modal-body #horizontal-form{
  background:none;
  border:0;
  border-radius:0;
  box-shadow:none;
  padding:0;
  margin-bottom:0;
}

/* 17.15 Cabecera de la tarjeta de formulario.
   Las vistas de captura no tenian donde poner su titulo cuando se quito el
   .page-header, asi que se les inyecto un .dc-card-head al inicio de la
   tarjeta. Los margenes negativos lo sacan del padding de la tarjeta para que
   la franja llegue de borde a borde, igual que un .widget-header. */
html .step-content > .dc-card-head,
html #horizontal-form > .dc-card-head{
  align-items:center;
  border-bottom:1px solid var(--dc-border);
  display:flex;
  gap:12px;
  margin:-22px -24px 20px;
  padding:13px 24px;
}
html .dc-card-head > .widget-caption{
  color:var(--dc-text);
  font-size:13px;
  font-weight:600;
}
html .dc-card-head > .widget-caption > small,
html .widget-header > .widget-caption > small{
  color:var(--dc-text-muted);
  font-size:12.5px;
  font-weight:400;
}
html .dc-card-head > .widget-caption > small:before,
html .widget-header > .widget-caption > small:before{
  color:var(--dc-text-faint);
  content:"\00b7";
  margin:0 6px;
}
html .dc-card-head > .widget-buttons{ margin-left:auto; }

/* 17.2 La fila etiqueta + campo.
   Las vistas declaran la etiqueta como col-sm-2 / col-lg-3 y el campo como
   col-sm-5/6/7/8. En un contenedor de 1376px eso deja el campo terminando en
   el 60% del ancho y el resto vacio. Los dos selectores exigen
   :first-of-type:last-of-type, o sea: exactamente UNA etiqueta y UN campo en
   el grupo. Las filas con dos o mas campos en paralelo no se tocan.
   Debajo de 992px manda la cuadricula original de Bootstrap. */
@media (min-width:992px){
  html .form-horizontal .form-group > label[class*="col-"]:first-of-type:last-of-type{
    float:left;
    /* 210px en una tarjeta ancha; en una columna estrecha (dos formularios
       lado a lado, como dates/main/getdateinfo) 210px se comerian la mitad y
       la etiqueta partiria en dos renglones, asi que ahi manda el 34%. */
    width:min(210px, 34%);
    padding-top:8px;
    line-height:1.35;
    text-align:right;
    /* .no-padding-right (Beyond, con !important) anula el padding derecho en
       casi todas estas etiquetas: la separacion la pone el padding izquierdo
       de 15px que la columna del campo ya trae. */
  }
  html .form-horizontal .form-group > div[class*="col-"]:first-of-type:last-of-type{
    float:left;
    /* Se lleva lo que sobra, con tope: un input de 1000px no se lee mejor. */
    width:calc(100% - min(210px, 34%));
    max-width:660px;
  }
  /* Si el navegador no entiende min(), las dos declaraciones de ancho se
     descartan y la fila vuelve a la cuadricula original de Bootstrap. */

  /* 17.3 La barra de acciones.
     64 vistas repiten .col-sm-offset-2.col-sm-10 con los botones en
     .pull-right. Con el offset porcentual los botones se iban al borde de la
     tarjeta, a 500px del ultimo campo. Se alinean con la columna del campo y
     se separan con una regla, como pie del formulario.
     Va DESPUES de 17.2 a proposito: el contenedor de los botones tambien es
     hijo unico de su .form-group y las dos reglas empatan en especificidad.
     Se cubren las tres formas que aparecen en las vistas: colgado de un .row,
     colgado del propio form, y colgado de un .form-group (43 y 3 casos). */
  html .form-horizontal .row > div[class*="col-sm-offset-"],
  html .form-horizontal > div[class*="col-sm-offset-"],
  html .form-horizontal .form-group > div[class*="col-sm-offset-"]:first-of-type:last-of-type,
  html .form-horizontal .form-group > div[class*="col-"].text-right:first-of-type:last-of-type{
    float:none;
    width:auto;
    max-width:870px;
    margin-left:min(210px, 34%);
    margin-top:18px;
    padding-top:16px;
    border-top:1px solid var(--dc-border);
  }
}

/* 17.4 Rejilla vertical pareja. Bootstrap deja 15px entre grupos, que con
   inputs de 36px queda apretado. */
html .form-horizontal .form-group{ margin-bottom:16px; }
html .form-horizontal .form-group:last-child{ margin-bottom:0; }
html .form-horizontal sup{
  color:var(--dc-danger);
  font-size:12px;
  font-weight:700;
  top:0;
}

/* 17.45 <select> sin clase.
   39 etiquetas <select> en las vistas no declaran .form-control ni ninguna
   otra clase: quedaban con el control nativo del navegador, de 22px, al lado
   de inputs de 36px (se ve en el campo Estatus de admin/products/getinfo).
   Se excluye el <select> original que Select2 deja escondido y los de
   seleccion multiple, que no son un control de una linea. */
html select:not([multiple]):not([size]):not(.select2-offscreen){
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-sm);
  box-shadow:none;
  color:var(--dc-text);
  font-size:13px;
  height:36px;
  padding:6px 10px;
  transition:border-color var(--dc-trans), box-shadow var(--dc-trans);
}
html select:not([multiple]):not([size]):not(.select2-offscreen):focus{
  border-color:var(--dc-accent);
  box-shadow:0 0 0 3px var(--dc-focus);
  outline:none;
}
/* Dentro de la columna del campo ocupa el ancho completo, igual que los input */
html .form-horizontal .form-group > div[class*="col-"] > select:not([multiple]):not([size]):not(.select2-offscreen){
  width:100%;
}

/* 17.4b Barras de filtro (.form-inline).
   Las 40 vistas que la usan son barras de busqueda (39 llevan optReg=search).
   El problema: Bootstrap le pone .form-control{width:auto} a todo lo que vive
   dentro de .form-inline, pero aqui el .form-group ademas carga una clase de
   columna (col-md-1, col-md-2, col-md-3 — 164 casos). El input se dibuja con
   el ancho de su contenido, mas ancho que la columna que lo contiene, y se
   monta sobre el campo siguiente: 45px de traslape medidos entre las dos
   fechas de validacion/consignas.
   En vez de pelear con la rejilla, la fila pasa a flex: los campos se
   reparten el ancho, nunca se encinan y bajan de renglon cuando no caben. */
html .form-inline .row{
  display:flex;
  flex-wrap:wrap;
  align-items:flex-end;
  gap:10px 12px;
  margin-left:0;
  margin-right:0;
}
html .form-inline .row > .form-group{
  float:none;
  width:auto;
  /* min-width:0 es lo que permite que un item flex se encoja por debajo de su
     contenido; sin el, un <select> con texto largo vuelve a desbordar. */
  min-width:0;
  flex:1 1 170px;
  margin:0;
  padding-left:0;
  padding-right:0;
}
/* Los pocos campos declarados anchos conservan su peso relativo */
html .form-inline .row > .form-group[class*="col-md-8"],
html .form-inline .row > .form-group[class*="col-md-10"]{ flex:3 1 320px; }
/* El control llena su celda, venga como input, select nativo o Select2 */
html .form-inline .row > .form-group > .form-control,
html .form-inline .row > .form-group > select,
html .form-inline .row > .form-group > .select2-container,
html .form-inline .row > .form-group > .input-group{ width:100% !important; }
/* Los botones no se estiran. Aparecen sueltos en la fila (validacion/consignas)
   o envueltos en un .form-group.pull-right (11 vistas). */
html .form-inline .row > .btn,
html .form-inline .row > .form-group.pull-right,
html .form-inline .row > .form-group.text-right{
  flex:0 0 auto;
  float:none;
  margin-left:auto;
}
html .form-inline .row > .form-group.pull-right > .btn{ width:auto; }
/* .sr-only sigue oculto; las etiquetas visibles se separan del control */
html .form-inline .row > .form-group > label:not(.sr-only){
  display:block;
  margin-bottom:5px;
}

/* 17.5 Zona de carga de imagen.
   /libs/jqueryupload/css/application.css la deja como un rectangulo blanco de
   200px con un boton gris #bdc3c7 de 200x50 en mayusculas. Es lo que se ve
   como "SELECCIONAR" suelto en medio de la pantalla. */
html #image-preview,
html #callback-preview{
  /* position/overflow los declara tambien la libreria; se repiten aqui para
     que la zona se vea igual aunque application.css no llegue a cargar. */
  position:relative;
  overflow:hidden;
  background-color:var(--dc-surface-alt);
  border:1px dashed var(--dc-border-strong);
  border-radius:var(--dc-radius);
  color:var(--dc-text-muted);
  height:180px;
  max-width:660px;
  transition:border-color var(--dc-trans), background-color var(--dc-trans);
}
html #image-preview:hover,
html #callback-preview:hover{
  background-color:var(--dc-accent-soft);
  border-color:var(--dc-accent);
}
/* La libreria centra la etiqueta con top/left/right/bottom:0 + margin:auto;
   se conserva ese mecanismo y solo se le cambia el aspecto. Mantiene fondo
   propio porque cuando ya hay logo cargado queda encima de la imagen. */
html #image-preview label,
html #callback-preview label{
  /* Centrado clasico: caja de tamano fijo con las cuatro anclas en 0 y
     margin:auto. Es el mecanismo de la libreria, repetido por lo mismo. */
  position:absolute;
  top:0; left:0; right:0; bottom:0;
  margin:auto;
  cursor:pointer;
  text-align:center;
  text-transform:uppercase;
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-pill);
  box-shadow:var(--dc-shadow-sm);
  color:var(--dc-primary);
  font-size:11.5px;
  font-weight:700;
  height:36px;
  letter-spacing:.06em;
  line-height:34px;
  opacity:1;
  width:210px;
}
html #image-preview:hover label,
html #callback-preview:hover label{
  border-color:var(--dc-accent);
  color:var(--dc-accent);
}

/* 17.6 Paginas embebidas en un iframe.
   83 modales cargan una pagina completa (layout_blank) dentro de un
   <iframe class="hmodalNNN">. Esa pagina traia el gris de fondo del tema, que
   dentro del modal blanco se veia como un recuadro gris. decasa-theme.js le
   pone .dc-embebido a <html> cuando window.self !== window.top. */
html.dc-embebido,
html.dc-embebido body,
html.dc-embebido .main-container,
html.dc-embebido .page-body{
  background-color:var(--dc-surface);
  min-height:0;
}
html.dc-embebido{ overflow-x:hidden; }
/* La altura del iframe es fija (470/500/550px segun .hmodalNNN), asi que cada
   pixel vertical cuenta. */
html.dc-embebido .page-header{ padding:10px 0 8px 0; }
html.dc-embebido .page-header .header-title h1{ font-size:16px; }
html.dc-embebido .page-body{ padding-bottom:10px; }
html.dc-embebido .step-content,
html.dc-embebido #horizontal-form{
  background:none;
  border:0;
  border-radius:0;
  box-shadow:none;
  padding:0;
}

/* 17.65 layout_blank y blank_panel no envuelven el contenido en .page-content,
   y sin el nadie devuelve el margin:0 -15px que se cobra cada .row: la vista
   se sale por los dos lados. Los dos layouts marcan el <body> con .dc-plano y
   el colchon se pone una sola vez, en .main-container, donde sirve para
   cualquier .row sin importar a que profundidad este.
   Pasa igual dentro de un modal que abriendo la URL directa, asi que no se
   limita a .dc-embebido. */
html body.dc-plano .main-container{
  padding-left:15px;
  padding-right:15px;
}

/* 17.7 El iframe dentro del modal */
html .modal-body > iframe,
html .modal-body iframe[class^="hmodal"],
html .modal-body iframe[class*=" hmodal"]{
  background-color:var(--dc-surface);
  border:0;
  border-radius:var(--dc-radius-sm);
  display:block;
  width:100%;
}
/* El gif de espera que precede al iframe en 83 vistas */
html .modal-body > img[src*="loading"]{ display:block; margin:24px auto; }


/* -------------------------------------------------------------------------
   18. ESCALA DE BOTONES
   Inventario medido sobre las 175 vistas: 194 .btn a 34px conviven con 36 a
   33px, 74 .btn-sm a 29px con 4 a 27px, y un .btn-labeled a 40px. Se fija una
   sola escala de tres tamanos y se neutralizan los que la rompian.
   ------------------------------------------------------------------------- */

/* 18.1 Altura pareja. min-height y no height: un boton cuya etiqueta salta de
   renglon (ver 16, en pantallas angostas) tiene que poder crecer. */
html .btn{ min-height:34px; }
html .btn-sm,
html .btn-group-sm > .btn{ min-height:29px; font-size:12px; padding:5px 11px; }
html .btn-xs,
html .btn-group-xs > .btn{ min-height:23px; font-size:11px; padding:3px 8px; }

/* 18.2 Barra de herramientas de DataTables.
   dataTables.bootstrap.css trae div.DTTT .btn{font-size:12px}: especificidad
   (0,2,1), que le gana a html .btn (0,1,1). Eran 36 botones «Print», «PDF» y
   «CSV» un punto mas chicos y 1px mas bajos que los vecinos de la misma fila. */
html div.DTTT .btn{
  font-size:13px;
  line-height:1.4;
  min-height:34px;
  padding:7px 15px;
}
html div.DTTT .btn.btn-sm{ font-size:12px; min-height:29px; padding:5px 11px; }

/* 18.2b Espacio en la barra de DataTables.
   El grupo .DTTT y el selector «Mostrar N registros» flotan a la derecha sin
   ninguna separacion entre ellos: al subir el boton a la escala de 34px se
   encimaban 5px. Medido en 18 vistas. */
html .dataTables_wrapper .DTTT.btn-group{ margin-right:12px; }
html .dataTables_length,
html .dataTables_filter{ margin-left:12px; }
html .dataTables_length label{
  align-items:center;
  display:flex;
  gap:8px;
  margin-bottom:0;
  white-space:nowrap;
}
html .dataTables_length label .select2-container{ min-width:78px; }

/* 18.3 Botones de solo icono.
   Beyond declara .btn.icon-only{width:36px;height:34px} con especificidad
   (0,2,0), asi que un .btn-sm.icon-only de la columna «Opciones» salia de 34px
   al lado de un .btn-sm normal de 29px. Se hace cuadrado en los tres tamanos. */
html .btn.icon-only{
  width:34px;
  height:34px;
  min-height:34px;
  padding:0;
  line-height:32px;
  text-align:center;
}
html .btn.btn-sm.icon-only{ width:29px; height:29px; min-height:29px; line-height:27px; }
html .btn.btn-xs.icon-only{ width:23px; height:23px; min-height:23px; line-height:21px; }
html .btn.icon-only > .fa,
html .btn.icon-only > .glyphicon{ font-size:14px; line-height:inherit; vertical-align:middle; }
html .btn.btn-sm.icon-only > .fa,
html .btn.btn-sm.icon-only > .glyphicon{ font-size:13px; }
html .btn.btn-xs.icon-only > .fa,
html .btn.btn-xs.icon-only > .glyphicon{ font-size:11px; }

/* 18.4 .btn-labeled: Beyond le cuelga un bloque de icono con margenes
   negativos que lo estiraba a 40px. */
html .btn.btn-labeled{
  min-height:34px;
  padding-top:0;
  padding-bottom:0;
  line-height:32px;
}
html .btn.btn-labeled > .btn-label{
  margin:0 11px 0 0;
  padding:0 11px;
  line-height:32px;
  border-radius:var(--dc-radius-sm) 0 0 var(--dc-radius-sm);
}

/* 18.5 Grupos: sin dobles bordes ni esquinas sueltas entre botones pegados */
html .btn-group > .btn + .btn{ margin-left:-1px; }
html .btn-group > .btn:not(:first-child):not(:last-child){ border-radius:0; }
html .btn-group > .btn:first-child:not(:last-child){ border-radius:var(--dc-radius-sm) 0 0 var(--dc-radius-sm); }
html .btn-group > .btn:last-child:not(:first-child){ border-radius:0 var(--dc-radius-sm) var(--dc-radius-sm) 0; }


/* -------------------------------------------------------------------------
   19. WORKSPACE DE RASTREO  (.dc-work)
   Para las dos pantallas de mapa a pantalla completa:
   /location/units/activities y /location/units/reporte.
   Antes: encabezado de pagina alto, tarjeta con su propio encabezado, una
   alerta, una fila de controles y recien despues el mapa; con la lista de
   actividades fija en 310px al lado de un mapa de 510px, o sea 200px de hueco.
   Ahora: una sola tarjeta con cabecera compacta (identidad + acciones), una
   barra de controles y el mapa ocupando todo el alto que queda.
   ------------------------------------------------------------------------- */
.dc-work{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-lg);
  box-shadow:var(--dc-shadow-sm);
  display:flex;
  flex-direction:column;
  overflow:hidden;
}

/* 19.1 Cabecera: identidad a la izquierda, acciones a la derecha */
.dc-work-head{
  align-items:center;
  border-bottom:1px solid var(--dc-border);
  display:flex;
  flex-wrap:wrap;
  gap:12px 18px;
  padding:14px 18px;
}
.dc-work-ident{ flex:1 1 320px; min-width:0; }
.dc-work-sub{ color:var(--dc-text-muted); font-size:13px; font-weight:400; }
.dc-work-ident h1{
  color:var(--dc-text);
  font-size:16px;
  font-weight:600;
  letter-spacing:-.01em;
  line-height:1.2;
  margin:0;
}
/* La linea de datos del agente. Antes vivia dentro de un <small> sin cerrar
   en el encabezado de pagina; aqui es contenido de primera clase. */
.dc-work-meta{
  color:var(--dc-text-muted);
  display:flex;
  flex-wrap:wrap;
  font-size:12.5px;
  gap:4px 16px;
  margin:5px 0 0 0;
}
.dc-work-meta > span{ align-items:center; display:inline-flex; gap:6px; }
.dc-work-meta b{ color:var(--dc-text); font-weight:600; }
.dc-work-meta img{ height:18px; width:auto; }
.dc-work-acciones{
  align-items:center;
  display:flex;
  flex:0 0 auto;
  gap:8px;
  margin-left:auto;
}
/* El campo de fecha del encabezado: icono dentro, ancho justo */
.dc-work-fecha{ margin:0; position:relative; }
.dc-work-fecha .form-control{
  padding-left:32px;
  width:158px;
}
.dc-work-fecha .fa{
  color:var(--dc-text-faint);
  left:12px;
  pointer-events:none;
  position:absolute;
  top:11px;
}

/* 19.2 Barra de controles (rangos, exportar) */
.dc-work-bar{
  align-items:center;
  background-color:var(--dc-surface-alt);
  border-bottom:1px solid var(--dc-border);
  display:flex;
  flex-wrap:wrap;
  gap:10px 16px;
  padding:10px 18px;
}
.dc-work-bar-info{
  color:var(--dc-text-muted);
  display:flex;
  flex-direction:column;
  font-size:12px;
  gap:2px;
  line-height:1.35;
}
.dc-work-bar-info strong{ color:var(--dc-text); font-size:12.5px; font-weight:600; }
.dc-work-bar-acciones{ align-items:center; display:flex; flex-wrap:wrap; gap:8px; margin-left:auto; }
.dc-work-bar-acciones .dc-work-etiqueta{
  color:var(--dc-text-faint);
  font-size:11px;
  letter-spacing:.06em;
  text-transform:uppercase;
}
/* La alerta vive dentro de la barra, sin robar una franja entera */
.dc-work .alert{ flex:1 1 100%; margin:0; }

/* 19.3 Cuerpo: riel + mapa. El alto lo termina de fijar el JS del modulo a
   partir de la posicion real de la tarjeta; esto es el piso. */
.dc-work-body{
  display:flex;
  flex-wrap:wrap;
  min-height:420px;
}
.dc-work-rail{
  border-right:1px solid var(--dc-border);
  display:flex;
  flex:0 0 320px;
  flex-direction:column;
  max-width:100%;
  min-height:0;
}
.dc-work-rail-head{
  align-items:center;
  border-bottom:1px solid var(--dc-border);
  color:var(--dc-text);
  display:flex;
  font-size:12px;
  font-weight:700;
  gap:8px;
  letter-spacing:.04em;
  padding:11px 16px;
  text-transform:uppercase;
}
.dc-work-cuenta{
  background-color:var(--dc-primary-soft);
  border-radius:var(--dc-radius-pill);
  color:var(--dc-primary);
  font-size:11px;
  font-weight:700;
  letter-spacing:0;
  padding:1px 8px;
}
.dc-work-map{ flex:1 1 420px; min-height:420px; min-width:0; }
.dc-work-map > div{ height:100%; width:100%; }

/* 19.4 La lista de actividades */
.dc-act-list{ list-style:none; margin:0; overflow-y:auto; padding:0; }
.dc-act{
  border-bottom:1px solid var(--dc-border);
  display:flex;
  gap:10px;
  padding:11px 16px;
  transition:background-color var(--dc-trans);
}
.dc-act:last-child{ border-bottom:0; }
.dc-act:hover{ background-color:var(--dc-surface-alt); }
.dc-act-num{ flex:0 0 26px; }
.dc-act-num img{ height:26px; width:auto; }
.dc-act-cuerpo{ flex:1 1 auto; min-width:0; }
.dc-act-nombre{
  color:var(--dc-text);
  font-size:12.5px;
  font-weight:600;
  line-height:1.3;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.dc-act-hora{ color:var(--dc-text-muted); font-size:11.5px; margin-top:2px; }
.dc-act-estado{
  align-items:flex-end;
  display:flex;
  flex:0 0 auto;
  flex-direction:column;
  gap:3px;
  text-align:right;
}
.dc-act-estado img{ height:20px; width:auto; }
.dc-act-estado .dc-act-etq{ font-size:11px; font-weight:600; line-height:1.2; }
.dc-act-vacio{
  color:var(--dc-text-muted);
  font-size:12.5px;
  padding:26px 16px;
  text-align:center;
}

@media (max-width:991px){
  .dc-work-rail{ border-bottom:1px solid var(--dc-border); border-right:0; flex:1 1 100%; max-height:260px; }
  .dc-work-map{ flex:1 1 100%; }
}



/* -------------------------------------------------------------------------
   20. TARJETA CON PESTANAS (.dc-tabcard) + FORMULARIO DE CONFIGURACION (.dc-cfg)
   config/company/index tenia las pestanas colgadas del borde superior de la
   pagina y cada panel con su propio envoltorio: el primero llevaba
   #horizontal-form (o sea, tarjeta) y los otros dos un id con espacios
   ("horizontal-form  minh-420") que ningun selector alcanza, asi que se veian
   sin tarjeta, sobre el gris del fondo.
   Aqui las tres pestanas viven dentro de UNA sola tarjeta: la barra de
   pestanas es su cabecera y el panel activo su cuerpo.
   El formulario NO usa .form-horizontal: la etiqueta va ARRIBA del campo
   (.dc-field, el mismo patron de las barras de filtro), que es lo unico que
   evita el traslape cuando la etiqueta es larga y la columna angosta.
   ------------------------------------------------------------------------- */
.dc-tabcard{
  background-color:var(--dc-surface);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-lg);
  box-shadow:var(--dc-shadow-sm);
  margin-bottom:20px;
  overflow:hidden;
}
html .dc-tabcard > .nav-tabs{
  background-color:var(--dc-surface-alt);
  border-bottom:1px solid var(--dc-border);
  box-shadow:none;
  display:flex;
  flex-wrap:wrap;
  margin:0;
  padding:0 10px;
  top:0;
}
html .dc-tabcard > .nav-tabs > li{ float:none; margin:0; }
html .dc-tabcard > .nav-tabs > li > a{
  background-color:transparent;
  border:0;
  border-bottom:2px solid transparent;
  border-radius:0;
  font-size:13px;
  line-height:1.4;
  margin:0;
  padding:14px 16px;
}
html .dc-tabcard > .nav-tabs > li > a > .fa{ margin-right:6px; opacity:.85; }
html .dc-tabcard > .tab-content{
  background-color:transparent;
  padding:22px 24px 24px;
}

/* 20.1 Bloque tematico: agrupa los campos que van juntos y les pone titulo.
   Sin esto la pestana de configuracion es una lista plana de 11 campos. */
.dc-cfg-block + .dc-cfg-block{ margin-top:24px; }
.dc-cfg-block-title{
  align-items:center;
  border-bottom:1px solid var(--dc-border);
  color:var(--dc-text-muted);
  display:flex;
  font-size:11px;
  font-weight:700;
  gap:8px;
  letter-spacing:.05em;
  margin:0 0 16px;
  padding-bottom:8px;
  text-transform:uppercase;
}
.dc-cfg-block-title > .fa{ color:var(--dc-primary); font-size:12px; }
/* Variante para la cabecera de la tabla, donde la regla la pone el contenedor */
.dc-cfg-block-title--plain{ border-bottom:0; margin:0; padding:0; }

/* 20.2 Rejilla de campos */
.dc-cfg-grid{
  align-items:start;
  display:grid;
  gap:16px 28px;
  grid-template-columns:repeat(2, minmax(0,1fr));
}
.dc-cfg-grid--full{ grid-template-columns:minmax(0,1fr); }
/* Dos columnas de bloques (pestana de configuracion general) */
.dc-cfg-cols{
  display:grid;
  gap:24px 32px;
  grid-template-columns:repeat(2, minmax(0,1fr));
}
.dc-cfg-col{ min-width:0; }
/* Campos dependientes de un interruptor: se sangran para que se lea que
   cuelgan del campo de arriba. */
.dc-cfg-sub{
  border-left:2px solid var(--dc-border);
  margin-top:14px;
  padding-left:14px;
}
.dc-cfg-sub > .form-group + .form-group{ margin-top:14px; }

/* 20.3 El campo. .dc-field ya trae etiqueta arriba en 11px versalitas; aqui
   solo se le quita el margen que Bootstrap le da a .form-group y se deja el
   hueco para el icono de bootstrapValidator, que se inserta como hermano del
   input dentro del mismo .form-group. */
html .dc-cfg .form-group{
  margin-bottom:0;
  position:relative;
}
/* Separacion entre campos hermanos. En la rejilla el hueco lo pone gap, asi
   que ahi se anula. */
html .dc-cfg .form-group + .form-group,
html .dc-cfg .dc-cfg-sub + .form-group{ margin-top:16px; }
html .dc-cfg .dc-cfg-grid > .form-group + .form-group{ margin-top:0; }
html .dc-cfg .form-group > label{
  color:var(--dc-text-muted);
  font-size:11px;
  font-weight:600;
  letter-spacing:.045em;
  margin:0;
  text-transform:uppercase;
}
html .dc-cfg sup{ color:var(--dc-danger); font-size:12px; font-weight:700; top:0; }
html .dc-cfg .help-block{ margin:0; }
/* El icono de validacion se coloca sobre el control, no sobre la etiqueta:
   la etiqueta mide ~13px y el hueco entre ella y el campo 5px. */
html .dc-cfg .form-control-feedback{
  height:36px;
  line-height:36px;
  right:0;
  top:18px;
  width:36px;
}
.dc-cfg .dc-hint{
  color:var(--dc-text-muted);
  font-size:11.5px;
  line-height:1.4;
  margin-top:6px;
}
.dc-cfg .dc-hint--warn{ color:var(--dc-warning); }

/* 20.4 Zona del logotipo */
.dc-cfg-logo{ min-width:0; }
.dc-cfg-logo-label{
  color:var(--dc-text-muted);
  display:block;
  font-size:11px;
  font-weight:600;
  letter-spacing:.045em;
  margin:0 0 5px;
  text-transform:uppercase;
}
html .dc-cfg #image-preview{ max-width:none; }

/* 20.5 Pie de acciones. Los tres formularios lo repiten identico: un solo
   boton primario, alineado a la derecha, sobre una franja que llega a los
   bordes de la tarjeta (de ahi los margenes negativos, iguales al padding
   de .tab-content). */
.dc-form-actions{
  align-items:center;
  background-color:var(--dc-surface-alt);
  border-top:1px solid var(--dc-border);
  display:flex;
  flex-wrap:wrap;
  gap:10px;
  justify-content:flex-end;
  margin:24px -24px -24px;
  padding:16px 24px;
}
html .dc-form-actions .btn{ min-width:168px; }
html .dc-form-actions .btn > .fa{ margin-right:6px; }

/* 20.6 Tabla de contactos de alerta */
.dc-cfg-tabla-head{
  align-items:center;
  border-bottom:1px solid var(--dc-border);
  display:flex;
  flex-wrap:wrap;
  gap:10px;
  justify-content:space-between;
  margin:0 0 14px;
  padding-bottom:10px;
}
html .dc-cfg-tabla{ margin-bottom:0; }
html .dc-cfg-tabla > thead > tr > th{
  border-bottom:1px solid var(--dc-border);
  border-top:0;
  color:var(--dc-text-muted);
  font-size:11px;
  font-weight:700;
  letter-spacing:.045em;
  padding:9px 10px;
  text-transform:uppercase;
  white-space:nowrap;
}
html .dc-cfg-tabla > tbody > tr > td{
  border-top:1px solid var(--dc-border);
  padding:9px 10px;
  vertical-align:middle;
}
html .dc-cfg-tabla > tbody > tr > td.dc-col-num{
  color:var(--dc-text-muted);
  font-weight:600;
  width:48px;
}
html .dc-cfg-tabla .dc-col-sw{ text-align:center; width:96px; }
html .dc-cfg-tabla .dc-col-del{ text-align:right; width:56px; }
html .dc-cfg-tabla > tbody > tr#rowSinContactos:hover{ background-color:transparent; }
html .dc-cfg-tabla > tbody > tr#rowSinContactos > td{ border-top:0; }
.dc-cfg-tabla .dc-empty{ padding:34px 12px; }
/* bootstrap-toggle: el interruptor hereda .btn del tema, solo se le fija el
   alto para que no descuadre el renglon. */
html .dc-cfg-tabla .toggle{ vertical-align:middle; }
html .dc-cfg-tabla .toggle.btn-mini{ min-width:64px; }

@media (max-width:991px){
  .dc-cfg-cols,
  .dc-cfg-grid{ grid-template-columns:minmax(0,1fr); }
}
@media (max-width:767px){
  html .dc-tabcard > .tab-content{ padding:16px 14px 18px; }
  html .dc-tabcard > .nav-tabs{ padding:0 4px; }
  html .dc-tabcard > .nav-tabs > li > a{ padding:12px 10px; }
  .dc-form-actions{ margin:20px -14px -18px; padding:14px; }
  html .dc-form-actions .btn{ min-width:0; width:100%; }
}


/* -------------------------------------------------------------------------
   21. FICHA DE RUTA  (routes/main/getinfo)
   La pantalla capturaba la ruta dentro de un .widget con la cuadricula de
   Bootstrap: cuatro campos sueltos con la etiqueta a la izquierda y, debajo,
   una tabla de visitas con tres combos que traian clase .col-md-12 (una
   columna de rejilla usada como ancho de control), de modo que "Seleccione una
   Opcion" se comia el nombre del cliente y de la ubicacion.
   Aqui la ficha reusa la tarjeta de captura (.step-content) y el formulario de
   configuracion (.dc-cfg): etiqueta arriba, campos agrupados por bloque y las
   acciones en el pie. La tabla de visitas reusa .dc-cfg-tabla y solo agrega
   sus anchos de columna y el desplazamiento horizontal dentro de la tarjeta.
   ------------------------------------------------------------------------- */

/* 21.1 Pie de acciones dentro de una tarjeta de captura.
   .dc-form-actions nacio para .dc-tabcard > .tab-content, cuyo relleno es
   22/24/24. .step-content usa 22px arriba y abajo, asi que el margen inferior
   negativo se corrige o la franja sobresale 2px de la tarjeta. */
html .step-content > form > .dc-form-actions,
html .step-content > .dc-form-actions{ margin:24px -24px -22px; }

/* 21.2 Etiqueta "Opcional" junto al titulo de un bloque */
.dc-opcional{
  background-color:var(--dc-surface-alt);
  border:1px solid var(--dc-border);
  border-radius:var(--dc-radius-pill);
  color:var(--dc-text-faint);
  font-size:10px;
  font-weight:600;
  letter-spacing:.04em;
  padding:1px 8px;
  text-transform:uppercase;
}

/* 21.3 Tabla de visitas.
   Siete columnas con tres combos: por debajo de ~940px los combos quedan mas
   angostos que su texto, asi que la tabla se desplaza DENTRO de la tarjeta
   (nunca la pagina) en vez de encogerse. */
.dc-tabla-scroll{ overflow-x:auto; -webkit-overflow-scrolling:touch; }
/* table-layout:fixed y TODOS los anchos en porcentaje.
   Con el reparto automatico manda el contenido: el nombre del cliente y la
   direccion no parten renglon (select2 los pinta con white-space:nowrap), asi
   que se quedaban con el ancho que quisieran y la columna de Horario se
   encogia hasta dejar los dos controles en 10px. Fijo, cada columna recibe lo
   que se le declara y el sobrante se recorta dentro de su celda.
   Los porcentajes suman 100: mezclarlos con px en table-layout:fixed hace que
   la suma pase del ancho de la tabla y desborde siempre.
   A 940px (el minimo) Horario cae en 160px, suficiente para los dos "08:30". */
html .dc-visitas{ min-width:940px; table-layout:fixed; }
html .dc-visitas > thead > tr > th.dc-col-num{     width:4%; }
html .dc-visitas > thead > tr > th.dc-col-horario{ width:17%; }
html .dc-visitas > thead > tr > th.dc-col-tipo{    width:15%; }
html .dc-visitas > thead > tr > th.dc-col-cliente{ width:22%; }
html .dc-visitas > thead > tr > th.dc-col-ubic{    width:22%; }
html .dc-visitas > thead > tr > th.dc-col-contacto{width:16%; }
html .dc-visitas > thead > tr > th.dc-col-del{     width:4%; }

/* select2 en las celdas de Cliente y Ubicacion.
   display:block porque el contenedor es inline-block y su linea base lo dejaba
   unos pixeles mas abajo que el <select> nativo de la columna Tipo. */
html .dc-visitas .select2-container{ display:block; max-width:100%; }
/* Visita ya iniciada por el repartidor: no se puede editar */
html .dc-visitas > tbody > tr.is-bloqueada > td{ background-color:var(--dc-surface-alt); }

/* 21.4 Rango de horas: dos controles y la flecha, en un solo renglon */
.dc-rango{ display:flex; align-items:center; gap:6px; }
html .dc-rango > .form-control{
  /* flex:1 1 0 con min-width:0 reparte el ancho de la celda entre las dos
     horas; sin el min-width el ancho intrinseco del input (el `size` por
     omision de HTML) impide que se encojan y "08:30" sale cortado. */
  flex:1 1 0;
  min-width:0;
  padding-left:6px; padding-right:6px;
  text-align:center;
}
.dc-rango-sep{ color:var(--dc-text-faint); flex:0 0 auto; font-size:11px; }

/* 21.5 Dos controles apilados en una misma celda (contacto y telefono) */
.dc-stack{ display:flex; flex-direction:column; gap:6px; }

/* 21.6 Numero de renglon: lo recalcula refreshVisitas() al agregar o quitar */
.dc-visitas .dc-num{ display:inline-block; }

/* .step-content conserva su relleno de 24px en cualquier ancho, asi que el
   margen negativo no cambia: solo se aprieta el relleno de la franja. */
@media (max-width:767px){
  html .step-content > form > .dc-form-actions,
  html .step-content > .dc-form-actions{ margin:20px -24px -22px; padding:14px 24px; }
}


/* -------------------------------------------------------------------------
   16. RESPONSIVO
   ------------------------------------------------------------------------- */
@media (max-width:991px){
  html .page-content{ padding:0 15px; }
  .dc-login{ flex-direction:column; min-height:100vh; }
  .dc-login-brand{ flex:0 0 auto; padding:26px 24px; }
  .dc-login-brand h2{ font-size:20px; margin-bottom:0; }
  .dc-login-logo{ max-width:140px; }
  .dc-login-brand p,.dc-login-legal,.dc-login-brand:after{ display:none; }
  .dc-login-form{ flex:1 1 auto; padding:32px 24px; }
}
@media (max-width:991px){
  /* Rejillas anidadas como .col-sm-10 > .col-xs-8.no-padding dejan al boton
     mas ancho que su columna y la vista entera se sale (dates/main/getlocation
     ya lo hacia antes del tema). Dejando que la etiqueta salte de renglon el
     boton se encoge hasta caber. */
  html .btn{ white-space:normal; max-width:100%; }
}
@media (max-width:767px){
  html .page-header{ padding-top:16px; }
  html .page-header .header-title h1{ font-size:17px; }
  html .widget-body{ padding:13px; }
  .dc-filterbar-row{ gap:10px; }
  .dc-field{ flex:1 1 100%; }
  .dc-kpi-value{ font-size:24px; }
  /* Las tablas anchas deben desplazarse dentro de su tarjeta, nunca la pagina */
  html .table-responsive,
  .dc-table-card .table-responsive{ overflow-x:auto; -webkit-overflow-scrolling:touch; }
}

/* Impresion */
@media print{
  html body{ background:#fff; }
  html .navbar,html .page-sidebar,html .page-chatbar,
  html .widget-buttons,html .table-toolbar,html .dc-filterbar{ display:none !important; }
  html .page-content{ margin-left:0 !important; padding:0; }
  html .widget{ border:1px solid #ccc; box-shadow:none; break-inside:avoid; }
}
