diff --git a/Custom/CCopiaSec b/Custom/CCopiaSec
new file mode 100644
index 0000000..fc4610f
--- /dev/null
+++ b/Custom/CCopiaSec
@@ -0,0 +1,10899 @@
+/* . */
+/* -------------------GUIA DE INSTALACION---------------------------
+
+ARCHIVO: custom.css
+UBICACION: /srv/www/htdocs/agc/css/custom.css
+
+METODO DE INSTALACION (ORDEN DE PRIORIDAD):
+
+1. METODO PRINCIPAL (Recomendado - Cubre la mayoria de archivos):
+ Agregar al final de /srv/www/htdocs/vicidial/vicidial_stylesheet.php (linea ~881):
+
+ @import url('../agc/css/custom.css');
+
+ Este metodo cubre automaticamente todos los archivos que usan vicidial_stylesheet.php
+ (aproximadamente 101 archivos PHP).
+
+2. METODO SECUNDARIO (Para archivos que no usan vicidial_stylesheet.php):
+ Agregar en /srv/www/htdocs/vicidial/admin_header.php (linea ~1951, antes de ):
+
+ echo " \n";
+
+ Este metodo cubre archivos que usan admin_header.php pero no vicidial_stylesheet.php
+ (aproximadamente 142 archivos PHP).
+
+3. IMPORTACIONES DIRECTAS (Solo para archivos especiales):
+ Para archivos que NO usan ni vicidial_stylesheet.php ni admin_header.php,
+ agregar directamente en el
del archivo:
+
+
+
+ Archivos conocidos que requieren importacion directa:
+ - /srv/www/htdocs/vicidial/realtime_report.php (linea ~2104)
+ - /srv/www/htdocs/vicidial/welcome.php (linea ~114)
+ - /srv/www/htdocs/vicidial/hci_screen.php (linea ~963)
+
+CONFIGURACIONES ADICIONALES:
+
+- Poner placeholder="Phone Login" en input - Linea 1737 vicidial.php
+- Poner placeholder="Phone Password" en input - Linea 1739 vicidial.php
+
+NOTA: Si un archivo usa tanto vicidial_stylesheet.php como admin_header.php,
+solo necesita el metodo 1 (@import en vicidial_stylesheet.php) para funcionar.
+
+ ------------------------------------------------------------*/
+
+/* Variables de colores globales - disponibles para todos los componentes */
+:root {
+ /* Colores principales - Paleta ViciDial (Teal/Verde Azulado) */
+ --color-primary-dark: #2E7D7D; /* Teal oscuro - forma curva izquierda */
+ --color-primary-light: #20B2AA; /* Teal claro brillante - forma curva derecha y punto */
+ --color-primary-medium: #008B8B; /* Teal medio - intermedio */
+ --color-primary-lightest: #48D1CC; /* Teal muy claro - acentos */
+ --color-text-dark: #2D2D2D; /* Gris oscuro/carbón - texto */
+ --color-text-light: #ffffff; /* Blanco - texto sobre fondos oscuros */
+ --color-bg-white: #ffffff; /* Blanco - fondo */
+ --color-bg-light: #B0E0E6; /* Teal muy claro - fondos suaves */
+ --color-bg-lighter: #E0F7FA; /* Teal casi blanco - fondos muy suaves */
+
+ /* Colores de sombras */
+ --shadow-light: rgba(45, 45, 45, 0.25);
+ --shadow-medium: rgba(45, 45, 45, 0.35);
+ --shadow-text: rgba(45, 45, 45, 0.2);
+ --shadow-primary: rgba(32, 178, 170, 0.3); /* Sombra con color teal */
+ --shadow-white: rgba(255, 255, 255, 0.4);
+
+ /* Colores de fondo decorativo */
+ --bg-decorative-1: rgba(32, 178, 170, 0.1); /* Teal claro transparente */
+ --bg-decorative-2: rgba(0, 139, 139, 0.1); /* Teal medio transparente */
+ --bg-white-transparent: rgba(255, 255, 255, 0.6);
+
+ /* Tamaños de fuente - Sistema de tipografía semántico */
+ --font-size-h1: 14px; /* H1 - Títulos principales (18-22px) */
+ --font-size-h2: 14px; /* H2 - Subtítulos (14-16px) */
+ --font-size-p1: 14px; /* P1 - Texto principal (12-13px) */
+ --font-size-p2: 14px; /* P2 - Texto secundario (9-11px) */
+
+ /* Familia de fuente - Unificada */
+ --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
+}
+
+
+/* Reset de estilos - Prioridad máxima sobre otros CSS */
+html body * {
+ box-sizing: border-box !important;
+}
+
+/* Reset de enlaces - Eliminar color azul y decoración por defecto */
+html body a,
+html body a:link,
+html body a:visited {
+ text-decoration: none !important;
+ outline: none !important;
+}
+
+
+/* Asegurar que html y body ocupen toda la altura de manera responsive */
+html {
+ height: 100% !important;
+ overflow-x: hidden !important;
+ max-width: 100% !important;
+}
+
+body {
+ margin: 0 !important;
+ padding: 0 !important;
+ min-height: 100vh !important;
+ height: auto !important;
+ overflow-x: hidden !important;
+ max-width: 100% !important;
+ width: 100% !important;
+}
+
+
+/* WELCOME COMPONENT --------------------------------------------------------------------*/
+
+/* -------------------Guia de instalacion--------------------------- */
+/* *{
+ border: 1px solid red;
+} */
+
+
+/* Contenedor del componente - detecta automáticamente la tabla de bienvenida (NO dentro de formularios) */
+html body:has(> center > table[width="460px"] .sh_text_white):not(:has(form#vicidial_form)),
+html body:has(> center > table[width="460px"] .skb_text):not(:has(form#vicidial_form)) {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ min-height: 100vh !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ padding: 15px !important;
+ margin: 0 !important;
+ position: relative !important;
+}
+
+/* Ocultar tabla vacía solo cuando está relacionada con welcome-modern (NO dentro de formularios) */
+html body:has(> center > table[width="460px"] .sh_text_white):not(:has(form#vicidial_form)) > table[width="100%"],
+html body:has(> center > table[width="460px"] .skb_text):not(:has(form#vicidial_form)) > table[width="100%"] {
+ display: none !important;
+}
+
+/* Eliminar efectos de los br solo cuando están relacionados con welcome-modern (NO dentro de formularios) */
+html body:has(> center > table[width="460px"] .sh_text_white):not(:has(form#vicidial_form)) > br,
+html body:has(> center > table[width="460px"] .skb_text):not(:has(form#vicidial_form)) > br {
+ display: none !important;
+}
+
+/* Centrar el contenedor center solo cuando contiene welcome-modern (NO dentro de formularios) */
+html body:has(> center > table[width="460px"] .sh_text_white):not(:has(form#vicidial_form)) > center:has(table[width="460px"]),
+html body:has(> center > table[width="460px"] .skb_text):not(:has(form#vicidial_form)) > center:has(table[width="460px"]) {
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ width: 100% !important;
+ height: 100vh !important;
+ position: absolute !important;
+ top: 0 !important;
+ left: 0 !important;
+}
+
+/* Estilos para la tabla principal del componente - detecta automáticamente (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) {
+ background: var(--color-bg-white) !important;
+ border-radius: 16px !important;
+ box-shadow: 0 15px 40px var(--shadow-light) !important;
+ overflow: hidden !important;
+ border: none !important;
+ border-collapse: collapse !important;
+ width: auto !important;
+ min-width: 380px !important;
+ max-width: 100% !important;
+ transition: transform 0.3s ease, box-shadow 0.3s ease !important;
+ margin: 0 auto !important;
+ display: block !important;
+ box-sizing: border-box !important;
+}
+
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text):hover {
+ transform: translateY(-3px) !important;
+ box-shadow: 0 18px 50px var(--shadow-medium) !important;
+}
+
+/* Header moderno - solo dentro de welcome (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tr:first-child {
+ display: block !important;
+ width: 100% !important;
+ box-sizing: border-box !important;
+ table-layout: auto !important;
+}
+
+/* Estilos generales para celdas del header - se sobrescriben con selectores específicos */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tr:first-child td {
+ background: transparent !important;
+ padding: 16px !important;
+ border: none !important;
+ display: block !important;
+ text-align: center !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ margin: 0 !important;
+ box-sizing: border-box !important;
+}
+
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tr:first-child td:first-child {
+ border-radius: 0 !important;
+ padding: 16px 16px 8px 16px !important;
+ text-align: center !important;
+ display: block !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ background: var(--color-bg-white) !important;
+ overflow: visible !important;
+ float: none !important;
+ clear: both !important;
+}
+
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text):not(form center > table) tr:first-child td:last-child {
+ border-radius: 0 !important;
+ padding: 0 16px 16px 16px !important;
+ text-align: center !important;
+ display: block !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ background: var(--color-bg-white) !important;
+ float: none !important;
+ clear: both !important;
+}
+
+/* Logo y texto del header - solo dentro de welcome (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tr:first-child img {
+ border-radius: 6px !important;
+ transition: transform 0.3s ease !important;
+ height: 100px !important;
+ width: auto !important;
+ max-width: 180px !important;
+ display: block !important;
+ margin: 0 auto !important;
+ text-align: center !important;
+ box-sizing: border-box !important;
+ object-fit: contain !important;
+ visibility: visible !important;
+ opacity: 1 !important;
+}
+
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tr:first-child img:hover {
+ transform: scale(1.03) !important;
+}
+
+/* Texto Welcome - verde, solo dentro de welcome (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) .sh_text_white {
+ color: var(--color-primary-medium) !important;
+ font-size: var(--font-size-h1) !important;
+ font-weight: 600 !important;
+ letter-spacing: 0.5px !important;
+ text-align: center !important;
+ display: none !important;
+ width: none !important;
+ max-width: none !important;
+ box-sizing: border-box !important;
+ margin: 0 !important;
+ padding: 0 !important;
+
+}
+/* Ocultar la celda completa que contiene "Welcome" (solo en welcome, no en formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) td:has(.sh_text_white) {
+ display: none !important;
+}
+
+/* Espaciadores modernos - solo dentro de welcome (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tr td[colspan="2"] font[size="1"] {
+ display: none !important;
+}
+
+/* Contenedor para botones en horizontal (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tbody {
+ display: block !important;
+ padding: 12px !important;
+ text-align: center !important;
+}
+
+/* Filas de botones - hacer que se muestren en línea (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tr:not(:first-child) {
+ display: inline-block !important;
+ vertical-align: top !important;
+ margin: 0 !important;
+}
+
+/* Celdas con botones (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tr:not(:first-child) td[colspan="2"] {
+ display: block !important;
+}
+
+/* Enlaces de navegación modernos - solo dentro de welcome (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) .skb_text {
+ display: inline-block !important;
+ color: var(--color-text-light) !important;
+ font-size: var(--font-size-h2) !important;
+ font-weight: 500 !important;
+ padding: 0 !important;
+ margin: 8px 6px !important;
+ background: var(--color-primary-light) !important;
+ border-radius: 10px !important;
+ border: 2px solid var(--color-primary-light) !important;
+ transition: all 0.3s ease !important;
+ cursor: pointer !important;
+ text-decoration: none !important;
+ position: relative !important;
+ overflow: hidden !important;
+ white-space: nowrap !important;
+ min-width: 100px !important;
+ text-align: center !important;
+}
+
+/* Hacer que los enlaces dentro de skb_text ocupen todo el espacio del botón (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) .skb_text a {
+ display: block !important;
+ width: 100% !important;
+ color: var(--color-text-light) !important;
+ text-decoration: none !important;
+ padding: 10px 14px !important;
+ margin: 0 !important;
+ position: relative !important;
+ z-index: 1 !important;
+ box-sizing: border-box !important;
+ line-height: 1.4 !important;
+}
+
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) .skb_text::before {
+ content: '' !important;
+ position: absolute !important;
+ top: 0 !important;
+ left: -100% !important;
+ width: 100% !important;
+ height: 100% !important;
+ background: var(--shadow-white) !important;
+ transition: left 0.5s ease !important;
+}
+
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) .skb_text:hover {
+ background: var(--color-primary-medium) !important;
+ transform: translateY(-2px) !important;
+ box-shadow: 0 6px 16px var(--shadow-primary) !important;
+ border-color: var(--color-primary-medium) !important;
+}
+
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text):not(form center > table) .skb_text:hover a {
+ color: var(--color-text-light) !important;
+}
+
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) .skb_text:hover::before {
+ left: 100% !important;
+}
+
+/* Celdas de la tabla - solo dentro de welcome (NO dentro de formularios) */
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) td {
+ border: none !important;
+ box-sizing: border-box !important;
+}
+
+/* Responsive - solo para welcome-modern (NO dentro de formularios) */
+@media (max-width: 480px) {
+ html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) {
+ width: 100% !important;
+ min-width: auto !important;
+ border-radius: 12px !important;
+ }
+
+ html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) .skb_text {
+ font-size: var(--font-size-p1) !important;
+ padding: 0 !important;
+ margin: 6px 4px !important;
+ min-width: 80px !important;
+ display: block !important;
+ }
+
+ html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) .skb_text a {
+ display: block !important;
+ width: 100% !important;
+ padding: 8px 12px !important;
+ line-height: 1.4 !important;
+ }
+
+ html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tbody {
+ flex-direction: column !important;
+ }
+
+ html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tr td[colspan="2"] {
+ display: block !important;
+ width: 100% !important;
+ }
+
+ html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) .sh_text_white {
+ font-size: var(--font-size-h1) !important;
+ }
+
+ html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) tr:first-child td {
+ padding: 12px !important;
+ }
+}
+
+/* Animación de entrada - solo para welcome */
+@keyframes welcome-modern-fadeInUp {
+ from {
+ opacity: 0 !important;
+ transform: translateY(30px) !important;
+ }
+ to {
+ opacity: 1 !important;
+ transform: translateY(0) !important;
+ }
+}
+
+html body > center > table[width="460px"]:has(.sh_text_white):has(.skb_text) {
+ animation: welcome-modern-fadeInUp 0.6s ease-out !important;
+}
+
+/* Fondo decorativo - solo cuando existe welcome (NO dentro de formularios) */
+html body:has(> center > table[width="460px"] .sh_text_white):not(:has(form#vicidial_form))::before,
+html body:has(> center > table[width="460px"] .skb_text):not(:has(form#vicidial_form))::before {
+ content: '' !important;
+ position: fixed !important;
+ top: 0 !important;
+ left: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ background: transparent !important;
+ pointer-events: none !important;
+ z-index: -1 !important;
+}
+
+
+
+/* Phone Login Component --------------------------------------------------------------------*/
+
+
+
+/* ==========================================================================
+ CONTENEDOR PRINCIPAL
+ ========================================================================== */
+body:has(form#vicidial_form) {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
+ min-height: 100vh;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 15px;
+ margin: 0;
+ position: relative;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+/* ==========================================================================
+ ENLACE TIMECLOCK
+ ========================================================================== */
+body:has(form#vicidial_form) > a {
+ position: absolute;
+ top: 20px;
+ left: 20px;
+ text-decoration: none;
+ z-index: 10;
+}
+
+body:has(form#vicidial_form) .sb_text {
+ color: var(--color-primary-light) !important;
+ font-size: var(--font-size-h2) !important;
+ font-weight: 500 !important;
+ transition: color 0.3s ease;
+}
+
+body:has(form#vicidial_form) > a:hover .sb_text {
+ color: var(--color-primary-medium) !important;
+}
+
+/* ==========================================================================
+ ELEMENTOS OCULTOS
+ ========================================================================== */
+body:has(form#vicidial_form) > table[width="100%"] {
+ display: none;
+}
+
+body:has(form#vicidial_form) > br {
+ display: none;
+}
+
+/* ==========================================================================
+ CONTENEDOR DEL FORMULARIO
+ ========================================================================== */
+body:has(form#vicidial_form) form {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 100vh;
+ margin: 0;
+ padding: 0;
+}
+
+body:has(form#vicidial_form) form > center {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ min-height: 100vh;
+ position: relative;
+ margin: 0;
+ padding: 0;
+ padding-left: 15px;
+}
+
+/* ==========================================================================
+ TABLA PRINCIPAL
+ ========================================================================== */
+body:has(form#vicidial_form) form center > table[width="460px"] {
+ background: var(--color-bg-white) !important;
+ border-radius: 16px;
+ box-shadow: 0 15px 40px var(--shadow-light);
+ overflow: hidden;
+ border: none !important;
+ border-collapse: collapse !important;
+ width: 460px !important;
+ max-width: 100%;
+ margin-left: calc(50% - 230px + 15px) !important;
+ margin-right: auto !important;
+ display: table;
+ box-sizing: border-box;
+ position: relative;
+ animation: login-modern-fadeInUp 0.6s ease-out;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:not(:first-child) td {
+ text-align: center !important;
+}
+
+/* ==========================================================================
+ HEADER - LOGO Y TÍTULO
+ ========================================================================== */
+body:has(form#vicidial_form) form center > table[width="460px"] tr:first-child {
+ display: block;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:first-child td {
+ background: transparent !important;
+ padding: 16px !important;
+ border: none !important;
+ display: block;
+ text-align: center !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ margin: 0 !important;
+ box-sizing: border-box !important;
+}
+
+/* Contenedor del logo - mostrar nuevo logo como background */
+body:has(form#vicidial_form) form center > table[width="460px"] tr:first-child td:first-child {
+ border-radius: 0;
+ padding: 16px 16px 8px 16px !important;
+ text-align: center !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ background-image: url('../../vicidial/images/vicidial_admin_web_logo.png?v=2') !important;
+ background-size: 140px auto !important;
+ background-repeat: no-repeat !important;
+ background-position: center !important;
+ min-height: 140px !important;
+ height: 140px !important;
+ position: relative !important;
+ margin-top: 10px !important;
+}
+/* Ocultar fila espaciadora td align="left" colspan="2" con font size="1" */
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(td[align="left"][colspan="2"] font[size="1"]) {
+ display: none !important;
+}
+
+/* Ocultar imagen vieja del logo (vdc_tab_vicidial.gif) */
+body:has(form#vicidial_form) form center > table[width="460px"] tr:first-child td:first-child img {
+ display: none !important;
+ visibility: hidden !important;
+ opacity: 0 !important;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:first-child td:last-child {
+ border-radius: 0;
+ padding: 0 16px 8px 16px !important;
+ text-align: center !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:first-child img {
+ border-radius: 6px;
+ transition: transform 0.3s ease;
+ height: auto !important;
+ max-height: 45px !important;
+ width: auto !important;
+ max-width: 180px !important;
+ display: block !important;
+ margin: 0 auto !important;
+ text-align: center !important;
+ box-sizing: border-box;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:first-child img:hover {
+ transform: scale(1.03);
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] .sh_text_white {
+ color: var(--color-primary-medium) !important;
+ font-size: var(--font-size-h1) !important;
+ font-weight: 600 !important;
+ letter-spacing: 0.5px;
+ text-transform: uppercase !important;
+ text-align: center !important;
+ display: block;
+ width: 100%;
+ max-width: 100%;
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+/* ==========================================================================
+ FORMULARIO - INPUTS Y BOTONES
+ ========================================================================== */
+body:has(form#vicidial_form) form center > table[width="460px"] tr td[colspan="2"] font[size="1"] {
+ display: none;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:not(:first-child):not(:last-child) {
+ display: table-row;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:not(:first-child):not(:last-child) td {
+ padding: 12px 16px !important;
+ border: none !important;
+ box-sizing: border-box !important;
+ text-align: center !important;
+}
+
+/* Labels ocultos - Phone Login y Phone Password */
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="phone_login"]) td:first-child,
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="phone_pass"]) td:first-child {
+ display: none !important;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="phone_login"]),
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="phone_pass"]) {
+ display: table-row;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="phone_login"]) td:last-child,
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="phone_pass"]) td:last-child {
+ text-align: center !important;
+ width: 100% !important;
+ padding-left: 0 !important;
+ padding-right: 0 !important;
+}
+
+/* Labels ocultos - User Login y User Password (Campaign Login) */
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="VD_login"]) td:first-child,
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="VD_pass"]) td:first-child {
+ display: none !important;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="VD_login"]),
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="VD_pass"]) {
+ display: table-row;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="VD_login"]) td:last-child,
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(input[name="VD_pass"]) td:last-child {
+ text-align: center !important;
+ width: 100% !important;
+ padding-left: 0 !important;
+ padding-right: 0 !important;
+}
+
+/* Campaign select - ocultar label */
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(select[name="VD_campaign"]) td:first-child {
+ display: none !important;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr:has(select[name="VD_campaign"]) td:last-child {
+ text-align: center !important;
+ width: 100% !important;
+ padding-left: 0 !important;
+ padding-right: 0 !important;
+}
+
+/* Inputs - Phone Login y Campaign Login */
+body:has(form#vicidial_form) form center > table[width="460px"] input[type="text"],
+body:has(form#vicidial_form) form center > table[width="460px"] input[type="password"] {
+ padding: 10px 14px !important;
+ border: 2px solid var(--color-bg-light) !important;
+ border-radius: 8px !important;
+ font-size: var(--font-size-h2) !important;
+ font-family: inherit;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ transition: all 0.3s ease;
+ box-sizing: border-box !important;
+ width: 100%;
+ max-width: 250px;
+ display: block;
+ margin: 0 auto;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] input[type="text"]:focus,
+body:has(form#vicidial_form) form center > table[width="460px"] input[type="password"]:focus {
+ outline: none !important;
+ border-color: var(--color-primary-light) !important;
+ box-shadow: 0 0 0 3px var(--shadow-primary) !important;
+}
+
+/* Select Campaign */
+body:has(form#vicidial_form) form center > table[width="460px"] select[name="VD_campaign"] {
+ padding: 10px 14px !important;
+ border: 2px solid var(--color-bg-light) !important;
+ border-radius: 8px !important;
+ font-size: var(--font-size-h2) !important;
+ font-family: inherit;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ transition: all 0.3s ease;
+ box-sizing: border-box !important;
+ width: 100%;
+ max-width: 250px;
+ display: block;
+ margin: 0 auto;
+ cursor: pointer;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] select[name="VD_campaign"]:focus {
+ outline: none !important;
+ border-color: var(--color-primary-light) !important;
+ box-shadow: 0 0 0 3px var(--shadow-primary) !important;
+}
+
+/* Botón Submit */
+body:has(form#vicidial_form) form center > table[width="460px"] input[type="submit"] {
+ background: var(--color-primary-light) !important;
+ color: var(--color-text-light) !important;
+ border: 2px solid var(--color-primary-light) !important;
+ border-radius: 10px !important;
+ padding: 12px 24px !important;
+ font-size: var(--font-size-h2) !important;
+ font-weight: 600 !important;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ font-family: inherit;
+ box-sizing: border-box !important;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] input[type="submit"]:hover {
+ background: var(--color-primary-medium) !important;
+ border-color: var(--color-primary-medium) !important;
+ transform: translateY(-2px);
+ box-shadow: 0 6px 16px var(--shadow-primary) !important;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] input[type="submit"]:active {
+ transform: translateY(0);
+}
+
+/* Botón Refresh Campaign List */
+body:has(form#vicidial_form) form center > table[width="460px"] input[type="button"][value="Refresh Campaign List"] {
+ background: var(--color-bg-light) !important;
+ color: var(--color-text-dark) !important;
+ border: 2px solid var(--color-bg-light) !important;
+ border-radius: 10px !important;
+ padding: 10px 20px !important;
+ font-size: var(--font-size-h2) !important;
+ font-weight: 500 !important;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ font-family: inherit;
+ box-sizing: border-box !important;
+ margin-left: 10px;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] input[type="button"][value="Refresh Campaign List"]:hover {
+ background: var(--color-primary-lightest) !important;
+ border-color: var(--color-primary-light) !important;
+ color: var(--color-primary-dark) !important;
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px var(--shadow-primary) !important;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] input[type="button"][value="Refresh Campaign List"]:active {
+ transform: translateY(0);
+}
+
+/* ==========================================================================
+ TEXTO DE VERSIÓN
+ ========================================================================== */
+body:has(form#vicidial_form) form center > table[width="460px"] .body_tiny {
+ color: var(--color-text-dark) !important;
+ font-size: var(--font-size-p2) !important;
+ opacity: 0.7;
+ display: block;
+ padding: 8px 16px !important;
+}
+
+/* ==========================================================================
+ LOADING BOX
+ ========================================================================== */
+body:has(form#vicidial_form) #LoginLoadingBox {
+ text-align: center;
+ padding: 20px;
+}
+
+body:has(form#vicidial_form) #LoginLoadingBox .skb_text {
+ color: var(--color-primary-light) !important;
+ font-size: var(--font-size-h2) !important;
+ display: block;
+ margin-bottom: 15px;
+}
+
+body:has(form#vicidial_form) #LoginLoadingBox img {
+ display: block;
+ margin: 0 auto;
+}
+
+/* ==========================================================================
+ CELDAS Y FILAS DE LA TABLA
+ ========================================================================== */
+body:has(form#vicidial_form) form center > table[width="460px"] td {
+ border: none !important;
+ box-sizing: border-box !important;
+}
+
+body:has(form#vicidial_form) form center > table[width="460px"] tr {
+ border: none !important;
+}
+
+/* ==========================================================================
+ RESPONSIVE
+ ========================================================================== */
+@media (max-width: 480px) {
+ body:has(form#vicidial_form) form center > table[width="460px"] {
+ width: 100% !important;
+ border-radius: 12px;
+ }
+
+ body:has(form#vicidial_form) form center > table[width="460px"] input[type="text"],
+ body:has(form#vicidial_form) form center > table[width="460px"] input[type="password"] {
+ max-width: 100% !important;
+ width: 100% !important;
+ }
+
+ body:has(form#vicidial_form) form center > table[width="460px"] tr:not(:first-child):not(:last-child) td {
+ display: block;
+ width: 100% !important;
+ text-align: left !important;
+ }
+
+ body:has(form#vicidial_form) form center > table[width="460px"] tr:not(:first-child):not(:last-child) td:first-child {
+ margin-bottom: 8px;
+ }
+
+ body:has(form#vicidial_form) form center > table[width="460px"] .sh_text_white {
+ font-size: var(--font-size-h1) !important;
+ }
+
+ body:has(form#vicidial_form) form center > table[width="460px"] tr:first-child td {
+ padding: 12px !important;
+ }
+}
+
+/* ==========================================================================
+ ANIMACIONES
+ ========================================================================== */
+@keyframes login-modern-fadeInUp {
+ from {
+ opacity: 0;
+ transform: translateY(30px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+/* ==========================================================================
+ TIMECLOCK COMPONENT
+ ========================================================================== */
+
+/* Contenedor principal */
+body:has(form#vicidial_form[action*="timeclock"]) {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ min-height: 100vh !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ padding: 15px !important;
+ margin: 0 !important;
+ position: relative !important;
+ width: 100% !important;
+ box-sizing: border-box !important;
+}
+
+/* Ocultar elementos innecesarios */
+body:has(form#vicidial_form[action*="timeclock"]) > table[width="100%"] {
+ display: none !important;
+}
+
+body:has(form#vicidial_form[action*="timeclock"]) > br {
+ display: none !important;
+}
+
+/* Contenedor del formulario */
+body:has(form#vicidial_form[action*="timeclock"]) form {
+ width: 100% !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ min-height: 100vh !important;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+
+body:has(form#vicidial_form[action*="timeclock"]) form > center {
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ width: 100% !important;
+ min-height: 100vh !important;
+ position: relative !important;
+ margin: 0 auto !important;
+ padding: 0 !important;
+ text-align: center !important;
+ left: 0 !important;
+ right: 0 !important;
+}
+
+/* Tabla principal */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] {
+ background: var(--color-bg-white) !important;
+ border-radius: 16px !important;
+ box-shadow: 0 15px 40px var(--shadow-light) !important;
+ overflow: hidden !important;
+ border: none !important;
+ border-collapse: collapse !important;
+ width: 460px !important;
+ max-width: 100% !important;
+ margin: 0 auto !important;
+ display: table !important;
+ box-sizing: border-box !important;
+ position: relative !important;
+ animation: login-modern-fadeInUp 0.6s ease-out !important;
+ left: 50% !important;
+ transform: translateX(-50%) !important;
+}
+
+/* Header - Logo y Título */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:first-child {
+ display: block !important;
+ width: 100% !important;
+ box-sizing: border-box !important;
+}
+
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:first-child td {
+ background: transparent !important;
+ padding: 16px !important;
+ border: none !important;
+ display: block !important;
+ text-align: center !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ margin: 0 !important;
+ box-sizing: border-box !important;
+}
+
+/* Ocultar tabla con width 100% dentro del form center */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="100%"] {
+ display: none !important;
+ width: 0 !important;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+
+/* Contenedor del logo - mostrar nuevo logo */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:first-child td:first-child {
+ border-radius: 0 !important;
+ padding: 16px 16px 8px 16px !important;
+ text-align: center !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ background-image: url('../../vicidial/images/vicidial_admin_web_logo.png?v=2') !important;
+ background-size: 140px auto !important;
+ background-repeat: no-repeat !important;
+ background-position: center !important;
+ min-height: 140px !important;
+ height: 140px !important;
+ position: relative !important;
+ margin-top: 10px !important;
+}
+
+/* Ocultar imagen vieja del logo */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:first-child td:first-child img {
+ display: none !important;
+ visibility: hidden !important;
+ opacity: 0 !important;
+}
+
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:first-child td:last-child {
+ border-radius: 0 !important;
+ padding: 0 16px 8px 16px !important;
+ text-align: center !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+}
+
+/* Título Timeclock - mismo estilo que Agent login (teal, mayúsculas) */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:first-child .sh_text_white {
+ color: var(--color-primary-medium) !important;
+ font-size: var(--font-size-h1) !important;
+ font-weight: 600 !important;
+ letter-spacing: 0.5px !important;
+ text-align: center !important;
+ text-transform: uppercase !important;
+ display: block !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+
+/* Espaciadores */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr td[colspan="2"] font[size="1"] {
+ display: none !important;
+}
+
+/* Filas del formulario */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:not(:first-child):not(:last-child) {
+ display: table-row !important;
+}
+
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:not(:first-child):not(:last-child) td {
+ padding: 12px 16px !important;
+ border: none !important;
+ box-sizing: border-box !important;
+ text-align: center !important;
+}
+
+/* Labels ocultos */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:has(input[name="user"]) td:first-child,
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:has(input[name="pass"]) td:first-child {
+ display: none !important;
+}
+
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:has(input[name="user"]),
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:has(input[name="pass"]) {
+ display: table-row !important;
+}
+
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:has(input[name="user"]) td:last-child,
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] tr:has(input[name="pass"]) td:last-child {
+ text-align: center !important;
+ width: 100% !important;
+ padding-left: 0 !important;
+ padding-right: 0 !important;
+}
+
+/* Inputs */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] input[type="text"],
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] input[type="password"] {
+ padding: 10px 14px !important;
+ border: 2px solid var(--color-bg-light) !important;
+ border-radius: 8px !important;
+ font-size: var(--font-size-h2) !important;
+ font-family: inherit !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ transition: all 0.3s ease !important;
+ box-sizing: border-box !important;
+ width: 100% !important;
+ max-width: 250px !important;
+ display: block !important;
+ margin: 0 auto !important;
+}
+
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] input[type="text"]:focus,
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] input[type="password"]:focus {
+ outline: none !important;
+ border-color: var(--color-primary-light) !important;
+ box-shadow: 0 0 0 3px var(--shadow-primary) !important;
+}
+
+/* Botón Submit */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] input[type="submit"] {
+ background: var(--color-primary-light) !important;
+ color: var(--color-text-light) !important;
+ border: 2px solid var(--color-primary-light) !important;
+ border-radius: 10px !important;
+ padding: 10px 20px !important;
+ font-size: var(--font-size-h2) !important;
+ font-weight: 500 !important;
+ cursor: pointer !important;
+ transition: all 0.3s ease !important;
+ font-family: inherit !important;
+ box-sizing: border-box !important;
+}
+
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] input[type="submit"]:hover {
+ background: var(--color-primary-medium) !important;
+ border-color: var(--color-primary-medium) !important;
+ transform: translateY(-2px) !important;
+ box-shadow: 0 6px 16px var(--shadow-primary) !important;
+}
+
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] input[type="submit"]:active {
+ transform: translateY(0) !important;
+}
+
+/* Versión y Build */
+body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] .body_tiny {
+ color: var(--color-text-dark) !important;
+ font-size: var(--font-size-p2) !important;
+ opacity: 0.7 !important;
+ text-align: center !important;
+ display: block !important;
+ width: 100% !important;
+ padding: 8px 0 !important;
+ margin: 0 !important;
+}
+
+/* Responsive */
+@media (max-width: 480px) {
+ body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] {
+ width: 100% !important;
+ border-radius: 12px !important;
+ }
+
+ body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] input[type="text"],
+ body:has(form#vicidial_form[action*="timeclock"]) form center > table[width="460px"] input[type="password"] {
+ max-width: 100% !important;
+ }
+}
+
+
+
+/* ==========================================================================
+ SIDEBAR - CONTENEDOR PRINCIPAL
+ Solo afecta al componente admin que tiene esta estructura específica
+ ========================================================================== */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) {
+ margin: 0 !important;
+ padding: 0 !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) center {
+ margin: 0 auto !important;
+ padding: 0 !important;
+ width: 100% !important;
+ display: block !important;
+ text-align: center !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] {
+ margin: 0 auto !important;
+ padding: 0 !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ border-spacing: 0 !important;
+ min-height: 100vh !important;
+ display: table !important;
+ table-layout: fixed !important;
+}
+
+/* Fila principal que contiene sidebar y contenido */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] tbody > tr:first-child {
+ height: auto !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] {
+ background: var(--color-bg-white) !important;
+ padding: 20px 5px !important;
+ vertical-align: top;
+ box-sizing: border-box;
+ width: 170px !important;
+ min-width: 170px !important;
+ max-width: 170px !important;
+ border-right: none !important;
+ margin: 0 !important;
+ position: relative;
+ left: 0 !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+}
+
+/* Logo en sidebar */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] img {
+ border-radius: 8px;
+ margin-bottom: 15px;
+ transition: transform 0.3s ease;
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ max-width: 100%;
+ height: auto;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] img:hover {
+ transform: scale(1.05);
+}
+
+/* Título ADMINISTRATION */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] b font {
+ color: var(--color-text-dark) !important;
+ font-size: var(--font-size-h2) !important;
+ font-weight: 600 !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ letter-spacing: 0.3px;
+ display: block;
+ text-align: center;
+
+}
+
+/* Tabla de navegación */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] table {
+ background: transparent !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ border-collapse: collapse;
+ box-sizing: border-box !important;
+}
+
+/* Quitar fondo azul oscuro de las filas de navegación */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] table tr[bgcolor="#015B91"] {
+ background: transparent !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] table tr[bgcolor="#015B91"] td {
+ background: transparent !important;
+}
+
+/* ==========================================================================
+ ITEMS DE NAVEGACIÓN - ESTILO BOTÓN
+ ========================================================================== */
+/* Items normales - Botones verdes */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style {
+ background: var(--color-primary-light) !important;
+ background-color: var(--color-primary-light) !important;
+ padding: 8px 6px !important;
+ border-radius: 8px;
+ transition: all 0.3s ease;
+ cursor: pointer;
+ margin: 3px 0;
+ border: 2px solid var(--color-primary-light) !important;
+ display: block;
+ width: 160px!important;
+ max-width: 160px !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+}
+
+/* Sobrescribir estilos inline del HTML */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] tr .head_style {
+ background: var(--color-primary-light) !important;
+ background-color: var(--color-primary-light) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] tr[bgcolor="#015B91"] .head_style {
+ background: var(--color-primary-light) !important;
+ background-color: var(--color-primary-light) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] tr[bgcolor="#015B91"] .head_style td {
+ background: var(--color-primary-light) !important;
+ background-color: var(--color-primary-light) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style:hover {
+ background: var(--color-primary-light) !important;
+ background-color: var(--color-primary-light) !important;
+ border-color: var(--color-primary-light) !important;
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px rgba(76, 175, 80, 0.3) !important;
+}
+
+/* Sobrescribir hover inline del HTML */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] tr .head_style:hover {
+ background: var(--color-primary-light) !important;
+ background-color: var(--color-primary-light) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style td {
+ padding: 0 !important;
+ border: none !important;
+ background: var(--color-primary-light) !important;
+ background-color: var(--color-primary-light) !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style a {
+ text-decoration: none;
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style font {
+ color: var(--color-text-light) !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 500 !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ word-wrap: break-word !important;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ white-space: nowrap !important;
+ max-width: 100% !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style img {
+ filter: brightness(0) invert(1) !important;
+ margin: 0 !important;
+ width: 14px !important;
+ height: 14px !important;
+}
+
+/* Item seleccionado - Verde más oscuro */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style_selected {
+ background: var(--color-primary-medium) !important;
+ background-color: var(--color-primary-medium) !important;
+ padding: 8px 6px !important;
+ border-radius: 8px;
+ margin: 3px 0;
+ border: 2px solid var(--color-primary-medium) !important;
+ display: block;
+ box-shadow: 0 2px 8px rgba(56, 142, 60, 0.3) !important;
+ width: 160px!important;
+ max-width: 160px!important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+}
+
+/* Sobrescribir estilos inline del HTML para seleccionado */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] tr .head_style_selected {
+ background: var(--color-primary-medium) !important;
+ background-color: var(--color-primary-medium) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] tr .head_style_selected:hover {
+ background: var(--color-primary-medium) !important;
+ background-color: var(--color-primary-medium) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] tr[bgcolor="#015B91"] .head_style_selected {
+ background: var(--color-primary-medium) !important;
+ background-color: var(--color-primary-medium) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] tr[bgcolor="#015B91"] .head_style_selected td {
+ background: var(--color-primary-medium) !important;
+ background-color: var(--color-primary-medium) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style_selected td {
+ padding: 0 !important;
+ border: none !important;
+ background: var(--color-primary-medium) !important;
+ background-color: var(--color-primary-medium) !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style_selected a {
+ text-decoration: none;
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style_selected font {
+ color: var(--color-text-light) !important;
+ font-weight: 600 !important;
+ font-size: var(--font-size-p1) !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ word-wrap: break-word !important;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ white-space: nowrap !important;
+ max-width: 100% !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style_selected img {
+ filter: brightness(0) invert(1) !important;
+ margin: 0 !important;
+ width: 14px !important;
+ height: 14px !important;
+}
+
+/* Líneas horizontales - ocultas */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .horiz_line {
+ display: none !important;
+}
+
+/* ==========================================================================
+ ITEMS DESPLEGABLES DEL MENÚ (SUBMENÚ)
+ ========================================================================== */
+/* Items desplegables normales */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style {
+ background: transparent !important;
+ background-color: transparent !important;
+ padding: 6px 6px 6px 20px !important;
+ border-radius: 6px;
+ transition: all 0.2s ease;
+ cursor: pointer;
+ margin: 2px 0;
+ border-left: 3px solid transparent !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style:hover {
+ background: rgba(76, 175, 80, 0.1) !important;
+ background-color: rgba(76, 175, 80, 0.1) !important;
+ border-left-color: var(--color-primary-light) !important;
+ transform: translateX(3px);
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style td {
+ padding: 0 !important;
+ border: none !important;
+ background: transparent !important;
+ background-color: transparent !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style a {
+ text-decoration: none;
+ display: block;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style font {
+ color: var(--color-text-dark) !important;
+ font-size: var(--font-size-p2) !important;
+ font-weight: 400 !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ word-wrap: break-word !important;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ white-space: nowrap !important;
+ max-width: 100% !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style a font {
+ color: var(--color-text-dark) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style:hover font {
+ color: var(--color-primary-light) !important;
+ font-weight: 500 !important;
+}
+
+/* Item desplegable seleccionado */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style_selected {
+ background: rgba(76, 175, 80, 0.15) !important;
+ background-color: rgba(76, 175, 80, 0.15) !important;
+ padding: 6px 6px 6px 20px !important;
+ border-radius: 6px;
+ margin: 2px 0;
+ border-left: 3px solid var(--color-primary-light) !important;
+ box-shadow: 0 1px 4px rgba(76, 175, 80, 0.2) !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style_selected:hover {
+ background: rgba(76, 175, 80, 0.2) !important;
+ background-color: rgba(76, 175, 80, 0.2) !important;
+ border-left-color: var(--color-primary-medium) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style_selected td {
+ padding: 0 !important;
+ border: none !important;
+ background: transparent !important;
+ background-color: transparent !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style_selected a {
+ text-decoration: none;
+ display: block;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style_selected font {
+ color: var(--color-primary-medium) !important;
+ font-size: var(--font-size-p2) !important;
+ font-weight: 600 !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ word-wrap: break-word !important;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ white-space: nowrap !important;
+ max-width: 100% !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style_selected a font {
+ color: var(--color-primary-medium) !important;
+}
+
+/* ==========================================================================
+ ICONOS EN ITEMS DESPLEGABLES DEL MENÚ
+ ========================================================================== */
+/* Iconos en items desplegables normales */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style img {
+ margin-right: 6px !important;
+ vertical-align: middle !important;
+ display: inline-block !important;
+ transition: transform 0.2s ease;
+ filter: opacity(0.7);
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style:hover img {
+ transform: scale(1.1);
+ filter: opacity(1);
+}
+
+/* Iconos en items desplegables seleccionados */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style_selected img {
+ margin-right: 6px !important;
+ vertical-align: middle !important;
+ display: inline-block !important;
+ filter: opacity(1);
+}
+
+/* Ocultar iconos blank.gif (espacios en blanco) */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style img[src*="blank.gif"],
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .subhead_style_selected img[src*="blank.gif"] {
+ display: none !important;
+}
+
+/* Item de menú admin seleccionado */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .adminmenu_style_selected {
+ background: rgba(76, 175, 80, 0.15) !important;
+ background-color: rgba(76, 175, 80, 0.15) !important;
+ padding: 6px 6px 6px 20px !important;
+ border-radius: 6px;
+ margin: 2px 0;
+ border-left: 3px solid var(--color-primary-light) !important;
+ transition: all 0.2s ease;
+ cursor: pointer;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .adminmenu_style_selected:hover {
+ background: rgba(76, 175, 80, 0.2) !important;
+ background-color: rgba(76, 175, 80, 0.2) !important;
+ border-left-color: var(--color-primary-medium) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .adminmenu_style_selected td {
+ padding: 0 !important;
+ border: none !important;
+ background: transparent !important;
+ background-color: transparent !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .adminmenu_style_selected a {
+ text-decoration: none;
+ display: block;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .adminmenu_style_selected font {
+ color: var(--color-primary-medium) !important;
+ font-size: var(--font-size-p2) !important;
+ font-weight: 600 !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .adminmenu_style_selected a font {
+ color: var(--color-primary-medium) !important;
+}
+
+/* ==========================================================================
+ CONTENIDO PRINCIPAL
+ ========================================================================== */
+/* Celda de contenido principal - se ajusta al contenido y mantiene centrado */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="870"][bgcolor="#D9E6FE"],
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="770"][bgcolor="#D9E6FE"] {
+ vertical-align: top !important;
+ padding: 0 !important;
+ width: auto !important;
+ min-width: 0 !important;
+}
+
+/* Tabla de navegación superior dentro del contenido - siempre centrada */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="#D9E6FE"][cellpadding="2"] {
+ margin: 0 auto !important;
+ width: 100% !important;
+ max-width: 100% !important;
+}
+
+/* Asegurar que las tablas internas también estén centradas */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"] center {
+ text-align: center !important;
+ margin: 0 auto !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"] table {
+ margin: 0 auto !important;
+}
+
+/* ==========================================================================
+ ICONOS EN CONTENIDO PRINCIPAL
+ ========================================================================== */
+/* Iconos grandes en tarjetas de menú (42x42) */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] img[width="42"][height="42"] {
+ border-radius: 8px;
+ padding: 4px;
+ background: rgba(76, 175, 80, 0.1);
+ transition: all 0.3s ease;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] .adminmenu_style_selected:hover img[width="42"][height="42"] {
+ background: rgba(76, 175, 80, 0.2);
+ transform: scale(1.05);
+ box-shadow: 0 2px 8px rgba(76, 175, 80, 0.3);
+}
+
+/* Iconos pequeños en items de menú (11x11) */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] .adminmenu_style_selected img[width="11"][height="11"] {
+ margin-right: 6px !important;
+ vertical-align: middle !important;
+ display: inline-block !important;
+ transition: transform 0.2s ease;
+ filter: opacity(0.8);
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] .adminmenu_style_selected:hover img[width="11"][height="11"] {
+ transform: scale(1.15);
+ filter: opacity(1);
+}
+
+/* Ocultar iconos blank.gif en contenido principal */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] .adminmenu_style_selected img[src*="blank.gif"] {
+ display: none !important;
+}
+
+/* Estilos para tarjetas de menú con iconos */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] .adminmenu_style_selected {
+ border-radius: 8px;
+ padding: 12px !important;
+ margin: 8px 0 !important;
+ background: var(--bg-white-transparent) !important;
+ background-color: var(--bg-white-transparent) !important;
+ border: 1px solid rgba(76, 175, 80, 0.2) !important;
+ transition: all 0.3s ease;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] .adminmenu_style_selected:hover {
+ background: rgba(76, 175, 80, 0.1) !important;
+ background-color: rgba(76, 175, 80, 0.1) !important;
+ border-color: rgba(76, 175, 80, 0.4) !important;
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px rgba(76, 175, 80, 0.2);
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] .adminmenu_style_selected td {
+ padding: 4px 8px !important;
+ vertical-align: middle !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] .adminmenu_style_selected a {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ text-decoration: none;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] .adminmenu_style_selected span {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ font-size: var(--font-size-h2) !important;
+ font-weight: 600 !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[width="870"][bgcolor="#D9E6FE"] .adminmenu_style_selected font {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ font-size: var(--font-size-p2) !important;
+ color: var(--color-text-dark) !important;
+}
+
+/* ==========================================================================
+ FILAS DE TABLAS EN CONTENIDO PRINCIPAL
+ ========================================================================== */
+/* Filas de tabla - variante Y (alternadas) */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_y {
+ background: #f8f9fa !important;
+ background-color: #f8f9fa !important;
+ transition: all 0.2s ease;
+ cursor: pointer;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_y:hover {
+ background: rgba(76, 175, 80, 0.1) !important;
+ background-color: rgba(76, 175, 80, 0.1) !important;
+ transform: translateX(2px);
+ box-shadow: 0 2px 6px rgba(76, 175, 80, 0.15) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_y td {
+ padding: 10px 8px !important;
+ border-bottom: 1px solid #e0e0e0 !important;
+ vertical-align: middle !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_y font {
+ color: var(--color-text-dark) !important;
+ font-size: var(--font-size-p1) !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_y a {
+ color: var(--color-primary-light) !important;
+ text-decoration: none;
+ font-weight: 500;
+ transition: color 0.2s ease;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_y a:hover {
+ color: var(--color-primary-medium) !important;
+ text-decoration: underline;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_y a font {
+ color: var(--color-primary-light) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_y a:hover font {
+ color: var(--color-primary-medium) !important;
+}
+
+/* Filas de tabla - variante X */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_x {
+ background: var(--color-bg-white) !important;
+ background-color: var(--color-bg-white) !important;
+ transition: all 0.2s ease;
+ cursor: pointer;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_x:hover {
+ background: rgba(76, 175, 80, 0.08) !important;
+ background-color: rgba(76, 175, 80, 0.08) !important;
+ transform: translateX(2px);
+ box-shadow: 0 2px 6px rgba(76, 175, 80, 0.12) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_x td {
+ padding: 10px 8px !important;
+ border-bottom: 1px solid #e0e0e0 !important;
+ vertical-align: middle !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_x font {
+ color: var(--color-text-dark) !important;
+ font-size: var(--font-size-p1) !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_x a {
+ color: var(--color-primary-light) !important;
+ text-decoration: none;
+ font-weight: 500;
+ transition: color 0.2s ease;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_x a:hover {
+ color: var(--color-primary-medium) !important;
+ text-decoration: underline;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_x a font {
+ color: var(--color-primary-light) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) .records_list_x a:hover font {
+ color: var(--color-primary-light) !important;
+}
+
+/* Estilos para encabezados de tabla en contenido principal */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="black"] {
+ border-radius: 8px 8px 0 0 !important;
+ overflow: hidden;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="black"] td {
+ padding: 12px 8px !important;
+ background: var(--color-text-dark) !important;
+ background-color: var(--color-text-dark) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="black"] font {
+ color: var(--color-text-light) !important;
+ font-weight: 600 !important;
+ font-size: var(--font-size-p2) !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="black"] a {
+ color: var(--color-text-light) !important;
+ text-decoration: none;
+ transition: color 0.2s ease;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="black"] a:hover {
+ color: var(--color-primary-light) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="black"] a font {
+ color: var(--color-text-light) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="black"] a:hover font {
+ color: var(--color-primary-light) !important;
+}
+
+/* ==========================================================================
+ FOOTER DEL SIDEBAR
+ ========================================================================== */
+/* Footer con versión y copyright */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] tr:last-child td[bgcolor="#015B91"] {
+ background: var(--color-bg-white) !important;
+ background-color: var(--color-bg-white) !important;
+ padding: 0px 10px 1px 10px !important;
+ text-align: center;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] tr:last-child td[bgcolor="#015B91"] font {
+ color: var(--color-primary-light) !important;
+ font-size: var(--font-size-p2) !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] tr:last-child td[bgcolor="#015B91"] a {
+ color: var(--color-primary-light) !important;
+ text-decoration: none;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] tr:last-child td[bgcolor="#015B91"] a font {
+ color: var(--color-primary-light) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] tr:last-child td[bgcolor="#015B91"] a:hover {
+ color: var(--color-primary-medium) !important;
+ text-decoration: underline;
+}
+
+/* ==========================================================================
+ SERVER STATS AND REPORTS (página Reports - admin.php?ADD=999999)
+ ========================================================================== */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) td[align="LEFT"][colspan="2"] {
+ padding: 12px 16px !important;
+ max-width: 1200px !important;
+ margin: 0 auto !important;
+ box-sizing: border-box !important;
+}
+
+/* Contenedor principal de la página Reports */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) td[align="LEFT"][colspan="2"] > table {
+ width: 100% !important;
+ max-width: 100% !important;
+}
+
+/* Cabecera: icono + título "Server Stats and Reports" */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) img[alt="Reports"][src*="icon_black_reports"] {
+ margin-right: 8px !important;
+ vertical-align: middle !important;
+ border-radius: 6px !important;
+}
+
+/* Reducir espacio vertical de en la página Reports */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"] br {
+ display: block !important;
+ margin: 2px 0 !important;
+ line-height: 0.2 !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) td[align="LEFT"][colspan="2"] font[size="4"] b {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;
+ font-size: 1.2rem !important;
+ color: var(--color-primary-dark) !important;
+ display: inline-block !important;
+ margin-bottom: 2px !important;
+}
+
+/* Tabla de columnas (Real-Time | Inbound/Outbound | Agent Reports) */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"][cellspacing="0"] {
+ width: 100% !important;
+ max-width: 100% !important;
+ border-collapse: separate !important;
+ border-spacing: 0 0 !important;
+ margin: 8px 0 !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"][cellspacing="0"] td[valign="TOP"] {
+ padding: 8px 12px !important;
+ vertical-align: top !important;
+ width: 33.33% !important;
+ max-width: 380px !important;
+}
+
+/* Columnas espaciadoras vacías (solo ) – colapsar para que no ocupen espacio */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"][cellspacing="0"] td[valign="TOP"]:nth-child(1),
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"][cellspacing="0"] td[valign="TOP"]:nth-child(3) {
+ width: 0 !important;
+ min-width: 0 !important;
+ max-width: 0 !important;
+ padding: 0 !important;
+ overflow: hidden !important;
+ border: none !important;
+ visibility: hidden !important;
+}
+
+/* Columnas con contenido: repartir el espacio al 50 % cada una */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"][cellspacing="0"] td[valign="TOP"]:nth-child(2),
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"][cellspacing="0"] td[valign="TOP"]:nth-child(4) {
+ width: 50% !important;
+ max-width: none !important;
+}
+
+/* Títulos de sección (Real-Time Reports, Agent Reports, etc.) */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"] b {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;
+ font-size: var(--font-size-p2) !important;
+ color: var(--color-primary-dark) !important;
+ display: block !important;
+ margin: 6px 0 3px 0 !important;
+ padding-bottom: 2px !important;
+ border-bottom: 1px solid var(--color-bg-lighter) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"] b:first-of-type {
+ margin-top: 0 !important;
+}
+
+/* Listas de enlaces */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"] ul {
+ list-style: none !important;
+ margin: 0 0 6px 0 !important;
+ padding: 0 !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"] ul li {
+ margin: 1px 0 !important;
+ padding: 0 !important;
+ line-height: 1.3 !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"] ul li a,
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"] ul li a font {
+ color: var(--color-text-dark) !important;
+ text-decoration: none !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;
+ font-size: var(--font-size-p2) !important;
+ transition: color 0.2s ease !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"] ul li a:hover,
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) table[cellpadding="5"] ul li a:hover font {
+ color: var(--color-primary-medium) !important;
+ text-decoration: underline !important;
+}
+
+/* Tabla de servidores (SERVER | DESCRIPTION | IP | ...) */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) pre {
+ margin: 10px 0 !important;
+ padding: 0 !important;
+ overflow-x: auto !important;
+ font-family: inherit !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) pre table[border="1"] {
+ width: 100% !important;
+ max-width: 100% !important;
+ border-collapse: collapse !important;
+ border-radius: 8px !important;
+ overflow: hidden !important;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) pre table[border="1"] td,
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) pre table[border="1"] th {
+ padding: 5px 8px !important;
+ border: 1px solid var(--color-bg-lighter) !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;
+ font-size: var(--font-size-p2) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) pre table[border="1"] tr[bgcolor="#B6D3FC"] td {
+ background: var(--color-bg-lighter) !important;
+ background-color: var(--color-bg-lighter) !important;
+ font-weight: 600 !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) pre table[border="1"] tr[bgcolor="#B1E4BB"] td {
+ background: var(--color-bg-white) !important;
+ background-color: var(--color-bg-white) !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) pre table[border="1"] a,
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) pre table[border="1"] a font {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+}
+
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) pre table[border="1"] a:hover {
+ text-decoration: underline !important;
+}
+
+/* Enlace Admin Utilities al final */
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) pre + font a[href*="ADD=999994"],
+body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"]:has(img[src*="icon_black_reports"]) a[href*="ADD=999994"] font {
+ color: var(--color-primary-medium) !important;
+ font-size: var(--font-size-p2) !important;
+}
+
+/* ==========================================================================
+ RESPONSIVE
+ ========================================================================== */
+@media (max-width: 768px) {
+ /* Tabla principal - mantener como tabla pero ajustar anchos */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] {
+ width: 100% !important;
+ max-width: 100% !important;
+ table-layout: auto !important;
+ }
+
+ /* Sidebar - reducir ancho para que quepa junto al contenido */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] {
+ width: 140px !important;
+ min-width: 140px !important;
+ max-width: 140px !important;
+ padding: 15px 5px !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+ }
+
+ /* Tabla de navegación dentro del sidebar - ajustar ancho */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] table {
+ width: 100% !important;
+ max-width: 100% !important;
+ }
+
+ /* Contenido principal - ajustar ancho para que quepa junto al sidebar */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="870"][bgcolor="#D9E6FE"],
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="770"][bgcolor="#D9E6FE"] {
+ width: calc(100% - 140px) !important;
+ min-width: 0 !important;
+ max-width: calc(100% - 140px) !important;
+ padding: 5px !important;
+ box-sizing: border-box !important;
+ }
+
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] table {
+ margin-top: 10px;
+ }
+
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style,
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] .head_style_selected {
+ padding: 6px 8px !important;
+ font-size: var(--font-size-p2) !important;
+ }
+
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] b font {
+ font-size: var(--font-size-p1) !important;
+ }
+}
+
+/* ==========================================================================
+ ESTILOS MODERNOS PARA BARRA DE NAVEGACIÓN SUPERIOR
+ ========================================================================== */
+
+/* Tabla con fondo azul #D9E6FE - cambiar a blanco (selector general con máxima prioridad) */
+table[bgcolor="#D9E6FE"] {
+ background: #ffffff !important;
+ background-color: #ffffff !important;
+}
+
+/* Tabla específica con height="15" */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"][height="15"] {
+ background: #ffffff !important;
+ background-color: #ffffff !important;
+}
+
+/* Celdas dentro de tablas con bgcolor="#D9E6FE" */
+table[bgcolor="#D9E6FE"] td {
+ background: #ffffff !important;
+ background-color: #ffffff !important;
+}
+
+/* Celdas td individuales con bgcolor="#D9E6FE" - cambiar a blanco */
+td[bgcolor="#D9E6FE"],
+td[bgcolor="#d9e6fe"] {
+ background: #ffffff !important;
+ background-color: #ffffff !important;
+}
+
+/* Tabla con fondo azul #d3e0f7 - cambiar a blanco */
+table[bgcolor="#d3e0f7"],
+table[bgcolor="#D3E0F7"] {
+ background: #ffffff !important;
+ background-color: #ffffff !important;
+}
+
+/* Celdas con fondo azul #d3e0f7 - cambiar a blanco */
+td[bgcolor="#d3e0f7"],
+td[bgcolor="#D3E0F7"],
+table[bgcolor="#d3e0f7"] td,
+table[bgcolor="#D3E0F7"] td {
+ background: #ffffff !important;
+ background-color: #ffffff !important;
+}
+
+/* Estilos para la barra de navegación superior (HOME | Timeclock | Chat | Logout) */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] {
+ background: var(--color-bg-white) !important;
+ box-shadow: none !important;
+ border-bottom: none !important;
+ border-left: none !important;
+ padding: 16px 24px !important;
+ height: auto !important;
+ min-height: 60px !important;
+ position: relative !important;
+ overflow: hidden !important;
+}
+
+/* Efecto decorativo de brillo sutil - ajustado para fondo blanco */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"]::before {
+ content: '' !important;
+ position: absolute !important;
+ top: 0 !important;
+ left: -100% !important;
+ width: 100% !important;
+ height: 100% !important;
+ background: linear-gradient(90deg, transparent, var(--bg-decorative-1), transparent) !important;
+ animation: shimmer 3s infinite !important;
+}
+
+@keyframes shimmer {
+ 0% { left: -100%; }
+ 100% { left: 100%; }
+}
+
+/* Estilos para las celdas de la barra de navegación */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td {
+ background: transparent !important;
+ padding: 1px 20px !important;
+ vertical-align: middle !important;
+ position: relative !important;
+ z-index: 1 !important;
+}
+
+/* Estilos para el texto de navegación (HOME, Timeclock, etc.) */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] font[face="ARIAL,HELVETICA"][color="WHITE"] {
+ color: var(--color-primary-medium) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-weight: 700 !important;
+ text-shadow: none !important;
+ letter-spacing: 0.5px !important;
+ font-size: var(--font-size-p1) !important;
+}
+
+/* Separador "|" con estilo moderno - todos los font dentro del td izquierdo */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="LEFT"] font[face="ARIAL,HELVETICA"][color="WHITE"][size="1"] {
+ color: var(--color-primary-medium) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-weight: 700 !important;
+ text-shadow: none !important;
+ opacity: 1 !important;
+ margin: 0 6px !important;
+}
+
+/* Asegurar que el nombre de usuario (6666) tenga el mismo color */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="LEFT"] font[face="ARIAL,HELVETICA"][color="WHITE"][size="1"] font[face="ARIAL,HELVETICA"][color="WHITE"][size="1"] {
+ color: var(--color-primary-medium) !important;
+ font-weight: 700 !important;
+ opacity: 1 !important;
+}
+
+/* Estilos para la fecha/hora en la derecha */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="RIGHT"] {
+ text-align: right !important;
+ position: relative !important;
+ z-index: 1 !important;
+}
+
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="RIGHT"] font {
+ color: var(--color-primary-medium) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-weight: 600 !important;
+ text-shadow: none !important;
+ letter-spacing: 0.8px !important;
+ font-size: var(--font-size-p1) !important;
+ background: var(--bg-decorative-1) !important;
+ padding: 6px 12px !important;
+ border-radius: 20px !important;
+ display: inline-block !important;
+ border: 1px solid var(--color-primary-lightest) !important;
+}
+
+/* Ocultar los dos tr vacíos siguientes */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:nth-child(2)[bgcolor="#015B91"] {
+ display: none !important;
+ visibility: hidden !important;
+ height: 0 !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ line-height: 0 !important;
+}
+
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:nth-child(3)[bgcolor="#E6E6E6"] {
+ display: none !important;
+ visibility: hidden !important;
+ height: 0 !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ line-height: 0 !important;
+}
+
+/* Ocultar la barra verde (td con colspan="2" height="2" bgcolor="#015B91") */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr td[align="LEFT"][colspan="2"][height="2"][bgcolor="#015B91"],
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr td[colspan="2"][height="2"][bgcolor="#015B91"] {
+ display: none !important;
+ visibility: hidden !important;
+ height: 0 !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ line-height: 0 !important;
+ border: none !important;
+}
+
+/* Ocultar el tr que contiene la barra verde */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:has(td[colspan="2"][height="2"][bgcolor="#015B91"]),
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:has(td[align="LEFT"][colspan="2"][height="2"][bgcolor="#015B91"]) {
+ display: none !important;
+ visibility: hidden !important;
+ height: 0 !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ line-height: 0 !important;
+}
+
+/* Mejora adicional: hover effect en los elementos de navegación (si fueran clicables) */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="LEFT"] {
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
+}
+
+/* Efecto hover moderno para los elementos de texto de navegación */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="LEFT"] font[face="ARIAL,HELVETICA"][color="WHITE"][size="1"] {
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
+ position: relative !important;
+ display: inline-block !important;
+}
+
+/* Efecto de resaltado sutil al pasar el mouse (si fuera interactivo) */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="LEFT"] font[face="ARIAL,HELVETICA"][color="WHITE"][size="1"]:hover {
+ color: var(--color-primary-medium) !important;
+ transform: translateY(-1px) !important;
+}
+
+/* ==========================================================================
+ RESPONSIVE - BARRA DE NAVEGACIÓN SUPERIOR
+ ========================================================================== */
+
+/* Prevenir que la fecha/hora se apile y mantener altura fija */
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] {
+ white-space: nowrap !important;
+ overflow: hidden !important;
+}
+
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="RIGHT"] {
+ white-space: nowrap !important;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+}
+
+table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="RIGHT"] font {
+ white-space: nowrap !important;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ max-width: 100% !important;
+ display: inline-block !important;
+}
+
+/* Media queries para pantallas pequeñas */
+@media (max-width: 768px) {
+ /* Mantener altura fija y reducir padding */
+ table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] {
+ min-height: 50px !important;
+ max-height: 50px !important;
+ height: 50px !important;
+ padding: 8px 12px !important;
+ }
+
+ /* Reducir tamaño de fuente de fecha/hora */
+ table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="RIGHT"] font {
+ font-size: var(--font-size-p2) !important;
+ padding: 4px 8px !important;
+ letter-spacing: 0.3px !important;
+ }
+
+ /* Reducir tamaño de fuente de navegación */
+ table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="LEFT"] font[face="ARIAL,HELVETICA"][color="WHITE"][size="1"] {
+ font-size: var(--font-size-p2) !important;
+ }
+}
+
+@media (max-width: 480px) {
+ /* Altura aún más pequeña en móviles */
+ table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] {
+ min-height: 45px !important;
+ max-height: 45px !important;
+ height: 45px !important;
+ padding: 6px 10px !important;
+ }
+
+ /* Ocultar fecha completa, mostrar solo hora si es necesario */
+ table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="RIGHT"] font {
+ font-size: var(--font-size-p2) !important;
+ padding: 3px 6px !important;
+ }
+
+ /* Reducir más el texto de navegación */
+ table[bgcolor="#D9E6FE"][cellpadding="2"][cellspacing="0"][width="870"] tbody > tr:first-child[bgcolor="#015B91"] td[align="LEFT"] font[face="ARIAL,HELVETICA"][color="WHITE"][size="1"] {
+ font-size: var(--font-size-p2) !important;
+ margin: 0 3px !important;
+ }
+}
+
+/* ==========================================================================
+ ESTILOS MODERNOS PARA COMPONENTE DE ESTADÍSTICAS
+ ========================================================================== */
+
+/* Tabla principal de estadísticas (Agents Logged In, etc.) */
+table[width="700"][cellpadding="6"][cellspacing="0"] {
+ background: var(--color-bg-white) !important;
+ border-radius: 8px !important;
+ box-shadow: 0 2px 8px var(--shadow-light) !important;
+ overflow: hidden !important;
+ margin: 10px auto !important;
+ border-collapse: separate !important;
+ border-spacing: 0 !important;
+ width: 100% !important;
+ max-width: 800px !important;
+ table-layout: fixed !important;
+}
+
+/* Celdas de la tabla de estadísticas principales - Recuadro unificado */
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"] {
+ background: transparent !important;
+ border: none !important;
+ border-radius: 8px !important;
+ padding: 12px 8px !important;
+ text-align: center !important;
+ vertical-align: middle !important;
+
+ width: auto !important;
+ min-width: 0 !important;
+ max-width: 25% !important;
+ box-shadow: 0 1px 4px var(--shadow-light) !important;
+ position: relative !important;
+}
+
+/* Celdas con iconos (rowspan="2") - recuadro unificado completo */
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"][rowspan="2"] {
+ width: 33.33% !important;
+ min-width: 0 !important;
+ max-width: 33.33% !important;
+ padding: 12px 6px !important;
+ vertical-align: center !important;
+ border-radius: 8px 0 0 8px !important;
+}
+
+/* Celdas con texto (primera fila, sin rowspan) - unificar con el recuadro */
+table[width="700"][cellpadding="6"][cellspacing="0"] tr:first-child td[bgcolor="#015B91"]:not([rowspan]) {
+ padding: 12px 6px 4px !important;
+ vertical-align: top !important;
+ border-left: none !important;
+ border-right: none !important;
+ border-top: none !important;
+ border-bottom: none !important;
+ box-shadow: none !important;
+ border-radius: 0 8px 0 0 !important;
+ background: transparent !important;
+ width: 66.67% !important;
+ max-width: 66.67% !important;
+}
+
+/* Celdas con números (segunda fila) - unificar con el recuadro */
+table[width="700"][cellpadding="6"][cellspacing="0"] tr:nth-child(2) td[bgcolor="#015B91"] {
+ padding: 4px 6px 12px !important;
+ vertical-align: top !important;
+ border-left: none !important;
+ border-right: none !important;
+ border-top: none !important;
+ box-shadow: none !important;
+ border-bottom: none !important;
+ border-radius: 0 0 8px 0 !important;
+ background: transparent !important;
+ width: 66.67% !important;
+ max-width: 66.67% !important;
+}
+
+/* Unificar bordes - el recuadro completo tiene bordes solo en las celdas con rowspan */
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"][rowspan="2"] + td[bgcolor="#015B91"] {
+ border-left: none !important;
+}
+
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"][rowspan="2"] ~ td[bgcolor="#015B91"]:not([rowspan]) {
+ border-left: none !important;
+}
+
+/* Asegurar que el número esté en la misma columna que el texto - sin bordes separados */
+table[width="700"][cellpadding="6"][cellspacing="0"] tr:nth-child(2) td[bgcolor="#015B91"]:nth-child(2),
+table[width="700"][cellpadding="6"][cellspacing="0"] tr:nth-child(2) td[bgcolor="#015B91"]:nth-child(4),
+table[width="700"][cellpadding="6"][cellspacing="0"] tr:nth-child(2) td[bgcolor="#015B91"]:nth-child(6),
+table[width="700"][cellpadding="6"][cellspacing="0"] tr:nth-child(2) td[bgcolor="#015B91"]:nth-child(8) {
+ border-left: none !important;
+}
+
+/* Texto de las estadísticas principales - mucho más grande - selectores más específicos y directos */
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"] font[style*="HELVETICA"][style*="color:white"],
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"][align="center"] font[style*="font-size:11"],
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"] font[style*="font-size:11"][style*="color:white"],
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:first-child td[bgcolor="#015B91"]:not([rowspan]) font,
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"][valign="middle"] font {
+ color: var(--color-primary-dark) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-weight: 700 !important;
+ text-shadow: none !important;
+ font-size: var(--font-size-h1) !important;
+ display: block !important;
+ margin-top: 0 !important;
+ line-height: 1.3 !important;
+ text-align: center !important;
+}
+
+/* Selector universal para cualquier font dentro de las celdas de estadísticas (primera fila) */
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody > tr:first-child > td[bgcolor="#015B91"]:not([rowspan]) > font {
+ color: var(--color-primary-dark) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-weight: 700 !important;
+ text-shadow: none !important;
+ font-size: var(--font-size-h1) !important;
+ display: block !important;
+ margin-top: 4px !important;
+ line-height: 1.3 !important;
+ text-align: center !important;
+ letter-spacing: 0.2px !important;
+ position: relative !important;
+ z-index: 1 !important;
+}
+
+/* Selector adicional con todos los atributos para máxima especificidad */
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:first-child td[align="center"][valign="middle"][bgcolor="#015B91"]:not([rowspan]) font[style*="font-family:HELVETICA"][style*="font-size:11"][style*="color:white"][style*="font-weight:bold"] {
+ font-size: var(--font-size-h1) !important;
+ color: var(--color-primary-dark) !important;
+ font-weight: 700 !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ display: block !important;
+ text-align: center !important;
+ margin-top: 8px !important;
+ letter-spacing: 0.3px !important;
+ position: relative !important;
+ z-index: 1 !important;
+}
+
+/* Números grandes de estadísticas - tamaño razonable */
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"] font[style*="font-size:18"],
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"] font[style*="font-size:18"][style*="color:white"],
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:nth-child(2) td[bgcolor="#015B91"] font,
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:nth-child(2) td[bgcolor="#015B91"] font[style*="font-size:18"],
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:nth-child(2) td[bgcolor="#015B91"] font[style*="color:white"] {
+ font-size: var(--font-size-h1) !important;
+ font-weight: 700 !important;
+ color: var(--color-primary-dark) !important;
+ letter-spacing: 0px !important;
+ display: block !important;
+ line-height: 1.2 !important;
+ text-align: center !important;
+ margin-top: 2px !important;
+ background: linear-gradient(135deg, var(--color-primary-dark) 0%, var(--color-primary-medium) 100%) !important;
+ -webkit-background-clip: text !important;
+ -webkit-text-fill-color: transparent !important;
+ background-clip: text !important;
+ position: relative !important;
+ z-index: 1 !important;
+}
+
+/* Imágenes de iconos - estilo simple sin efectos */
+/* Eliminar fondo de iconos de 42x42 en tabla de estadísticas */
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"] img[width="42"][height="42"] {
+ background: transparent !important;
+ background-color: transparent !important;
+ padding: 0 !important;
+ border-radius: 0 !important;
+ box-shadow: none !important;
+}
+
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"][rowspan="2"] img {
+ filter: brightness(0) saturate(100%) invert(37%) sepia(89%) saturate(1000%) hue-rotate(140deg) brightness(0.7) !important;
+ opacity: 1 !important;
+ margin-bottom: 4px !important;
+ display: block !important;
+ margin-left: auto !important;
+ margin-right: auto !important;
+ width: 40px !important;
+ height: 40px !important;
+ background: transparent !important;
+ background-color: transparent !important;
+ padding: 0 !important;
+ border-radius: 0 !important;
+}
+
+table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"] img {
+ filter: brightness(0) saturate(100%) invert(37%) sepia(89%) saturate(1000%) hue-rotate(140deg) brightness(0.7) !important;
+ opacity: 1 !important;
+ margin-bottom: 4px !important;
+ display: block !important;
+ margin-left: auto !important;
+ margin-right: auto !important;
+ width: 28px !important;
+ height: 28px !important;
+ background: transparent !important;
+ background-color: transparent !important;
+ padding: 0 !important;
+ border-radius: 0 !important;
+}
+
+/* Espaciadores entre tarjetas */
+table[width="700"][cellpadding="6"][cellspacing="0"] td[width="10"] {
+ width: 4px !important;
+ padding: 0 !important;
+ background: transparent !important;
+ border: none !important;
+}
+
+/* Tabla System Summary */
+table[width="700"][cellspacing="2"] {
+ background: var(--color-bg-white) !important;
+ border-radius: 12px !important;
+ box-shadow: 0 2px 12px var(--shadow-light) !important;
+ overflow: visible !important;
+ margin: 20px auto !important;
+ border-collapse: separate !important;
+ border-spacing: 0 !important;
+ width: 100% !important;
+ max-width: 700px !important;
+}
+
+/* Eliminar scrollbar adicional en contenedores de System Summary */
+body:has(table[width="700"][cellspacing="2"]) {
+ overflow-x: visible !important;
+ overflow-y: visible !important;
+}
+
+/* Contenedor principal - eliminar scrollbars */
+body:has(table[width="700"][cellspacing="2"]) td[width="870"][bgcolor="#D9E6FE"],
+body:has(table[width="700"][cellspacing="2"]) td[bgcolor="#D9E6FE"],
+body:has(table[width="700"][cellspacing="0"][cellpadding="1"]) td[width="870"][bgcolor="#D9E6FE"],
+body:has(table[width="700"][cellspacing="0"][cellpadding="1"]) td[bgcolor="#D9E6FE"] {
+ overflow: visible !important;
+ overflow-x: visible !important;
+ overflow-y: visible !important;
+}
+
+/* Eliminar scrollbar en elementos PRE dentro de System Summary */
+body:has(table[width="700"][cellspacing="2"]) pre,
+body:has(table[width="700"][cellspacing="0"][cellpadding="1"]) pre {
+ overflow: visible !important;
+ overflow-x: visible !important;
+ overflow-y: visible !important;
+}
+
+/* Eliminar scrollbar en tablas contenedoras */
+body:has(table[width="700"][cellspacing="2"]) table,
+body:has(table[width="700"][cellspacing="0"][cellpadding="1"]) table {
+ overflow: visible !important;
+}
+
+/* Título System Summary */
+table[width="700"][cellspacing="2"] tr:first-child td {
+ background: transparent !important;
+ padding: 16px 20px 12px !important;
+ border-bottom: 2px solid var(--color-primary-lightest) !important;
+}
+
+table[width="700"][cellspacing="2"] tr:first-child font[style*="HELVETICA"][style*="color:black"] {
+ color: var(--color-primary-dark) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-size: var(--font-size-h1) !important;
+ font-weight: 700 !important;
+ letter-spacing: 0.5px !important;
+}
+
+/* Encabezado de System Summary (Records, Active, etc.) */
+table[width="700"][cellspacing="2"] tr[bgcolor="black"] {
+ background: linear-gradient(135deg, var(--color-primary-dark) 0%, var(--color-primary-medium) 100%) !important;
+}
+
+table[width="700"][cellspacing="2"] tr[bgcolor="black"] td {
+ background: transparent !important;
+ padding: 12px 16px !important;
+ border: none !important;
+}
+
+table[width="700"][cellspacing="2"] tr[bgcolor="black"] font[style*="HELVETICA"][style*="color:white"] {
+ color: var(--color-text-light) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-weight: 600 !important;
+ font-size: var(--font-size-h2) !important;
+ letter-spacing: 0.3px !important;
+}
+
+/* Filas de datos System Summary */
+table[width="700"][cellspacing="2"] tr[bgcolor="#B6D3FC"] {
+ background: var(--color-bg-white) !important;
+ border-bottom: 1px solid var(--bg-decorative-1) !important;
+ transition: background-color 0.2s ease !important;
+}
+
+table[width="700"][cellspacing="2"] tr[bgcolor="#B6D3FC"]:hover {
+ background: var(--bg-decorative-1) !important;
+}
+
+table[width="700"][cellspacing="2"] tr[bgcolor="#B6D3FC"] td {
+ background: transparent !important;
+ padding: 12px 16px !important;
+ border: none !important;
+}
+
+table[width="700"][cellspacing="2"] tr[bgcolor="#B6D3FC"] font[color="black"] {
+ color: var(--color-text-dark) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-weight: 500 !important;
+ font-size: var(--font-size-h2) !important;
+}
+
+table[width="700"][cellspacing="2"] tr[bgcolor="#B6D3FC"] b {
+ color: var(--color-primary-medium) !important;
+ font-weight: 700 !important;
+ font-size: var(--font-size-h2) !important;
+}
+
+/* Tablas Total Stats (Today y Yesterday) */
+table[width="700"][cellspacing="0"][cellpadding="1"] {
+ background: var(--color-bg-white) !important;
+ border-radius: 12px !important;
+ box-shadow: 0 2px 12px var(--shadow-light) !important;
+ overflow: visible !important;
+ margin: 20px auto !important;
+ border-collapse: separate !important;
+ border-spacing: 0 !important;
+ width: 100% !important;
+ max-width: 700px !important;
+}
+
+/* Título Total Stats */
+table[width="700"][cellspacing="0"][cellpadding="1"] tr:first-child td[align="left"] {
+ background: transparent !important;
+ padding: 16px 20px 12px !important;
+ border-bottom: 2px solid var(--color-primary-lightest) !important;
+}
+
+table[width="700"][cellspacing="0"][cellpadding="1"] tr:first-child font[style*="HELVETICA"][style*="color:black"] {
+ color: var(--color-primary-dark) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-size: var(--font-size-h1) !important;
+ font-weight: 700 !important;
+ letter-spacing: 0.3px !important;
+}
+
+/* Enlace view max stats - estilo mejorado */
+table[width="700"][cellspacing="0"][cellpadding="1"] tr:first-child td[align="right"] font[size="1"],
+table[width="700"][cellspacing="0"][cellpadding="1"] tr:first-child td[align="right"] font[size="1"] a {
+ color: var(--color-primary-medium) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 600 !important;
+ text-decoration: none !important;
+ padding: 4px 10px !important;
+ border-radius: 6px !important;
+ transition: all 0.3s ease !important;
+ display: inline-block !important;
+
+}
+table[width="700"][cellspacing="0"][cellpadding="1"] tr:first-child td[align="right"] font[size="1"] a{
+ background: rgba(0, 139, 139, 0.2) !important;
+
+ border-color: var(--color-primary-medium) !important;
+
+
+}
+
+table[width="700"][cellspacing="0"][cellpadding="1"] tr:first-child td[align="right"] font[size="1"] a:hover {
+ background: rgba(0, 139, 139, 0.2) !important;
+ color: var(--color-primary-dark) !important;
+ border-color: var(--color-primary-medium) !important;
+ transform: translateY(-1px) !important;
+ box-shadow: 0 2px 6px rgba(0, 139, 139, 0.2) !important;
+}
+
+/* Encabezado Total Stats */
+table[width="700"][cellspacing="0"][cellpadding="1"] tr[bgcolor="black"] {
+ background: linear-gradient(135deg, var(--color-primary-dark) 0%, var(--color-primary-medium) 100%) !important;
+}
+
+table[width="700"][cellspacing="0"][cellpadding="1"] tr[bgcolor="black"] td {
+ background: transparent !important;
+ padding: 10px 12px !important;
+ border: none !important;
+}
+
+table[width="700"][cellspacing="0"][cellpadding="1"] tr[bgcolor="black"] font[color="white"] {
+ color: var(--color-text-light) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-weight: 600 !important;
+ font-size: var(--font-size-p1) !important;
+ letter-spacing: 0.3px !important;
+}
+
+/* Fila de datos Total Stats */
+table[width="700"][cellspacing="0"][cellpadding="1"] tr[bgcolor="#B9CBFD"] {
+ background: var(--bg-decorative-1) !important;
+ border-bottom: 1px solid var(--color-primary-lightest) !important;
+}
+
+table[width="700"][cellspacing="0"][cellpadding="1"] tr[bgcolor="#B9CBFD"] td {
+ background: transparent !important;
+ padding: 12px 16px !important;
+ border: none !important;
+}
+
+table[width="700"][cellspacing="0"][cellpadding="1"] tr[bgcolor="#B9CBFD"] font[size="1"] {
+ color: var(--color-text-dark) !important;
+ font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif !important;
+ font-size: var(--font-size-h2) !important;
+ font-weight: 500 !important;
+ font-style: italic !important;
+}
+
+/* ==========================================================================
+ SELECTORES DE MÁXIMA PRIORIDAD PARA ESTADÍSTICAS
+ ========================================================================== */
+
+/* Forzar tamaño de fuente para texto de etiquetas - tamaño razonable */
+table[width="700"][cellpadding="6"][cellspacing="0"] font[style*="font-size:11"] {
+ font-size: var(--font-size-h1) !important;
+}
+
+/* Forzar tamaño de fuente para números - tamaño razonable */
+table[width="700"][cellpadding="6"][cellspacing="0"] font[style*="font-size:18"] {
+ font-size: var(--font-size-h1) !important;
+}
+
+/* Selector directo para cualquier font dentro de td con bgcolor específico - solo para números */
+table[width="700"] tbody tr:nth-child(2) td[bgcolor="#015B91"] font {
+ font-size: var(--font-size-h1) !important;
+ color: var(--color-primary-medium) !important;
+ font-weight: 700 !important;
+}
+
+/* Selector para números en segunda fila */
+table[width="700"] tbody tr:nth-child(2) td[bgcolor="#015B91"] font {
+ font-size: var(--font-size-h1) !important;
+ color: var(--color-primary-medium) !important;
+ font-weight: 700 !important;
+}
+
+/* Selectores adicionales con mayor especificidad - apuntar directamente a los elementos */
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:nth-child(2) td[bgcolor="#015B91"] font[style] {
+ font-size: var(--font-size-h1) !important;
+ color: var(--color-primary-medium) !important;
+ font-weight: 700 !important;
+}
+
+/* Asegurar que los números (0) debajo también tengan el tamaño correcto - máxima prioridad */
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:nth-child(2) td[bgcolor="#015B91"] font[style*="font-size:18"],
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:nth-child(2) td[bgcolor="#015B91"] font[style*="color:white"],
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:nth-child(2) td[align="center"][valign="middle"][bgcolor="#015B91"] font,
+table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:nth-child(2) td[align="center"][valign="middle"][bgcolor="#015B91"] font[style*="font-size:18"][style*="color:white"][style*="font-weight:bold"] {
+ font-size: var(--font-size-h1) !important;
+ color: var(--color-primary-medium) !important;
+ font-weight: 700 !important;
+ display: block !important;
+ line-height: 1.2 !important;
+}
+
+/* ==========================================================================
+ RESPONSIVE - TABLA DE ESTADÍSTICAS (769px y menos)
+ ========================================================================== */
+@media (max-width: 769px) {
+ /* Tabla principal de estadísticas - ajustar ancho */
+ table[width="700"][cellpadding="6"][cellspacing="0"] {
+ width: 100% !important;
+ max-width: 100% !important;
+ table-layout: auto !important;
+ padding: 0 10px !important;
+ box-sizing: border-box !important;
+ }
+
+ /* Celdas con iconos - ajustar ancho */
+ table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"][rowspan="2"] {
+ width: auto !important;
+ min-width: 60px !important;
+ max-width: 30% !important;
+ padding: 10px 4px !important;
+
+ }
+
+ /* Celdas con texto - ajustar ancho */
+ table[width="700"][cellpadding="6"][cellspacing="0"] tr:first-child td[bgcolor="#015B91"]:not([rowspan]) {
+ width: auto !important;
+ max-width: 70% !important;
+ padding: 10px 4px 4px !important;
+ }
+
+ /* Celdas con números - ajustar ancho */
+ table[width="700"][cellpadding="6"][cellspacing="0"] tr:nth-child(2) td[bgcolor="#015B91"] {
+ width: auto !important;
+ max-width: 70% !important;
+ padding: 4px 4px 10px !important;
+ }
+
+ /* Reducir tamaño de iconos en pantallas pequeñas */
+ table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"][rowspan="2"] img {
+ width: 32px !important;
+ height: 32px !important;
+ }
+
+ /* Reducir tamaño de fuente en pantallas pequeñas */
+ table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"] font[style*="font-size:11"],
+ table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:first-child td[bgcolor="#015B91"]:not([rowspan]) font {
+ font-size: var(--font-size-h2) !important;
+ }
+
+ table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"] font[style*="font-size:18"],
+ table[width="700"][cellpadding="6"][cellspacing="0"] tbody tr:nth-child(2) td[bgcolor="#015B91"] font {
+ font-size: var(--font-size-h1) !important;
+ }
+
+ /* Espaciadores - reducir ancho */
+ table[width="700"][cellpadding="6"][cellspacing="0"] td[width="10"] {
+ width: 2px !important;
+ }
+
+ /* Tablas System Summary y Total Stats - ajustar ancho */
+ table[width="700"][cellspacing="2"],
+ table[width="700"][cellspacing="0"][cellpadding="1"] {
+ width: 100% !important;
+ max-width: 100% !important;
+ margin: 15px auto !important;
+ padding: 0 10px !important;
+ box-sizing: border-box !important;
+ }
+}
+
+/* Media query específica para el rango 770px - 900px */
+@media (min-width: 770px) and (max-width: 900px) {
+ /* Contenedor principal - ajustar ancho */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="870"][bgcolor="#D9E6FE"],
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="770"][bgcolor="#D9E6FE"] {
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ }
+
+ /* Tabla principal de estadísticas - ajustar ancho máximo */
+ table[width="700"][cellpadding="6"][cellspacing="0"] {
+ max-width: 95% !important;
+ table-layout: auto !important;
+ }
+
+ /* Ajustar porcentajes de celdas para evitar desbordamiento */
+ table[width="700"][cellpadding="6"][cellspacing="0"] td[bgcolor="#015B91"][rowspan="2"] {
+ max-width: 28% !important;
+ }
+
+ table[width="700"][cellpadding="6"][cellspacing="0"] tr:first-child td[bgcolor="#015B91"]:not([rowspan]),
+ table[width="700"][cellpadding="6"][cellspacing="0"] tr:nth-child(2) td[bgcolor="#015B91"] {
+ max-width: 72% !important;
+ }
+
+ /* Tablas System Summary y Total Stats */
+ table[width="700"][cellspacing="2"],
+ table[width="700"][cellspacing="0"][cellpadding="1"] {
+ max-width: 95% !important;
+ }
+}
+
+/* Media query para pantallas de 769px y menos - contenedor principal */
+@media (max-width: 769px) {
+ /* Tabla principal - mantener como tabla, ajustar anchos */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] {
+ width: 100% !important;
+ max-width: 100% !important;
+ table-layout: auto !important;
+ }
+
+ /* Sidebar - reducir ancho */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] {
+ width: 140px !important;
+ min-width: 140px !important;
+ max-width: 140px !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+ }
+
+ /* Tabla de navegación dentro del sidebar - ajustar ancho */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"] table {
+ width: 100% !important;
+ max-width: 100% !important;
+ }
+
+ /* Contenedor principal - ajustar ancho para que quepa junto al sidebar */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="870"][bgcolor="#D9E6FE"],
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) table[bgcolor="white"][cellpadding="0"] td[width="770"][bgcolor="#D9E6FE"] {
+ width: calc(100% - 140px) !important;
+ min-width: 0 !important;
+ max-width: calc(100% - 140px) !important;
+ box-sizing: border-box !important;
+ padding: 5px !important;
+ }
+
+ /* Tablas dentro del contenedor - ajustar para que no se desborden */
+ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"]) td[bgcolor="#D9E6FE"] table {
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ }
+}
+
+/* ==========================================================================
+ SIDEBAR VERTICAL - REAL-TIME REPORT
+ Convertir la barra de navegación horizontal en sidebar vertical
+ PRIORIDAD MÁXIMA - Sobrescribir cualquier estilo inline
+ ========================================================================== */
+
+/* Contenedor principal - estructura para sidebar + contenido lado a lado */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) {
+ margin: 0 !important;
+ padding: 0 !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ display: flex !important;
+ flex-direction: row !important;
+ align-items: flex-start !important;
+}
+
+/* SIDEBAR - Contenedor principal - posicionar a la izquierda */
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] {
+ width: 170px !important;
+ min-width: 170px !important;
+ max-width: 170px !important;
+ background: var(--color-bg-white) !important;
+ background-color: var(--color-bg-white) !important;
+ padding: 20px 5px !important;
+ vertical-align: top !important;
+ box-sizing: border-box !important;
+ border-right: none !important;
+ margin: 0 !important;
+ position: relative !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+ flex-shrink: 0 !important;
+ float: left !important;
+}
+
+/* Fila del sidebar - convertir de horizontal a vertical */
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody tr {
+ display: block !important;
+ width: 100% !important;
+}
+
+/* Celdas del sidebar - cada una en su propia fila vertical */
+body table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td,
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody tr td,
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td[style] {
+ display: block !important;
+ width: 100% !important;
+ background: transparent !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+ line-height: normal !important;
+ height: auto !important;
+ min-height: auto !important;
+}
+
+/* Logo en la primera celda */
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:first-child {
+ text-align: center !important;
+ padding: 10px 5px 15px 5px !important;
+ margin-bottom: 30px !important;
+
+}
+
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:first-child img {
+ filter: none !important;
+ width: auto !important;
+ height: auto !important;
+ max-width: 100% !important;
+ max-height: 300px !important;
+ display: block !important;
+ margin: 0 auto !important;
+ border-radius: 8px !important;
+ transition: transform 0.3s ease !important;
+}
+
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:first-child img:hover {
+ transform: scale(1.05) !important;
+}
+
+/* Enlaces de navegación - estilo botón vertical igual al sidebar principal */
+/* Aumentar especificidad para sobrescribir cualquier estilo inline */
+body table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child),
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody tr td:not(:first-child),
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child)[style] {
+ background: var(--color-primary-light) !important;
+ background-color: var(--color-primary-light) !important;
+ padding: 8px 6px !important;
+ border-radius: 8px !important;
+ transition: all 0.3s ease !important;
+ cursor: pointer !important;
+ border: 2px solid var(--color-primary-light) !important;
+ margin: 10px 0 !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: flex-start !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ word-wrap: break-word !important;
+ line-height: 1 !important;
+ height: auto !important;
+ min-height: 35px !important;
+ max-height: 35px !important;
+}
+
+/* Efecto hover en los enlaces */
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child):hover {
+ background: var(--color-primary-light) !important;
+ background-color: var(--color-primary-light) !important;
+ border-color: var(--color-primary-light) !important;
+ transform: translateY(-2px) !important;
+ box-shadow: 0 4px 12px rgba(32, 178, 170, 0.3) !important;
+}
+
+/* Enlaces dentro de las celdas */
+body table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a,
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a[style],
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a {
+ text-decoration: none !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: flex-start !important;
+ gap: 6px !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ overflow: hidden !important;
+ height: 100% !important;
+ min-height: 100% !important;
+ line-height: 1 !important;
+ vertical-align: middle !important;
+ padding: 0 !important;
+ margin: 0 !important;
+}
+
+/* Texto dentro de los enlaces */
+body table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a font,
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a font[style],
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a font[face],
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a font[color],
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a font[size] {
+ color: var(--color-text-light) !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 500 !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ word-wrap: break-word !important;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ white-space: nowrap !important;
+ max-width: 100% !important;
+ line-height: 1 !important;
+ display: inline-flex !important;
+ align-items: center !important;
+ height: auto !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ vertical-align: middle !important;
+}
+
+/* Texto en negrita */
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a font b {
+ font-weight: 600 !important;
+ color: var(--color-text-light) !important;
+}
+
+/* Iconos dentro de los enlaces */
+body table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a img,
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a img[style],
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a img[width],
+table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a img[height] {
+
+ width: 14px !important;
+ height: 14px !important;
+ flex-shrink: 0 !important;
+ max-width: 14px !important;
+ max-height: 14px !important;
+ display: inline-block !important;
+ vertical-align: middle !important;
+ align-self: center !important;
+}
+
+/* Contenido principal - posicionar a la derecha del sidebar */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) > table[cellpadding="4"][cellspacing="0"] {
+ flex: 1 !important;
+ width: auto !important;
+ margin-left: 0 !important;
+ padding: 0 !important;
+ display: table !important;
+ vertical-align: top !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) > table[cellpadding="4"][cellspacing="0"] > tbody > tr > td {
+ padding: 10px !important;
+ vertical-align: top !important;
+}
+
+/* VERM Custom Report: contenido principal a la derecha del sidebar */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) .verm_custom_report_main {
+ flex: 1 !important;
+ min-width: 0 !important;
+ padding: 1rem 1.5rem !important;
+ box-sizing: border-box !important;
+}
+
+/* ========== VERM Custom Report - formulario (distribución y diseño) ========== */
+.verm_custom_report_main {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 960px !important;
+}
+
+.verm_custom_report_main .admin_header {
+ font-size: 1.35rem !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ margin: 0 0 1rem 0 !important;
+ padding-bottom: 0.5rem !important;
+ border-bottom: 2px solid var(--color-primary-light) !important;
+}
+
+/* Tabla principal: card con botones arriba y abajo */
+.verm_custom_report_main form[name="VERM_custom_report"] #admin_table {
+ width: 100% !important;
+ max-width: 100% !important;
+ border-collapse: separate !important;
+ border-spacing: 0 !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 12px !important;
+
+ overflow: hidden !important;
+}
+
+/* Fila de botones superior e inferior */
+.verm_custom_report_main #admin_table > tbody > tr:first-child th,
+.verm_custom_report_main #admin_table > tbody > tr:last-child th {
+
+ background: var(--color-bg-lighter) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+ text-align: center !important;
+ vertical-align: middle !important;
+}
+
+.verm_custom_report_main #admin_table > tbody > tr:last-child th {
+ border-bottom: none !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+}
+
+.verm_custom_report_main #admin_table > tbody > tr:first-child .actButton,
+.verm_custom_report_main #admin_table > tbody > tr:first-child .refreshButton,
+.verm_custom_report_main #admin_table > tbody > tr:last-child .actButton,
+.verm_custom_report_main #admin_table > tbody > tr:last-child .refreshButton {
+ min-width: 0 !important;
+ width: 100% !important;
+ max-width: 180px !important;
+}
+
+/* Celda que contiene el formulario interno */
+.verm_custom_report_main #admin_table td[colspan="4"] {
+
+ background: var(--color-bg-white) !important;
+ vertical-align: top !important;
+}
+
+/* Tabla interna del formulario (secciones) */
+.verm_custom_report_main #admin_table table {
+ width: 100% !important;
+ max-width: 100% !important;
+ border-collapse: collapse !important;
+ border-spacing: 0 !important;
+}
+
+/* Encabezados de sección: Report Details, Preferences, Call filtering criteria, Non-contiguous time */
+.verm_custom_report_main .admin_sub_header {
+ font-size: 1rem !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ margin: 0 !important;
+
+ border-bottom: 1px solid var(--color-primary-light) !important;
+ background: transparent !important;
+}
+
+.verm_custom_report_main form table tbody tr:has(.admin_sub_header) th {
+
+ border: none !important;
+ background: transparent !important;
+ vertical-align: bottom !important;
+}
+
+.verm_custom_report_main form table tbody tr:has(.admin_sub_header) th:first-child {
+ text-align: left !important;
+}
+
+/* Primera sección: menos margen arriba */
+.verm_custom_report_main form table tbody tr:first-child:has(.admin_sub_header) th {
+ padding-top: 0 !important;
+}
+
+/* Filas de campos: label + input */
+.verm_custom_report_main form table tbody tr:not(:has(.admin_sub_header)) td {
+
+ vertical-align: middle !important;
+ border: none !important;
+ border-bottom: 1px solid rgba(0, 139, 139, 0.12) !important;
+}
+
+.verm_custom_report_main form table tbody tr:not(:has(.admin_sub_header)) td:first-child {
+ width: 1% !important;
+ white-space: nowrap !important;
+ padding-right: 16px !important;
+ font-size: 13px !important;
+ font-weight: 500 !important;
+ color: #374151 !important;
+ text-align: right !important;
+}
+
+.verm_custom_report_main form table tbody tr:not(:has(.admin_sub_header)) td:last-child {
+ text-align: left !important;
+}
+
+/* Inputs y selects dentro del custom report */
+.verm_custom_report_main .VERM_form_field {
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 6px !important;
+ min-width: 120px !important;
+ max-width: 100% !important;
+}
+
+.verm_custom_report_main select.VERM_form_field {
+ min-width: 100px !important;
+ cursor: pointer !important;
+}
+
+.verm_custom_report_main select.VERM_form_field[size] {
+ min-height: 6em !important;
+}
+
+/* Icono de ayuda alineado con el campo */
+.verm_custom_report_main form table td img[alt="HELP"],
+.verm_custom_report_main form table td img[onclick*="FillAndShowHelpDiv"] {
+ width: 18px !important;
+ height: 18px !important;
+ vertical-align: middle !important;
+ margin-left: 8px !important;
+ cursor: pointer !important;
+ opacity: 0.85 !important;
+}
+
+.verm_custom_report_main form table td img[alt="HELP"]:hover,
+.verm_custom_report_main form table td img[onclick*="FillAndShowHelpDiv"]:hover {
+ opacity: 1 !important;
+}
+
+/* Agrupar input + ayuda en línea */
+.verm_custom_report_main form table tbody tr:not(:has(.admin_sub_header)) td:last-child {
+ display: table-cell !important;
+}
+
+/* Campos de rango (Between X and Y) */
+.verm_custom_report_main form table td .VERM_form_field.VERM_numeric_field {
+ min-width: 60px !important;
+ width: 60px !important;
+ text-align: center !important;
+}
+
+/* Responsive - mantener sidebar y contenido lado a lado */
+@media (max-width: 768px) {
+ body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) {
+ flex-direction: row !important;
+ }
+
+ table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] {
+ width: 140px !important;
+ min-width: 140px !important;
+ max-width: 140px !important;
+ }
+
+ table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) {
+ padding: 8px 6px !important;
+ margin: 3px 0 !important;
+ }
+
+ table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a font {
+ font-size: var(--font-size-p2) !important;
+ }
+
+ table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] td:not(:first-child) a img {
+ width: 12px !important;
+ height: 12px !important;
+ }
+
+ body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) > table[cellpadding="4"][cellspacing="0"] > tbody > tr > td {
+ padding: 8px !important;
+ }
+}
+/* ==========================================================================
+ CONTENIDO PRINCIPAL - REAL-TIME REPORT
+ Estilos simples para el área de contenido principal
+ ========================================================================== */
+
+/* Contenedor principal del formulario - con scroll horizontal cuando sea necesario */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) > table[cellpadding="4"][cellspacing="0"] {
+ background: var(--color-bg-white) !important;
+ overflow-x: auto !important;
+ overflow-y: visible !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ display: block !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) > table[cellpadding="4"][cellspacing="0"] > tbody {
+ display: table !important;
+ width: 100% !important;
+ min-width: 100% !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) > table[cellpadding="4"][cellspacing="0"] > tbody > tr {
+ display: table-row !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) > table[cellpadding="4"][cellspacing="0"] > tbody > tr > td {
+ background: var(--color-bg-white) !important;
+ padding: 10px !important;
+ display: table-cell !important;
+ white-space: normal !important;
+}
+
+/* Título principal */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) font.top_head_key {
+ color: var(--color-text-dark) !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ font-size: var(--font-size-h2) !important;
+ font-weight: 600 !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ line-height: 1.2 !important;
+}
+
+/* Enlaces de acción (RELOAD NOW, MODIFY, SUMMARY) */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) a[onclick*="update_variables('form_submit'\")"],
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) a[href*="admin.php?ADD=10"],
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) a[href*="AST_timeonVDADallSUMMARY"] {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ font-weight: 500 !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: all 0.2s ease !important;
+ margin: 0 2px !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) a[onclick*="update_variables('form_submit'\")"]:hover,
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) a[href*="admin.php?ADD=10"]:hover,
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) a[href*="AST_timeonVDADallSUMMARY"]:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+/* Enlaces de toggle (VIEW MORE, VIEW USER GROUP, etc.) - Estilo botón */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) a[onclick*="update_variables(\'"] {
+ display: inline-flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ background: var(--color-primary-light) !important;
+ color: var(--color-text-light) !important;
+ text-decoration: none !important;
+ font-weight: 500 !important;
+ padding: 4px 8px !important;
+ border-radius: 4px !important;
+ border: 2px solid var(--color-primary-light) !important;
+ transition: all 0.2s ease !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ font-size: var(--font-size-p1) !important;
+ margin: 1px 2px !important;
+ cursor: pointer !important;
+ line-height: 1 !important;
+ vertical-align: middle !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) a[onclick*="update_variables('"]:hover {
+ background: var(--color-primary-medium) !important;
+ border-color: var(--color-primary-medium) !important;
+ color: var(--color-text-light) !important;
+ transform: translateY(-1px) !important;
+ box-shadow: 0 2px 6px rgba(0, 139, 139, 0.3) !important;
+}
+
+/* Texto dentro de los botones de toggle */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) a[onclick*="update_variables('"] font.top_settings_val,
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) a[onclick*="update_variables('"] span {
+ color: var(--color-text-light) !important;
+ font-weight: 500 !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ line-height: 1 !important;
+ display: inline !important;
+ vertical-align: middle !important;
+}
+
+/* Texto de configuración */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) font.top_settings_val {
+ color: var(--color-text-dark) !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ font-size: var(--font-size-p1) !important;
+ line-height: 1.3 !important;
+ margin: 0 !important;
+}
+
+/* Reducir espacios verticales en el contenido principal */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) > table[cellpadding="4"][cellspacing="0"] br {
+ line-height: 0.5 !important;
+ margin: 0 !important;
+ display: block !important;
+ content: "" !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) > table[cellpadding="4"][cellspacing="0"] > tbody > tr > td > br {
+ margin: 2px 0 !important;
+ line-height: 0.5 !important;
+}
+
+/* Panel de opciones (campaign_select_list_link) */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list_link {
+ position: relative !important;
+ left: auto !important;
+ right: auto !important;
+ top: auto !important;
+ bottom: auto !important;
+ z-index: auto !important;
+ display: inline-block !important;
+ margin: 5px 0 !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list_link table[bgcolor="#D9E6FE"] {
+ background: var(--bg-decorative-1) !important;
+ border-radius: 4px !important;
+ padding: 4px 6px !important;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list_link a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ font-weight: 500 !important;
+}
+
+/* Panel de configuración - centrado en pantalla, ancho compacto */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list {
+ position: fixed !important;
+ left: 50% !important;
+ top: 50% !important;
+ transform: translate(-50%, -50%) !important;
+ max-width: min(680px, 92vw) !important;
+ width: min(680px, 92vw) !important;
+ max-height: 88vh !important;
+ overflow: auto !important;
+}
+
+/* Cuando el panel está visible (z-index > 0), asegurar que esté centrado y visible */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list[style*="z-index: 21"],
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list[style*="z-index:21"] {
+ z-index: 1000 !important;
+ visibility: visible !important;
+}
+
+/* Desenfoque del fondo cuando el panel de opciones está abierto */
+body:has(#campaign_select_list[style*="z-index: 21"])::before,
+body:has(#campaign_select_list[style*="z-index:21"])::before {
+ content: "" !important;
+ position: fixed !important;
+ inset: 0 !important;
+ backdrop-filter: blur(6px) !important;
+ -webkit-backdrop-filter: blur(6px) !important;
+ background: rgba(0, 0, 0, 0.12) !important;
+ z-index: 999 !important;
+ pointer-events: none !important;
+}
+
+/* Cuando el panel está oculto (z-index < 0), respetar el estado hidden */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list[style*="z-index: -1"],
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list[style*="z-index:-1"] {
+ visibility: hidden !important;
+ z-index: -1 !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list table.realtime_settings_table {
+ background: var(--color-bg-white) !important;
+ border-radius: 8px !important;
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25) !important;
+ border: 1px solid var(--color-bg-light) !important;
+ margin: 0 auto !important;
+ max-width: 100% !important;
+ width: auto !important;
+ table-layout: auto !important;
+}
+
+/* Panel más compacto: menos padding en celdas */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list table.realtime_settings_table td {
+ padding: 6px 8px !important;
+}
+
+/* Botón Close Panel */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list td[align="CENTER"] a[onclick*="hideDiv('campaign_select_list')"],
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list td[align="CENTER"] a[onclick*="hideDiv"],
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list td[valign="TOP"][align="CENTER"] a {
+ display: inline-block !important;
+ background: var(--color-primary-medium) !important;
+ color: var(--color-text-light) !important;
+ padding: 6px 12px !important;
+ border-radius: 4px !important;
+ text-decoration: none !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 500 !important;
+ border: none !important;
+ cursor: pointer !important;
+ transition: all 0.2s ease !important;
+ margin-bottom: 6px !important;
+ pointer-events: auto !important;
+ position: relative !important;
+ z-index: 1001 !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list td[align="CENTER"] a[onclick*="hideDiv('campaign_select_list')"]:hover,
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list td[align="CENTER"] a[onclick*="hideDiv"]:hover,
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) #campaign_select_list td[valign="TOP"][align="CENTER"] a:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+ box-shadow: 0 2px 6px rgba(0, 139, 139, 0.3) !important;
+}
+
+/* Selectores y campos de formulario */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) select,
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) input[type="text"] {
+ padding: 4px 8px !important;
+ border: 1px solid var(--color-bg-light) !important;
+ border-radius: 4px !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ font-size: var(--font-size-p1) !important;
+ background: var(--color-bg-white) !important;
+ transition: border-color 0.2s ease !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) select:focus,
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) input[type="text"]:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium) !important;
+ box-shadow: 0 0 0 2px var(--bg-decorative-1) !important;
+}
+
+/* Botón SUBMIT */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) input[type="button"][value="SUBMIT"] {
+ background: var(--color-primary-medium) !important;
+ color: var(--color-text-light) !important;
+ border: none !important;
+ padding: 6px 12px !important;
+ border-radius: 4px !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 500 !important;
+ cursor: pointer !important;
+ transition: all 0.2s ease !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) input[type="button"][value="SUBMIT"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+ box-shadow: 0 2px 6px rgba(0, 139, 139, 0.3) !important;
+}
+
+/* Tablas de estadísticas - Estilo mejorado - con scroll horizontal cuando sea necesario */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table[cellpadding="0"][cellspacing="0"]:not([bgcolor="#015B91"]) {
+ background: var(--color-bg-white) !important;
+ border-collapse: collapse !important;
+ margin: 8px 0 !important;
+ border-radius: 8px !important;
+ overflow-x: auto !important;
+ overflow-y: visible !important;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08) !important;
+ border: 1px solid var(--color-bg-lighter) !important;
+ display: block !important;
+ width: 100% !important;
+ max-width: 100% !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table[cellpadding="0"][cellspacing="0"]:not([bgcolor="#015B91"]) tbody {
+ display: table !important;
+ width: 100% !important;
+ min-width: 100% !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table[cellpadding="0"][cellspacing="0"]:not([bgcolor="#015B91"]) tbody tr {
+ display: table-row !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table[cellpadding="0"][cellspacing="0"]:not([bgcolor="#015B91"]) td {
+ padding: 8px 12px !important;
+ border-bottom: 1px solid var(--color-bg-lighter) !important;
+ transition: background-color 0.2s ease !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table[cellpadding="0"][cellspacing="0"]:not([bgcolor="#015B91"]) tr:hover td {
+ background: var(--bg-decorative-1) !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table[cellpadding="0"][cellspacing="0"]:not([bgcolor="#015B91"]) tr:last-child td {
+ border-bottom: none !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) font.top_settings_key {
+ color: var(--color-primary-dark) !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 600 !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) font.top_settings_val {
+ color: var(--color-text-dark) !important;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 500 !important;
+}
+
+/* Tabla de llamadas en tiempo real - con scroll horizontal cuando sea necesario */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_calls_table {
+ background: var(--color-bg-white) !important;
+ border-radius: 4px !important;
+ overflow-x: auto !important;
+ overflow-y: visible !important;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important;
+ margin: 5px 0 !important;
+ display: block !important;
+ width: 100% !important;
+ max-width: 100% !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_calls_table tbody {
+ display: table !important;
+ width: 100% !important;
+ min-width: 100% !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_calls_table tbody tr {
+ display: table-row !important;
+}
+
+/* Tabla principal de agentes - Estilo mejorado - con scroll horizontal cuando sea necesario */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table {
+ background: var(--color-bg-white) !important;
+ border-radius: 8px !important;
+ overflow-x: auto !important;
+ overflow-y: visible !important;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1) !important;
+ margin: 10px 0 !important;
+ border: 1px solid var(--color-bg-lighter) !important;
+ border-collapse: separate !important;
+ border-spacing: 0 !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ display: block !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table tbody {
+ display: table !important;
+ width: 100% !important;
+ min-width: 100% !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table tbody tr {
+ display: table-row !important;
+}
+
+/* Encabezado de la tabla */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table tr[bgcolor="#C6C6C6"] {
+ background: linear-gradient(135deg, var(--color-primary-dark) 0%, var(--color-primary-medium) 100%) !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table tr[bgcolor="#C6C6C6"] td {
+ padding: 10px 12px !important;
+ font-weight: 600 !important;
+ border-bottom: 2px solid var(--color-primary-medium) !important;
+ color: var(--color-text-light) !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table tr[bgcolor="#C6C6C6"] font.top_head_key {
+ color: var(--color-text-light) !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 600 !important;
+}
+
+/* Filas de datos */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table tr:not([bgcolor="#C6C6C6"]) {
+ background: var(--color-bg-white) !important;
+ transition: background-color 0.2s ease !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table tr:not([bgcolor="#C6C6C6"]):hover {
+ background: var(--bg-decorative-1) !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table tr:not([bgcolor="#C6C6C6"]) td {
+ padding: 8px 12px !important;
+ border-bottom: 1px solid var(--color-bg-lighter) !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table tr:not([bgcolor="#C6C6C6"]):last-child td {
+ border-bottom: none !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table font.top_head_key {
+ color: var(--color-text-dark) !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 500 !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table font.top_head_val {
+ color: var(--color-text-dark) !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 500 !important;
+}
+
+/* Enlaces dentro de la tabla */
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ transition: color 0.2s ease !important;
+}
+
+body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]) table.realtime_table a:hover {
+ color: var(--color-primary-dark) !important;
+ text-decoration: underline !important;
+}
+
+/* ========== VERM Admin (form action VERM_main_report_page.php, #admin_table) ========== */
+form[action*="VERM_main_report_page"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1000px !important;
+ margin: 0 !important;
+}
+
+/* Página de reportes (con #nav_table): usar todo el ancho */
+form[action*="VERM_main_report_page"]:has(#nav_table) {
+ max-width: none !important;
+ width: 100% !important;
+}
+
+form[action*="VERM_main_report_page"] #admin_table {
+ width: 100% !important;
+ max-width: 1000px !important;
+ border-collapse: separate !important;
+ border-spacing: 0 !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+}
+
+/* Fila superior: usuario + enlaces (RELOAD | PRINT | NEW REPORT | LOG OUT) */
+form[action*="VERM_main_report_page"] .standard_font_small {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: #374151 !important;
+ background: var(--color-bg-lighter) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+form[action*="VERM_main_report_page"] .standard_font_small b {
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="VERM_main_report_page"] .header_link {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 4px 8px !important;
+ border-radius: 6px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="VERM_main_report_page"] .header_link:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="VERM_main_report_page"] .header_link img {
+ vertical-align: middle !important;
+}
+
+/* Fila de filtros: Queue, Report, botones */
+form[action*="VERM_main_report_page"] .export_row {
+ background: var(--color-bg-white) !important;
+ border-bottom: 1px solid var(--shadow-text) !important;
+}
+
+form[action*="VERM_main_report_page"] .export_row td {
+ padding: 10px 12px !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: #4b5563 !important;
+}
+
+form[action*="VERM_main_report_page"] .VERM_form_field {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 6px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ transition: border-color 0.2s ease, box-shadow 0.2s ease !important;
+}
+
+form[action*="VERM_main_report_page"] .VERM_form_field:focus {
+ outline: none !important;
+ border-color: var(--color-primary-dark) !important;
+ box-shadow: 0 0 0 2px var(--bg-decorative-1) !important;
+}
+
+form[action*="VERM_main_report_page"] .actButton {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 8px 16px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="VERM_main_report_page"] .actButton:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="VERM_main_report_page"] .refreshButton {
+ font-family: var(--font-family) !important;
+ font-size: 16px !important;
+ padding: 8px 12px !important;
+ color: var(--color-primary-medium) !important;
+ background: var(--color-bg-lighter) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="VERM_main_report_page"] .refreshButton:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+/* Columnas de contenido (Agent report | Real-time | Settings) */
+form[action*="VERM_main_report_page"] .admin_column {
+ padding: 16px 20px !important;
+ vertical-align: top !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: #1f2937 !important;
+ border-right: 1px solid var(--shadow-text) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="VERM_main_report_page"] .admin_column:last-child {
+ border-right: none !important;
+}
+
+form[action*="VERM_main_report_page"] .rpt_header {
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ display: block !important;
+}
+
+form[action*="VERM_main_report_page"] .rpt_header img {
+ vertical-align: middle !important;
+ margin-left: 4px !important;
+}
+
+form[action*="VERM_main_report_page"] .report_link {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ display: inline-block !important;
+ border-radius: 4px !important;
+ transition: color 0.2s ease, background 0.2s ease !important;
+}
+
+form[action*="VERM_main_report_page"] .report_link:hover {
+ color: var(--color-primary-dark) !important;
+ background: var(--bg-decorative-1) !important;
+}
+
+form[action*="VERM_main_report_page"] .admin_column ul {
+ list-style: none !important;
+ padding-left: 0 !important;
+ margin: 8px 0 !important;
+}
+
+form[action*="VERM_main_report_page"] .admin_column ul li {
+ padding: 4px 0 !important;
+ margin: 0 !important;
+}
+
+form[action*="VERM_main_report_page"] .admin_column ul ul {
+ margin-left: 12px !important;
+ padding-left: 12px !important;
+ border-left: 2px solid var(--color-primary-light) !important;
+}
+
+/* ========== VERM Report Page - #nav_table (logo, user, links, report type buttons) ========== */
+form[action*="VERM_main_report_page"] #nav_table {
+ width: 100% !important;
+ max-width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-white) !important;
+ border-bottom: 1px solid var(--shadow-text) !important;
+ margin-bottom: 0 !important;
+ table-layout: auto !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .title_cell {
+ padding: 12px 16px !important;
+ vertical-align: middle !important;
+ font-family: var(--font-family) !important;
+ background: var(--color-bg-lighter) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .title_cell:first-child {
+ width: 1% !important;
+ white-space: nowrap !important;
+}
+
+/* Celda usuario + enlaces: mantener RELOAD | PRINT | NEW REPORT | LOG OUT en una sola línea */
+form[action*="VERM_main_report_page"] #nav_table tr:first-child .title_cell:last-child {
+ white-space: nowrap !important;
+ min-width: 420px !important;
+ overflow: visible !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table tr:first-child .title_cell:last-child .header_link,
+form[action*="VERM_main_report_page"] #nav_table tr:first-child .title_cell:last-child .header_link img {
+ display: inline !important;
+ vertical-align: middle !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .title_cell:first-child a img {
+ max-height: 70px !important;
+ width: auto !important;
+ display: block !important;
+ border: 0 !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .title_cell:last-child a img {
+ display: inline !important;
+ vertical-align: middle !important;
+ max-height: 15px !important;
+ width: auto !important;
+ border: 0 !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .title_cell b {
+ color: var(--color-primary-dark) !important;
+ font-size: 13px !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .title_cell .header_link {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 4px 8px !important;
+ border-radius: 6px !important;
+ font-size: 13px !important;
+ display: inline !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .title_cell .header_link:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .title_cell .header_link img {
+ vertical-align: middle !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .nav_header {
+ background: var(--color-primary-dark) !important;
+ padding: 0 !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .nav_header td {
+ padding: 8px 12px !important;
+ border: none !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .navigation_list {
+ list-style: none !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ display: flex !important;
+ flex-wrap: wrap !important;
+ gap: 6px !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .navigation_list li {
+ display: inline-block !important;
+ margin: 0 !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .transparent_button {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 500 !important;
+ padding: 6px 12px !important;
+ color: var(--color-text-light) !important;
+ background: transparent !important;
+ border: 1px solid rgba(255,255,255,0.5) !important;
+ border-radius: 6px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .transparent_button:hover {
+ background: rgba(255,255,255,0.15) !important;
+ border-color: var(--color-text-light) !important;
+}
+
+form[action*="VERM_main_report_page"] #nav_table .transparent_button.current_report {
+ background: var(--color-primary-light) !important;
+ border-color: var(--color-primary-light) !important;
+ color: var(--color-text-dark) !important;
+ font-weight: 600 !important;
+}
+
+/* ========== VERM Wallboard (VERM_wallboards.php) ========== */
+body:has(.wallboard_title_row) {
+ font-family: var(--font-family) !important;
+ background: var(--color-bg-white) !important;
+ margin: 0 !important;
+}
+
+body:has(.wallboard_title_row) .wallboard_title_row {
+ background: var(--color-primary-dark) !important;
+ color: var(--color-text-light) !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ height: 28px !important;
+ border: none !important;
+}
+
+body:has(.wallboard_title_row) .wallboard_title_cell {
+ padding: 0 6px !important;
+ vertical-align: middle !important;
+}
+
+body:has(.wallboard_title_row) .view_button {
+ accent-color: var(--color-primary-light) !important;
+ cursor: pointer !important;
+}
+
+body:has(.wallboard_title_row) input.play_button {
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 4px !important;
+ color: var(--color-text-light) !important;
+ cursor: pointer !important;
+ width: 20px !important;
+ height: 20px !important;
+ font-size: 10px !important;
+}
+
+body:has(.wallboard_title_row) input.stop_button {
+ background: #c53030 !important;
+ border: none !important;
+ border-radius: 4px !important;
+ color: var(--color-text-light) !important;
+ cursor: pointer !important;
+ width: 20px !important;
+ height: 20px !important;
+ font-size: 10px !important;
+}
+
+body:has(.wallboard_title_row) .header_link {
+ color: var(--color-primary-lightest) !important;
+ text-decoration: none !important;
+ padding: 2px 5px !important;
+ border-radius: 3px !important;
+ font-size: 12px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+body:has(.wallboard_title_row) .header_link:hover {
+ background: rgba(255,255,255,0.2) !important;
+ color: var(--color-text-light) !important;
+}
+
+body:has(.wallboard_title_row) td.widget_cell {
+ border: 1px solid var(--shadow-text) !important;
+ background: var(--color-bg-white) !important;
+ vertical-align: top !important;
+ height: 100px !important;
+ max-height: 100px !important;
+ min-height: 80px !important;
+}
+
+/* Sobrescribir altura inline de las celdas */
+body:has(.wallboard_title_row) td.widget_cell[style] {
+ height: 100px !important;
+ max-height: 100px !important;
+}
+
+/* Filas de una sola celda (Live Campaigns, Live Agents): más altura */
+body:has(.wallboard_title_row) td.widget_cell[colspan="8"],
+body:has(.wallboard_title_row) td.widget_cell[colspan="7"] {
+ height: 200px !important;
+ max-height: 200px !important;
+}
+
+body:has(.wallboard_title_row) td.widget_cell table.widget_contents {
+ height: 100% !important;
+ max-height: 100% !important;
+}
+
+body:has(.wallboard_title_row) td.widget_cell:hover {
+ border-color: var(--color-primary-light) !important;
+}
+
+body:has(.wallboard_title_row) table.widget_contents {
+ border-collapse: collapse !important;
+ border-radius: 4px !important;
+ overflow: hidden !important;
+ background: var(--color-bg-white) !important;
+ box-shadow: 0 1px 2px var(--shadow-light) !important;
+}
+
+body:has(.wallboard_title_row) tr.widget_cell_title_bar {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 600 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+ height: 22px !important;
+}
+
+body:has(.wallboard_title_row) tr.widget_cell_title_bar th,
+body:has(.wallboard_title_row) tr.widget_cell_title_bar td {
+ padding: 1px 4px !important;
+}
+
+body:has(.wallboard_title_row) tr.widget_cell_title_bar:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(.wallboard_title_row) .widget_edit_button {
+ font-family: var(--font-family) !important;
+ font-size: 11px !important;
+ padding: 1px 4px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 3px !important;
+ background: var(--color-bg-white) !important;
+ color: var(--color-primary-medium) !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+body:has(.wallboard_title_row) .widget_edit_button:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(.wallboard_title_row) td.widget_contents {
+ padding: 4px 6px !important;
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(.wallboard_title_row) table.shaded {
+ background: var(--color-bg-lighter) !important;
+}
+
+body:has(.wallboard_title_row) #widget_table {
+ font-family: var(--font-family) !important;
+ font-size: 11px !important;
+ border-collapse: collapse !important;
+ width: 100% !important;
+}
+
+body:has(.wallboard_title_row) #widget_table tr.widget_table_header {
+ background: var(--color-primary-dark) !important;
+ color: var(--color-text-light) !important;
+ font-weight: 600 !important;
+ font-size: 11px !important;
+}
+
+body:has(.wallboard_title_row) #widget_table td,
+body:has(.wallboard_title_row) #widget_table th {
+ border: 1px solid var(--shadow-text) !important;
+ padding: 3px 4px !important;
+}
+
+body:has(.wallboard_title_row) #widget_table tr:nth-child(even) {
+ background: var(--color-bg-lighter) !important;
+}
+
+body:has(.wallboard_title_row) .wallboard_extra_large_text {
+ color: var(--color-text-dark) !important;
+ font-family: var(--font-family) !important;
+ font-size: 1.5rem !important;
+ line-height: 1.2 !important;
+}
+
+body:has(.wallboard_title_row) .wallboard_large_text {
+ color: var(--color-text-dark) !important;
+ font-family: var(--font-family) !important;
+ font-size: 1.25rem !important;
+ line-height: 1.2 !important;
+}
+
+body:has(.wallboard_title_row) .wallboard_medium_text {
+ color: #4b5563 !important;
+ font-family: var(--font-family) !important;
+ font-size: 1rem !important;
+}
+
+body:has(.wallboard_title_row) .wallboard_small_text,
+body:has(.wallboard_title_row) .wallboard_tiny_text {
+ color: #4b5563 !important;
+ font-family: var(--font-family) !important;
+ font-size: 0.85rem !important;
+}
+
+body:has(.wallboard_title_row) div.widget_settings {
+ background: var(--color-bg-white) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 6px !important;
+ box-shadow: 0 2px 10px var(--shadow-medium) !important;
+ padding: 6px !important;
+}
+
+body:has(.wallboard_title_row) .widget_settings_title_cell,
+body:has(.wallboard_title_row) .widget_settings_cell {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ font-size: 11px !important;
+ padding: 1px 3px !important;
+}
+
+body:has(.wallboard_title_row) .widget_settings_form_field {
+ font-family: var(--font-family) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 3px !important;
+ padding: 3px 4px !important;
+ font-size: 11px !important;
+}
+
+body:has(.wallboard_title_row) .widget_form_button {
+ font-family: var(--font-family) !important;
+ font-size: 11px !important;
+ padding: 3px 8px !important;
+ border-radius: 3px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ background: var(--color-bg-lighter) !important;
+ color: var(--color-primary-dark) !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease !important;
+}
+
+body:has(.wallboard_title_row) .widget_form_button:hover {
+ background: var(--bg-decorative-1) !important;
+}
+
+/* Logo centrado y al 50% */
+body:has(.wallboard_title_row) .total_center {
+ display: flex !important;
+ justify-content: center !important;
+ align-items: center !important;
+ width: 100% !important;
+ height: 100% !important;
+ min-height: 100% !important;
+}
+
+body:has(.wallboard_title_row) .total_center img,
+body:has(.wallboard_title_row) .widget_contents img[src*="vicidial_admin_web_logo"] {
+ max-height: 50% !important;
+ max-width: 50% !important;
+ width: auto !important;
+ height: auto !important;
+ object-fit: contain !important;
+ display: block !important;
+}
+
+/* Gauges/knobs (pureknob): reducir a la mitad y centrar */
+body:has(.wallboard_title_row) .widget_contents div[style*="211px"] {
+ width: 106px !important;
+ height: 106px !important;
+ margin-left: auto !important;
+ margin-right: auto !important;
+ display: block !important;
+}
+
+body:has(.wallboard_title_row) .widget_contents div[style*="211px"] canvas {
+ width: 100% !important;
+ height: 100% !important;
+}
+
+body:has(.wallboard_title_row) .widget_contents div[style*="241px"] {
+ width: 121px !important;
+ height: 121px !important;
+ margin-left: auto !important;
+ margin-right: auto !important;
+ display: block !important;
+}
+
+body:has(.wallboard_title_row) .widget_contents div[style*="241px"] canvas {
+ width: 100% !important;
+ height: 100% !important;
+}
+
+/* Centrar celdas que contienen el gauge (horizontal y vertical) */
+body:has(.wallboard_title_row) td.widget_contents:has(div[style*="211px"]),
+body:has(.wallboard_title_row) td.widget_contents:has(div[style*="241px"]) {
+ text-align: center !important;
+ vertical-align: middle !important;
+}
+
+/* ========== Real-Time Campaign Summary (AST_timeonVDADallSUMMARY.php) ========== */
+form[action*="AST_timeonVDADallSUMMARY.php"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="4"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ box-shadow: var(--vdc-shadow, 0 2px 8px rgba(0,0,0,0.08)) !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="4"] > tbody > tr > td {
+ padding: 16px 20px !important;
+ vertical-align: top !important;
+ border-bottom: 1px solid var(--shadow-text) !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="4"] > tbody > tr > td:first-child {
+ font-size: 14px !important;
+ line-height: 1.5 !important;
+}
+
+/* Título y barra de controles */
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="4"] td > b:first-of-type {
+ font-family: var(--font-family) !important;
+ font-size: 18px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ display: inline !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="4"] td img[alt="HELP"] {
+ vertical-align: middle !important;
+ margin-left: 6px !important;
+ opacity: 0.85 !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="4"] td > a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 4px 8px !important;
+ border-radius: 6px !important;
+ font-size: 13px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="4"] td > a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="4"] td > a[href*="realtime_report"],
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="4"] td b > a {
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+}
+
+/* Select y botón SUBMIT */
+form[action*="AST_timeonVDADallSUMMARY.php"] select[name="types"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 12px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ margin: 0 8px 0 0 !important;
+ min-width: 180px !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] input[type="submit"][name="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 8px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] input[type="submit"][name="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+/* Tabla de estadísticas por campaña (cellpadding=0) */
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="0"][cellspacing="0"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ margin: 8px 0 16px 0 !important;
+ font-size: 13px !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 8px !important;
+ overflow: hidden !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="0"][cellspacing="0"] tr {
+ border-bottom: 1px solid rgba(0,0,0,0.06) !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="0"][cellspacing="0"] tr:last-child {
+ border-bottom: none !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="0"][cellspacing="0"] td {
+ padding: 8px 12px !important;
+ font-family: var(--font-family) !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="0"][cellspacing="0"] td[align="RIGHT"] {
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ width: 1% !important;
+ white-space: nowrap !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="0"][cellspacing="0"] td[align="LEFT"] {
+ color: var(--color-text-dark) !important;
+}
+
+form[action*="AST_timeonVDADallSUMMARY.php"] table[cellpadding="0"][cellspacing="0"] font[size="2"] {
+ font-size: 13px !important;
+ font-family: var(--font-family) !important;
+}
+
+/* Enlace Modify por campaña */
+form[action*="AST_timeonVDADallSUMMARY.php"] a[href*="admin.php?ADD=34"] {
+ font-size: 13px !important;
+}
+
+/* ========== Real-Time Whiteboard Report (AST_rt_whiteboard_rpt.php) ========== */
+form[action*="AST_rt_whiteboard_rpt.php"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] > b:first-of-type {
+ font-size: 18px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ display: inline-block !important;
+ margin-bottom: 12px !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] img[alt="HELP"] {
+ vertical-align: middle !important;
+ margin-left: 4px !important;
+ opacity: 0.85 !important;
+}
+
+/* Panel de control: tabla principal */
+form[action*="AST_rt_whiteboard_rpt.php"] #report_control_panel table.question_td {
+ width: 100% !important;
+ border-collapse: separate !important;
+ border-spacing: 12px !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 12px !important;
+ padding: 16px !important;
+ box-shadow: 0 2px 8px rgba(0,0,0,0.08) !important;
+ border: 1px solid var(--shadow-text) !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] #report_control_panel table.question_td td {
+ padding: 8px 0 !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+}
+
+/* Etiquetas embossed */
+form[action*="AST_rt_whiteboard_rpt.php"] .embossed {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 400 !important;
+ color: var(--color-text-dark) !important;
+ text-shadow: none !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] .embossed br + select,
+form[action*="AST_rt_whiteboard_rpt.php"] .embossed br + input {
+ margin-top: 6px !important;
+}
+
+/* Selects e inputs del formulario */
+form[action*="AST_rt_whiteboard_rpt.php"] .form_field {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ box-sizing: border-box !important;
+ transition: border-color 0.2s ease, box-shadow 0.2s ease !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] .form_field:focus {
+ outline: none !important;
+ border-color: var(--color-primary-dark) !important;
+ box-shadow: 0 0 0 2px var(--bg-decorative-1) !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] select.form_field {
+ min-height: 28px !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] select.form_field[size] {
+ min-height: 100px !important;
+}
+
+/* Panel Target per unit / Target gross (panel_td) */
+form[action*="AST_rt_whiteboard_rpt.php"] .panel_td {
+ padding: 6px 10px !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] .panel_td[align="right"] {
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+}
+
+/* Tabla Target per unit / Target gross sales: bordes redondos */
+form[action*="AST_rt_whiteboard_rpt.php"] table:has(.panel_td) {
+ border-radius: 10px !important;
+ overflow: hidden !important;
+ border: 1px solid var(--shadow-text) !important;
+ background: var(--color-bg-lighter) !important;
+}
+
+/* Botones RUN REPORT (verde) y REPORTS (rojo) */
+form[action*="AST_rt_whiteboard_rpt.php"] .green_btn {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] .green_btn:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] .red_btn {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: #c53030 !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] .red_btn:hover {
+ background: #9b2c2c !important;
+ transform: translateY(-1px) !important;
+}
+
+/* Panel de visualización del reporte (cuando está visible) */
+form[action*="AST_rt_whiteboard_rpt.php"] #report_display_panel table.question_td {
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ padding: 16px !important;
+ border: 1px solid var(--shadow-text) !important;
+}
+
+form[action*="AST_rt_whiteboard_rpt.php"] #report_display_panel .embossed.border2px {
+ font-family: var(--font-family) !important;
+ padding: 10px 12px !important;
+ border-radius: 8px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ background: var(--color-bg-white) !important;
+}
+
+/* ========== Recuadros de ayuda (HelpDisplayDiv / help_info) ========== */
+#HelpDisplayDiv.help_info {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 12px !important;
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.04) !important;
+ z-index: 10000 !important;
+ overflow: hidden !important;
+}
+
+#HelpDisplayDiv.help_info table.help_td {
+ width: 100% !important;
+ max-width: 320px !important;
+ border-collapse: collapse !important;
+ border-spacing: 0 !important;
+ margin: 0 !important;
+}
+
+#HelpDisplayDiv.help_info table.help_td td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ border: none !important;
+}
+
+#HelpDisplayDiv.help_info table.help_td tr:first-child td {
+ background: var(--color-bg-lighter) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+ padding: 10px 14px !important;
+}
+
+#HelpDisplayDiv.help_info .help_bold {
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+}
+
+#HelpDisplayDiv.help_info td[onclick*="ClearAndHideHelpDiv"] {
+ cursor: pointer !important;
+ font-size: 14px !important;
+ color: var(--color-text-dark) !important;
+ transition: color 0.2s ease, background 0.2s ease !important;
+}
+
+#HelpDisplayDiv.help_info td[onclick*="ClearAndHideHelpDiv"]:hover {
+ color: var(--color-primary-dark) !important;
+}
+
+#HelpDisplayDiv.help_info td[onclick*="ClearAndHideHelpDiv"] b {
+ font-weight: 600 !important;
+}
+
+#HelpDisplayDiv.help_info ul {
+ margin: 8px 0 0 0 !important;
+ padding-left: 20px !important;
+ line-height: 1.5 !important;
+}
+
+#HelpDisplayDiv.help_info li {
+ margin: 6px 0 !important;
+ padding: 0 !important;
+}
+
+/* ========== Popup Color chooser / Audio chooser (#audio_chooser_span) ========== */
+#audio_chooser_span {
+ font-family: var(--font-family) !important;
+ box-sizing: border-box !important;
+}
+
+#audio_chooser_span span[id^="color_chooser_frame"],
+#audio_chooser_span span[name="color_chooser_frame"] {
+ display: block !important;
+ width: 740px !important;
+ max-width: 96vw !important;
+ min-height: 440px !important;
+ max-height: 85vh !important;
+ background: var(--color-bg-white) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 12px !important;
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05) !important;
+ overflow: auto !important;
+ padding: 16px 20px !important;
+ z-index: 10001 !important;
+}
+
+#audio_chooser_span span[id^="color_chooser_frame"] a[href*="close_chooser"],
+#audio_chooser_span span[name="color_chooser_frame"] a[href*="close_chooser"] {
+ display: inline-block !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ padding: 8px 16px !important;
+ border-radius: 8px !important;
+ text-decoration: none !important;
+ margin-bottom: 12px !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+#audio_chooser_span span[id^="color_chooser_frame"] a[href*="close_chooser"]:hover,
+#audio_chooser_span span[name="color_chooser_frame"] a[href*="close_chooser"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+#audio_chooser_span #select_color_frame {
+ height: auto !important;
+ max-height: 70vh !important;
+ width: 100% !important;
+ max-width: 420px !important;
+ overflow: auto !important;
+ background: var(--color-bg-lighter) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 10px !important;
+ padding: 8px !important;
+}
+
+#audio_chooser_span #select_color_frame table {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ border-spacing: 0 !important;
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+}
+
+#audio_chooser_span #select_color_frame tr[bgcolor="#F6F6F6"] {
+ background: var(--color-bg-white) !important;
+}
+
+#audio_chooser_span #select_color_frame tr[bgcolor="#E6E6E6"] {
+ background: var(--color-bg-lighter) !important;
+}
+
+#audio_chooser_span #select_color_frame td {
+ padding: 6px 10px !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+ vertical-align: middle !important;
+ color: var(--color-text-dark) !important;
+}
+
+#audio_chooser_span #select_color_frame td[bgcolor] {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.06) !important;
+ min-width: 48px !important;
+}
+
+#audio_chooser_span #select_color_frame a[href^="javascript:choose_color"] {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ font-weight: 500 !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+#audio_chooser_span #select_color_frame a[href^="javascript:choose_color"]:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+#audio_chooser_span #select_color_frame font {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ color: var(--color-text-dark) !important;
+}
+
+/* iframe dentro de audio_chooser_span (audio/moh/ingroup choosers) */
+#audio_chooser_span iframe {
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 12px !important;
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15) !important;
+ background: var(--color-bg-white) !important;
+}
+
+/* ========== Inbound Call Stats / Closer Stats (AST_CLOSERstats.php) ========== */
+form[action*="AST_CLOSERstats.php"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+/* Tabla de filtros (bgcolor #D9E6FE) */
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ box-shadow: 0 2px 8px rgba(0,0,0,0.06) !important;
+}
+
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] input[type="TEXT"],
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1) !important;
+}
+
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+ box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15) !important;
+}
+
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+form[action*="AST_CLOSERstats.php"] table[bgcolor="#D9E6FE"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+/* Contenedor del reporte (tabla exterior + pre) */
+body:has(form[action*="AST_CLOSERstats.php"]) table[cellpadding="3"]:first-of-type {
+ width: 100% !important;
+}
+
+body:has(form[action*="AST_CLOSERstats.php"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border: 1px solid var(--shadow-text) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="AST_CLOSERstats.php"]) pre a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+}
+
+body:has(form[action*="AST_CLOSERstats.php"]) pre a:hover {
+ text-decoration: underline !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="AST_CLOSERstats.php"]) pre font[size="2"] {
+ font-size: 12px !important;
+}
+
+/* Inbound Report (AST_CLOSERstats): título e icono ayuda fijados abajo (flotantes) */
+body:has(form[action*="AST_CLOSERstats.php"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="AST_CLOSERstats.php"]) > table[bgcolor="#015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+ box-shadow: 0 -2px 10px rgba(0,0,0,0.06) !important;
+}
+
+body:has(form[action*="AST_CLOSERstats.php"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 160px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+/* ========== Inbound Report v2 (AST_CLOSERstats_v2.php) - estilos completos ========== */
+form[action*="AST_CLOSERstats_v2.php"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ box-shadow: 0 2px 8px rgba(0,0,0,0.06) !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] input[type="TEXT"],
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1) !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+ box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15) !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+form[action*="AST_CLOSERstats_v2.php"] table[bgcolor="#D9E6FE"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+body:has(form[action*="AST_CLOSERstats_v2.php"]) table[cellpadding="3"]:first-of-type {
+ width: 100% !important;
+}
+
+body:has(form[action*="AST_CLOSERstats_v2.php"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border: 1px solid var(--shadow-text) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="AST_CLOSERstats_v2.php"]) pre a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+}
+
+body:has(form[action*="AST_CLOSERstats_v2.php"]) pre a:hover {
+ text-decoration: underline !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="AST_CLOSERstats_v2.php"]) pre font[size="2"] {
+ font-size: 12px !important;
+}
+
+/* Inbound Report v2: título e icono ayuda fijados abajo (flotantes) */
+body:has(form[action*="AST_CLOSERstats_v2.php"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="AST_CLOSERstats_v2.php"]) > table[bgcolor="#015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+ box-shadow: 0 -2px 10px rgba(0,0,0,0.06) !important;
+}
+
+body:has(form[action*="AST_CLOSERstats_v2.php"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 160px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+/* Popup de ayuda: abrir hacia arriba en páginas con barra fija abajo */
+body:has(form[action*="AST_CLOSERstats.php"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="AST_CLOSERstats_v2.php"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="AST_CLOSER_service_level"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="AST_inbound_daily_report.php"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="AST_DIDstats.php"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="AST_DIDstats_v2.php"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="AST_IVRstats.php"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="inbound_forecasting"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="Erlang_report"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="VDADstats"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="OUTBOUNDsummary_interval"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="CMstats"]) #HelpDisplayDiv.help_info,
+body:has(form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"])) #HelpDisplayDiv.help_info,
+body:has(form[action*="agent_time_detail"]) #HelpDisplayDiv.help_info {
+ position: fixed !important;
+ top: auto !important;
+ bottom: 56px !important;
+ left: 20px !important;
+ max-height: 70vh !important;
+ overflow-y: auto !important;
+}
+
+/* ========== Inbound Summary Hourly Report (AST_CLOSERsummary_hourly.php) ========== */
+form[action*="AST_CLOSERsummary_hourly.php"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ box-shadow: 0 2px 8px rgba(0,0,0,0.06) !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] input[type="TEXT"],
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1) !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+ box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15) !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+form[action*="AST_CLOSERsummary_hourly.php"] table[bgcolor="#D9E6FE"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+body:has(form[action*="AST_CLOSERsummary_hourly.php"]) table[cellpadding="3"]:first-of-type {
+ width: 100% !important;
+}
+
+body:has(form[action*="AST_CLOSERsummary_hourly.php"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border: 1px solid var(--shadow-text) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="AST_CLOSERsummary_hourly.php"]) pre a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+}
+
+body:has(form[action*="AST_CLOSERsummary_hourly.php"]) pre a:hover {
+ text-decoration: underline !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="AST_CLOSERsummary_hourly.php"]) pre font[size="2"] {
+ font-size: 12px !important;
+}
+
+/* Inbound Summary Hourly Report: título e icono ayuda fijados abajo (flotantes) */
+body:has(form[action*="AST_CLOSERsummary_hourly.php"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="AST_CLOSERsummary_hourly.php"]) > table[bgcolor="#015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+ box-shadow: 0 -2px 10px rgba(0,0,0,0.06) !important;
+}
+
+body:has(form[action*="AST_CLOSERsummary_hourly.php"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 280px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+/* Inbound Daily Report: título e icono ayuda fijados abajo (flotantes) */
+body:has(form[action*="AST_inbound_daily_report.php"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="AST_inbound_daily_report.php"]) > table[bgcolor="#015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form[action*="AST_inbound_daily_report.php"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 200px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+/* ========== Inbound Daily Report (AST_inbound_daily_report.php) - estilos del formulario y reporte ========== */
+form[action*="AST_inbound_daily_report.php"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] input[type="TEXT"],
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+form[action*="AST_inbound_daily_report.php"] table[bgcolor="#D9E6FE"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+/* Enlaces DOWNLOAD | MODIFY | REPORTS (fuera de la tabla #D9E6FE pero en la misma página) */
+body:has(form[action*="AST_inbound_daily_report.php"]) table[cellpadding="3"] a[href*="DOWNLOAD"],
+body:has(form[action*="AST_inbound_daily_report.php"]) table[cellpadding="3"] a[href*="MODIFY"],
+body:has(form[action*="AST_inbound_daily_report.php"]) table[cellpadding="3"] a[href*="REPORTS"] {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+body:has(form[action*="AST_inbound_daily_report.php"]) table[cellpadding="3"] a[href*="DOWNLOAD"]:hover,
+body:has(form[action*="AST_inbound_daily_report.php"]) table[cellpadding="3"] a[href*="MODIFY"]:hover,
+body:has(form[action*="AST_inbound_daily_report.php"]) table[cellpadding="3"] a[href*="REPORTS"]:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="AST_inbound_daily_report.php"]) table[cellpadding="3"] {
+ width: 100% !important;
+}
+
+body:has(form[action*="AST_inbound_daily_report.php"]) table[cellpadding="3"] td {
+ padding: 8px 0 !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="AST_inbound_daily_report.php"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="AST_inbound_daily_report.php"]) pre font[size="2"] {
+ font-size: 12px !important;
+}
+
+/* Inbound DID Report: título e icono ayuda fijados abajo (flotantes) */
+body:has(form[action*="AST_DIDstats.php"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="AST_DIDstats.php"]) > table[bgcolor="#015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+ box-shadow: 0 -2px 10px rgba(0,0,0,0.06) !important;
+}
+
+body:has(form[action*="AST_DIDstats.php"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 200px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+/* ========== Inbound DID Report (AST_DIDstats.php) - estilos del formulario y reporte ========== */
+form[action*="AST_DIDstats.php"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] input[type="TEXT"],
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+form[action*="AST_DIDstats.php"] table[bgcolor="#D9E6FE"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+body:has(form[action*="AST_DIDstats.php"]) table[cellpadding="3"] a[href*="DOWNLOAD"],
+body:has(form[action*="AST_DIDstats.php"]) table[cellpadding="3"] a[href*="MODIFY"],
+body:has(form[action*="AST_DIDstats.php"]) table[cellpadding="3"] a[href*="REPORTS"] {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+body:has(form[action*="AST_DIDstats.php"]) table[cellpadding="3"] a[href*="DOWNLOAD"]:hover,
+body:has(form[action*="AST_DIDstats.php"]) table[cellpadding="3"] a[href*="MODIFY"]:hover,
+body:has(form[action*="AST_DIDstats.php"]) table[cellpadding="3"] a[href*="REPORTS"]:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="AST_DIDstats.php"]) table[cellpadding="3"] {
+ width: 100% !important;
+}
+
+body:has(form[action*="AST_DIDstats.php"]) table[cellpadding="3"] td {
+ padding: 8px 0 !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="AST_DIDstats.php"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="AST_DIDstats.php"]) pre font[size="2"] {
+ font-size: 12px !important;
+}
+
+/* Inbound DID Summary Report: título e icono ayuda fijados abajo (flotantes) */
+body:has(form[action*="AST_DIDstats_v2.php"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="AST_DIDstats_v2.php"]) > table[bgcolor="#015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+ box-shadow: 0 -2px 10px rgba(0,0,0,0.06) !important;
+}
+
+body:has(form[action*="AST_DIDstats_v2.php"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 260px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+/* ========== Inbound DID Summary Report (AST_DIDstats_v2.php) - estilos del formulario y reporte ========== */
+form[action*="AST_DIDstats_v2.php"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] input[type="TEXT"],
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+form[action*="AST_DIDstats_v2.php"] table[bgcolor="#D9E6FE"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+body:has(form[action*="AST_DIDstats_v2.php"]) table[cellpadding="3"] a[href*="DOWNLOAD"],
+body:has(form[action*="AST_DIDstats_v2.php"]) table[cellpadding="3"] a[href*="MODIFY"],
+body:has(form[action*="AST_DIDstats_v2.php"]) table[cellpadding="3"] a[href*="REPORTS"] {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+body:has(form[action*="AST_DIDstats_v2.php"]) table[cellpadding="3"] a[href*="DOWNLOAD"]:hover,
+body:has(form[action*="AST_DIDstats_v2.php"]) table[cellpadding="3"] a[href*="MODIFY"]:hover,
+body:has(form[action*="AST_DIDstats_v2.php"]) table[cellpadding="3"] a[href*="REPORTS"]:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="AST_DIDstats_v2.php"]) table[cellpadding="3"] {
+ width: 100% !important;
+}
+
+body:has(form[action*="AST_DIDstats_v2.php"]) table[cellpadding="3"] td {
+ padding: 8px 0 !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="AST_DIDstats_v2.php"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="AST_DIDstats_v2.php"]) pre font[size="2"] {
+ font-size: 12px !important;
+}
+
+/* Inbound IVR Report: título e icono ayuda fijados abajo (flotantes) */
+body:has(form[action*="AST_IVRstats.php"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="IVRstats"]) > table[bgcolor="#015B91"] + b,
+body:has(form[action*="IVRstats"]) > table[bgcolor="015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form[action*="AST_IVRstats.php"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 200px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+/* ========== Inbound IVR Report (AST_IVRstats.php) - estilos del formulario y reporte ========== */
+form[action*="IVRstats"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="IVRstats"] > table {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+}
+
+form[action*="IVRstats"] > table td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="AST_IVRstats.php"] table[bgcolor="#D9E6FE"] input[type="TEXT"],
+form[action*="AST_IVRstats.php"] table[bgcolor="#D9E6FE"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="IVRstats"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="IVRstats"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="AST_IVRstats.php"] table[bgcolor="#D9E6FE"] input[type="submit"],
+form[action*="AST_IVRstats.php"] table[bgcolor="#D9E6FE"] input[type="button"][value="SUBMIT"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="AST_IVRstats.php"] table[bgcolor="#D9E6FE"] input[type="submit"]:hover,
+form[action*="AST_IVRstats.php"] table[bgcolor="#D9E6FE"] input[type="button"][value="SUBMIT"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="IVRstats"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="AST_IVRstats.php"] table[bgcolor="#D9E6FE"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="IVRstats"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+form[action*="AST_IVRstats.php"] table[bgcolor="#D9E6FE"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+body:has(form[action*="AST_IVRstats.php"]) table[cellpadding="3"] a[href*="DOWNLOAD"],
+body:has(form[action*="AST_IVRstats.php"]) table[cellpadding="3"] a[href*="MODIFY"],
+body:has(form[action*="AST_IVRstats.php"]) table[cellpadding="3"] a[href*="REPORTS"],
+body:has(form[action*="AST_IVRstats.php"]) table[cellpadding="3"] a[href*="AST_CLOSERstats"] {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+body:has(form[action*="AST_IVRstats.php"]) table[cellpadding="3"] a[href*="DOWNLOAD"]:hover,
+body:has(form[action*="AST_IVRstats.php"]) table[cellpadding="3"] a[href*="MODIFY"]:hover,
+body:has(form[action*="AST_IVRstats.php"]) table[cellpadding="3"] a[href*="REPORTS"]:hover,
+body:has(form[action*="AST_IVRstats.php"]) table[cellpadding="3"] a[href*="AST_CLOSERstats"]:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="AST_IVRstats.php"]) table[cellpadding="3"] {
+ width: 100% !important;
+}
+
+body:has(form[action*="AST_IVRstats.php"]) table[cellpadding="3"] td {
+ padding: 8px 0 !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="AST_IVRstats.php"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="AST_IVRstats.php"]) pre font[size="2"],
+body:has(form[action*="AST_IVRstats.php"]) pre font[size="0"] {
+ font-size: 12px !important;
+}
+
+/* ========== Inbound Forecasting Report: barra fija, formulario y reporte ========== */
+body:has(form[action*="inbound_forecasting"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="inbound_forecasting"]) form > b,
+body:has(form[action*="inbound_forecasting"]) > table[bgcolor="#015B91"] + form > b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form[action*="inbound_forecasting"]) form > b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 200px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+form[action*="inbound_forecasting"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="inbound_forecasting"] table[bgcolor="#D9E6FE"],
+form[action*="inbound_forecasting"] table[cellpadding="3"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ border: none !important;
+ box-shadow: none !important;
+}
+
+form[action*="inbound_forecasting"] table[bgcolor="#D9E6FE"] td,
+form[action*="inbound_forecasting"] table[cellpadding="3"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="inbound_forecasting"] input[type="TEXT"],
+form[action*="inbound_forecasting"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="inbound_forecasting"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="inbound_forecasting"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="inbound_forecasting"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="inbound_forecasting"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="inbound_forecasting"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="inbound_forecasting"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="inbound_forecasting"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="inbound_forecasting"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="inbound_forecasting"]) pre font[size="2"],
+body:has(form[action*="inbound_forecasting"]) pre font[size="0"] {
+ font-size: 12px !important;
+}
+
+/* ========== Advanced Forecasting Report (Erlang_report.php): barra fija, formulario y reporte ========== */
+body:has(form[action*="Erlang_report"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="Erlang_report"]) form > b,
+body:has(form[action*="Erlang_report"]) > table[bgcolor="#015B91"] + form > b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form[action*="Erlang_report"]) form > b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 200px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+form[action*="Erlang_report"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="Erlang_report"] table[bgcolor="#D9E6FE"],
+form[action*="Erlang_report"] table[cellpadding="3"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ border: none !important;
+ box-shadow: none !important;
+}
+
+form[action*="Erlang_report"] table[bgcolor="#D9E6FE"] td,
+form[action*="Erlang_report"] table[cellpadding="3"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="Erlang_report"] input[type="TEXT"],
+form[action*="Erlang_report"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="Erlang_report"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="Erlang_report"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="Erlang_report"] input[type="radio"] {
+ cursor: pointer !important;
+ margin-right: 6px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+form[action*="Erlang_report"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="Erlang_report"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="Erlang_report"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="Erlang_report"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="Erlang_report"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="Erlang_report"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="Erlang_report"]) pre font[size="2"],
+body:has(form[action*="Erlang_report"]) pre font[size="0"] {
+ font-size: 12px !important;
+}
+
+/* ========== Outbound Calling Report (AST_VDADstats.php): barra fija, formulario y reporte ========== */
+body:has(form[action*="VDADstats"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="VDADstats"]) > table[bgcolor="#015B91"] + b,
+body:has(form[action*="VDADstats"]) > table[bgcolor="015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form[action*="VDADstats"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"],
+body:has(form[action*="VDADstats"]) > table[bgcolor="015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 200px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+form[action*="VDADstats"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ box-sizing: border-box !important;
+}
+
+body:has(form[action*="VDADstats"]) table[bgcolor="#D9E6FE"],
+body:has(form[action*="VDADstats"]) table[cellpadding="3"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ border: none !important;
+ box-shadow: none !important;
+}
+
+body:has(form[action*="VDADstats"]) table[bgcolor="#D9E6FE"] td,
+body:has(form[action*="VDADstats"]) table[cellpadding="3"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="VDADstats"] input[type="TEXT"],
+form[action*="VDADstats"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="VDADstats"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="VDADstats"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="VDADstats"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="VDADstats"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="VDADstats"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+form[action*="VDADstats"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="VDADstats"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="VDADstats"]) table[cellpadding="3"] font,
+form[action*="VDADstats"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="VDADstats"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="VDADstats"]) pre font[size="2"],
+body:has(form[action*="VDADstats"]) pre font[size="0"] {
+ font-size: 12px !important;
+}
+
+/* ========== Outbound Summary Interval Report (AST_OUTBOUNDsummary_interval.php) ========== */
+body:has(form[action*="OUTBOUNDsummary_interval"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="OUTBOUNDsummary_interval"]) > table[bgcolor="#015B91"] + b,
+body:has(form[action*="OUTBOUNDsummary_interval"]) > table[bgcolor="015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form[action*="OUTBOUNDsummary_interval"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"],
+body:has(form[action*="OUTBOUNDsummary_interval"]) > table[bgcolor="015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 200px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+form[action*="OUTBOUNDsummary_interval"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ box-sizing: border-box !important;
+}
+
+body:has(form[action*="OUTBOUNDsummary_interval"]) table[bgcolor="#D9E6FE"],
+body:has(form[action*="OUTBOUNDsummary_interval"]) table[cellpadding="3"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ border: none !important;
+ box-shadow: none !important;
+}
+
+body:has(form[action*="OUTBOUNDsummary_interval"]) table[bgcolor="#D9E6FE"] td,
+body:has(form[action*="OUTBOUNDsummary_interval"]) table[cellpadding="3"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="OUTBOUNDsummary_interval"] input[type="TEXT"],
+form[action*="OUTBOUNDsummary_interval"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="OUTBOUNDsummary_interval"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="OUTBOUNDsummary_interval"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="OUTBOUNDsummary_interval"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="OUTBOUNDsummary_interval"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="OUTBOUNDsummary_interval"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+form[action*="OUTBOUNDsummary_interval"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="OUTBOUNDsummary_interval"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="OUTBOUNDsummary_interval"]) table[cellpadding="3"] font,
+form[action*="OUTBOUNDsummary_interval"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="OUTBOUNDsummary_interval"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="OUTBOUNDsummary_interval"]) pre font[size="2"],
+body:has(form[action*="OUTBOUNDsummary_interval"]) pre font[size="0"] {
+ font-size: 12px !important;
+}
+
+/* ========== Callmenu Survey Report (AST_CMstats.php) ========== */
+body:has(form[action*="CMstats"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="CMstats"]) > table[bgcolor="#015B91"] + b,
+body:has(form[action*="CMstats"]) > table[bgcolor="015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form[action*="CMstats"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"],
+body:has(form[action*="CMstats"]) > table[bgcolor="015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 200px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+form[action*="CMstats"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ box-sizing: border-box !important;
+}
+
+body:has(form[action*="CMstats"]) table[bgcolor="#D9E6FE"],
+body:has(form[action*="CMstats"]) table[cellpadding="3"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ border: none !important;
+ box-shadow: none !important;
+}
+
+body:has(form[action*="CMstats"]) table[bgcolor="#D9E6FE"] td,
+body:has(form[action*="CMstats"]) table[cellpadding="3"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="CMstats"] input[type="TEXT"],
+form[action*="CMstats"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="CMstats"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="CMstats"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="CMstats"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="CMstats"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="CMstats"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+form[action*="CMstats"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="CMstats"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="CMstats"]) table[cellpadding="3"] font,
+form[action*="CMstats"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="CMstats"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="CMstats"]) pre font[size="2"],
+body:has(form[action*="CMstats"]) pre font[size="0"] {
+ font-size: 12px !important;
+}
+
+/* ========== Export Calls Report IVR (call_report_export.php with ivr_export=YES) ========== */
+body:has(form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"])) center {
+ text-align: left !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ margin: 0 !important;
+ margin-left: 0 !important;
+ margin-right: auto !important;
+ padding: 0 !important;
+ width: fit-content !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ display: block !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) table {
+ border-collapse: collapse !important;
+ background: transparent !important;
+ border: none !important;
+ margin-left: 0 !important;
+ margin-right: auto !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) td {
+ padding: 10px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) input[type="TEXT"],
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) select[size] {
+ min-height: 120px !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) input[type="radio"] {
+ cursor: pointer !important;
+ margin-right: 6px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 24px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) font,
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) .select_bold,
+form[action*="call_report_export"]:has(input[name="ivr_export"][value="YES"]) b {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+/* ========== ADMINISTRATION: DIDs (INBOUND DID LISTINGS, ADD=1300) ========== */
+body:has(#adminDIDdisplay) #adminDIDdisplay {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+#adminDIDdisplay form table[width="850"] {
+ width: 100% !important;
+ max-width: 850px !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.06) !important;
+}
+
+#adminDIDdisplay form table[width="850"] td {
+ padding: 10px 12px !important;
+ font-size: 13px !important;
+ vertical-align: middle !important;
+}
+
+#adminDIDdisplay form table[width="850"] tr[bgcolor="#e6e6e6"],
+#adminDIDdisplay form table[width="850"] tr[bgcolor="#E6E6E6"] {
+ background: var(--color-bg-lighter) !important;
+}
+
+#adminDIDdisplay form table[width="850"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+#adminDIDdisplay form table[width="850"] input[type="submit"].blue_btn,
+#adminDIDdisplay form table[width="850"] input[type="submit"][value="FILTER DIDS"] {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 600 !important;
+ padding: 8px 16px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease !important;
+}
+
+#adminDIDdisplay form table[width="850"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+}
+
+#adminDIDdisplay form table[width="850"] tr[bgcolor="BLACK"],
+#adminDIDdisplay form table[width="850"] tr[bgcolor="black"] {
+ background: var(--color-primary-dark) !important;
+}
+
+#adminDIDdisplay form table[width="850"] tr[bgcolor="BLACK"] td,
+#adminDIDdisplay form table[width="850"] tr[bgcolor="black"] td,
+#adminDIDdisplay form table[width="850"] tr[bgcolor="BLACK"] a,
+#adminDIDdisplay form table[width="850"] tr[bgcolor="black"] a {
+ color: var(--color-text-light) !important;
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 600 !important;
+}
+
+#adminDIDdisplay form table[width="850"] tr[bgcolor="BLACK"] a:hover,
+#adminDIDdisplay form table[width="850"] tr[bgcolor="black"] a:hover {
+ text-decoration: underline !important;
+}
+
+#adminDIDdisplay .records_list_y,
+#adminDIDdisplay .records_list_x {
+ background: var(--color-bg-lighter) !important;
+ transition: background 0.15s ease !important;
+}
+
+#adminDIDdisplay .records_list_y:hover,
+#adminDIDdisplay .records_list_x:hover {
+ background: var(--bg-decorative-1) !important;
+}
+
+#adminDIDdisplay .records_list_y td,
+#adminDIDdisplay .records_list_x td,
+#adminDIDdisplay .records_list_y font,
+#adminDIDdisplay .records_list_x font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+#adminDIDdisplay .records_list_y a,
+#adminDIDdisplay .records_list_x a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+}
+
+#adminDIDdisplay .records_list_y a:hover,
+#adminDIDdisplay .records_list_x a:hover {
+ color: var(--color-primary-dark) !important;
+ text-decoration: underline !important;
+}
+
+body:has(#adminDIDdisplay) td font[color="BLACK"]:first-of-type,
+body:has(#adminDIDdisplay) td font[color="black"]:first-of-type {
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-text-dark) !important;
+}
+
+/* ========== Administration: Maximum System Stats (admin.php ADD=999992) ========== */
+body:has(a[href*="download_max_system_stats_metric_name"]) {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) center {
+ text-align: left !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) form[name="vicidial_report"] input[type="TEXT"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) form[name="vicidial_report"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 600 !important;
+ padding: 8px 16px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) form[name="vicidial_report"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) a[href*="download_max_system_stats_metric_name"] {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 4px 10px !important;
+ border-radius: 6px !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) a[href*="download_max_system_stats_metric_name"]:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) table[width="850"] {
+ width: 100% !important;
+ max-width: 850px !important;
+ border-collapse: collapse !important;
+ margin: 16px 0 !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) tr[bgcolor="#B6D3FC"] {
+ background: var(--color-bg-lighter) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) tr[bgcolor="#B6D3FC"] td {
+ padding: 16px !important;
+ vertical-align: top !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) table[summary*="day total"] {
+ font-family: var(--font-family) !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ overflow: hidden !important;
+ border: 1px solid var(--color-primary-light) !important;
+ margin: 12px 0 !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) table[summary*="day total"] caption {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ color: var(--color-text-dark) !important;
+ padding: 10px 12px !important;
+ text-align: left !important;
+ background: var(--color-bg-lighter) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) table[summary*="day total"] th {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 600 !important;
+ color: var(--color-text-dark) !important;
+ padding: 8px 12px !important;
+ text-align: left !important;
+ background: var(--color-bg-lighter) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) .chart_td {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ color: var(--color-text-dark) !important;
+ padding: 6px 12px !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+ background: var(--color-bg-white) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) table[summary*="day total"] .chart_td font {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) font[color="BLACK"],
+body:has(a[href*="download_max_system_stats_metric_name"]) font[color="black"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) b:first-of-type {
+ font-family: var(--font-family) !important;
+ font-size: 15px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+}
+
+/* ========== Administration: Maximum System Stats (admin.php ADD=999992) ========== */
+body:has(a[href*="download_max_system_stats_metric_name"]) {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) center {
+ text-align: left !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) form[name="vicidial_report"] input[type="TEXT"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) form[name="vicidial_report"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 600 !important;
+ padding: 8px 16px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) form[name="vicidial_report"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) a[href*="download_max_system_stats_metric_name"] {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 4px 10px !important;
+ border-radius: 6px !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) a[href*="download_max_system_stats_metric_name"]:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) table[width="850"] {
+ width: 100% !important;
+ max-width: 850px !important;
+ border-collapse: collapse !important;
+ margin: 16px 0 !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) tr[bgcolor="#B6D3FC"] {
+ background: var(--color-bg-lighter) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) tr[bgcolor="#B6D3FC"] td {
+ padding: 16px !important;
+ vertical-align: top !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) table[summary*="day total"] {
+ font-family: var(--font-family) !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 10px !important;
+ overflow: hidden !important;
+ border: 1px solid var(--color-primary-light) !important;
+ margin: 12px 0 !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) table[summary*="day total"] caption {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ color: var(--color-text-dark) !important;
+ padding: 10px 12px !important;
+ text-align: left !important;
+ background: var(--color-bg-lighter) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) table[summary*="day total"] th {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 600 !important;
+ color: var(--color-text-dark) !important;
+ padding: 8px 12px !important;
+ text-align: left !important;
+ background: var(--color-bg-lighter) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) .chart_td {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ color: var(--color-text-dark) !important;
+ padding: 6px 12px !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+ background: var(--color-bg-white) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) table[summary*="day total"] .chart_td font {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) font[color="BLACK"],
+body:has(a[href*="download_max_system_stats_metric_name"]) font[color="black"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(a[href*="download_max_system_stats_metric_name"]) b:first-of-type {
+ font-family: var(--font-family) !important;
+ font-size: 15px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+}
+
+/* ========== Agent Time Detail (AST_agent_time_detail.php): quitar position absolute y estilos ========== */
+body:has(form[action*="agent_time_detail"]) {
+ text-align: left !important;
+}
+
+body:has(form[action*="agent_time_detail"]) center {
+ text-align: left !important;
+ display: block !important;
+}
+
+body:has(form[action*="agent_time_detail"]) #admin_header,
+body:has(form[action*="agent_time_detail"]) #agent_status_stats,
+body:has(form[action*="agent_time_detail"]) #agent_status_bars {
+ position: static !important;
+ left: auto !important;
+ top: auto !important;
+ right: auto !important;
+ z-index: auto !important;
+ display: block !important;
+ float: none !important;
+ transform: none !important;
+}
+
+/* Anular estilo en línea del span (position:absolute; left:3px; top:30px) */
+body:has(form[action*="agent_time_detail"]) span#agent_status_stats,
+span#agent_status_stats:has(form[action*="agent_time_detail"]) {
+ position: static !important;
+ left: 0 !important;
+ top: auto !important;
+ right: auto !important;
+ margin-left: 0 !important;
+ margin-right: auto !important;
+ float: left !important;
+ clear: left !important;
+}
+
+body:has(form[action*="agent_time_detail"]) #admin_header {
+ width: 100% !important;
+}
+
+body:has(form[action*="agent_time_detail"]) #agent_status_stats {
+ text-align: left !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+}
+
+body:has(form[action*="agent_time_detail"]) #admin_header table[bgcolor="#015B91"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+}
+
+body:has(form[action*="agent_time_detail"]) #admin_header a {
+ color: var(--color-text-light) !important;
+ text-decoration: none !important;
+}
+
+body:has(form[action*="agent_time_detail"]) #admin_header a:hover {
+ text-decoration: underline !important;
+}
+
+body:has(form[action*="agent_time_detail"]) #agent_status_stats b {
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="agent_time_detail"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ margin: 0 !important;
+ margin-left: 0 !important;
+ margin-right: auto !important;
+ padding: 20px 0 !important;
+ display: block !important;
+ width: fit-content !important;
+ max-width: 100% !important;
+ text-align: left !important;
+}
+
+form[action*="agent_time_detail"] table[bgcolor="#D9E6FE"] {
+ width: 100% !important;
+ max-width: 1000px !important;
+ margin-left: 0 !important;
+ margin-right: auto !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ border: none !important;
+ box-shadow: none !important;
+}
+
+form[action*="agent_time_detail"] table[bgcolor="#D9E6FE"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+}
+
+form[action*="agent_time_detail"] input[type="TEXT"],
+form[action*="agent_time_detail"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="agent_time_detail"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="agent_time_detail"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="agent_time_detail"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+form[action*="agent_time_detail"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+form[action*="agent_time_detail"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+form[action*="agent_time_detail"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="agent_time_detail"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="agent_time_detail"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="agent_time_detail"]) #agent_status_stats pre {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ line-height: 1.5 !important;
+ color: var(--color-text-dark) !important;
+ background: transparent !important;
+ padding: 12px 0 !important;
+ margin: 0 0 12px 0 !important;
+ white-space: pre-wrap !important;
+}
+
+/* Agent DID Report: título e icono ayuda fijados abajo (flotantes) */
+body:has(form[action*="AST_agentDIDstats.php"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="AST_agentDIDstats.php"]) > table:first-of-type + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+ box-shadow: 0 -2px 10px rgba(0,0,0,0.06) !important;
+}
+
+body:has(form[action*="AST_agentDIDstats.php"]) > table:first-of-type + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 180px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+/* Agent DID Report: estilos del formulario, tabla de filtros y pre */
+form[action*="AST_agentDIDstats.php"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ box-shadow: 0 2px 8px rgba(0,0,0,0.06) !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] input[type="TEXT"],
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] select[size] {
+ min-height: 80px !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1) !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+ box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15) !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+form[action*="AST_agentDIDstats.php"] table[bgcolor="#D9E6FE"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="AST_agentDIDstats.php"]) table[cellpadding="3"] {
+ width: 100% !important;
+}
+
+body:has(form[action*="AST_agentDIDstats.php"]) pre {
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border: 1px solid var(--shadow-text) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ margin: 16px 0 0 0 !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="AST_agentDIDstats.php"]) pre a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+}
+
+body:has(form[action*="AST_agentDIDstats.php"]) pre a:hover {
+ text-decoration: underline !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="AST_agentDIDstats.php"]) pre font[size="2"] {
+ font-size: 12px !important;
+}
+
+/* ========== Inbound Service Level Report (AST_CLOSER_service_level.php) - estilos completos ========== */
+form[action*="AST_CLOSER_service_level"] {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ max-width: 1200px !important;
+ margin: 0 !important;
+ padding: 20px !important;
+ box-sizing: border-box !important;
+}
+
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ background: var(--color-bg-lighter) !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ box-shadow: 0 2px 8px rgba(0,0,0,0.06) !important;
+}
+
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] td {
+ padding: 12px 14px !important;
+ vertical-align: top !important;
+ font-size: 13px !important;
+ border: none !important;
+}
+
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] input[type="TEXT"],
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] select[size] {
+ min-height: 80px !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) table[bgcolor="#D9E6FE"] input[type="submit"],
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 20px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1) !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) table[bgcolor="#D9E6FE"] input[type="submit"]:hover,
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+ box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15) !important;
+}
+
+/* DOWNLOAD | MODIFY | REPORTS y Search archived data (también con body:has porque el form está dentro de la table) */
+body:has(form[action*="AST_CLOSER_service_level"]) table[bgcolor="#D9E6FE"] a,
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) table[bgcolor="#D9E6FE"] a:hover,
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) table[bgcolor="#D9E6FE"] font,
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] font {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) table[bgcolor="#D9E6FE"] input[type="checkbox"],
+form[action*="AST_CLOSER_service_level"] table[bgcolor="#D9E6FE"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) table[cellpadding="3"]:first-of-type {
+ width: 100% !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) pre {
+ display: block !important;
+ clear: both !important;
+ margin-top: 16px !important;
+ width: 100% !important;
+ box-sizing: border-box !important;
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace !important;
+ font-size: 12px !important;
+ line-height: 1.45 !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ border: 1px solid var(--shadow-text) !important;
+ border-radius: 10px !important;
+ padding: 16px 20px !important;
+ overflow-x: auto !important;
+ white-space: pre !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) pre a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) pre a:hover {
+ text-decoration: underline !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) pre font[size="2"] {
+ font-size: 12px !important;
+}
+
+/* Inbound Service Level Report: título e icono ayuda fijados abajo (flotantes) */
+body:has(form[action*="AST_CLOSER_service_level"]) {
+ padding-bottom: 56px !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) > table[bgcolor="#015B91"] + b {
+ position: fixed !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ z-index: 9998 !important;
+ margin: 0 !important;
+ padding: 12px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark) !important;
+ background: var(--color-bg-lighter) !important;
+ border-top: 1px solid var(--color-primary-light) !important;
+ box-shadow: 0 -2px 10px rgba(0,0,0,0.06) !important;
+}
+
+body:has(form[action*="AST_CLOSER_service_level"]) > table[bgcolor="#015B91"] + b + img[alt="HELP"] {
+ position: fixed !important;
+ bottom: 12px !important;
+ left: 240px !important;
+ z-index: 9999 !important;
+ vertical-align: middle !important;
+}
+
+/* ========== Modify In-Group (admin.php?ADD=3111) ========== */
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] {
+ border-collapse: collapse !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ box-shadow: 0 2px 12px rgba(0,0,0,0.06) !important;
+ border: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] tr[bgcolor="#B6D3FC"] {
+ background: var(--color-bg-lighter) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] tr[bgcolor="#B6D3FC"] td {
+ padding: 10px 14px !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+
+ vertical-align: middle !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] tr[bgcolor="#BDFFBD"] {
+ background: var(--bg-decorative-1) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] tr[bgcolor="#BDFFBD"] td {
+ padding: 10px 14px !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] tr[bgcolor="#99FFCC"] {
+ background: rgba(153, 255, 204, 0.25) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] tr[bgcolor="#99FFCC"] td {
+ padding: 10px 14px !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] tr[bgcolor="#CCFFFF"] {
+ background: rgba(204, 255, 255, 0.3) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] tr[bgcolor="#CCFFFF"] td {
+ padding: 10px 14px !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] tr[bgcolor="#8EBCFD"] {
+ background: rgba(142, 188, 253, 0.2) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] tr[bgcolor="#8EBCFD"] td {
+ padding: 10px 14px !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 24px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+ box-shadow: 0 2px 6px rgba(0,0,0,0.1) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+ box-shadow: 0 3px 8px rgba(0,0,0,0.15) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] input[type="checkbox"] {
+ cursor: pointer !important;
+ margin-right: 8px !important;
+ width: 16px !important;
+ height: 16px !important;
+ accent-color: var(--color-primary-medium) !important;
+ vertical-align: middle !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] font {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) form#admin_form table[width="900"] font[color="red"] {
+ color: var(--color-error, #c62828) !important;
+}
+
+/* Título "MODIFY A GROUPS RECORD" y enlaces inferiores en la misma zona */
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] font:has(+ form#admin_form),
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] > table > tbody > tr > td > font[face="ARIAL,HELVETICA"] {
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] a[href*="AST_CLOSERstats"],
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] a[href*="AST_VICIDIAL_ingrouplist"],
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] a[href*="admin.php?ADD=5111"],
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] a[href*="ADD=720000000000000"] {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 4px 8px !important;
+ border-radius: 4px !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] a[href*="AST_CLOSERstats"]:hover,
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] a[href*="AST_VICIDIAL_ingrouplist"]:hover,
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] a[href*="admin.php?ADD=5111"]:hover,
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] a[href*="ADD=720000000000000"]:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+/* Tabla AGENT RANKS y tablas DIDs / CALL MENUS / CAMPAIGNS */
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] table[width="800"] {
+ border-collapse: collapse !important;
+ border-radius: 10px !important;
+ overflow: hidden !important;
+ border: 1px solid var(--color-primary-light) !important;
+ box-shadow: 0 2px 8px rgba(0,0,0,0.06) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] table[width="800"] tr:first-child td {
+ background: var(--color-bg-lighter) !important;
+ font-family: var(--font-family) !important;
+ font-weight: 600 !important;
+ font-size: 13px !important;
+ color: var(--color-primary-dark) !important;
+ padding: 10px 12px !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] table[width="800"] tr[bgcolor="#B9CBFD"] td,
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] table[width="800"] tr[bgcolor="#9BB9FB"] td {
+ padding: 8px 12px !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] table[width="800"] tr[bgcolor="#B9CBFD"] {
+ background: var(--color-bg-lighter) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] table[width="800"] tr[bgcolor="#9BB9FB"] {
+ background: rgba(155, 185, 251, 0.25) !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] table[width="800"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+}
+
+body:has(form#admin_form input[name="ADD"][value="4111"]) td[bgcolor="#D9E6FE"] table[width="800"] a:hover {
+ color: var(--color-primary-dark) !important;
+ text-decoration: underline !important;
+}
+
+/* ========== Modify DID (admin.php?ADD=4311) ========== */
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] {
+ border-collapse: collapse !important;
+ background: var(--color-bg-white) !important;
+ border-radius: 12px !important;
+ overflow: hidden !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] tr[bgcolor="#B6D3FC"] {
+ background: var(--color-bg-lighter) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] tr[bgcolor="#B6D3FC"] td {
+ padding: 10px 14px !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] tr[bgcolor="#99FFCC"] {
+ background: rgba(153, 255, 204, 0.25) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] tr[bgcolor="#99FFCC"] td {
+ padding: 10px 14px !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] tr[bgcolor="#CCFFFF"] {
+ background: rgba(204, 255, 255, 0.3) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] tr[bgcolor="#CCFFFF"] td {
+ padding: 10px 14px !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] tr[bgcolor="#8EBCFD"] {
+ background: rgba(142, 188, 253, 0.2) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] tr[bgcolor="#8EBCFD"] td {
+ padding: 10px 14px !important;
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+ border-bottom: 1px solid var(--color-primary-light) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] input[type="text"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] select {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ padding: 8px 10px !important;
+ border: 1px solid var(--color-primary-light) !important;
+ border-radius: 8px !important;
+ color: var(--color-text-dark) !important;
+ background: var(--color-bg-white) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] select[size] {
+ min-height: 60px !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] input[type="submit"] {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ padding: 10px 24px !important;
+ color: var(--color-text-light) !important;
+ background: var(--color-primary-medium) !important;
+ border: none !important;
+ border-radius: 8px !important;
+ cursor: pointer !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] input[type="submit"]:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] img[alt="HELP"] {
+ vertical-align: middle !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) form table[width="850"] font {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark) !important;
+}
+
+/* Título "MODIFY A DID RECORD" y secciones inferiores (misma columna #D9E6FE) */
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] > table > tbody > tr > td > font[face="ARIAL,HELVETICA"],
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] > table > tbody > tr > td > b {
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] a[href*="admin.php?ADD="],
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] a[href*="AST_DIDstats"],
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] a[href*="user_stats"],
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] a[href*="ADD=5311"],
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] a[href*="ADD=720000000000000"] {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] a[href*="admin.php?ADD="]:hover,
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] a[href*="AST_DIDstats"]:hover,
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] a[href*="user_stats"]:hover,
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] a[href*="ADD=5311"]:hover,
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] a[href*="ADD=720000000000000"]:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark) !important;
+}
+
+/* Tablas de sección (IN-GROUPS USING THIS DID, LISTS USING THIS DID, etc.) */
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] > table > tbody > tr > td table {
+ border-collapse: collapse !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] > table > tbody > tr > td table td {
+ padding: 6px 10px !important;
+ color: var(--color-text-dark) !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] > table > tbody > tr > td table a {
+ color: var(--color-primary-medium) !important;
+ text-decoration: none !important;
+}
+
+body:has(form input[name="ADD"][value="4311"]) td[bgcolor="#D9E6FE"] > table > tbody > tr > td table a:hover {
+ color: var(--color-primary-dark) !important;
+ text-decoration: underline !important;
+}
+
+/*
+ * =============================================================================
+ * =============================================================================
+ * FIN ESTILOS DE ADMINISTRACIÓN
+ * (Wallboards, VERM Custom Report, reportes, estadísticas, realtime, etc.)
+ * =============================================================================
+ * =============================================================================
+ *
+ * INICIO COMPONENTE DE AGENTE (Agent web client)
+ * Pantalla del agente ViciDial: #vicidial_form, LoadingBox, tabs, overlays,
+ * transfer, disposition, alertas, footer, enlaces de acción, etc.
+ *
+ * =============================================================================
+ * =============================================================================
+ */
+
+
+/* AGENT_AREA */
+/* ========== Estilos visuales modernos (agente VICIDIAL) ========== */
+/* SCOPE: Solo dentro de #vicidial_form. Colores solo desde :root (sin modificar root). */
+#vicidial_form {
+ --vdc-radius: 8px;
+ --vdc-radius-sm: 6px;
+ --vdc-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+ --vdc-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1);
+ --vdc-transition: 0.2s ease;
+ --vdc-btn-width: 160px;
+ --vdc-content-max-width: 1200px; /* Ancho máximo del contenido (Tabs + panel + footer) */
+}
+
+/* ========== Override de colores inline del HTML (solo variables :root existentes) ========== */
+/* ========== LoadingBox (pantalla de carga del agente) - estilo moderno ========== */
+#vicidial_form #LoadingBox {
+ display: flex !important;
+ align-items: center;
+ justify-content: center;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh;
+ background: var(--color-bg-white, #fff) !important;
+ z-index: 2147483647 !important;
+}
+#vicidial_form #LoadingBox table {
+ width: auto !important;
+ max-width: 320px !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 20px;
+ background: var(--color-bg-white, #fff) !important;
+ border-radius: 16px;
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(0, 0, 0, 0.04);
+ border: none !important;
+}
+#vicidial_form #LoadingBox td {
+ padding: 32px 40px !important;
+ text-align: center !important;
+ vertical-align: middle !important;
+}
+#vicidial_form #LoadingBox .loading_text {
+ font-family: var(--font-family) !important;
+ font-size: 16px !important;
+ font-weight: 500 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ letter-spacing: 0.02em;
+ margin-bottom: 8px;
+ display: block;
+}
+#vicidial_form #LoadingBox img {
+ display: block !important;
+ margin: 12px auto 0 !important;
+ max-width: 100%;
+ height: auto;
+}
+#vicidial_form #Header table { background-color: var(--color-primary-medium) !important; }
+/* Tabs y contenido: responsive, alineado a la izquierda */
+#vicidial_form #Tabs {
+ max-width: var(--vdc-content-max-width) !important;
+ width: 1180px!important;
+ left: 0 !important;
+ margin-top: 30px !important;
+ box-sizing: border-box;
+}
+#vicidial_form #Tabs table {
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box;
+}
+#vicidial_form #Tabs table,
+#vicidial_form #Tabs table td[bgcolor] { background-color: var(--color-bg-white) !important; }
+#vicidial_form #WelcomeBoxA table { background-color: var(--color-bg-white) !important; }
+#vicidial_form #MainTable { background-color: var(--color-bg-lighter) !important; }
+#vicidial_form #MainStatuSSpan { background: var(--color-bg-lighter) !important; }
+#vicidial_form #post_phone_time_diff_span font,
+#vicidial_form #post_phone_time_diff_span .loading_text,
+#vicidial_form #blind_monitor_notice_span font { color: var(--color-text-dark) !important; }
+#vicidial_form #DiaLControl { background-color: transparent !important; }
+#vicidial_form #DiaLControl:hover { background-color: transparent !important; }
+#vicidial_form #RecorDControl { background-color: transparent !important; }
+#vicidial_form #RecorDControl:hover { background-color: transparent !important; }
+#vicidial_form #RecorDMute,
+#vicidial_form #StRecorDControl,
+#vicidial_form #ParkControl,
+#vicidial_form #XferControl,
+#vicidial_form #SendDTMF,
+#vicidial_form #ivrParkControl { background-color: transparent !important; }
+#vicidial_form #WebFormSpan,
+#vicidial_form #WebFormSpanTwo { background-color: transparent !important; }
+#vicidial_form #HangupControl { background-color: transparent !important; }
+#vicidial_form #MaiNfooter { background-color: var(--color-bg-white) !important; }
+#vicidial_form #callsinqueuedisplay,
+#vicidial_form #AgentViewSpan,
+#vicidial_form #webphoneSpan { background-color: var(--color-bg-lighter) !important; }
+#vicidial_form #ScriptPanel table,
+#vicidial_form #Script2Panel table,
+#vicidial_form #FormPanel table,
+#vicidial_form #EmailPanel table,
+#vicidial_form #CustomerChatPanel table,
+#vicidial_form #InternalChatPanel table { background-color: var(--color-bg-white) !important; }
+
+/* Ocultar imagen solo en estos botones (texto con ::before); los logos (Tabs, LoadingBox) se mantienen */
+#vicidial_form #DiaLControl > a > img,
+#vicidial_form #DiaLControl > img,
+#vicidial_form #RecorDControl > a > img,
+#vicidial_form #RecorDControl > img,
+#vicidial_form #StRecorDControl > img,
+#vicidial_form #WebFormSpan > img,
+#vicidial_form #WebFormSpan > a > img,
+#vicidial_form #WebFormSpanTwo > img,
+#vicidial_form #WebFormSpanTwo > a > img,
+#vicidial_form #ParkControl > img,
+#vicidial_form #ParkControl > a > img,
+#vicidial_form #XferControl > img,
+#vicidial_form #HangupControl > a > img,
+#vicidial_form #HangupControl > img,
+#vicidial_form #SendDTMF > a > img {
+ display: none !important;
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden !important;
+ position: absolute !important;
+ left: -9999px !important;
+}
+/* Texto en lugar de imagen solo en estos botones (logos NO) */
+#vicidial_form #DiaLControl > a::before { content: "Dial Next Number"; }
+#vicidial_form #DiaLControl > a:has(img[alt="You are paused"])::before { content: "YOU ARE PAUSED"; }
+#vicidial_form #DiaLControl > a:has(img[alt="You are active"])::before { content: "YOU ARE ACTIVE"; }
+/* Cuando DiaLControl solo tiene img (sin ): mostrar texto para no ver la imagen */
+#vicidial_form #DiaLControl:not(:has(> a))::before { content: "Dial Next Number"; }
+#vicidial_form #RecorDControl > a:not(:has(img[alt="Stop Recording"]))::before { content: "Start Recording"; }
+#vicidial_form #RecorDControl > a:has(img[alt="Stop Recording"])::before { content: "Stop Recording"; }
+#vicidial_form #StRecorDControl::before { content: "Start Stereo Recording"; }
+#vicidial_form #WebFormSpan::before { content: "Web Form"; }
+#vicidial_form #WebFormSpanTwo::before { content: "Web Form 2"; }
+#vicidial_form #ParkControl::before { content: "Park Call"; }
+#vicidial_form #ParkControl:has(> a)::before { content: "Grab Parked Call"; }
+#vicidial_form #XferControl::before { content: "Transfer - Conference"; }
+#vicidial_form #HangupControl::before { content: "Hangup Customer"; }
+#vicidial_form #SendDTMF > a::before { content: "Send DTMF"; }
+/* Contenedores de botones con texto: display para que se vea el ::before */
+#vicidial_form #DiaLControl > a,
+#vicidial_form #DiaLControl:not(:has(> a)),
+#vicidial_form #RecorDControl > a,
+#vicidial_form #SendDTMF > a { display: inline-block !important; }
+#vicidial_form #StRecorDControl,
+#vicidial_form #WebFormSpan,
+#vicidial_form #WebFormSpanTwo,
+#vicidial_form #ParkControl,
+#vicidial_form #XferControl,
+#vicidial_form #HangupControl { display: inline-block !important; }
+/* Estilo del texto (::before) solo en estos botones */
+#vicidial_form #DiaLControl > a::before,
+#vicidial_form #DiaLControl:not(:has(> a))::before,
+#vicidial_form #RecorDControl > a::before,
+#vicidial_form #SendDTMF a::before,
+#vicidial_form #StRecorDControl::before,
+#vicidial_form #WebFormSpan::before,
+#vicidial_form #WebFormSpanTwo::before,
+#vicidial_form #ParkControl::before,
+#vicidial_form #XferControl::before,
+#vicidial_form #HangupControl::before {
+ display: inline-block;
+ font-family: var(--font-family);
+ font-size: var(--font-size-p2);
+ font-weight: 500;
+ padding: 6px 10px;
+ border-radius: var(--vdc-radius-sm);
+ background: transparent;
+ color: var(--color-primary-dark);
+ white-space: nowrap;
+}
+
+/* Ocultar texto del span cuando hay (evitar duplicado con el texto del enlace) */
+#vicidial_form #RecorDControl:has(> a)::before {
+ content: none !important;
+ display: none !important;
+}
+/* Cuando JS deja solo (sin ): "Start" desactivado = verde, "Stop" desactivado = rojo. */
+#vicidial_form #RecorDControl:not(:has(> a))::before {
+ display: inline-block !important;
+ font-family: var(--font-family);
+ font-size: var(--font-size-p2);
+ font-weight: 500;
+ padding: 8px 12px;
+ border-radius: var(--vdc-radius-sm);
+ background: transparent;
+ color: #fff !important;
+ white-space: nowrap;
+ line-height: 1.3;
+ position: relative;
+ z-index: 1;
+}
+#vicidial_form #RecorDControl:not(:has(> a)):has(img[alt="Start Recording"])::before {
+ content: "Start Recording";
+}
+#vicidial_form #RecorDControl:not(:has(> a)):has(img[alt="Stop Recording"])::before {
+ content: "Stop Recording";
+}
+#vicidial_form #RecorDControl:not(:has(> a)) {
+ display: inline-block !important;
+ width: 100%;
+ min-height: 36px;
+ box-sizing: border-box;
+ padding: 6px 12px;
+ border-radius: var(--vdc-radius-sm);
+ color: #fff !important;
+ text-align: center;
+ line-height: 1.3;
+}
+/* Sin enlace: estado Start (verde) */
+#vicidial_form #RecorDControl:not(:has(> a)):has(img[alt="Start Recording"]) {
+ border: 1px solid #2e7d32;
+ background: #43a047 !important;
+ background-color: #43a047 !important;
+}
+#vicidial_form #RecorDControl:not(:has(> a)):has(img[alt="Start Recording"]):hover {
+ background: #1b5e20 !important;
+ background-color: #1b5e20 !important;
+ border-color: #1b5e20;
+}
+/* Sin enlace: estado Stop (rojo) */
+#vicidial_form #RecorDControl:not(:has(> a)):has(img[alt="Stop Recording"]) {
+ border: 1px solid #b71c1c;
+ background: #d32f2f !important;
+ background-color: #d32f2f !important;
+}
+#vicidial_form #RecorDControl:not(:has(> a)):has(img[alt="Stop Recording"]):hover {
+ background: #b71c1c !important;
+ background-color: #b71c1c !important;
+ border-color: #b71c1c;
+}
+#vicidial_form #RecorDControl:not(:has(> a)):hover::before {
+ color: #fff !important;
+}
+
+/* Header del agente (solo dentro del formulario vicidial) */
+
+#vicidial_form #Header table {
+ width: 1190px !important;
+}
+
+#vicidial_form #Header table {
+ background: var(--color-primary-medium) !important;
+ border-radius: 0 0 var(--vdc-radius) var(--vdc-radius);
+ box-shadow: var(--vdc-shadow);
+ padding: 10px 16px !important;
+}
+#vicidial_form #Header .queue_text,
+#vicidial_form #Header .body_text {
+ color: var(--color-text-light, #fff) !important;
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-md) !important;
+}
+#vicidial_form #Header a {
+ color: var(--color-text-light, #fff) !important;
+ padding: 6px 12px;
+ border-radius: var(--vdc-radius-sm);
+ transition: background var(--vdc-transition);
+}
+#vicidial_form #Header a:hover {
+ background: rgba(255, 255, 255, 0.2);
+}
+
+/* Tabs del agente: permitir dos líneas (fecha + Calls in Queue) sin recorte */
+#vicidial_form #Tabs table {
+ background: var(--color-bg-white, #fff) !important;
+ border-radius: var(--vdc-radius);
+ box-shadow: var(--vdc-shadow);
+ margin: 0 8px;
+ padding: 4px 12px 6px !important;
+ height: auto !important;
+ min-height: 44px !important;
+ overflow: visible !important;
+}
+#vicidial_form #Tabs table tbody tr td:nth-child(3) {
+ width: auto !important;
+ min-width: 0 !important;
+}
+#vicidial_form #Tabs table tbody tr td {
+ height: auto !important;
+ padding: 2px 8px !important;
+ vertical-align: middle !important;
+ overflow: visible !important;
+}
+#vicidial_form #Tabs .body_tiny,
+#vicidial_form #Tabs .body_text {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ font-size: var(--font-size-p2) !important;
+ line-height: 1.35 !important;
+}
+#vicidial_form #Tabs a img {
+ border-radius: var(--vdc-radius-sm);
+}
+/* Logo del agente (pestaña MAIN): evitar que se estire, mantener proporción */
+#vicidial_form #Tabs table tbody tr td:first-child img {
+ object-fit: contain !important;
+ object-position: center !important;
+ width: 115px !important;
+ height: 30px !important;
+}
+
+/* Panel principal: responsive, alineado a la izquierda */
+#vicidial_form #MainPanel {
+ top: 105px !important;
+ padding: 0 8px 8px !important;
+ max-width: var(--vdc-content-max-width) !important;
+ width: 100% !important;
+ left: 0 !important;
+ box-sizing: border-box;
+}
+#vicidial_form #MainTable {
+ background: var(--color-bg-lighter, #E0F7FA) !important;
+ border-radius: var(--vdc-radius);
+ box-shadow: var(--vdc-shadow);
+ overflow: hidden;
+ border: 1px solid rgba(0, 139, 139, 0.15) !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ min-width: 0 !important;
+ box-sizing: border-box;
+}
+#vicidial_form #MainTable tbody {
+ min-width: 0 !important;
+ width: 100% !important;
+}
+#vicidial_form #MainTable .body_text {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ font-size: var(--font-size-md) !important;
+}
+
+/* Columna izquierda de controles (Dial, Record, Hangup, etc.) */
+#vicidial_form #MainTable > tbody > tr > td:first-child {
+ background: var(--color-bg-white, #fff) !important;
+ padding: 16px !important;
+ border-radius: var(--vdc-radius) 0 0 var(--vdc-radius);
+ box-shadow: 2px 0 8px rgba(0, 0, 0, 0.04);
+}
+#vicidial_form #DiaLControl > a,
+#vicidial_form #DiaLControl:not(:has(> a)),
+#vicidial_form #RecorDControl > a,
+#vicidial_form #SendDTMF > a {
+ display: block;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 1px 12px;
+ border-radius: var(--vdc-radius-sm);
+ border: 1px solid var(--color-primary-light);
+ background: var(--color-bg-lighter);
+ color: var(--color-primary-dark);
+ transition: transform var(--vdc-transition), box-shadow var(--vdc-transition), background var(--vdc-transition), color var(--vdc-transition);
+ text-align: center;
+}
+#vicidial_form #HangupControl,
+#vicidial_form #ParkControl,
+#vicidial_form #XferControl,
+#vicidial_form #WebFormSpan,
+#vicidial_form #WebFormSpanTwo {
+ display: inline-block;
+ min-width: var(--vdc-btn-width);
+ width: var(--vdc-btn-width);
+ box-sizing: border-box;
+ padding: 1px 5px;
+ border-radius: var(--vdc-radius-sm);
+ border: 1px solid var(--color-primary-light);
+ background: var(--color-bg-lighter);
+ color: var(--color-primary-dark);
+ transition: transform var(--vdc-transition), box-shadow var(--vdc-transition), background var(--vdc-transition), color var(--vdc-transition);
+ text-align: center;
+}
+#vicidial_form #WebFormSpan,
+#vicidial_form #WebFormSpanTwo {
+ margin-bottom: 3px;
+}
+#vicidial_form #SendDTMF {
+ margin-bottom: 12px;
+}
+#vicidial_form #DiaLControl > a:hover {
+ background: var(--color-primary-light);
+ color: var(--color-text-light);
+ transform: translateY(-1px);
+ box-shadow: var(--vdc-shadow);
+}
+/* DiaLControl: amarillo cuando paused, verde cuando active; texto en mayúsculas */
+#vicidial_form #DiaLControl > a:has(img[alt="You are paused"]) {
+ background: #FDD835 !important;
+ border-color: #F9A825 !important;
+ color: #1a1a1a !important;
+}
+#vicidial_form #DiaLControl > a:has(img[alt="You are paused"])::before {
+ color: #1a1a1a !important;
+ text-transform: uppercase;
+}
+#vicidial_form #DiaLControl > a:has(img[alt="You are paused"]):hover {
+ background: #F9A825 !important;
+ border-color: #F57F17 !important;
+ color: #1a1a1a !important;
+}
+#vicidial_form #DiaLControl > a:has(img[alt="You are paused"]):hover::before {
+ color: #1a1a1a !important;
+}
+#vicidial_form #DiaLControl > a:has(img[alt="You are active"]) {
+ background: var(--color-primary-medium, #008B8B) !important;
+ border-color: var(--color-primary-dark, #2E7D7D) !important;
+ color: #fff !important;
+}
+#vicidial_form #DiaLControl > a:has(img[alt="You are active"])::before {
+ color: #fff !important;
+ text-transform: uppercase;
+}
+#vicidial_form #DiaLControl > a:has(img[alt="You are active"]):hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+ border-color: #1a5a5a !important;
+ color: #fff !important;
+}
+#vicidial_form #DiaLControl > a:has(img[alt="You are active"]):hover::before {
+ color: #fff !important;
+}
+#vicidial_form #RecorDControl > a:hover {
+ background: #1b5e20;
+ border-color: #1b5e20;
+ color: #fff;
+ transform: translateY(-1px);
+ box-shadow: var(--vdc-shadow);
+}
+#vicidial_form #RecorDControl > a:hover::before {
+ color: #fff;
+}
+/* Start Recording: botón verde (override del bloque compartido) */
+#vicidial_form #RecorDControl > a:not(:has(img[alt="Stop Recording"])) {
+ border-color: #2e7d32;
+ background: #43a047 !important;
+ background-color: #43a047 !important;
+ color: #fff;
+}
+#vicidial_form #RecorDControl > a:not(:has(img[alt="Stop Recording"]))::before {
+ color: #fff;
+}
+/* Stop Recording: botón rojo */
+#vicidial_form #RecorDControl > a:has(img[alt="Stop Recording"]) {
+ border-color: #b71c1c;
+ background: #d32f2f !important;
+ background-color: #d32f2f !important;
+ color: #fff;
+}
+#vicidial_form #RecorDControl > a:has(img[alt="Stop Recording"])::before {
+ color: #fff;
+}
+#vicidial_form #RecorDControl > a:has(img[alt="Stop Recording"]):hover {
+ background: #b71c1c !important;
+ background-color: #b71c1c !important;
+ border-color: #b71c1c;
+ color: #fff;
+}
+#vicidial_form #RecorDControl > a:has(img[alt="Stop Recording"]):hover::before {
+ color: #fff;
+}
+/* Send DTMF: estilo rosado */
+#vicidial_form #SendDTMF > a {
+ border-color: #e91e63;
+ background: #fce4ec;
+ color: #ad1457;
+}
+#vicidial_form #SendDTMF > a::before {
+ color: #ad1457;
+}
+#vicidial_form #SendDTMF > a:hover {
+ background: #e91e63;
+ color: var(--color-text-light);
+ transform: translateY(-1px);
+ box-shadow: var(--vdc-shadow);
+}
+#vicidial_form #SendDTMF > a:hover::before {
+ color: var(--color-text-light);
+}
+/* Hover en botones que son span (sin dentro) */
+#vicidial_form #RecorDMute:hover,
+#vicidial_form #StRecorDControl:hover,
+#vicidial_form #ParkControl:hover,
+#vicidial_form #XferControl:hover,
+#vicidial_form #WebFormSpan:hover,
+#vicidial_form #WebFormSpanTwo:hover,
+#vicidial_form #HangupControl:hover,
+#vicidial_form #ivrParkControl:hover {
+ background-color: var(--color-primary-light) !important;
+ color: var(--color-text-light) !important;
+ border-radius: var(--vdc-radius-sm);
+ transition: background-color var(--vdc-transition), color var(--vdc-transition);
+}
+#vicidial_form #RecorDMute:hover::before,
+#vicidial_form #StRecorDControl:hover::before,
+#vicidial_form #ParkControl:hover::before,
+#vicidial_form #XferControl:hover::before,
+#vicidial_form #WebFormSpan:hover::before,
+#vicidial_form #WebFormSpanTwo:hover::before,
+#vicidial_form #HangupControl:hover::before {
+ color: var(--color-text-light) !important;
+}
+/* Hangup Customer en rojo cuando hay llamada activa (tiene ) */
+#vicidial_form #HangupControl:has(> a) {
+ position: relative !important;
+ background: #c62828 !important;
+ border-color: #b71c1c !important;
+ color: #fff !important;
+}
+/* El ocupa todo el botón para que el clic funcione (la img está oculta y el enlace colapsaría) */
+#vicidial_form #HangupControl > a {
+ position: absolute !important;
+ top: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ display: block !important;
+ z-index: 1 !important;
+ pointer-events: auto !important;
+ cursor: pointer !important;
+}
+#vicidial_form #HangupControl:has(> a)::before {
+ color: #fff !important;
+ pointer-events: none !important; /* que el clic llegue al */
+}
+#vicidial_form #HangupControl:has(> a):hover {
+ background: #b71c1c !important;
+ border-color: #8e0000 !important;
+ color: #fff !important;
+}
+#vicidial_form #HangupControl:has(> a):hover::before {
+ color: #fff !important;
+}
+/* Park Call / Grab Parked Call: cuando tiene , el enlace debe ocupar todo el botón para que el clic funcione */
+#vicidial_form #ParkControl:has(> a) {
+ position: relative !important;
+}
+#vicidial_form #ParkControl > a {
+ position: absolute !important;
+ top: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ display: block !important;
+ z-index: 1 !important;
+ pointer-events: auto !important;
+ cursor: pointer !important;
+}
+#vicidial_form #ParkControl:has(> a)::before {
+ pointer-events: none !important;
+}
+#vicidial_form #DiaLControl,
+#vicidial_form #RecorDControl,
+#vicidial_form #RecorDMute,
+#vicidial_form #StRecorDControl,
+#vicidial_form #WebFormSpan,
+#vicidial_form #WebFormSpanTwo,
+#vicidial_form #ParkControl,
+#vicidial_form #XferControl,
+#vicidial_form #HangupControl,
+#vicidial_form #SendDTMF,
+#vicidial_form #ivrParkControl {
+ display: inline-block;
+ min-width: var(--vdc-btn-width);
+ width: var(--vdc-btn-width);
+ box-sizing: border-box;
+ text-align: center;
+}
+#vicidial_form #DiaLControl { background: transparent !important; border-radius: var(--vdc-radius-sm); padding: 4px !important; }
+#vicidial_form #RecorDControl { background: transparent !important; border-radius: var(--vdc-radius-sm); padding: 4px !important; }
+/* Separar Park Call y Transfer - Conference */
+
+#vicidial_form #XferControl { margin-top: 4px !important; }
+/* Cuando Recording no tiene (solo img): color por estado (Start=verde, Stop=rojo) en reglas anteriores. */
+#vicidial_form #HangupControl { border-radius: var(--vdc-radius-sm); }
+#vicidial_form #SendDTMF input.cust_form {
+ width: var(--vdc-btn-width) !important;
+ min-width: var(--vdc-btn-width) !important;
+ max-width: var(--vdc-btn-width) !important;
+ box-sizing: border-box;
+ min-height: 36px;
+ border-radius: var(--vdc-radius-sm);
+ border: 1px solid rgba(0, 0, 0, 0.12);
+ padding: 6px 10px;
+ font-family: var(--font-family);
+ font-size: var(--font-size-p2) !important;
+}
+
+/* Área de información del cliente (solo dentro del formulario) */
+#vicidial_form #MainPanelCustInfo {
+ padding: 16px !important;
+}
+#vicidial_form #MainPanelCustInfo table {
+ background: var(--color-bg-white, #fff) !important;
+ border-radius: var(--vdc-radius);
+ padding: 16px !important;
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);
+}
+/* Tabla interna de Customer Information (Title, First, Address, etc.): un poco más ancha */
+#vicidial_form #MainPanelCustInfo table table,
+#vicidial_form #MainPanelCustInfo table table tbody {
+ width: 680px !important;
+ min-width: 680px !important;
+}
+#vicidial_form #MainPanelCustInfo .body_text {
+ font-size: var(--font-size-p2) !important;
+}
+#vicidial_form #MainPanelCustInfo input.cust_form,
+#vicidial_form #MainPanelCustInfo .cust_form_text {
+ border: 1px solid rgba(0, 0, 0, 0.12) !important;
+ border-radius: var(--vdc-radius-sm) !important;
+ padding: 6px 10px !important;
+ font-family: var(--font-family) !important;
+ transition: border-color var(--vdc-transition), box-shadow var(--vdc-transition);
+
+}
+#vicidial_form #MainPanelCustInfo #comments {
+ border: 1px solid rgba(0, 0, 0, 0.12) !important;
+ border-radius: var(--vdc-radius-sm) !important;
+ padding: 6px 10px !important;
+ font-family: var(--font-family) !important;
+ transition: border-color var(--vdc-transition), box-shadow var(--vdc-transition);
+ width: 100% !important;
+ height: 280px !important;
+}
+#vicidial_form #MainPanelCustInfo input.cust_form:focus,
+#vicidial_form #MainPanelCustInfo .cust_form_text:focus {
+ outline: none !important;
+ border-color: var(--color-primary-light, #20B2AA) !important;
+ box-shadow: 0 0 0 3px rgba(32, 178, 170, 0.15);
+
+}
+#vicidial_form #MainPanelCustInfo select.cust_form {
+ border-radius: var(--vdc-radius-sm);
+ border: 1px solid rgba(0, 0, 0, 0.12);
+ padding: 6px 8px;
+ font-family: var(--font-family);
+}
+
+/* Commit, seconds:, Manual/Fast dial y enlaces relacionados: alineados al área de contenido */
+#vicidial_form #MainCommit {
+ left: calc(var(--vdc-content-max-width) - 100px) !important;
+ top: 100px !important;
+ margin-right: 150px !important;
+}
+#vicidial_form #SecondSspan {
+ left: calc(var(--vdc-content-max-width) - 100px) !important;
+ top: 80px !important;
+ font-family: var(--font-family) !important;
+
+}
+#vicidial_form #DiaLlOgButtonspan {
+ left: 20px !important;
+ top: 790px !important;
+}
+#vicidial_form #ScriptRefresH,
+#vicidial_form #Script2RefresH,
+#vicidial_form #EmailRefresH {
+ left: calc(var(--vdc-content-max-width) - 70px) !important;
+ top: 69px !important;
+}
+#vicidial_form #FormRefresH {
+ left: calc(var(--vdc-content-max-width) - 85px) !important;
+ top: 69px !important;
+}
+#vicidial_form #AgentViewLinkSpan {
+ left: calc(var(--vdc-content-max-width) - 110px) !important;
+ top: 793px !important;
+
+}
+#vicidial_form #AgentViewLinkSpan table {
+ margin-left: -50px !important;
+ margin-top: -10px !important;
+ width: 150px; /* o el ancho que quieras */
+ border-collapse: collapse;
+ border-spacing: 0;
+ /* border, background, border-radius, etc. */
+}
+#vicidial_form #AgentViewLinkSpan table td {
+
+ padding: 4px 8px;
+ text-align: right;
+ vertical-align: middle;
+ margin-right: 300px !important;
+}
+
+/* Footer del agente: flotando abajo a la derecha (como Dialable Leads a la izquierda) */
+#vicidial_form #MaiNfooterspan {
+ z-index: 99 !important;
+ position: fixed !important;
+ left: auto !important;
+ right: 16px !important;
+ top: auto !important;
+ bottom: 16px !important;
+ width: auto !important;
+ max-width: calc(100vw - 32px) !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ background: transparent !important;
+}
+#vicidial_form #MaiNfooter {
+ background: var(--color-bg-lighter, #E0F7FA) !important;
+ padding: 8px 14px !important;
+ margin: 0 !important;
+ width: auto !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ border: 1px solid var(--color-primary-light, #20B2AA) !important;
+ border-radius: var(--vdc-radius-sm, 6px) !important;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06) !important;
+}
+#vicidial_form #MaiNfooter font,
+#vicidial_form #MaiNfooter .body_small {
+ font-family: var(--font-family) !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ font-size: var(--font-size-p2) !important;
+}
+#vicidial_form #MaiNfooter a {
+ color: var(--color-primary-medium, #008B8B) !important;
+ padding: 2px 6px !important;
+ border-radius: 4px !important;
+ transition: background var(--vdc-transition) !important;
+}
+#vicidial_form #MaiNfooter a:hover {
+ background: var(--bg-decorative-1) !important;
+}
+/* Ocultar fila de debug (busycallsdebug) debajo de STATUS en el panel principal */
+#vicidial_form #MainTable tr:has(#busycallsdebug),
+#busycallsdebug {
+ display: none !important;
+}
+
+/* Dialable Leads (contador en pantalla del agente) */
+/* Dialable Leads: fixed para que se vea igual en todas las resoluciones (sin depender de left/top en px) */
+#vicidial_form #dialableleadsspan {
+ position: fixed !important;
+ left: 16px !important;
+ bottom: 16px !important;
+ top: auto !important;
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2) !important;
+ font-weight: 500;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ background: var(--color-bg-lighter, #E0F7FA) !important;
+ border: 1px solid var(--color-primary-light, #20B2AA);
+ border-radius: var(--vdc-radius-sm, 6px);
+ padding: 6px 12px !important;
+ line-height: 1.3;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
+ display: inline-block;
+ z-index: 99;
+}
+
+/* Enlaces de acción del agente (MANUAL DIAL, FAST DIAL, commit, refresh, etc.) */
+#vicidial_form #DiaLlOgButtonspan .body_text a,
+#vicidial_form #AgentTimeSpan a,
+#vicidial_form #CallLogLinkSpan a,
+#vicidial_form #MainCommit a,
+#vicidial_form #ScriptRefresH a,
+#vicidial_form #Script2RefresH a,
+#vicidial_form #FormRefresH a,
+#vicidial_form #EmailRefresH a,
+#vicidial_form #AgentViewLink a {
+ display: inline-block;
+ padding: 8px 14px;
+ margin: 15px 4px 2px 0;
+ background: var(--color-primary-medium, #008B8B) !important;
+ color: var(--color-text-light, #fff) !important;
+ border-radius: var(--vdc-radius-sm);
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2) !important;
+ font-weight: 500;
+ transition: background var(--vdc-transition), transform var(--vdc-transition);
+}
+#vicidial_form #DiaLlOgButtonspan .body_text a:hover,
+#vicidial_form #AgentTimeSpan a:hover,
+#vicidial_form #MainCommit a:hover,
+#vicidial_form #ScriptRefresH a:hover,
+#vicidial_form #FormRefresH a:hover,
+#vicidial_form #EmailRefresH a:hover,
+#vicidial_form #AgentViewLink a:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+ transform: translateY(-1px);
+}
+
+/* Paneles secundarios del agente (Script, Form, Email, Chat) */
+#vicidial_form #ScriptPanel table,
+#vicidial_form #Script2Panel table,
+#vicidial_form #FormPanel table,
+#vicidial_form #EmailPanel table,
+#vicidial_form #CustomerChatPanel table,
+#vicidial_form #InternalChatPanel table {
+ background: var(--color-bg-white, #fff) !important;
+ border-radius: var(--vdc-radius);
+ box-shadow: var(--vdc-shadow);
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+}
+
+/* ========== ScriptPanel: contenedor e iframe de notas (solo dentro del formulario agente) ========== */
+#vicidial_form #ScriptPanel {
+ display: block !important;
+}
+#vicidial_form #ScriptPanel > table {
+ background: var(--color-bg-white, #fff) !important;
+ border-radius: var(--vdc-radius, 10px);
+ box-shadow: var(--vdc-shadow, 0 4px 16px rgba(0, 0, 0, 0.08));
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+ border-collapse: collapse !important;
+ overflow: hidden !important;
+}
+#vicidial_form #ScriptPanel > table > tbody > tr > td {
+ padding: 0 !important;
+ vertical-align: top !important;
+ border: none !important;
+}
+#vicidial_form #ScriptPanel .sb_text {
+ font-family: var(--font-family, Arial, Helvetica, sans-serif) !important;
+ font-size: var(--font-size-p2, 12px) !important;
+ color: var(--color-text, #333) !important;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+#vicidial_form #ScriptPanel #ScriptContents,
+#vicidial_form #ScriptPanel .noscroll_script {
+ background-color: var(--color-bg-white, #fff) !important;
+ border-radius: 0 0 var(--vdc-radius, 10px) var(--vdc-radius, 10px);
+ overflow: hidden !important;
+}
+#vicidial_form #ScriptPanel #ScriptContents > table,
+#vicidial_form #ScriptPanel .noscroll_script > table {
+ width: 100% !important;
+ border: none !important;
+ border-collapse: collapse !important;
+ margin: 0 !important;
+}
+#vicidial_form #ScriptPanel #ScriptContents > table > tbody > tr > td,
+#vicidial_form #ScriptPanel .noscroll_script > table > tbody > tr > td {
+ padding: 0 !important;
+ border: none !important;
+ vertical-align: top !important;
+}
+#vicidial_form #ScriptPanel #ScriptContents center,
+#vicidial_form #ScriptPanel .noscroll_script center {
+ padding: 10px 12px 8px !important;
+ margin: 0 !important;
+ background: var(--color-bg-lighter, #f5f5f5) !important;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.06) !important;
+}
+#vicidial_form #ScriptPanel #ScriptContents center b,
+#vicidial_form #ScriptPanel .noscroll_script center b {
+ font-family: var(--font-family, Arial, Helvetica, sans-serif) !important;
+ font-size: var(--font-size-p1, 14px) !important;
+ font-weight: 600 !important;
+ color: var(--color-text, #333) !important;
+}
+#vicidial_form #ScriptPanel iframe#popupFrame {
+ display: block !important;
+ border: none !important;
+ background-color: transparent !important;
+ border-radius: 0 !important;
+}
+
+/* Utilidades: solo cuando body tiene clase de JS Y dentro del formulario agente */
+body.vdc-modern #vicidial_form {
+ font-family: var(--font-family) !important;
+}
+body.vdc-compact #vicidial_form #MainTable > tbody > tr > td:first-child {
+ padding: 10px !important;
+}
+body.vdc-compact #vicidial_form #MainPanelCustInfo {
+ padding: 0px !important;
+}
+
+#vicidial_form #MainPanelCustInfo table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin-top: -15px !important;
+ height: 100% !important;
+ display: flex !important;
+}
+
+
+/* Tema oscuro: solo dentro del formulario agente cuando body tiene data-vdc-theme="dark" */
+body[data-vdc-theme="dark"] #vicidial_form #Header table {
+ background: linear-gradient(135deg, #1a4d4d 0%, #0d3d3d 100%) !important;
+}
+body[data-vdc-theme="dark"] #vicidial_form #Tabs table {
+ background: #2d2d2d !important;
+}
+body[data-vdc-theme="dark"] #vicidial_form #Tabs .body_tiny,
+body[data-vdc-theme="dark"] #vicidial_form #Tabs .body_text {
+ color: #e0e0e0 !important;
+}
+body[data-vdc-theme="dark"] #vicidial_form #MainTable {
+ background: #252525 !important;
+ border-color: rgba(255,255,255,0.08) !important;
+}
+body[data-vdc-theme="dark"] #vicidial_form #MainTable .body_text {
+ color: #e0e0e0 !important;
+}
+body[data-vdc-theme="dark"] #vicidial_form #MainTable > tbody > tr > td:first-child {
+ background: #1e1e1e !important;
+}
+body[data-vdc-theme="dark"] #vicidial_form #MainPanelCustInfo table {
+ background: #1e1e1e !important;
+}
+body[data-vdc-theme="dark"] #vicidial_form #MainPanelCustInfo input.cust_form,
+body[data-vdc-theme="dark"] #vicidial_form #MainPanelCustInfo .cust_form_text {
+ background: #2d2d2d !important;
+ border-color: rgba(255,255,255,0.12) !important;
+ color: #e0e0e0 !important;
+}
+body[data-vdc-theme="dark"] #vicidial_form #MaiNfooter {
+ background: #2d2d2d !important;
+ border-color: rgba(255,255,255,0.06) !important;
+}
+body[data-vdc-theme="dark"] #vicidial_form #MaiNfooter font,
+body[data-vdc-theme="dark"] #vicidial_form #MaiNfooter .body_small {
+ color: #b0b0b0 !important;
+}
+
+/* ========== Estilos de la caja de alerta (Agent Alert) ========== */
+/* Solo el contenedor #AlertBox: tabla exterior */
+#alert_form #AlertBox > table {
+ border: none !important;
+ border-radius: var(--vdc-radius, 8px);
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
+ overflow: hidden;
+ background: var(--color-bg-white) !important;
+ border-collapse: collapse;
+}
+#alert_form #AlertBox > table > tbody > tr:first-child > td {
+ background: var(--color-primary-medium) !important;
+ color: var(--color-text-light) !important;
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p1) !important;
+ font-weight: 600;
+ padding: 12px 16px !important;
+ border: none !important;
+}
+#alert_form #AlertBox > table > tbody > tr:last-child > td {
+ background: var(--color-bg-lighter) !important;
+ padding: 0 !important;
+ border: none !important;
+}
+/* Tabla interior (icono + texto + botón) */
+#alert_form #AlertBox > table > tbody > tr:last-child > td > table {
+ background: var(--color-bg-white) !important;
+ border-radius: 0 0 var(--vdc-radius, 8px) var(--vdc-radius, 8px);
+ margin: 0;
+ width: 100% !important;
+ max-width: 400px;
+}
+/* Fila del icono + texto: apilar en columna (icono arriba, texto abajo), poco espacio entre ellos */
+#alert_form #AlertBox > table > tbody > tr:last-child > td > table > tbody > tr:first-child {
+ display: flex !important;
+ flex-direction: column !important;
+ align-items: center !important;
+ gap: 0 !important;
+}
+#alert_form #AlertBox > table > tbody > tr:last-child > td > table > tbody > tr:first-child > td {
+ display: block !important;
+ width: 100% !important;
+ box-sizing: border-box;
+ text-align: center !important;
+}
+#alert_form #AlertBox > table > tbody > tr:last-child > td > table > tbody > tr:first-child > td:first-child {
+ padding: 6px 16px 0 16px !important;
+}
+#alert_form #AlertBox > table > tbody > tr:last-child > td > table > tbody > tr:first-child > td:first-child > img {
+ display: block !important;
+ margin: 0 auto !important;
+}
+#alert_form #AlertBox > table > tbody > tr:last-child > td > table > tbody > tr:first-child > td:last-child {
+ padding: 4px 16px 8px 16px !important;
+}
+/* Quitar del HTML: no añadir espacio extra en la celda del texto */
+#alert_form #AlertBox > table > tbody > tr:last-child > td > table > tbody > tr:first-child > td:last-child br {
+ display: none !important;
+}
+/* Celdas de la tabla interior de la alerta */
+#alert_form #AlertBox > table > tbody > tr:last-child > td > table > tbody > tr > td {
+ background: transparent !important;
+ border: none !important;
+ padding: 16px !important;
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2) !important;
+ color: var(--color-text-dark) !important;
+}
+/* La fila icono+texto ya tiene padding en las reglas de td:first-child y td:last-child */
+#alert_form #AlertBox #AlertBoxContent {
+ display: block;
+ margin: 0 0 4px;
+ line-height: 1.5;
+ text-align: center !important;
+}
+#alert_form #AlertBox #alert_button {
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2) !important;
+ padding: 8px 20px !important;
+ background: var(--color-primary-medium) !important;
+ color: var(--color-text-light) !important;
+ border: none !important;
+ border-radius: var(--vdc-radius-sm, 6px);
+ cursor: pointer;
+ font-weight: 500;
+ transition: background 0.2s ease, transform 0.2s ease;
+}
+#alert_form #AlertBox #alert_button:hover {
+ background: var(--color-primary-dark) !important;
+ transform: translateY(-1px);
+}
+
+/* ========== Overlay "Your session has been disabled" (AgenTDisablEBoX) ========== */
+body:has(#AgenTDisablEBoX[style*="visibility: visible"]) {
+ overflow: hidden !important;
+}
+#AgenTDisablEBoX {
+ position: fixed !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ background: rgba(0, 0, 0, 0.45) !important;
+ backdrop-filter: blur(4px);
+ overflow: hidden;
+
+}
+#AgenTDisablEBoX > table {
+ width: auto !important;
+ max-height: 210px !important;
+ max-width: 420px !important;
+ margin: 0 auto !important;
+ border: none !important;
+ border-radius: var(--vdc-radius, 8px);
+ box-shadow: 0 8px 32px rgba(255, 255, 255, 0.812);
+ background: white !important;
+ overflow: hidden;
+}
+
+#AgenTDisablEBoX > table > tbody > tr > td {
+ padding: 24px 32px !important;
+ text-align: center !important;
+ border: none !important;
+ background: transparent !important;
+}
+#AgenTDisablEBoX .sd_text,
+#AgenTDisablEBoX font.sd_text {
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p1, 14px) !important;
+ line-height: 1.5 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#AgenTDisablEBoX .sd_text a,
+#AgenTDisablEBoX font.sd_text a {
+ display: inline-block !important;
+ margin-top: 12px !important;
+ padding: 10px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2, 12px) !important;
+ font-weight: 600 !important;
+ color: var(--color-text-light, #fff) !important;
+ background: var(--color-primary-medium, #008B8B) !important;
+ border-radius: var(--vdc-radius-sm, 6px);
+ text-decoration: none !important;
+ transition: background 0.2s ease, transform 0.2s ease;
+}
+#AgenTDisablEBoX .sd_text a:hover,
+#AgenTDisablEBoX font.sd_text a:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+ transform: translateY(-1px);
+}
+
+/* ========== Overlay "Logout process complete" (LogouTBox) ========== */
+#LogouTBox {
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ background: rgba(0, 0, 0, 0.4) !important;
+ backdrop-filter: blur(4px);
+}
+#LogouTBox > table {
+ width: auto !important;
+ max-width: 480px !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 0 auto !important;
+ border: none !important;
+ border-radius: var(--vdc-radius, 8px);
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
+ background: var(--color-bg-white, #fff) !important;
+ overflow: hidden;
+}
+#LogouTBox > table > tbody > tr > td {
+ padding: 28px 32px !important;
+ text-align: center !important;
+ border: none !important;
+ background: transparent !important;
+}
+#LogouTBox #LogouTProcess,
+#LogouTBox #LogouTProcess .loading_text,
+#LogouTBox #LogouTProcess font.loading_text {
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p1, 14px) !important;
+ line-height: 1.5 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#LogouTBox #LogouTProcess img {
+ display: block !important;
+ margin: 16px auto 8px !important;
+ max-width: 100%;
+ height: auto !important;
+}
+#LogouTBox #LogouTBoxLink .loading_text,
+#LogouTBox #LogouTBoxLink font.loading_text {
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2, 12px) !important;
+}
+#LogouTBox #LogouTBoxLink a {
+ display: inline-block !important;
+ margin-top: 16px !important;
+ padding: 10px 20px !important;
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2, 12px) !important;
+ font-weight: 600 !important;
+ color: var(--color-text-light, #fff) !important;
+ background: var(--color-primary-medium, #008B8B) !important;
+ border-radius: var(--vdc-radius-sm, 6px);
+ text-decoration: none !important;
+ transition: background 0.2s ease, transform 0.2s ease;
+}
+#LogouTBox #LogouTBoxLink a:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+ transform: translateY(-1px);
+}
+
+/* ========== Notificación "No one is in your session" (NoneInSessionBox) ========== */
+/* Desactivar scroll solo cuando esta alerta está visible (visibility: visible en el span) */
+body:has(#NoneInSessionBox[style*="visibility: visible"]) {
+ overflow: hidden !important;
+}
+#NoneInSessionBox {
+ display: flex !important;
+ position: fixed !important;
+ align-items: center;
+ justify-content: center;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh;
+ background: rgba(0, 0, 0, 0.45) !important;
+ backdrop-filter: blur(4px);
+ z-index: 9999 !important;
+}
+#NoneInSessionBox table {
+ width: auto !important;
+ max-width: 420px !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 20px;
+ background: var(--color-bg-white, #fff) !important;
+ border-radius: var(--vdc-radius, 12px);
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(255, 255, 255, 0.06);
+ border: none !important;
+}
+#NoneInSessionBox td {
+ padding: 28px 32px !important;
+ text-align: center !important;
+ vertical-align: middle !important;
+}
+#NoneInSessionBox .sd_text {
+ font-family: var(--font-family) !important;
+ font-size: 15px !important;
+ line-height: 1.5 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#NoneInSessionBox .sd_text br {
+ margin: 2px 0;
+ line-height: 0.4;
+}
+#NoneInSessionBox a {
+ display: inline-block;
+ margin: 4px 8px 2px;
+ padding: 10px 20px;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 500;
+ color: var(--color-text-light, #fff) !important;
+ background: var(--color-primary-medium, #008B8B) !important;
+ border-radius: var(--vdc-radius-sm, 6px);
+ text-decoration: none !important;
+ transition: background 0.2s ease, transform 0.2s ease;
+}
+#NoneInSessionBox a:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+ transform: translateY(-1px);
+}
+#NoneInSessionBox .sd_text > a {
+ margin-bottom: 0;
+}
+#NoneInSessionBox #NoneInSessionID {
+ font-weight: 600;
+ color: var(--color-primary-dark, #2E7D7D);
+}
+
+/* ========== Notificación "Another live agent session was open" (DeactivateDOlDSessioNSpan) ========== */
+body:has(#DeactivateDOlDSessioNSpan[style*="visibility: visible"]) {
+ overflow: hidden !important;
+}
+#DeactivateDOlDSessioNSpan {
+ display: flex !important;
+ position: fixed !important;
+ align-items: center;
+ justify-content: center;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh;
+ background: rgba(0, 0, 0, 0.45) !important;
+ backdrop-filter: blur(4px);
+ z-index: 9999 !important;
+}
+#DeactivateDOlDSessioNSpan table {
+ width: auto !important;
+ max-width: 440px !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 20px;
+ background: var(--color-bg-white, #fff) !important;
+ border-radius: var(--vdc-radius, 12px);
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.06);
+ border: none !important;
+}
+#DeactivateDOlDSessioNSpan td {
+ padding: 28px 32px !important;
+ text-align: center !important;
+ vertical-align: middle !important;
+}
+#DeactivateDOlDSessioNSpan .sh_text {
+ position: relative;
+ font-family: var(--font-family) !important;
+ font-size: 15px !important;
+ line-height: 1.5 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+/* Ocultar solo el texto " -->" (cuadro estrecho a la derecha para no tapar el botón OK) */
+#DeactivateDOlDSessioNSpan .sh_text::after {
+ content: "";
+ position: absolute;
+ right: 0;
+ bottom: 0.35em;
+ width: 1.75em;
+ height: 1.3em;
+ background: var(--color-bg-white, #fff);
+}
+#DeactivateDOlDSessioNSpan .sh_text br {
+ margin: 6px 0;
+}
+#DeactivateDOlDSessioNSpan .sh_text a {
+ display: inline-block;
+ margin-top: 12px;
+ padding: 10px 24px;
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 500;
+ color: var(--color-text-light, #fff) !important;
+ background: var(--color-primary-medium, #008B8B) !important;
+ border-radius: var(--vdc-radius-sm, 6px);
+ text-decoration: none !important;
+ transition: background 0.2s ease, transform 0.2s ease;
+}
+#DeactivateDOlDSessioNSpan .sh_text a:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+ transform: translateY(-1px);
+}
+
+/* ========== Overlays: fijar al viewport para que no se corten al hacer scroll ========== */
+#NeWManuaLDiaLBox,
+#DispoSelectBox,
+#CallBackSelectBox,
+#SearcHForMDisplaYBox,
+#PauseCodeSelectBox,
+#GroupAliasSelectBox,
+#PresetsSelectBox,
+#AlertBox,
+#NoneInSessionBox,
+#DeactivateDOlDSessioNSpan,
+#AgenTDisablEBoX {
+ position: fixed !important;
+}
+/* Overlays de pantalla completa (centrado o cobertura) */
+#NeWManuaLDiaLBox,
+#CallBackSelectBox,
+#SearcHForMDisplaYBox,
+#PauseCodeSelectBox,
+#GroupAliasSelectBox {
+ top: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ overflow: auto !important;
+}
+
+/* ========== New Manual Dial overlay (NeWManuaLDiaLBox) ========== */
+body:has(#NeWManuaLDiaLBox[style*="visibility: visible"]) {
+ overflow: hidden !important;
+}
+#NeWManuaLDiaLBox {
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh;
+ background: rgba(0, 0, 0, 0.45) !important;
+ backdrop-filter: blur(4px);
+ z-index: 65 !important;
+}
+#NeWManuaLDiaLBox > table {
+ width: auto !important;
+ max-width: 480px !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 12px !important;
+ background: var(--color-bg-white, #fff) !important;
+ border: none !important;
+ border-radius: var(--vdc-radius, 8px);
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.06);
+ overflow: hidden;
+}
+#NeWManuaLDiaLBox > table > tbody > tr > td {
+ padding: 12px 16px !important;
+ text-align: left !important;
+ vertical-align: top !important;
+ border: none !important;
+ background: transparent !important;
+}
+#NeWManuaLDiaLBox .sd_text,
+#NeWManuaLDiaLBox font.sd_text {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ line-height: 1.3 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ display: block !important;
+ margin-bottom: 4px !important;
+}
+#NeWManuaLDiaLBox .sh_text,
+#NeWManuaLDiaLBox font.sh_text {
+ font-family: var(--font-family) !important;
+ font-size: 11px !important;
+ line-height: 1.35 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#NeWManuaLDiaLBox .sh_text br {
+ margin: 2px 0;
+}
+#NeWManuaLDiaLBox .body_text,
+#NeWManuaLDiaLBox font.body_text {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ line-height: 1.35 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+/* Form table: más compacto y distribución en grid (2 columnas label|input) */
+#NeWManuaLDiaLBox table table {
+ width: 100% !important;
+ border: none !important;
+ border-collapse: collapse;
+ margin: 6px 0 !important;
+ display: table !important;
+}
+#NeWManuaLDiaLBox table table tr {
+ vertical-align: middle !important;
+}
+#NeWManuaLDiaLBox table table td {
+ padding: 4px 0 !important;
+ border: none !important;
+ vertical-align: middle !important;
+}
+#NeWManuaLDiaLBox table table td[align="right"] {
+ padding-right: 8px !important;
+ width: 1%;
+ white-space: nowrap;
+ font-weight: 500;
+ font-size: 11px !important;
+}
+/* Fila con Group Alias / In-Group / No-Call: distribución horizontal */
+#NeWManuaLDiaLBox .sh_text center {
+ display: flex !important;
+ flex-wrap: wrap !important;
+ gap: 6px 14px !important;
+ justify-content: center !important;
+ align-items: center !important;
+ margin: 6px 0 !important;
+ text-align: center !important;
+}
+#NeWManuaLDiaLBox .sh_text center br {
+ display: none !important;
+}
+#NeWManuaLDiaLBox .sh_text center span {
+ display: inline-block !important;
+}
+/* Inputs más compactos */
+#NeWManuaLDiaLBox input.cust_form {
+ padding: 5px 8px !important;
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ border: 1px solid rgba(0, 0, 0, 0.18) !important;
+ border-radius: 4px;
+ background: var(--color-bg-white, #fff) !important;
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
+}
+#NeWManuaLDiaLBox input.cust_form:focus {
+ outline: none !important;
+ border-color: var(--color-primary-light, #20B2AA) !important;
+ box-shadow: 0 0 0 2px rgba(32, 178, 170, 0.2);
+}
+/* Checkbox row */
+#NeWManuaLDiaLBox input[type="checkbox"] {
+ margin: 0 4px 0 0 !important;
+ vertical-align: middle;
+}
+/* Action links: más compactos */
+#NeWManuaLDiaLBox .sh_text a,
+#NeWManuaLDiaLBox font.sh_text a {
+ display: inline-block !important;
+ margin: 4px 6px 4px 0 !important;
+ padding: 6px 14px !important;
+ font-family: var(--font-family) !important;
+ font-size: 11px !important;
+ font-weight: 600 !important;
+ border-radius: 4px;
+ text-decoration: none !important;
+ transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease;
+}
+#NeWManuaLDiaLBox .sh_text a[onclick*="NeWManuaLDiaLCalLSubmiT('NOW'"],
+#NeWManuaLDiaLBox font.sh_text a[onclick*="NeWManuaLDiaLCalLSubmiT('NOW'"] {
+ color: var(--color-text-light, #fff) !important;
+ background: var(--color-primary-medium, #008B8B) !important;
+}
+#NeWManuaLDiaLBox .sh_text a[onclick*="NeWManuaLDiaLCalLSubmiT('NOW'"]:hover,
+#NeWManuaLDiaLBox font.sh_text a[onclick*="NeWManuaLDiaLCalLSubmiT('NOW'"]:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+ transform: translateY(-1px);
+}
+#NeWManuaLDiaLBox .sh_text a[onclick*="NeWManuaLDiaLCalLSubmiT('PREVIEW'"],
+#NeWManuaLDiaLBox font.sh_text a[onclick*="NeWManuaLDiaLCalLSubmiT('PREVIEW'"] {
+ color: var(--color-text-light, #fff) !important;
+ background: var(--color-primary-light, #20B2AA) !important;
+}
+#NeWManuaLDiaLBox .sh_text a[onclick*="NeWManuaLDiaLCalLSubmiT('PREVIEW'"]:hover,
+#NeWManuaLDiaLBox font.sh_text a[onclick*="NeWManuaLDiaLCalLSubmiT('PREVIEW'"]:hover {
+ background: var(--color-primary-medium, #f6f8f8) !important;
+ transform: translateY(-1px);
+}
+#NeWManuaLDiaLBox .sh_text a[onclick*="ManualDialHide"],
+#NeWManuaLDiaLBox font.sh_text a[onclick*="ManualDialHide"] {
+ color: var(--color-primary-medium, #008B8B) !important;
+ background: transparent !important;
+ border: 1px solid var(--color-primary-medium, #008B8B);
+}
+#NeWManuaLDiaLBox .sh_text a[onclick*="ManualDialHide"]:hover,
+#NeWManuaLDiaLBox font.sh_text a[onclick*="ManualDialHide"]:hover {
+ background: var(--bg-decorative-1) !important;
+ transform: translateY(-1px);
+}
+
+/* ========== Disposition Call (DispoSelectBox) ========== */
+#DispoSelectBox > table {
+ background: var(--color-bg-lighter, #E0F7FA) !important;
+ border: 1px solid var(--color-primary-lightest, #48D1CC) !important;
+ border-radius: 12px !important;
+ box-shadow: 0 8px 24px var(--shadow-medium, rgba(45, 45, 45, 0.35)) !important;
+ padding: 16px 20px !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+}
+#DispoSelectBox > table > tbody > tr > td {
+ background: transparent !important;
+ padding: 12px 16px !important;
+ text-align: center !important;
+ vertical-align: top !important;
+ border: none !important;
+}
+#DispoSelectBox .sd_text,
+#DispoSelectBox font.sd_text {
+ font-family: var(--font-family) !important;
+ font-size: 15px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ line-height: 1.3 !important;
+}
+#DispoSelectBox .sh_text,
+#DispoSelectBox font.sh_text {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ line-height: 1.4 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#DispoSelectBox #DispoSelectHAspan a,
+#DispoSelectBox #DispoSelectMaxMin a {
+ display: inline-block !important;
+ margin: 0 6px !important;
+ padding: 6px 12px !important;
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 500 !important;
+ color: var(--color-primary-medium, #008B8B) !important;
+ background: transparent !important;
+ border: 1px solid var(--color-primary-medium, #008B8B) !important;
+ border-radius: 6px !important;
+ text-decoration: none !important;
+ transition: all 0.2s ease !important;
+}
+#DispoSelectBox #DispoSelectHAspan a:hover,
+#DispoSelectBox #DispoSelectMaxMin a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+}
+/* Contenedor y tabla de disposiciones */
+#DispoSelectBox #DispoSelectContent {
+ display: block !important;
+ margin: 12px auto !important;
+ text-align: center !important;
+}
+#DispoSelectBox #DispoSelectContent table {
+ width: auto !important;
+ max-width: 780px !important;
+ margin: 12px auto !important;
+ border-collapse: separate !important;
+ border-spacing: 8px !important;
+ border: none !important;
+}
+#DispoSelectBox #DispoSelectContent table tr:first-child td {
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ padding-bottom: 8px !important;
+ border: none !important;
+}
+#DispoSelectBox #DispoSelectContent table td[valign="top"] {
+ background: var(--color-bg-white, #fff) !important;
+ border: 1px solid var(--color-primary-lightest, #48D1CC) !important;
+ border-radius: 8px !important;
+ padding: 12px 14px !important;
+ height: auto !important;
+ min-height: 120px !important;
+ width: 240px !important;
+ vertical-align: top !important;
+ box-shadow: 0 2px 8px var(--shadow-text, rgba(45, 45, 45, 0.2)) !important;
+}
+#DispoSelectBox #DispoSelectContent .log_text a,
+#DispoSelectBox #DispoSelectContent font.log_text a,
+#DispoSelectBox #DispoSelectContent span a,
+#DispoSelectBox #DispoSelectContent font a {
+ display: block !important;
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ padding: 6px 8px !important;
+ margin: 4px 0 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ background: transparent !important;
+ border-radius: 4px !important;
+ text-decoration: none !important;
+ transition: background 0.15s ease, color 0.15s ease !important;
+}
+#DispoSelectBox #DispoSelectContent .log_text a:hover,
+#DispoSelectBox #DispoSelectContent font.log_text a:hover,
+#DispoSelectBox #DispoSelectContent span a:hover,
+#DispoSelectBox #DispoSelectContent font a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+}
+#DispoSelectBox #DispoSelectContent font[style*="BACKGROUND-COLOR"] a,
+#DispoSelectBox #DispoSelectContent b a {
+ background: var(--color-primary-lightest, #48D1CC) !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ font-weight: 600 !important;
+}
+#DispoSelectBox #DispoSelectContent font[style*="BACKGROUND-COLOR"] a:hover,
+#DispoSelectBox #DispoSelectContent b a:hover {
+ background: var(--color-primary-light, #20B2AA) !important;
+ color: var(--color-text-light, #fff) !important;
+}
+/* Checkbox y acciones inferiores */
+#DispoSelectBox input[type="checkbox"] {
+ margin: 0 6px 0 0 !important;
+ vertical-align: middle !important;
+ accent-color: var(--color-primary-medium, #008B8B) !important;
+}
+#DispoSelectBox .sh_text > a[onclick*="DispoSelectContent_create('','ReSET'"],
+#DispoSelectBox .sh_text > a[onclick*="DispoSelect_submit"],
+#DispoSelectBox .sh_text > a[onclick*="WeBForMDispoSelect_submit"] {
+ display: inline-block !important;
+ margin: 6px 8px 6px 0 !important;
+ padding: 8px 16px !important;
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 500 !important;
+ border-radius: 6px !important;
+ text-decoration: none !important;
+ transition: all 0.2s ease !important;
+}
+#DispoSelectBox .sh_text > a[onclick*="DispoSelectContent_create('','ReSET'"] {
+ color: var(--color-primary-medium, #008B8B) !important;
+ background: transparent !important;
+ border: 1px solid var(--color-primary-medium, #008B8B) !important;
+}
+#DispoSelectBox .sh_text > a[onclick*="DispoSelectContent_create('','ReSET'"]:hover {
+ background: var(--bg-decorative-1) !important;
+}
+#DispoSelectBox .sh_text > a[onclick*="DispoSelect_submit"] {
+ color: var(--color-text-light, #fff) !important;
+ background: var(--color-primary-medium, #008B8B) !important;
+ border: 1px solid var(--color-primary-dark, #2E7D7D) !important;
+}
+#DispoSelectBox .sh_text > a[onclick*="DispoSelect_submit"]:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+ transform: translateY(-1px) !important;
+}
+#DispoSelectBox .sh_text > a[onclick*="WeBForMDispoSelect_submit"] {
+ color: var(--color-text-light, #fff) !important;
+ background: var(--color-primary-light, #20B2AA) !important;
+ border: 1px solid var(--color-primary-medium, #008B8B) !important;
+}
+#DispoSelectBox .sh_text > a[onclick*="WeBForMDispoSelect_submit"]:hover {
+ background: var(--color-primary-medium, #008B8B) !important;
+ transform: translateY(-1px) !important;
+}
+
+/* ========== Panel Transfer - Conference (TransferMain) ========== */
+#TransferMain {
+ max-width: 100%;
+ box-sizing: border-box;
+ transform: translateY(-100px);
+ transform: translateX(45px);
+}
+/* Ocultar imágenes y mostrar texto (mismo truco que sidebar / botones AGC) */
+#TransferMain .body_text > img[alt="Transfer - Conference"],
+#TransferMain #LocalCloser img,
+#TransferMain #HangupXferLine img,
+#TransferMain #ParkXferLine img,
+#TransferMain #HangupBothLines img,
+#TransferMain #Leave3WayCall img,
+#TransferMain #DialBlindTransfer img,
+#TransferMain #DialWithCustomer img,
+#TransferMain #ParkCustomerDial img,
+#TransferMain #DialBlindVMail img,
+#TransferMain #PresetPullDown img,
+#TransferMain #ContactPullDown img,
+#TransferMain img[alt="seconds"],
+#TransferMain img[alt="channel"],
+#TransferMain img[alt="Number to call"] {
+ display: none !important;
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden !important;
+}
+/* Texto en lugar de imagen: cabecera */
+#TransferMain .body_text::before {
+ content: "Transfer - Conference";
+ font-family: var(--font-family) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ margin-right: 0.5em;
+}
+/* Texto en lugar de imagen: botones por id */
+#TransferMain #LocalCloser::before { content: "LOCAL CLOSER"; }
+#TransferMain #HangupXferLine::before { content: "Hangup Xfer Line"; }
+#TransferMain #ParkXferLine::before { content: "Park Xfer Line"; }
+#TransferMain #HangupBothLines::before { content: "Hangup Both Lines"; }
+#TransferMain #Leave3WayCall::before { content: "Leave 3-Way Call"; }
+#TransferMain #DialBlindTransfer::before { content: "Blind Transfer"; }
+#TransferMain #DialWithCustomer::before { content: "Dial With Customer"; }
+#TransferMain #ParkCustomerDial::before { content: "Park Customer Dial"; }
+#TransferMain #DialBlindVMail::before { content: "Transfer VMail"; }
+#TransferMain #PresetPullDown::before { content: "Presets"; }
+#TransferMain #ContactPullDown::before { content: "Contacts"; }
+/* Estilo común del ::before en botones */
+#TransferMain #LocalCloser::before,
+#TransferMain #HangupXferLine::before,
+#TransferMain #ParkXferLine::before,
+#TransferMain #HangupBothLines::before,
+#TransferMain #Leave3WayCall::before,
+#TransferMain #DialBlindTransfer::before,
+#TransferMain #DialWithCustomer::before,
+#TransferMain #ParkCustomerDial::before,
+#TransferMain #DialBlindVMail::before,
+#TransferMain #PresetPullDown::before,
+#TransferMain #ContactPullDown::before {
+ display: inline-block !important;
+ font-family: var(--font-family) !important;
+ font-size: 11px !important;
+ font-weight: 500 !important;
+ white-space: nowrap !important;
+ pointer-events: none !important;
+}
+/* Fila seconds + channel: solo texto como etiquetas */
+#TransferMain table table tbody tr:nth-child(2) td:first-child {
+ display: flex !important;
+ flex-wrap: wrap !important;
+ align-items: center !important;
+ gap: 0.25em 0.5em !important;
+}
+#TransferMain table table tbody tr:nth-child(2) td:first-child::before {
+ content: "seconds";
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ order: 0;
+}
+#TransferMain table table tbody tr:nth-child(2) td:first-child input#xferlength {
+ order: 1;
+}
+#TransferMain table table tbody tr:nth-child(2) td:first-child::after {
+ content: "channel";
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ margin-left: 0.5em;
+ order: 2;
+}
+#TransferMain table table tbody tr:nth-child(2) td:first-child input#xferchannel {
+ order: 3;
+}
+/* Fila Number to call: solo texto */
+#TransferMain table table tbody tr:nth-child(3) td:first-child::before {
+ content: "Number to call";
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ margin-right: 0.5em;
+}
+#TransferMain > table {
+ background: var(--color-bg-lighter, #E0F7FA) !important;
+ border: 1px solid var(--color-primary-lightest, #48D1CC) !important;
+ border-radius: 10px !important;
+ box-shadow: 0 4px 16px var(--shadow-text, rgba(45, 45, 45, 0.2)) !important;
+ padding: 12px 16px !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ border-collapse: separate !important;
+ border-spacing: 0 !important;
+}
+#TransferMain > table > tbody > tr > td {
+ padding: 10px 12px !important;
+ vertical-align: top !important;
+ border: none !important;
+ background: transparent !important;
+ height: auto !important;
+}
+#TransferMain .body_text,
+#TransferMain font.body_text {
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ line-height: 1.4 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#TransferMain .body_tiny,
+#TransferMain font.body_tiny {
+ font-family: var(--font-family) !important;
+ font-size: 11px !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#TransferMain .body_small_bold,
+#TransferMain font.body_small_bold {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ font-weight: 600 !important;
+}
+#TransferMain #XfeRDiaLGrouPSelecteD,
+#TransferMain #XfeRCID {
+ font-weight: 500;
+ color: var(--color-primary-dark, #2E7D7D);
+}
+/* Tabla interna */
+#TransferMain table table {
+ border-collapse: separate !important;
+ border-spacing: 6px 8px !important;
+ border: none !important;
+}
+#TransferMain table table td {
+ padding: 4px 6px !important;
+ vertical-align: middle !important;
+ border: none !important;
+}
+/* Select grupo */
+#TransferMain #XfeRGrouPLisT select,
+#TransferMain select#XfeRGrouP {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ padding: 6px 10px !important;
+ border: 1px solid rgba(0, 0, 0, 0.18) !important;
+ border-radius: 6px !important;
+ background: var(--color-bg-white, #fff) !important;
+ min-width: 200px !important;
+ max-width: 100% !important;
+}
+#TransferMain select#XfeRGrouP:focus {
+ outline: none !important;
+ border-color: var(--color-primary-light, #20B2AA) !important;
+ box-shadow: 0 0 0 2px rgba(32, 178, 170, 0.2);
+}
+/* Inputs readonly y número */
+#TransferMain input.cust_form {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ padding: 5px 8px !important;
+ border: 1px solid rgba(0, 0, 0, 0.15) !important;
+ border-radius: 6px !important;
+ background: var(--color-bg-white, #fff) !important;
+}
+#TransferMain input#xferlength { width: 3em !important; }
+#TransferMain input#xferchannel { width: 10em !important; min-width: 100px !important; }
+#TransferMain input#xfernumber { width: 14em !important; min-width: 120px !important; }
+#TransferMain input.cust_form:focus {
+ outline: none !important;
+ border-color: var(--color-primary-light, #20B2AA) !important;
+}
+/* Botones del panel (spans con img o enlace) */
+#TransferMain #LocalCloser,
+#TransferMain #HangupXferLine,
+#TransferMain #ParkXferLine,
+#TransferMain #HangupBothLines,
+#TransferMain #Leave3WayCall,
+#TransferMain #DialBlindTransfer,
+#TransferMain #DialWithCustomer,
+#TransferMain #ParkCustomerDial,
+#TransferMain #DialBlindVMail,
+#TransferMain #PresetPullDown,
+#TransferMain #ContactPullDown {
+ display: inline-block !important;
+ position: relative !important;
+ padding: 6px 8px !important;
+ margin: 0 2px !important;
+ background: var(--color-primary-lightest, #48D1CC) !important;
+ border: 1px solid var(--color-primary-medium, #008B8B) !important;
+ border-radius: 6px !important;
+ vertical-align: middle !important;
+ transition: background 0.2s ease, transform 0.15s ease !important;
+}
+/* Enlaces que rellenan el botón para que el clic funcione (img oculta) */
+#TransferMain #HangupBothLines > a,
+#TransferMain #Leave3WayCall > a,
+#TransferMain #DialWithCustomer > a,
+#TransferMain #ParkCustomerDial > a,
+#TransferMain #PresetPullDown > a,
+#TransferMain #ContactPullDown > a {
+ position: absolute !important;
+ top: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ display: block !important;
+ z-index: 1 !important;
+ pointer-events: auto !important;
+ cursor: pointer !important;
+}
+#TransferMain #LocalCloser:hover,
+#TransferMain #HangupXferLine:hover,
+#TransferMain #ParkXferLine:hover,
+#TransferMain #HangupBothLines:hover,
+#TransferMain #Leave3WayCall:hover,
+#TransferMain #DialBlindTransfer:hover,
+#TransferMain #DialWithCustomer:hover,
+#TransferMain #ParkCustomerDial:hover,
+#TransferMain #DialBlindVMail:hover,
+#TransferMain #PresetPullDown:hover,
+#TransferMain #ContactPullDown:hover {
+ background: var(--color-primary-light, #20B2AA) !important;
+ transform: translateY(-1px);
+}
+/* (Imágenes de botones ya ocultas arriba; enlaces rellenan el span para clic) */
+#TransferMain #HangupBothLines a,
+#TransferMain #Leave3WayCall a,
+#TransferMain #DialWithCustomer a,
+#TransferMain #ParkCustomerDial a,
+#TransferMain #PresetPullDown a,
+#TransferMain #ContactPullDown a {
+ text-decoration: none !important;
+ color: inherit !important;
+}
+/* Checkboxes */
+#TransferMain input[type="checkbox"] {
+ margin: 0 4px 0 0 !important;
+ vertical-align: middle !important;
+ accent-color: var(--color-primary-medium, #008B8B) !important;
+}
+/* Enlaces D1-D5 y AGENTS */
+#TransferMain .body_tiny a,
+#TransferMain font.body_tiny a,
+#TransferMain #agentdirectlink a,
+#TransferMain .body_small_bold a {
+ display: inline-block !important;
+ padding: 4px 10px !important;
+ margin: 0 2px !important;
+ font-family: var(--font-family) !important;
+ font-size: 11px !important;
+ font-weight: 500 !important;
+ color: var(--color-primary-medium, #008B8B) !important;
+ background: transparent !important;
+ border: 1px solid var(--color-primary-medium, #008B8B) !important;
+ border-radius: 4px !important;
+ text-decoration: none !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+#TransferMain .body_tiny a:hover,
+#TransferMain font.body_tiny a:hover,
+#TransferMain #agentdirectlink a:hover,
+#TransferMain .body_small_bold a:hover {
+ background: var(--bg-decorative-1) !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+}
+
+/* ========== Closer Inbound Group Selection (CloserSelectBox) - Panel de agente ========== */
+/* Overlay a pantalla completa con fondo desenfocado; tabla centrada con position + transform (sin flex). */
+#CloserSelectBox {
+ position: fixed !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ background: rgba(0, 0, 0, 0.45) !important;
+ backdrop-filter: blur(6px) !important;
+ -webkit-backdrop-filter: blur(6px) !important;
+}
+#CloserSelectBox > table {
+ border: none !important;
+ border-radius: var(--vdc-radius, 8px) !important;
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15) !important;
+ background: var(--color-bg-white, #fff) !important;
+ max-width: 560px !important;
+ max-height: 560px !important;
+ position: relative !important;
+ left: 50% !important;
+ top: 50% !important;
+ transform: translate(-50%, -50%) !important;
+ margin: 0 !important;
+}
+#CloserSelectBox > table > tbody > tr > td {
+ padding: 24px 28px !important;
+ text-align: center !important;
+ border: none !important;
+ background: transparent !important;
+}
+#CloserSelectBox .sd_text,
+#CloserSelectBox font.sd_text {
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p1, 14px) !important;
+ font-weight: 600 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ letter-spacing: 0.02em;
+ margin-bottom: 0.5em !important;
+ display: block !important;
+}
+#CloserSelectBox .sh_text,
+#CloserSelectBox font.sh_text {
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2, 12px) !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ line-height: 1.5 !important;
+}
+#CloserSelectBox #CloserSelectContent {
+ display: block !important;
+ margin-bottom: 0 !important;
+}
+#CloserSelectBox #CloserSelectContent table {
+ border-collapse: separate !important;
+ border-spacing: 12px !important;
+ margin: 16px auto 8px auto !important;
+}
+/* Fila de títulos: mismo ancho que las columnas de abajo (240px), sin caja */
+#CloserSelectBox #CloserSelectContent table tbody tr:first-child td {
+ width: 240px !important;
+ max-width: 240px !important;
+ min-width: 240px !important;
+ padding: 0 0 8px !important;
+ background: transparent !important;
+ border: none !important;
+ vertical-align: bottom !important;
+}
+/* Fila de contenido: cajas de listas */
+#CloserSelectBox #CloserSelectContent table tbody tr:nth-child(2) td {
+ background: var(--bg-decorative-1, #E8F5F5) !important;
+ border-radius: var(--vdc-radius-sm, 6px) !important;
+ padding: 12px 16px !important;
+ border: 1px solid rgba(0, 139, 139, 0.12) !important;
+}
+#CloserSelectBox #CloserSelectContent .log_text,
+#CloserSelectBox #CloserSelectContent font.log_text {
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2, 12px) !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ line-height: 1.6 !important;
+}
+#CloserSelectBox #CloserSelectContent a {
+ display: block !important;
+ padding: 6px 10px !important;
+ margin: 2px 0 !important;
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2, 12px) !important;
+ font-weight: 500 !important;
+ color: #ffffff !important;
+ background: var(--color-primary-medium, #008B8B) !important;
+ text-decoration: none !important;
+ border-radius: 4px !important;
+}
+#CloserSelectBox #CloserSelectContent a:hover {
+ color: #ffffff !important;
+ background: var(--color-primary-dark, #2E7D7D) !important;
+}
+#CloserSelectBox .sh_text input[type="checkbox"] {
+ margin: 0 6px 0 0 !important;
+ vertical-align: middle !important;
+ accent-color: var(--color-primary-medium, #008B8B) !important;
+}
+#CloserSelectBox .sh_text a {
+ padding: 8px 16px !important;
+ margin: 20px 4px 0 4px !important;
+ margin-bottom: 0 !important;
+ font-family: var(--font-family) !important;
+ font-size: var(--font-size-p2, 12px) !important;
+ font-weight: 600 !important;
+ color: #ffffff !important;
+ background: var(--color-primary-medium, #008B8B) !important;
+ border-radius: var(--vdc-radius-sm, 6px) !important;
+ text-decoration: none !important;
+}
+#CloserSelectBox .sh_text a:hover {
+ color: #ffffff !important;
+ background: var(--color-primary-dark, #2E7D7D) !important;
+}
+/* RESET y SUBMIT más abajo */
+#CloserSelectBox .sh_text a[onclick*="CloserSelectContent_create"],
+#CloserSelectBox .sh_text a[onclick*="CloserSelect_submit"] {
+ margin-top: 36px !important;
+ display: inline-block !important;
+}
+
+/* ========== vdc_script_notes.php (iframe notas, solo cuando existe form#vsn) ========== */
+body:has(form#vsn) {
+ background: transparent !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 14px !important;
+ margin: 0;
+ padding: 8px 0;
+}
+body:has(form#vsn) > table {
+ width: 100% !important;
+ max-width: 480px !important;
+ margin: 0 auto !important;
+ border-collapse: collapse !important;
+ background: #fff !important;
+ border-radius: 10px !important;
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08) !important;
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+ overflow: hidden !important;
+}
+body:has(form#vsn) > table tr[bgcolor="#E6E6E6"],
+body:has(form#vsn) > table tr {
+ background: #f5f5f5 !important;
+}
+body:has(form#vsn) > table tr[bgcolor="white"] {
+ background: #fff !important;
+}
+body:has(form#vsn) > table td {
+ padding: 8px 12px !important;
+ border: none !important;
+ vertical-align: middle !important;
+}
+body:has(form#vsn) > table td font {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-weight: 600 !important;
+ color: #333 !important;
+}
+body:has(form#vsn) form#vsn input[type="text"],
+body:has(form#vsn) form#vsn select,
+body:has(form#vsn) form#vsn textarea {
+ width: 100% !important;
+ max-width: 100% !important;
+ box-sizing: border-box !important;
+ border-radius: 6px !important;
+ border: 1px solid rgba(0, 0, 0, 0.2) !important;
+ padding: 6px 10px !important;
+ font-size: 14px !important;
+}
+body:has(form#vsn) form#vsn input[type="text"]:focus,
+body:has(form#vsn) form#vsn select:focus,
+body:has(form#vsn) form#vsn textarea:focus {
+ outline: none !important;
+ border-color: #008b8b !important;
+ box-shadow: 0 0 0 2px rgba(0, 139, 139, 0.2) !important;
+}
+body:has(form#vsn) form#vsn input[type="button"]#smt {
+ display: inline-block !important;
+ padding: 10px 24px !important;
+ border-radius: 8px !important;
+ border: none !important;
+ background: linear-gradient(180deg, #009a9a 0%, #008b8b 50%, #007a7a 100%) !important;
+ color: #fff !important;
+ font-weight: 600 !important;
+ font-size: 15px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ cursor: pointer !important;
+ box-shadow: 0 2px 8px rgba(0, 139, 139, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.2) !important;
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) !important;
+ transition: background 0.2s ease, box-shadow 0.2s ease, transform 0.15s ease !important;
+}
+body:has(form#vsn) form#vsn input[type="button"]#smt:hover {
+ background: linear-gradient(180deg, #00a8a8 0%, #009090 50%, #008080 100%) !important;
+ box-shadow: 0 4px 12px rgba(0, 139, 139, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.25) !important;
+ transform: translateY(-1px) !important;
+}
+body:has(form#vsn) form#vsn input[type="button"]#smt:active {
+ background: linear-gradient(180deg, #007070 0%, #006060 100%) !important;
+ box-shadow: 0 1px 4px rgba(0, 139, 139, 0.3), inset 0 2px 4px rgba(0, 0, 0, 0.15) !important;
+ transform: translateY(0) !important;
+}
+body:has(form#vsn) form#vsn textarea#call_notes {
+ min-height: 80px !important;
+ resize: vertical !important;
+}
+
+/* ========== Solo #SearcHForMDisplaYBox (Search for a lead) - estilos únicos para este componente ========== */
+#SearcHForMDisplaYBox {
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh !important;
+ background: rgba(0, 0, 0, 0.45) !important;
+ backdrop-filter: blur(4px) !important;
+ z-index: 73 !important;
+}
+#SearcHForMDisplaYBox > table {
+ width: auto !important;
+ max-width: 520px !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 12px !important;
+ background: var(--color-bg-white, #fff) !important;
+ border: none !important;
+ border-radius: var(--vdc-radius, 8px) !important;
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.06) !important;
+ overflow: hidden !important;
+}
+#SearcHForMDisplaYBox > table > tbody > tr > td {
+ padding: 16px 20px !important;
+ text-align: left !important;
+ vertical-align: top !important;
+ border: none !important;
+ background: transparent !important;
+}
+#SearcHForMDisplaYBox .sd_text,
+#SearcHForMDisplaYBox font.sd_text {
+ font-family: var(--font-family) !important;
+ font-size: 15px !important;
+ font-weight: 700 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ display: block !important;
+ margin-bottom: 8px !important;
+}
+#SearcHForMDisplaYBox .sh_text,
+#SearcHForMDisplaYBox font.sh_text {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ line-height: 1.4 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeaDSearcHVieWClose"] {
+ display: inline-block !important;
+ padding: 4px 10px !important;
+ border-radius: 6px !important;
+ background: rgba(0, 0, 0, 0.06) !important;
+ color: var(--color-text-dark, #333) !important;
+ font-size: 12px !important;
+ font-weight: 500 !important;
+ text-decoration: none !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeaDSearcHVieWClose"]:hover {
+ background: rgba(0, 0, 0, 0.1) !important;
+}
+#SearcHForMDisplaYBox table table {
+ width: 100% !important;
+ max-width: 100% !important;
+ border: none !important;
+ border-collapse: collapse !important;
+ margin: 10px 0 !important;
+}
+#SearcHForMDisplaYBox table table tr {
+ vertical-align: middle !important;
+}
+#SearcHForMDisplaYBox table table td {
+ padding: 6px 0 !important;
+ border: none !important;
+ vertical-align: middle !important;
+}
+#SearcHForMDisplaYBox table table td[align="right"] {
+ padding-right: 12px !important;
+ width: 1% !important;
+ white-space: nowrap !important;
+ font-weight: 500 !important;
+ font-size: 12px !important;
+}
+#SearcHForMDisplaYBox table table input[type="text"] {
+ width: 100% !important;
+ max-width: 220px !important;
+ box-sizing: border-box !important;
+ padding: 6px 10px !important;
+ border: 1px solid rgba(0, 0, 0, 0.2) !important;
+ border-radius: 6px !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+}
+#SearcHForMDisplaYBox table table input[type="text"]:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ box-shadow: 0 0 0 2px rgba(0, 139, 139, 0.2) !important;
+}
+#SearcHForMDisplaYBox table table input[type="checkbox"] {
+ width: auto !important;
+ margin-right: 6px !important;
+ vertical-align: middle !important;
+}
+#SearcHForMDisplaYBox table table td[align="center"][colspan="2"] {
+ padding-top: 16px !important;
+ padding-bottom: 0 !important;
+ text-align: center !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeadSearchSubmit"] {
+ display: inline-block !important;
+ padding: 8px 18px !important;
+ border-radius: 6px !important;
+ background: var(--color-primary-medium, #008b8b) !important;
+ color: #fff !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ text-decoration: none !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeadSearchSubmit"]:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+ transform: translateY(-1px) !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeadSearchReset"] {
+ display: inline-block !important;
+ padding: 6px 12px !important;
+ border-radius: 6px !important;
+ background: rgba(0, 0, 0, 0.06) !important;
+ color: var(--color-text-dark, #333) !important;
+ font-size: 12px !important;
+ text-decoration: none !important;
+ margin-left: 8px !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeadSearchReset"]:hover {
+ background: rgba(0, 0, 0, 0.1) !important;
+}
+
+/* ========== SearcHResultSDisplaYBox (Search Results) - bloque nuevo ========== */
+#SearcHResultSDisplaYBox {
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh !important;
+ background: rgba(0, 0, 0, 0.45) !important;
+ backdrop-filter: blur(4px) !important;
+ z-index: 74 !important;
+}
+#SearcHResultSDisplaYBox > table {
+ width: auto !important;
+ max-width: 520px !important;
+ max-height: 85vh !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 12px !important;
+ background: var(--color-bg-white, #fff) !important;
+ border: none !important;
+ border-radius: var(--vdc-radius, 8px) !important;
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.06) !important;
+ overflow: hidden !important;
+}
+#SearcHResultSDisplaYBox > table > tbody > tr > td {
+ padding: 16px 20px !important;
+ text-align: left !important;
+ vertical-align: top !important;
+ border: none !important;
+ background: transparent !important;
+}
+#SearcHResultSDisplaYBox .sd_text,
+#SearcHResultSDisplaYBox font.sd_text {
+ font-family: var(--font-family) !important;
+ font-size: 15px !important;
+ font-weight: 700 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ display: block !important;
+ margin-bottom: 8px !important;
+}
+#SearcHResultSDisplaYBox .sh_text,
+#SearcHResultSDisplaYBox font.sh_text {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ line-height: 1.4 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#SearcHResultSDisplaYBox a[onclick*="hideDiv('SearcHResultSDisplaYBox')"] {
+ display: inline-block !important;
+ padding: 4px 10px !important;
+ border-radius: 6px !important;
+ background: rgba(0, 0, 0, 0.06) !important;
+ color: var(--color-text-dark, #333) !important;
+ font-size: 12px !important;
+ font-weight: 500 !important;
+ text-decoration: none !important;
+}
+#SearcHResultSDisplaYBox a[onclick*="hideDiv('SearcHResultSDisplaYBox')"]:hover {
+ background: rgba(0, 0, 0, 0.1) !important;
+}
+#SearcHResultSDisplaYBox #SearcHResultSSpan,
+#SearcHResultSDisplaYBox .scroll_calllog {
+ display: block !important;
+ max-height: 55vh !important;
+ overflow-y: auto !important;
+ padding: 12px 0 !important;
+ margin: 0 !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ line-height: 1.5 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#SearcHResultSDisplaYBox #SearcHResultSSpan a[href="#"][onclick*="hideDiv"],
+#SearcHResultSDisplaYBox .scroll_calllog a[href="#"][onclick*="hideDiv"] {
+ display: inline-block !important;
+ padding: 8px 16px !important;
+ margin-top: 12px !important;
+ border-radius: 6px !important;
+ background: var(--color-primary-medium, #008b8b) !important;
+ color: #fff !important;
+ font-size: 13px !important;
+ font-weight: 500 !important;
+ text-decoration: none !important;
+ transition: background 0.2s ease !important;
+}
+#SearcHResultSDisplaYBox #SearcHResultSSpan a[href="#"][onclick*="hideDiv"]:hover,
+#SearcHResultSDisplaYBox .scroll_calllog a[href="#"][onclick*="hideDiv"]:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+}
+/* Refinamientos solo #SearcHResultSDisplaYBox: caja más compacta y visibilidad */
+
+#SearcHResultSDisplaYBox > table {
+ max-width: 380px !important;
+}
+#SearcHResultSDisplaYBox #SearcHResultSSpan,
+#SearcHResultSDisplaYBox .scroll_calllog {
+ max-height: 55vh !important;
+ -webkit-overflow-scrolling: touch !important;
+}
+
+/* ========== Solo #AgentTimeDisplayBox (Agent Time Report) - estilos exclusivos ========== */
+body:has(#AgentTimeDisplayBox[style*="visibility: visible"]) {
+ overflow: hidden !important;
+}
+#AgentTimeDisplayBox {
+ position: fixed !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh !important;
+ background: rgba(0, 0, 0, 0.45) !important;
+ backdrop-filter: blur(4px) !important;
+ z-index: 70 !important;
+}
+#AgentTimeDisplayBox > table {
+ width: auto !important;
+ max-width: 520px !important;
+ max-height: 85vh !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 12px !important;
+ background: var(--color-bg-white, #fff) !important;
+ border: none !important;
+ border-radius: var(--vdc-radius, 8px) !important;
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.06) !important;
+ overflow: hidden !important;
+}
+#AgentTimeDisplayBox > table > tbody > tr > td {
+ padding: 16px 20px !important;
+ text-align: center !important;
+ vertical-align: top !important;
+ border: none !important;
+ background: transparent !important;
+}
+#AgentTimeDisplayBox #AgentTimeDisplaySpan,
+#AgentTimeDisplayBox .scroll_calllog {
+ display: block !important;
+ max-height: 55vh !important;
+ overflow-y: auto !important;
+ padding: 12px 0 !important;
+ margin: 0 !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ line-height: 1.5 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ -webkit-overflow-scrolling: touch !important;
+}
+#AgentTimeDisplayBox #AgentTimeDisplaySpan b,
+#AgentTimeDisplayBox .scroll_calllog b {
+ font-weight: 700 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+}
+#AgentTimeDisplayBox #AgentTimeDisplaySpan a[onclick*="AgentTimeReport"],
+#AgentTimeDisplayBox .scroll_calllog a[onclick*="AgentTimeReport"] {
+ display: inline-block !important;
+ padding: 8px 18px !important;
+ margin-top: 12px !important;
+ border-radius: 6px !important;
+ background: var(--color-primary-medium, #008b8b) !important;
+ color: #fff !important;
+ font-size: 13px !important;
+ font-weight: 500 !important;
+ text-decoration: none !important;
+ transition: background 0.2s ease !important;
+}
+#AgentTimeDisplayBox #AgentTimeDisplaySpan a[onclick*="AgentTimeReport"]:hover,
+#AgentTimeDisplayBox .scroll_calllog a[onclick*="AgentTimeReport"]:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+}
+
+#AgentTimeSpan {
+ margin-top: -30px;
+ margin-left: 100px;
+
+}
+
+/* ========== Solo #VolumeControlSpan (controles de volumen) - estilos exclusivos ========== */
+/* Fuente Font Awesome 6 Solid solo para estos iconos (volume-up/down) */
+@font-face {
+ font-family: "Font Awesome 6 Free VDC";
+ font-style: normal;
+ font-weight: 900;
+ font-display: block;
+ src: url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/webfonts/fa-solid-900.woff2") format("woff2");
+}
+#VolumeControlSpan {
+
+ position: absolute !important;
+ left: 10px !important;
+ top: 848px !important;
+ z-index: 14 !important;
+ display: inline-flex !important;
+ flex-direction: column !important;
+ align-items: center !important;
+ gap: 1px !important;
+ padding: 5px 6px !important;
+ background: rgba(255, 255, 255, 0.95) !important;
+ border-radius: 12px !important;
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(0, 0, 0, 0.04) !important;
+ backdrop-filter: blur(8px) !important;
+}
+#VolumeControlSpan br {
+ display: none !important;
+}
+#VolumeControlSpan #VolumeUpSpan,
+#VolumeControlSpan #VolumeDownSpan {
+ display: inline-flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ width: 32px !important;
+ height: 32px !important;
+ line-height: 0 !important;
+ border-radius: 8px !important;
+ transition: transform 0.2s ease, background 0.2s ease, color 0.2s ease !important;
+}
+#VolumeControlSpan #VolumeUpSpan img,
+#VolumeControlSpan #VolumeDownSpan img {
+ position: absolute !important;
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden !important;
+ opacity: 0 !important;
+ pointer-events: none !important;
+}
+#VolumeControlSpan #VolumeUpSpan::before {
+ font-family: "Font Awesome 6 Free VDC" !important;
+ font-weight: 900 !important;
+ content: "\f028" !important; /* fa-volume-high */
+ font-size: 1.125rem !important;
+ color: #2D2D2D !important;
+}
+#VolumeControlSpan #VolumeDownSpan::before {
+ font-family: "Font Awesome 6 Free VDC" !important;
+ font-weight: 900 !important;
+ content: "\f027" !important; /* fa-volume-low */
+ font-size: 1.125rem !important;
+ color: #2D2D2D !important;
+}
+#VolumeControlSpan #VolumeUpSpan:hover,
+#VolumeControlSpan #VolumeDownSpan:hover {
+ background: rgba(0, 139, 139, 0.08) !important;
+ transform: scale(1.06) !important;
+}
+#VolumeControlSpan #VolumeUpSpan:hover::before,
+#VolumeControlSpan #VolumeDownSpan:hover::before {
+ color: #008b8b !important;
+}
+
+/* ========== Solo #AgentStatusSpan (estado del agente) - estilos exclusivos ========== */
+#AgentStatusSpan {
+
+ left: 60px !important;
+ margin-top: 40px;
+ z-index: 15 !important;
+ display: inline-block !important;
+ padding: 10px 14px !important;
+ background: rgba(255, 255, 255, 0.95) !important;
+ border-radius: 10px !important;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(0, 0, 0, 0.04) !important;
+ backdrop-filter: blur(8px) !important;
+}
+#AgentStatusSpan .body_text,
+#AgentStatusSpan font.body_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 13px !important;
+ line-height: 1.5 !important;
+ color: #2D2D2D !important;
+ font-weight: 400 !important;
+}
+#AgentStatusSpan #AgentStatusStatus {
+ display: inline-block !important;
+ padding: 2px 8px !important;
+ margin-left: 2px !important;
+ border-radius: 6px !important;
+ background: rgba(0, 139, 139, 0.12) !important;
+ color: #008b8b !important;
+ font-weight: 600 !important;
+ font-size: 12px !important;
+ letter-spacing: 0.02em !important;
+}
+#AgentStatusSpan br {
+ display: block !important;
+ margin: 4px 0 0 0 !important;
+}
+#AgentStatusSpan #AgentStatusDiaLs {
+ font-weight: 600 !important;
+ color: #2D2D2D !important;
+}
+
+/* ========== Solo #callsinqueuedisplay (Calls In Queue) - estilos exclusivos ========== */
+#callsinqueuedisplay {
+ position: absolute !important;
+ left: 13px !important;
+ top: 912px !important;
+ width: 1176px !important;
+ z-index: 17 !important;
+
+ overflow-x: auto !important;
+ overflow-y: hidden !important;
+ padding: 10px 16px !important;
+ background: rgba(255, 255, 255, 0.98) !important;
+ border-top: 1px solid rgba(0, 0, 0, 0.06) !important;
+ box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.03) !important;
+}
+#callsinqueuedisplay > table {
+ width: 100% !important;
+ max-width: 100% !important;
+ border: none !important;
+ border-collapse: collapse !important;
+}
+#callsinqueuedisplay > table td {
+ padding: 4px 8px !important;
+ border: none !important;
+ vertical-align: middle !important;
+}
+#callsinqueuedisplay > table td:first-child {
+ width: 5px !important;
+ padding-left: 0 !important;
+}
+#callsinqueuedisplay .body_text,
+#callsinqueuedisplay font.body_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 13px !important;
+ color: #2D2D2D !important;
+ font-weight: 500 !important;
+}
+#callsinqueuedisplay #callsinqueuelist {
+ font-size: 13px !important;
+ color: #2D2D2D !important;
+ line-height: 1.4 !important;
+}
+
+/* ========== Solo #AgentViewSpan (Other Agents Status) - estilos exclusivos ========== */
+#AgentViewSpan {
+ position: absolute !important;
+ right: 12px !important;
+ left: auto !important;
+ top: 20px !important;
+ width: 260px !important;
+ height: 500px !important;
+ max-height: 75vh !important;
+ z-index: 21 !important;
+ overflow: auto !important;
+ padding: 12px 14px !important;
+ background: #fafafa !important;
+ border: 1px solid #eee !important;
+ border-radius: 8px !important;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.04) !important;
+}
+#AgentViewSpan > table {
+ width: 100% !important;
+ border: none !important;
+ border-collapse: collapse !important;
+}
+#AgentViewSpan > table td {
+ padding: 4px 0 !important;
+ border: none !important;
+ vertical-align: top !important;
+}
+#AgentViewSpan > table td:first-child {
+ width: 5px !important;
+ padding-right: 6px !important;
+}
+#AgentViewSpan .body_text,
+#AgentViewSpan font.body_text,
+#vicidial_form #AgentViewSpan .body_text,
+#vicidial_form #AgentViewSpan font.body_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ color: #1a1a1a !important;
+}
+#AgentViewSpan #AgentViewStatus {
+ display: block !important;
+ margin-top: 6px !important;
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 12px !important;
+ color: #333 !important;
+ line-height: 1.45 !important;
+}
+#AgentViewSpan #AgentViewStatus > table {
+ width: 100% !important;
+ border: none !important;
+ border-collapse: collapse !important;
+}
+#AgentViewSpan #AgentViewStatus > table td {
+ padding: 6px 8px !important;
+ border: none !important;
+ border-radius: 4px !important;
+ font-size: 12px !important;
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ background: transparent !important;
+}
+#AgentViewSpan #AgentViewStatus > table tr[bgcolor="#ADD8E6"] td { background: #e3f2fd !important; }
+#AgentViewSpan #AgentViewStatus > table tr[bgcolor="#D8BFD8"] td { background: #f3e5f5 !important; }
+#AgentViewSpan #AgentViewStatus > table tr[bgcolor="#F0E68C"] td { background: #fff9c4 !important; }
+#AgentViewSpan #AgentViewStatus br {
+ display: block !important;
+ margin: 8px 0 0 0 !important;
+}
+#AgentViewSpan #AgentViewStatus font[style*="font-size:10px"] {
+ font-size: 11px !important;
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ color: #666 !important;
+}
+#AgentViewSpan #AgentViewStatus font[style*="background-color:#ADD8E6"],
+#AgentViewSpan #AgentViewStatus font[style*="background-color:#D8BFD8"],
+#AgentViewSpan #AgentViewStatus font[style*="background-color:#F0E68C"] {
+ display: inline-block !important;
+ width: 10px !important;
+ height: 10px !important;
+ border-radius: 2px !important;
+ vertical-align: middle !important;
+ margin-right: 2px !important;
+}
+
diff --git a/Custom/backvicibox/README.txt b/Custom/backvicibox/README.txt
new file mode 100644
index 0000000..2d0334d
--- /dev/null
+++ b/Custom/backvicibox/README.txt
@@ -0,0 +1,78 @@
+==========================================
+BACKUP DE VICIBOX - AMBIENTE DE CONFIGURACIÓN
+==========================================
+
+Fecha de creación: Fri Feb 6 04:46:49 PM UTC 2026
+
+ARCHIVOS INCLUIDOS:
+-------------------
+1. vicibox-scripts.tar.gz
+ - Todos los scripts de instalación y configuración de Vicibox
+ - Ubicación original: /usr/share/vicibox/
+
+2. astguiclient-trunk.tar.gz
+ - Código fuente completo de ViciDial
+ - Ubicación original: /usr/src/astguiclient/trunk/
+
+3. restore.sh
+ - Script para restaurar los archivos en el servidor destino
+
+4. install-vicibox.sh (NUEVO)
+ - Instalación completa en orden: Perl → MariaDB → PHP → Apache
+ - Configura Apache para apuntar a /vicidial/welcome.php
+ - Ejecuta restore.sh, aplica parches a vicibox-install.pl y lanza --vicibox-express
+ - Uso: sudo ./install-vicibox.sh
+
+5. apply-vicibox-patches.sh (NUEVO)
+ - Aplica parches a vicibox-install.pl (socket MySQL, random_pass, DBI)
+ - Se usa automáticamente desde install-vicibox.sh si no existe patches/vicibox-install.pl
+
+6. create-admin-sapian.sh (NUEVO)
+ - Crea usuario administrador en ViciDial: sapian / sap64adm (user_level 9).
+ - Se ejecuta al final de install-vicibox.sh. También se puede ejecutar a mano: sudo ./create-admin-sapian.sh
+
+7. patches/
+ - vicibox-install.pl: copia del instalador con parches ya aplicados (recomendado)
+ - README.txt: descripción de los parches
+
+8. version-info.txt
+ - Información de versiones y sistema
+
+INSTRUCCIONES RÁPIDAS (instalación automática):
+----------------------------------------------
+1. Copiar este directorio al servidor destino (ej. /home/backvicibox).
+
+2. Ejecutar el instalador (instala dependencias, restore, parches y express):
+ cd /home/backvicibox
+ sudo chmod +x install-vicibox.sh restore.sh apply-vicibox-patches.sh
+ sudo ./install-vicibox.sh
+
+3. Revisar el log si algo falla: install-vicibox.log
+
+INSTRUCCIONES MANUALES (paso a paso):
+------------------------------------
+1. Instalar dependencias: Perl (y DBI, DBD-mysql, LWP::Simple), Subversion,
+ MariaDB, PHP 8 (y apache2-mod_php8, php8-mysql), Apache2.
+2. Configurar Apache para que la URL principal sirva /vicidial/welcome.php.
+3. Ejecutar: sudo ./restore.sh
+4. Aplicar parches (copiar patches/vicibox-install.pl a /usr/share/vicibox/
+ o ejecutar apply-vicibox-patches.sh).
+5. Ejecutar: echo y | sudo /usr/share/vicibox/vicibox-install.pl --vicibox-express
+6. En /etc/astguiclient.conf poner VARDB_server => 127.0.0.1 para la web.
+
+REQUISITOS DEL SERVIDOR DESTINO:
+--------------------------------
+- Sistema operativo: openSUSE Leap / SUSE Linux Enterprise (SLE 15 SP6)
+- install-vicibox.sh instala: Perl, DBI, DBD-mysql, libwww-perl, subversion,
+ MariaDB, PHP 8, Apache2. Asterisk se gestiona por el instalador ViciBox.
+- Acceso a internet (recomendado para repos y actualizaciones).
+
+NOTAS:
+------
+- El tamaño total comprimido es aproximadamente 50-70 MB.
+- Log de install-vicibox.sh: install-vicibox.log en este directorio.
+- Log del instalador ViciBox: /var/log/vicibox.log.
+- Acceso web tras instalación: http:///vicidial/welcome.php
+- Usuario administrador ViciDial (creado al final): sapian / sap64adm (admin.php)
+
+==========================================
diff --git a/Custom/backvicibox/apply-vicibox-patches.sh b/Custom/backvicibox/apply-vicibox-patches.sh
new file mode 100644
index 0000000..48a4052
--- /dev/null
+++ b/Custom/backvicibox/apply-vicibox-patches.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+#
+# Aplica los parches necesarios a /usr/share/vicibox/vicibox-install.pl
+# (detección socket MySQL/MariaDB, random_pass sin pwgen, DBI con socket)
+#
+# Uso: sudo ./apply-vicibox-patches.sh
+#
+
+set -e
+
+INSTALL_PL="/usr/share/vicibox/vicibox-install.pl"
+
+if [ "$EUID" -ne 0 ]; then
+ echo "Ejecutar como root."
+ exit 1
+fi
+if [ ! -f "$INSTALL_PL" ]; then
+ echo "No se encuentra $INSTALL_PL. Ejecuta primero restore.sh."
+ exit 1
+fi
+
+# Si ya tiene los parches (socket y random_pass), no hacer nada
+if grep -q 'mysql_socket' "$INSTALL_PL" && grep -q 'sub random_pass' "$INSTALL_PL"; then
+ echo "vicibox-install.pl ya tiene los parches aplicados."
+ exit 0
+fi
+
+BACKUP="${INSTALL_PL}.bak.$(date +%Y%m%d%H%M%S)"
+cp -a "$INSTALL_PL" "$BACKUP"
+echo "Copia de seguridad: $BACKUP"
+
+# 1) Insertar detección de socket después de "$VICIport = 3306;"
+perl -i -0pe 's/(\$VICIport = 3306;\n)(\$VICIuser = "cron";)/$1# Detect MySQL\/MariaDB socket (openSUSE uses \/var\/run\/mysql\/mysql.sock, others may use \/run\/mysql\/mysql.sock)\n\$mysql_socket = "";\nforeach my \$sock ("\/var\/run\/mysql\/mysql.sock", "\/run\/mysql\/mysql.sock", "\/var\/lib\/mysql\/mysql.sock", "\/tmp\/mysql.sock") {\n\tif (-S \$sock) { \$mysql_socket = \$sock; last; }\n}\n$2/s' "$INSTALL_PL"
+
+# 2) Insertar sub random_pass después de "return \$string;\n}\n\n# Get the admin"
+perl -i -0pe 's/(return \$string;\n\}\n\n)(# Get the admin\.php build)/$1# Generate random password string; use pwgen if available, else openssl, else Perl fallback\nsub random_pass {\n\tmy \$len = \$_\[0\] \|\| 15;\n\tif (-x \"\/usr\/bin\/pwgen\") {\n\t\tmy \$s = trim(\`\/usr\/bin\/pwgen -cns \$len 1\`);\n\t\treturn \$s if \$s;\n\t}\n\tif (-x \"\/usr\/bin\/openssl\") {\n\t\tmy \$s = trim(\`\/usr\/bin\/openssl rand -base64 \$len\`);\n\t\t\$s =~ s\/\[^a-zA-Z0-9\]\/\/g;\n\t\treturn substr(\$s, 0, \$len) if length(\$s) >= \$len;\n\t}\n\tmy \@c = (\x27a\x27..\x27z\x27, \x27A\x27..\x27Z\x27, 0..9);\n\treturn join(\x27\x27, map { \$c[rand \@c] } 1..\$len);\n}\n\n$2/s' "$INSTALL_PL"
+
+# 3) Primera conexión DBI (root) -> usar dsn_root
+perl -i -0pe 's/\t\t\$dbhVDnew = DBI->connect\("DBI:mysql::localhost:\$VICIport", "root", ""\) or die "Couldn\x27t connect to MySQL to create database: " \. DBI->errstr;\n\t\tif \(\$DBS==0\)/\t\tmy \$dsn_root = "DBI:mysql::localhost:\$VICIport" \. (\$mysql_socket ? ";mysql_socket=\$mysql_socket" : "");\n\t\t\$dbhVDnew = DBI->connect(\$dsn_root, "root", "") or die "Couldn\x27t connect to MySQL to create database: " \. DBI->errstr;\n\t\tif (\$DBS==0)/s' "$INSTALL_PL"
+
+# 4) Reconnect to new database -> dsn_db
+perl -i -0pe 's/\t\t# Reconnect to the new database\n\t\t\$dbhVDnew->disconnect;\n\t\t\$dbhVDnew = DBI->connect\("DBI:mysql:\$VICIdatabase:localhost:\$VICIport", "root", ""\) or die "Couldn\x27t reconnect to MySQL to create database tables: " \. DBI->errstr;/# Reconnect to the new database\n\t\t\$dbhVDnew->disconnect;\n\t\tmy \$dsn_db = "DBI:mysql:\$VICIdatabase:localhost:\$VICIport" \. (\$mysql_socket ? ";mysql_socket=\$mysql_socket" : "");\n\t\t\$dbhVDnew = DBI->connect(\$dsn_db, "root", "") or die "Couldn\x27t reconnect to MySQL to create database tables: " \. DBI->errstr;/s' "$INSTALL_PL"
+
+# 5) Slave reconnect -> dsn_root2
+perl -i -0pe 's/\t\t\t# release and reconnect since we restarted the server\n\t\t\t\$dbhVDnew->disconnect;\n\t\t\t\$dbhVDnew = DBI->connect\("DBI:mysql::localhost:\$VICIport", "root", ""\) or die "Couldn\x27t connect to MySQL to create database: " \. DBI->errstr;\n\t\t\t# Reset the slave/\t\t\t# release and reconnect since we restarted the server\n\t\t\t\$dbhVDnew->disconnect;\n\t\t\tmy \$dsn_root2 = "DBI:mysql::localhost:\$VICIport" \. (\$mysql_socket ? ";mysql_socket=\$mysql_socket" : "");\n\t\t\t\$dbhVDnew = DBI->connect(\$dsn_root2, "root", "") or die "Couldn\x27t connect to MySQL to create database: " \. DBI->errstr;\n\t\t\t# Reset the slave/s' "$INSTALL_PL"
+
+# 6) pwgen -> random_pass (dos líneas de passwords)
+perl -i -pe 's/my \$randomstring1=trim\(`\/usr\/bin\/pwgen -cns 15 1`\);/my \$randomstring1=random_pass(15);/; s/my \$randomstring2=trim\(`\/usr\/bin\/pwgen -cns 15 1`\);/my \$randomstring2=random_pass(15);/' "$INSTALL_PL"
+
+# 7) Conexión cron (dbhVD) -> dsn_cron
+perl -i -0pe 's/\t\t\t\t# At this point the primary should be up and good, so we set-up our normal DBI connection for later processes\n\t\t\t\t# Also a good double-check procedure that stuff works\n\t\t\t\t\$dbhVD = DBI->connect\("DBI:mysql:\$VICIdatabase:localhost:\$VICIport", "\$VICIuser", "\$VICIpass"\) or die "Couldn\x27t connect to ViciDial database: " \. DBI->errstr;/# At this point the primary should be up and good, so we set-up our normal DBI connection for later processes\n\t\t\t\t# Also a good double-check procedure that stuff works\n\t\t\t\tmy \$dsn_cron = "DBI:mysql:\$VICIdatabase:localhost:\$VICIport" \. (\$mysql_socket ? ";mysql_socket=\$mysql_socket" : "");\n\t\t\t\t\$dbhVD = DBI->connect(\$dsn_cron, "\$VICIuser", "\$VICIpass") or die "Couldn\x27t connect to ViciDial database: " \. DBI->errstr;/s' "$INSTALL_PL"
+
+# 8) Más pwgen -> random_pass
+perl -i -pe 's/\$randomstring=trim\(`pwgen -cns 32 1`\);/\$randomstring=random_pass(32);/; s/\$randomstring=trim\(`\/usr\/bin\/pwgen -cns 15 1`\);/\$randomstring=random_pass(15);/g' "$INSTALL_PL"
+
+echo "Parches aplicados correctamente a $INSTALL_PL"
diff --git a/Custom/backvicibox/astguiclient-trunk.tar.gz b/Custom/backvicibox/astguiclient-trunk.tar.gz
new file mode 100644
index 0000000..c0b003b
Binary files /dev/null and b/Custom/backvicibox/astguiclient-trunk.tar.gz differ
diff --git a/Custom/backvicibox/create-admin-sapian.sh b/Custom/backvicibox/create-admin-sapian.sh
new file mode 100644
index 0000000..ab193fd
--- /dev/null
+++ b/Custom/backvicibox/create-admin-sapian.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+#
+# Crea el usuario administrador en ViciDial: sapian / sap64adm
+# Debe ejecutarse después de que la base de datos asterisk y la tabla vicidial_users existan.
+#
+# Uso: sudo ./create-admin-sapian.sh
+#
+
+set -e
+
+# Usar 127.0.0.1 para evitar problemas de socket con MariaDB
+MYSQL_OPTS="-h 127.0.0.1 -u root"
+DB="asterisk"
+USER="sapian"
+PASS="sap64adm"
+FULL_NAME="Sapian Admin"
+
+if [ "$EUID" -ne 0 ]; then
+ echo "Ejecutar como root."
+ exit 1
+fi
+
+if ! mariadb $MYSQL_OPTS -e "USE $DB" 2>/dev/null; then
+ echo "La base de datos $DB no existe o no hay acceso. Ejecutar después de la instalación Express."
+ exit 1
+fi
+
+# Crear usuario administrador (user_level 9 = admin). Si ya existe, actualizar contraseña.
+mariadb $MYSQL_OPTS "$DB" << EOF
+INSERT INTO vicidial_users (user, pass, full_name, user_level, user_group, load_leads, campaign_detail, ast_admin_access, modify_users, alter_agent_interface_options, active)
+VALUES ('$USER', '$PASS', '$FULL_NAME', '9', 'ADMIN', '1', '1', '1', '1', '1', 'Y')
+ON DUPLICATE KEY UPDATE pass = VALUES(pass), full_name = VALUES(full_name), user_level = 9, active = 'Y',
+ load_leads = '1', campaign_detail = '1', ast_admin_access = '1', modify_users = '1', alter_agent_interface_options = '1';
+EOF
+
+echo "Usuario administrador creado/actualizado: $USER (password: $PASS)"
+echo "Acceso: http:///vicidial/admin.php — iniciar sesión con $USER / $PASS"
diff --git a/Custom/backvicibox/install-vicibox.sh b/Custom/backvicibox/install-vicibox.sh
new file mode 100644
index 0000000..091c153
--- /dev/null
+++ b/Custom/backvicibox/install-vicibox.sh
@@ -0,0 +1,149 @@
+#!/bin/bash
+#
+# Script de instalación completa de ViciBox (ambiente de configuración)
+# Basado en la carpeta backvicibox.
+#
+# Orden: Perl → MariaDB → PHP → Apache (y apuntar a welcome.php)
+# → restore.sh → parches a vicibox-install.pl → vicibox-install --vicibox-express
+#
+# Uso: sudo ./install-vicibox.sh
+#
+
+set -e
+
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+NC='\033[0m'
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+LOG_FILE="${SCRIPT_DIR}/install-vicibox.log"
+
+info() { echo -e "${GREEN}[INFO]${NC} $1" | tee -a "$LOG_FILE"; }
+warn() { echo -e "${YELLOW}[WARN]${NC} $1" | tee -a "$LOG_FILE"; }
+error() { echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"; }
+
+if [ "$EUID" -ne 0 ]; then
+ error "Ejecutar como root: sudo $0"
+ exit 1
+fi
+
+# Comprobar que estamos en backvicibox y existen archivos
+if [ ! -f "${SCRIPT_DIR}/restore.sh" ]; then
+ error "No se encuentra restore.sh. Ejecutar desde el directorio backvicibox."
+ exit 1
+fi
+if [ ! -f "${SCRIPT_DIR}/vicibox-scripts.tar.gz" ] || [ ! -f "${SCRIPT_DIR}/astguiclient-trunk.tar.gz" ]; then
+ error "Faltan vicibox-scripts.tar.gz o astguiclient-trunk.tar.gz en ${SCRIPT_DIR}"
+ exit 1
+fi
+
+info "=========================================="
+info "Instalación ViciBox (dependencias + restore + express)"
+info "=========================================="
+echo ""
+
+# --- 1. Perl (versión del sistema) y módulos ---
+info "1. Instalando Perl, Subversion y módulos (DBI, DBD-mysql, LWP::Simple)..."
+zypper -n install -y perl perl-DBI perl-DBD-mysql libwww-perl subversion >> "$LOG_FILE" 2>&1 || true
+info " Perl: $(perl -v 2>&1 | head -1)"
+echo ""
+
+# --- 2. MariaDB ---
+info "2. Instalando MariaDB..."
+zypper -n install -y mariadb mariadb-client >> "$LOG_FILE" 2>&1
+systemctl enable mariadb >> "$LOG_FILE" 2>&1
+systemctl start mariadb >> "$LOG_FILE" 2>&1
+info " MariaDB instalado y en ejecución"
+echo ""
+
+# --- 3. PHP 8 y módulo Apache ---
+info "3. Instalando PHP 8 y módulo Apache..."
+if ! zypper lr | grep -q "devel_languages_php_php80"; then
+ zypper -n addrepo https://download.opensuse.org/repositories/devel:languages:php:php80/SLE_15_SP6/devel:languages:php:php80.repo
+fi
+zypper --no-gpg-checks -n refresh >> "$LOG_FILE" 2>&1
+zypper -n install -y php8 apache2-mod_php8 php8-mysql >> "$LOG_FILE" 2>&1
+info " PHP $(php8 -v 2>/dev/null | head -1 || true) instalado"
+echo ""
+
+# --- 4. Apache ---
+info "4. Instalando Apache y configurando welcome.php..."
+zypper -n install -y apache2 apache2-prefork >> "$LOG_FILE" 2>&1
+# Configurar que la raíz y /vicidial apunten a welcome.php
+cat > /etc/apache2/conf.d/vicidial-welcome.conf << 'APACHECONF'
+# ViciDial: URL principal -> vicidial/welcome.php
+
+ DirectoryIndex welcome.php
+ Options None
+
+ Require all granted
+
+
+RedirectMatch ^/$ /vicidial/welcome.php
+APACHECONF
+systemctl enable apache2 >> "$LOG_FILE" 2>&1
+systemctl start apache2 >> "$LOG_FILE" 2>&1
+info " Apache instalado y apuntando a /vicidial/welcome.php"
+echo ""
+
+# --- 5. Restore (scripts y código fuente) ---
+info "5. Ejecutando restore.sh..."
+cd "$SCRIPT_DIR"
+./restore.sh >> "$LOG_FILE" 2>&1
+echo ""
+
+# --- 6. Aplicar parches a vicibox-install.pl ---
+info "6. Aplicando parches a vicibox-install.pl (socket MySQL, random_pass, etc.)..."
+if [ -f "${SCRIPT_DIR}/patches/vicibox-install.pl" ]; then
+ cp "${SCRIPT_DIR}/patches/vicibox-install.pl" /usr/share/vicibox/vicibox-install.pl
+ chmod +x /usr/share/vicibox/vicibox-install.pl
+ info " Copiado vicibox-install.pl con parches desde patches/"
+elif [ -f "${SCRIPT_DIR}/apply-vicibox-patches.sh" ]; then
+ "${SCRIPT_DIR}/apply-vicibox-patches.sh" >> "$LOG_FILE" 2>&1
+ info " Parches aplicados con apply-vicibox-patches.sh"
+else
+ warn " No se encontró patches/vicibox-install.pl ni apply-vicibox-patches.sh."
+ warn " Se usará vicibox-install.pl sin parches (puede fallar socket MySQL/pwgen)."
+fi
+echo ""
+
+# --- 7. Ejecutar instalación Express ---
+info "7. Ejecutando vicibox-install --vicibox-express (confirmación automática 'y')..."
+info " Esto puede tardar varios minutos..."
+echo "y" | /usr/share/vicibox/vicibox-install.pl --vicibox-express >> "$LOG_FILE" 2>&1 || true
+echo ""
+
+# --- 8. Ajustar conexión web (127.0.0.1 para evitar error socket) ---
+if [ -f /etc/astguiclient.conf ]; then
+ if grep -q 'VARDB_server => localhost' /etc/astguiclient.conf; then
+ sed -i 's/VARDB_server => localhost/VARDB_server => 127.0.0.1/' /etc/astguiclient.conf
+ info "8. Configuración: VARDB_server => 127.0.0.1 en /etc/astguiclient.conf (para la web)"
+ fi
+else
+ info "8. /etc/astguiclient.conf no existe aún (normal si la instalación Express falló antes de crearlo)."
+fi
+echo ""
+
+# --- 9. Crear usuario administrador sapian / sap64adm ---
+info "9. Creando usuario administrador sapian en ViciDial..."
+if [ -f "${SCRIPT_DIR}/create-admin-sapian.sh" ]; then
+ chmod +x "${SCRIPT_DIR}/create-admin-sapian.sh"
+ if "${SCRIPT_DIR}/create-admin-sapian.sh" >> "$LOG_FILE" 2>&1; then
+ info " Usuario administrador: sapian / sap64adm creado correctamente"
+ else
+ warn " No se pudo crear el usuario (¿base de datos ya instalada?). Puedes ejecutar después: sudo ${SCRIPT_DIR}/create-admin-sapian.sh"
+ fi
+else
+ warn " No se encuentra create-admin-sapian.sh. Crear usuario sapian manualmente en admin.php si lo necesitas."
+fi
+echo ""
+
+info "=========================================="
+info "Proceso de instalación finalizado"
+info "=========================================="
+info "Log guardado en: $LOG_FILE"
+info "Comprueba el estado de servicios: systemctl status mariadb apache2"
+info "Acceso web: http:///vicidial/welcome.php"
+info "Admin ViciDial: usuario sapian, password sap64adm (admin.php)"
+echo ""
diff --git a/Custom/backvicibox/patches/README.txt b/Custom/backvicibox/patches/README.txt
new file mode 100644
index 0000000..2868ae5
--- /dev/null
+++ b/Custom/backvicibox/patches/README.txt
@@ -0,0 +1,14 @@
+Parches para vicibox-install.pl
+================================
+
+- vicibox-install.pl (si existe): copia del script con modificaciones aplicadas para:
+ * Detección automática del socket MySQL/MariaDB (/var/run/mysql, /run/mysql, etc.)
+ * Función random_pass() cuando pwgen no está instalado
+ * Conexiones DBI usando el socket detectado (evita "No such file or directory")
+
+Si este directorio contiene vicibox-install.pl, install-vicibox.sh lo copiará
+a /usr/share/vicibox/ después de restore.sh. Si no, intentará aplicar
+apply-vicibox-patches.sh al script restaurado.
+
+Para regenerar vicibox-install.pl con parches desde un sistema ya parcheado:
+ cp /usr/share/vicibox/vicibox-install.pl /home/backvicibox/patches/
diff --git a/Custom/backvicibox/patches/vicibox-install.pl b/Custom/backvicibox/patches/vicibox-install.pl
new file mode 100644
index 0000000..c0423a7
--- /dev/null
+++ b/Custom/backvicibox/patches/vicibox-install.pl
@@ -0,0 +1,1695 @@
+#!/usr/bin/perl
+
+# vicibox-install.pl version 11.0
+#
+# Copyright (C) 2023 James Pearson LICENSE: AGPLv2
+#
+#
+# CHANGES
+# 230609-0007 - changed to be just 'vicibox installer'
+# 210713-1143 - RC1 build v.10.0
+# 190726-1806 - RC1 Build v.9.0
+# 180921-1540 - GB Build v.8.1.0
+# 180920-1914 - RC2 Build v.8.1
+# 180327-1818 - RC1 Build v.8.1
+#
+
+
+# This script looks for a table called 'vicibox' in the ViciDial Database server to pull in settings
+# If you don't have one you can create one. The schema is as follows as well as the field definitions.
+# If the script doesn't find one, or not one with correctly matching info, it will enable the proper
+# modes depending on what it doesn't like. Finding no table = legacy mode. Not finding the database
+# entry will enable expert mode. Try not to get this internal tracking database too far out of whack :)
+
+
+#Vicibox table schema:
+#CREATE TABLE IF NOT EXISTS `vicibox` (
+# `server_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
+# `server` varchar(32) NOT NULL,
+# `server_ip` varchar(32) NOT NULL,
+# `server_type` enum('Database','Web','Telephony','Archive') NOT NULL DEFAULT 'Telephony',
+# `field1` varchar(64) DEFAULT NULL,
+# `field2` varchar(64) DEFAULT NULL,
+# `field3` varchar(64) DEFAULT NULL,
+# `field4` varchar(64) DEFAULT NULL,
+# `field5` varchar(64) DEFAULT NULL,
+# `field6` varchar(64) DEFAULT NULL,
+# `field7` varchar(64) DEFAULT NULL,
+# `field8` varchar(64) DEFAULT NULL,
+# `field9` varchar(64) NOT NULL
+# PRIMARY KEY (`server_id`)
+#) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+
+#DB field types:
+#field1 = mysql server ID, use 0 for Master, 1 for first slave, 2 for 2nd slave, etc, up to 9
+#field2 = DB name, default is asterisk
+#field3 = svn revision of DB
+#field4 = regular user
+#field5 = regular pass
+#field6 = custom user
+#field7 = custom pass
+#field8 = slave user, only relevant to primary DB
+#field9 = slave pass, same as above
+
+#Web field types:
+#field1 = external IP
+#field2 = audiostore directory
+
+#Telephony field type:
+#field1 = external IP
+
+#Archive field type: Auto-Configuration only works on a single archive server, other things have to be done manually
+#field1 = FTP user
+#field2 = FTP pass
+#field3 = FTP Port
+#field4 = FTP directory
+#field5 = URL Path
+
+
+
+# All my lovely little modules
+# I HATE STRICT! Suggesting I use strict will result in me
+# tracking you down and hitting you in the face with a hammer!
+# Feel free to submit a strict-friendly patch and/or other code
+# clean-up and optimization efforts you may have. If I test them
+# and they work I will put them in.
+use warnings;
+use LWP::Simple;
+use Sys::Hostname;
+use DBI;
+
+# A handy IPv4 validator for user input
+sub checkipv4 {
+my $ipaddr = $_[0];
+
+# Make sure we like the format
+if( $ipaddr =~ m/^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)$/ ) {
+
+ # Make sure we like the octets too
+ if($1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255) {
+ if ($debug==1) { print("IP Address checks good: $ipaddr\n"); }
+ return 0;
+
+ } else {
+ if ($debug==1) { print("IP address octet(s) out of range: $ipaddr \n"); }
+ return 1;
+ }
+
+ } else {
+ if ($debug==1) { print("IP address not in valid format: $ipaddr\n"); }
+ return 1;
+}
+}
+
+# Get the local IP of the machine by parsing ip command output
+sub getlocalip {
+ my $ip;
+ my @ipaddr = `/usr/sbin/ip addr show`;
+ my $line;
+ my $i=0;
+
+ foreach(@ipaddr) {
+ $line = $ipaddr[$i];
+ if ( $line =~ /inet (\d+\.\d+\.\d+\.\d+)\//) {
+ $ip = $1;
+ if ( $ip =~ /(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)/ && $ip !~ /^127\./) {
+ $ip = trim($ip);
+ return $ip;
+ }
+ }
+ $i++;
+ }
+ return "X";
+}
+
+# Get the External IP from the internets! Will also serv as a connectivity checker for feedback
+sub getextip {
+ my $extip=get("http://www.vicidial.org/yourip.php");
+ return "X" unless defined $extip;
+ $extip = trim($extip);
+ return $extip;
+}
+
+# Perl trim function to remove whitespace from the start and end of the string, stolen from google cause i'm lazy
+sub trim($) {
+ my $string = shift;
+ $string =~ s/^\s+//;
+ $string =~ s/\s+$//;
+ return $string;
+}
+
+# Generate random password string; use pwgen if available, else openssl, else Perl fallback
+sub random_pass {
+ my $len = $_[0] || 15;
+ if (-x '/usr/bin/pwgen') {
+ my $s = trim(`/usr/bin/pwgen -cns $len 1`);
+ return $s if $s;
+ }
+ if (-x '/usr/bin/openssl') {
+ my $s = trim(`/usr/bin/openssl rand -base64 $len`);
+ $s =~ s/[^a-zA-Z0-9]//g;
+ return substr($s, 0, $len) if length($s) >= $len;
+ }
+ my @c = ('a'..'z', 'A'..'Z', 0..9);
+ return join('', map { $c[rand @c] } 1..$len);
+}
+
+# Get the admin.php build and admin version. Threw it in a sub since it's ugly code :)
+sub adminphp {
+my $srce = "/usr/src/astguiclient/trunk/www/vicidial/admin.php";
+my $string1 = 'build = ';
+my $string2 = 'admin_version = ';
+my $adminver;
+my $buildver;
+my $line;
+
+open(FH, $srce);
+while(my $line = ) {
+ if($line =~ m/$string1/) {
+ $buildver = $line;
+ }
+ if($line =~ m/$string2/) {
+ $adminver = $line;
+ }
+}
+close FH;
+$buildver = substr $buildver, 10;
+$buildver = substr $buildver, 0, -3;
+if ($debug==1) { print "Build Version : $buildver\n"; }
+$adminver = substr $adminver, 18;
+$adminver = substr $adminver, 0, -3;
+if ($debug==1) { print "Admin Version : $adminver\n"; }
+
+return ($buildver, $adminver);
+
+}
+
+# Look for user to press a Y in the first character, return 1 if they do, 0 otherwise
+sub yesprompt {
+ my $manual = ;
+
+ if ( ($manual =~ /^[Y]$/i) ) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+# Look for user to press a N in the first character, return 1 if they do, 0 otherwise
+sub noprompt {
+ my $manual = ;
+
+ if ( ($manual =~ /^[N]$/i) ) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+# This nasty little thing below here does all the install work. We merely flip a bunch of flags and call this.
+# In theory, it should make maintaining things easier. I hope...
+sub dothedeed {
+ # And now we begin the installation madness! Whoot! Or something...
+ print "\n\nBeginning installation, expect lots of output...\n\n";
+
+ # Ensure SVN revision variables are set (e.g. express install when svn head/local unavailable)
+ if (!defined($localsvn) || $localsvn eq '') {
+ @svninfo = `/usr/bin/svn info /usr/src/astguiclient/trunk 2>/dev/null | grep Revision | sed -e 's/Revision: //'`;
+ $localsvn = defined($svninfo[0]) ? trim($svninfo[0]) : '0';
+ }
+ if (!defined($DBsvnrev) || $DBsvnrev eq '' || $DBsvnrev eq 'X') {
+ $DBsvnrev = $localsvn;
+ }
+
+ # Mangle the firewall appropriately
+ if ($disablefirewall!=0) {
+ print "Disabling firewall...\n";
+ system("/usr/bin/systemctl stop firewalld");
+ system("/usr/bin/systemctl disable firewalld");
+ }
+
+ # First we check our SVN and update as necessary
+ if ($localsvn != $DBsvnrev) {
+ print "\nUpdating to SVN revision $DBsvnrev...\n";
+ system("/usr/bin/svn", "-r", "$DBsvnrev", "up", "/usr/src/astguiclient/trunk/", ">> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ # Get the SVN version of our local copy
+ @svninfo = `/usr/bin/svn info /usr/src/astguiclient/trunk | grep Revision | sed -e 's/Revision: //'`;
+ $localsvn = trim($svninfo[0]);
+ if ($debug==1) { print "Local SVN Revision after update : $localsvn\n"; }
+ if ($localsvn != $DBsvnrev) { die "Could not update SVN to $DBsvnrev! Check your connectivity!\n"; }
+ } else {
+ print "Local SVN revision matches DB revision: $DBsvnrev\n";
+ }
+
+ # If we are a database, then we start mysql and create our database
+ if ($DB==1) {
+ print "Doing general DataBase requirements...\n";
+ my $dbsvc = (-e '/usr/lib/systemd/system/mariadb.service') ? 'mariadb' : 'mysql';
+ if (system("/usr/bin/systemctl enable $dbsvc >> /var/log/vicibox.log 2>> /var/log/vicibox.log")!=0) { die "Failed to enable MariaDB/MySQL ($dbsvc): $? Install the server package (e.g. zypper in mariadb)."; }
+ if (system("/usr/bin/systemctl start $dbsvc >> /var/log/vicibox.log 2>> /var/log/vicibox.log")!=0) { die "Failed to start MariaDB/MySQL ($dbsvc): $?"; }
+ my $dsn_root = "DBI:mysql::localhost:$VICIport" . ($mysql_socket ? ";mysql_socket=$mysql_socket" : "");
+ $dbhVDnew = DBI->connect($dsn_root, "root", "") or die "Couldn't connect to MySQL to create database: " . DBI->errstr;
+ if ($DBS==0) {
+ # See if there is already a database here. If so, bomb out, something is whacky. But only if it's a master DB, slaves can get wiped out
+ $stmtCHECKDB = "show databases like '$VICIdatabase';";
+ $sthCHECKDB = $dbhVDnew->prepare($stmtCHECKDB) or die "Preparing stmtCHECKDB: ",$dbhVDnew->errstr;
+ $sthCHECKDB->execute or die "Executing sthCHECKDB: ",$dbhVDnew->errstr;
+ $sthCHECKDBrows=$sthCHECKDB->rows;
+ if ($sthCHECKDBrows > 0) { die "Database already exists! Server was previously installed.\n"; }
+ $sthCHECKDB->finish;
+ }
+ # Create the new database
+ $stmtCREATE = "create database IF NOT EXISTS $VICIdatabase default character set utf8 collate utf8_unicode_ci;";
+ $sthCREATE = $dbhVDnew->prepare($stmtCREATE) or die "Preparing stmtCREATE: ",$dbhVDnew->errstr;
+ $sthCREATE->execute or die "Executing sthCREATE: ",$dbhVDnew->errstr;
+ $sthCREATE->finish;
+ # Reconnect to the new database
+ $dbhVDnew->disconnect;
+ my $dsn_db = "DBI:mysql:$VICIdatabase:localhost:$VICIport" . ($mysql_socket ? ";mysql_socket=$mysql_socket" : "");
+ $dbhVDnew = DBI->connect($dsn_db, "root", "") or die "Couldn't reconnect to MySQL to create database tables: " . DBI->errstr;
+ # Grant permissions to our database standard user
+ $stmtGRANT = "GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on $VICIdatabase.* TO $VICIuser\@'%' IDENTIFIED BY '$VICIpass';";
+ $sthGRANT = $dbhVDnew->prepare($stmtGRANT) or die "Preparing stmtGRANT: ",$dbhVDnew->errstr;
+ $sthGRANT->execute or die "Executing sthGRANT: ",$dbhVDnew->errstr;
+ # Grant permissions to our database standard user
+ $stmtGRANT = "GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on $VICIdatabase.* TO $VICIuser\@'localhost' IDENTIFIED BY '$VICIpass';";
+ $sthGRANT = $dbhVDnew->prepare($stmtGRANT) or die "Preparing stmtGRANT: ",$dbhVDnew->errstr;
+ $sthGRANT->execute or die "Executing sthGRANT: ",$dbhVDnew->errstr;
+ # Grant permissions to our database custom user
+ $stmtGRANT = "GRANT CREATE,ALTER on $VICIdatabase.* TO $VICIcustomuser\@'localhost' IDENTIFIED BY '$VICIcustompass';";
+ $sthGRANT = $dbhVDnew->prepare($stmtGRANT) or die "Preparing stmtGRANT: ",$dbhVDnew->errstr;
+ $sthGRANT->execute or die "Executing sthGRANT: ",$dbhVDnew->errstr;
+ # Grant permissions to our database custom user
+ $stmtGRANT = "GRANT CREATE,ALTER on $VICIdatabase.* TO $VICIcustomuser\@'%' IDENTIFIED BY '$VICIcustompass';";
+ $sthGRANT = $dbhVDnew->prepare($stmtGRANT) or die "Preparing stmtGRANT: ",$dbhVDnew->errstr;
+ $sthGRANT->execute or die "Executing sthGRANT: ",$dbhVDnew->errstr;
+
+ if ($DBS==1) {
+ # We are a slave, so we do slave-type things
+ print "Doing Slave-specific MySQL setup...\n";
+ if (system("/usr/bin/sed -i 's+server-id = 1+server-id = $DBmysqlid+g' /etc/my.cnf")!=0) { die "Could not modify my.cnf for slave: $?"; }
+ system("/usr/bin/systemctl stop $dbsvc >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ if (system("/usr/bin/systemctl start $dbsvc >> /var/log/vicibox.log 2>> /var/log/vicibox.log")!=0) { die "Failed to restart MySQL: $?"; }
+ # release and reconnect since we restarted the server
+ $dbhVDnew->disconnect;
+ my $dsn_root2 = "DBI:mysql::localhost:$VICIport" . ($mysql_socket ? ";mysql_socket=$mysql_socket" : "");
+ $dbhVDnew = DBI->connect($dsn_root2, "root", "") or die "Couldn't connect to MySQL to create database: " . DBI->errstr;
+ # Reset the slave so it can take fresh configs.
+ $stmtSQL="stop slave;";
+ $sthSQL = $dbhVDnew->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVDnew->errstr;
+ $sthSQL->execute;
+ $stmtSQL="reset slave;";
+ $sthSQL = $dbhVDnew->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVDnew->errstr;
+ $sthSQL->execute;
+ $stmtSQL="CHANGE MASTER TO MASTER_HOST='$VICIDBIP', MASTER_USER='$VICIslaveuser', MASTER_PASSWORD='$VICIslavepass', MASTER_PORT=$VICIport;";
+ $sthSQL = $dbhVDnew->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVDnew->errstr;
+ $sthSQL->execute;
+ print "\nBeginning database dump from master, this may take a while...\n\n";
+ if (system("/usr/bin/mariadb --all-database --master-data -u $VICIslaveuser -p$VICIslavepass -h $VICIDBIP -P $VICIport > /tmp/vicimaster.sql")!=0) { die "Could not get database dump from master: $?"; }
+
+ # Load in our master data
+ print "Beginning database load into slave, this may take a while...\n";
+ if (system("/usr/bin/mariadb -u root -h localhost -f < /tmp/vicimaster.sql")!=0) { die "Could not load data into slave.\n"; }
+ # Just for fun, run the upgrade incase this SQL info came from an older version
+ system("/usr/bin/maraidb-upgrade -u root -h localhost -s");
+
+ # Insert ourselves into vicibox
+ if ($legacy==0) {
+ $stmtSQL="INSERT INTO `vicibox` (`server`, `server_ip`, `server_type`, `field1`, `field2`, `field3`, `field4`, `field5`, `field6`, `field7`, `field8`, `field9`) VALUES ('$myname', '$VICIDBIP', 'Database', '$DBmysqlid', '$VICIdatabase', '$DBsvnrev', '$VICIuser', '$VICIpass', '$VICIcustomuser', '$VICIcustompass', '$VICIslaveuser', '$VICIslavepass');";
+ $sthSQL = $dbhVD->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVDnew->errstr;
+ $sthSQL->execute;
+ }
+
+ # Now start the slave
+ $stmtSQL="start slave;";
+ $sthSQL = $dbhVDnew->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVDnew->errstr;
+ $sthSQL->execute;
+ print "Slave loaded and started. Verify by connecting to MySQL and running 'slave show status'\n";
+
+ } else {
+ print "Doing Master-specific MySQL setup...\n";
+
+ # Create our schema in the database
+ if (system("/usr/bin/mariadb $VICIdatabase -f < /usr/src/astguiclient/trunk/extras/MySQL_AST_CREATE_tables.sql")!=0) { die "Could not create database schema\n"; }
+
+ # Insert ourselves into the server table if we aren't also a dialer
+ if ($TEL==0) {
+ my $stmtSQL="insert into servers (server_id, server_description, server_ip, active, max_vicidial_trunks, active_asterisk_server, active_agent_login_server) values ('$myname', 'DataBase Only - DO NOT DELETE', '$VICIDBIP', 'Y', '0', 'N', 'N');";
+ my $sthSQL = $dbhVDnew->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVDnew->errstr;
+ $sthSQL->execute;
+ }
+
+ # Give ourselves some more secure passwords then test!! Silly developer and users
+ my $randomstring1=random_pass(15);
+ my $randomstring2=random_pass(15);
+ my $stmtSQL="update system_settings set default_phone_registration_password='$randomstring1', default_server_password='$randomstring2';";
+ my $sthSQL = $dbhVDnew->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVDnew->errstr;
+ $sthSQL->execute;
+
+ # Now we create out vicibox table...
+ $stmtSQL="CREATE TABLE IF NOT EXISTS `vicibox` (`server_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, `server` varchar(32) NOT NULL, `server_ip` varchar(32) NOT NULL, `server_type` enum('Database','Web','Telephony','Archive') NOT NULL DEFAULT 'Telephony',`field1` varchar(64) DEFAULT NULL,`field2` varchar(64) DEFAULT NULL,`field3` varchar(64) DEFAULT NULL,`field4` varchar(64) DEFAULT NULL,`field5` varchar(64) DEFAULT NULL,`field6` varchar(64) DEFAULT NULL,`field7` varchar(64) DEFAULT NULL,`field8` varchar(64) DEFAULT NULL,`field9` varchar(64) DEFAULT NULL, PRIMARY KEY (`server_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;";
+ $sthSQL = $dbhVDnew->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVDnew->errstr;
+ $sthSQL->execute;
+
+ # and populate it if not legacy
+ if ($legacy==0) {
+ $stmtSQL="INSERT INTO `vicibox` (`server`, `server_ip`, `server_type`, `field1`, `field2`, `field3`, `field4`, `field5`, `field6`, `field7`, `field8`, `field9`) VALUES ('$myname', '$VICIDBIP', 'Database', '0', '$VICIdatabase', '$DBsvnrev', '$VICIuser', '$VICIpass', '$VICIcustomuser', '$VICIcustompass', '$VICIslaveuser', '$VICIslavepass');";
+ $sthSQL = $dbhVDnew->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVDnew->errstr;
+ $sthSQL->execute;
+ }
+
+ # Now insert the extra ViciBox stuff
+ $stmtSQL="INSERT INTO `vicidial_ip_lists` VALUES ('ViciWhite','White List for ViciBox firewall ACL','N','---ALL---'), ('ViciBlack','Black List for ViciBox firewall ACL','N','---ALL---');";
+ $dbhVDnew->do($stmtSQL);
+ $stmtSQL = "INSERT INTO `vicidial_conf_templates` (`template_id`, `template_name`, `template_contents`, `user_group`) VALUES ('VICIphoneSIP', 'VICIphoneSIP WebRTC', 'type=friend\r\nhost=dynamic\r\nencryption=yes\r\navpf=yes\r\nicesupport=yes\r\ndirectmedia=no\r\ntransport=wss\r\nforce_avp=yes\r\ndtlsenable=yes\r\ndtlsverify=no\r\ndtlscertfile=/etc/apache2/ssl.crt/vicibox.crt\r\ndtlsprivatekey=/etc/apache2/ssl.key/vicibox.key\r\ndtlssetup=actpass\r\nrtcp_mux=yes\r\n', '---ALL---');";
+ $dbhVDnew->do($stmtSQL);
+ $stmtSQL = "INSERT INTO `vicidial_conf_templates` (`template_id`, `template_name`, `template_contents`, `user_group`) VALUES ('VICIphonePJSIP', 'VICIphonePJSIP WebRTC', 'inbound_auth/nonce_lifetime = 32\r\naor/max_contacts = 1\r\naor/maximum_expiration = 3600\r\naor/minimum_expiration = 60\r\naor/default_expiration = 120\r\n\r\nendpoint/context = default\r\nendpoint/dtmf_mode = rfc4733\r\nendpoint/rtp_symmetric = yes\r\nendpoint/rewrite_contact = yes\r\nendpoint/rtp_timeout = 60\r\nendpoint/use_ptime = yes\r\nendpoint/moh_suggest = default\r\nendpoint/direct_media = no\r\nendpoint/trust_id_inbound = no\r\nendpoint/send_rpid = yes\r\nendpoint/inband_progress = no\r\nendpoint/tos_audio = ef\r\nendpoint/language = en\r\n\r\nendpoint/ice_support = yes\r\nendpoint/media_encryption = dtls\r\nendpoint/media_use_received_transport=yes\r\nendpoint/dtls_verify = no\r\nendpoint/dtls_cert_file = /etc/apache2/ssl.crt/vicibox.crt\r\nendpoint/dtls_private_key = /etc/apache2/ssl.key/vicibox.key\r\nendpoint/dtls_setup = actpass\r\nendpoint/transport=transport-wss\r\nendpoint/rtcp_mux=yes', '---ALL---');";
+ $dbhVDnew->do($stmtSQL);
+ $stmtSQL = "UPDATE system_settings set allowed_sip_stacks='SIP_and_PJSIP';";
+ $dbhVDnew->do($stmtSQL);
+ $stmtSQL = "UPDATE system_settings set webphone_url='https://phone.viciphone.com/v3.0/viciphone.php';";
+ $dbhVDnew->do($stmtSQL);
+
+ # Set-up the slave user stuff
+ $stmtGRANT = "GRANT REPLICATION SLAVE,REPLICATION CLIENT,SELECT,RELOAD,SHOW VIEW on *.* TO '$VICIslaveuser'\@'%' IDENTIFIED BY '$VICIslavepass';";
+ $sthGRANT = $dbhVDnew->prepare($stmtGRANT) or die "Preparing stmtGRANT: ",$dbhVDnew->errstr;
+ $sthGRANT->execute or die "Executing sthGRANT: ",$dbhVDnew->errstr;
+
+ # At this point the primary should be up and good, so we set-up our normal DBI connection for later processes
+ # Also a good double-check procedure that stuff works
+ my $dsn_cron = "DBI:mysql:$VICIdatabase:localhost:$VICIport" . ($mysql_socket ? ";mysql_socket=$mysql_socket" : "");
+ $dbhVD = DBI->connect($dsn_cron, "$VICIuser", "$VICIpass") or die "Couldn't connect to ViciDial database: " . DBI->errstr;
+
+ }
+
+ }
+
+ # Do web-type things
+ if ($WEB==1) {
+ print "Configuring Web Server...\n";
+
+ # See if we are the first webserver, left incase a restore is done it will auto-enable the audio store
+ $stmtFIRSTWEB="select * from system_settings where sounds_web_server='127.0.0.1';";
+ $sthFIRSTWEB = $dbhVD->prepare($stmtFIRSTWEB) or die "Preparing stmtFIRSTWEB: ",$dbhVD->errstr;
+ $sthFIRSTWEB->execute or die "Executing sthFIRSTWEB: ",$dbhVD->errstr;
+ $sthFIRSTWEBrows=$sthFIRSTWEB->rows;
+
+ if ($sthFIRSTWEBrows > 0) {
+ if ($debug==1) { print "First web server found, enabling audio store...\n"; }
+ # enable the audio store
+ $randomstring=random_pass(32);
+ $stmtWEB="update system_settings set sounds_web_server='$localip', sounds_web_directory='$randomstring', sounds_central_control_active='1';";
+ $sthWEB = $dbhVD->prepare($stmtWEB) or die "Preparing stmtWEB: ",$dbhVD->errstr;
+ $sthWEB->execute or die "Executing sthWEB: ",$dbhVD->errstr;
+ # Modify the apache configuration file for the audio store and create the directory
+ system("/usr/bin/sed -i 's/WEBDIR/$randomstring/g' /etc/apache2/conf.d/audiostore.conf");
+ system("/bin/mkdir /srv/www/htdocs/$randomstring");
+ system("chown -R wwwrun:www /srv/www/htdocs/$randomstring");
+ $audiostore=1;
+ } else {
+ $audiostore=0;
+ }
+
+ # If we are dedicated, enable bigger apache settings
+ if ($DB==0 && $TEL==0) {
+ if ($debug==1) { print "Dedicated Web Server Found, enabling large apache settings...\n"; }
+ system("cp /usr/share/vicibox/server-tuning.conf /etc/apache2/server-tuning.conf");
+ }
+
+ # Do the general stuff for apache from bash where life is easier
+ system("/usr/share/vicibox/vicibox-web.sh $redirect $phpmyadmin $VICIDBIP >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+
+ # And finally, insert ourselves into the vicibox table if not legacy and not a restore operation
+ if ($legacy==0 and $restore==0) {
+ $stmtSQL="INSERT INTO `vicibox` (`server`, `server_ip`, `server_type`, `field1`, `field2`) VALUES ('$myname', '$localip', 'Web', '$extip', '$randomstring');";
+ $sthSQL = $dbhVD->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVD->errstr;
+ $sthSQL->execute;
+ }
+ system("/usr/bin/systemctl enable apache2 >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ system("/usr/bin/systemctl restart apache2 >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ }
+
+ # Telephony server stuff
+ if ($TEL==1) {
+ print "Configuring Telephony Server...\n";
+
+ if ($restore==0) {
+ # Check to make sure we aren't doing something silly like installing the same server twice, exception being a restore
+ $stmtCHECKTEL = "select * from servers where server_ip='$localip' or server_ip='$extip';";
+ $sthCHECKTEL = $dbhVD->prepare($stmtCHECKTEL) or die "Preparing stmtCHECKTEL: ",$dbhVD->errstr;
+ $sthCHECKTEL->execute or die "Executing sthCHECKTEL: ",$dbhVD->errstr;
+ $sthCHECKTELrows=$sthCHECKTEL->rows;
+ if ($sthCHECKTELrows > 0) { die "Telephony server already exists! Server was previously installed.\n"; }
+ }
+
+ # Do the general stuff for a telephony server from bash where life is easier
+ system("/usr/share/vicibox/vicibox-tel.sh $PJSIP >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+
+ # We only run the below, which inserts us into vicidial and the vicihost table, if we aren't in restore mode
+ if ($restore==0) {
+ # Modify the SQL files for dialer insertion
+ if ($primarydialer==1) {
+ system("/usr/bin/sed 's/10.10.10.15/$localip/g' /usr/src/astguiclient/trunk/extras/first_server_install.sql > /tmp/viciserver.sql");
+ system("/bin/echo \"update system_settings set active_voicemail_server='$localip';\" >> /tmp/viciserver.sql");
+ } else {
+ system("/usr/bin/sed 's/10.10.10.16/$localip/g' /usr/src/astguiclient/trunk/extras/second_server_install.sql > /tmp/viciserver.sql");
+ }
+
+ # Modify the SQL files for hostname
+ system("/usr/bin/sed -i 's/TESTast/$myname/g' /tmp/viciserver.sql");
+
+ ## Inject the SQL file into MySQL
+ if (system("/usr/bin/mariadb -u $VICIuser -p$VICIpass -P $VICIport -h $VICIDBIP $VICIdatabase -f < /tmp/viciserver.sql")!=0) { die "Could not load telephony data into master database.\n"; }
+
+
+ # Do some clean-up to make things prettier on the user side
+ $randomstring=random_pass(15);
+ $stmtSQL="update servers set server_description='Server $myname', asterisk_version='$astverstring', conf_secret='$randomstring', vicidial_balance_active='Y', auto_restart_asterisk='Y' where server_ip='$localip';";
+ $sthSQL = $dbhVD->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVD->errstr;
+ $sthSQL->execute;
+
+
+ # If we have an external IP, throw that in there too
+ if ($extip ne "X") {
+ $stmtSQL="update servers set external_server_ip='$extip' where server_ip='$localip';";
+ $sthSQL = $dbhVD->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVD->errstr;
+ $sthSQL->execute;
+ }
+
+ # And finally, insert ourselves into the vicibox table if not legacy
+ if ($legacy==0) {
+ $stmtSQL="INSERT INTO `vicibox` (`server`, `server_ip`, `server_type`, `field1`) VALUES ('$myname', '$localip', 'Telephony', '$extip');";
+ $sthSQL = $dbhVD->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVD->errstr;
+ $sthSQL->execute;
+ }
+
+ } elsif ($restore==1 && $legacy==0) {
+ # Update the server record with the new asterisk version in case it's different from the restore
+ $stmtSQL="update servers set asterisk_version='$astverstring' where server_ip='$localip';";
+ $sthSQL = $dbhVD->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVD->errstr;
+ $sthSQL->execute;
+ }
+
+ # Make sure we start on boot
+ system("/usr/bin/systemctl enable vicidial >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ system("/usr/bin/systemctl enable apache2 >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ system("/usr/bin/systemctl restart apache2");
+ }
+
+ # Archive server
+ if ($ARC==1) {
+
+ print "Configuring Archive Server...\n";
+
+ # Do our system set-up
+ system("/bin/mkdir -p /home/archive/$TELarchivedir");
+ system("/usr/sbin/useradd -d /home/archive -s /bin/false $TELarchiveuser");
+ system("/bin/chown -R $TELarchiveuser:users /home/archive");
+ system("/bin/echo -e '$TELarchivepass\n$TELarchivepass' | /usr/bin/passwd $TELarchiveuser");
+ system("/usr/bin/systemctl enable vsftpd >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ system("/usr/bin/systemctl restart vsftpd");
+ system("/usr/bin/systemctl enable apache2 >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ system("/usr/bin/systemctl restart apache2");
+
+ # And finally, insert ourselves into the vicibox table if not legacy and not a restore
+ if ($legacy==0 and $restore==0) {
+ $stmtSQL="INSERT INTO `vicibox` (`server`, `server_ip`, `server_type`, `field1`, `field2`, `field3`, `field4`, `field5`) VALUES ('$myname', '$TELarchiveip', 'Archive', '$TELarchiveuser', '$TELarchivepass', '$TELarchiveport', '$TELarchivedir', '$TELarchiveurl');";
+ $sthSQL = $dbhVD->prepare($stmtSQL) or die "Preparing stmtSQL: ",$dbhVD->errstr;
+ $sthSQL->execute;
+ }
+ }
+
+
+ # All the easy stuff is over, now the big mess of stuff that is trying to figure out how to ACTUALLY install vicidial :(
+ # First we build up our generic install.pl options for use later on
+ $installPLstring = "--web=/srv/www/htdocs --asterisk_version=$asterisk --copy_sample_conf_files --no-prompt --server_ip=$localip --DB_database=$VICIdatabase --DB_user=$VICIuser --DB_pass=$VICIpass --DB_custom_user=$VICIcustomuser --DB_custom_pass=$VICIcustompass --DB_port=$VICIport";
+ if ($debug==1) { print "Install PL String: $installPLstring\n"; }
+
+ if ($havearchive==1) {
+ # We have an archive, so Add that info to the string
+ $installPLstring = $installPLstring . " --FTP_host=$TELarchiveip --FTP_user=$TELarchiveuser --FTP_pass=$TELarchivepass --FTP_port=$TELarchiveport --FTP_dir=$TELarchivedir --HTTP_path=$TELarchiveurl";
+ if ($debug==1) { print "Archive found, adding info: $installPLstring\n"; }
+ }
+
+ if ($DB==1 && $DBS==0) {
+ # We are primary DB, so connect through localhost
+ $installPLstring = $installPLstring . " --DB_server=localhost";
+ if ($debug==1) { print "We are Primary DB, adding info: $installPLstring\n"; }
+
+ } else {
+ # We are not the primary DB, so we use an IP address for database connectivity
+ $installPLstring = $installPLstring . " --DB_server=$VICIDBIP";
+ if ($debug==1) { print "We aren't Primary DB, adding info: $installPLstring\n"; }
+ }
+
+ # Now that our base string is built, all we are adding are the keepalives which depend on how the server's roles were selected
+ if ($DB==1 && $DBS==0) {
+ # We at least get the allcron and database stuff
+ $needdbcron=1;
+ }
+
+ if ($TEL==1) {
+ # We need at least the allcron and telephony stuff
+ $needtelcron=1;
+ }
+
+ # If we have no crons, then use X for keepalives
+ if ($needdbcron==0 && $needtelcron==0) {
+ $installPLstring = $installPLstring . " --active_keepalives=X";
+ if ($debug==1) { print "Not Database or Telephony, no cron, adding info: $installPLstring\n"; }
+
+ } elsif ($needdbcron==1 && $needtelcron==0) {
+ # We are a DB only, adding that info
+ $installPLstring = $installPLstring . " --active_keepalives=579E";
+ if ($debug==1) { print "Database only, adding info: $installPLstring\n"; }
+ system("/bin/cat /usr/share/vicibox/allcron > /tmp/rootcron");
+ system("/bin/cat /usr/share/vicibox/dbcron >> /tmp/rootcron");
+ if ($debug==1) { print "rootcron generated, allcron and dbcron\n"; }
+
+ } elsif ($needdbcron==0 && $needtelcron==1) {
+ # We are a telephony server only, adding that info
+ $installPLstring = $installPLstring . " --active_keepalives=123468S";
+ if ($debug==1) { print "Telephony only, adding info: $installPLstring\n"; }
+ system("/bin/cat /usr/share/vicibox/allcron > /tmp/rootcron");
+ system("/bin/cat /usr/share/vicibox/dialcron >> /tmp/rootcron");
+ if ($debug==1) { print "rootcron generated, allcron and dialcron\n"; }
+
+ } elsif ($needdbcron==1 && $needtelcron==1) {
+ # At this point we must be both, so we set-up for both.
+ $installPLstring = $installPLstring . " --active_keepalives=123456789ES";
+ if ($debug==1) { print "Telephony only, adding info: $installPLstring\n"; }
+ system("/bin/cat /usr/share/vicibox/allcron > /tmp/rootcron");
+ system("/bin/cat /usr/share/vicibox/dbcron >> /tmp/rootcron");
+ system("/bin/cat /usr/share/vicibox/dialcron >> /tmp/rootcron");
+ if ($debug==1) { print "rootcron generated, allcron and dbcron and dialcron\n"; }
+ }
+
+ if ($havearchive==1 && $TEL==1) {
+ # We have an archive and are a telephony server, so we enable that in the crontab
+ system("/usr/bin/sed -i 's/#2,5,8,11/2,5,8,11/' /tmp/rootcron");
+ }
+
+ # Ok, and away we go, installing the actual ViciDial software. Hope it works :)
+ if ($debug==1) { print "Final install.pl string: $installPLstring\n"; }
+ system("cd /usr/src/astguiclient/trunk && /usr/bin/perl install.pl $installPLstring >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ if ($DB==1 && $DBS==0) { system("/usr/bin/crontab /tmp/rootcron"); }
+ if ($WEB==1 || $TEL==1) { system("/usr/bin/crontab /tmp/rootcron"); }
+
+ # Populate the GMT tables and what-not
+ if ($DB==1 && $DBS==0) {
+ if ($extip ne "X") {
+ print "Loading GMT and Phone Codes...\n";
+ $gmtload=system("/usr/share/astguiclient/ADMIN_area_code_populate.pl >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ if ($gmtload!=0) {
+ # Looks like we couldn't obtain the area code lists, use local copies
+ print "GMT and Phone Codes failed to update from internet, using local copies...\n";
+ system("cp /usr/src/astguiclient/conf/phone_codes_GMT-latest-24.txt /usr/share/astguiclient");
+ system("cp /usr/src/astguiclient/conf/GMT_USA_zip-latest.txt /usr/share/astguiclient");
+ system("cp /usr/src/astguiclient/conf/country_ISO_TLD-latest.txt /usr/share/astguiclient");
+ system("/usr/share/astguiclient/ADMIN_area_code_populate.pl --use-local-files >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ }
+ } else {
+ print "Loading GMT and phone codes using local copies...\n";
+ system("cp /usr/src/astguiclient/conf/phone_codes_GMT-latest-24.txt /usr/share/astguiclient");
+ system("cp /usr/src/astguiclient/conf/GMT_USA_zip-latest.txt /usr/share/astguiclient");
+ system("/usr/share/astguiclient/ADMIN_area_code_populate.pl --use-local-copies >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+
+ }
+ }
+
+ # Fix-up for Zoiper
+ if ($WEB==1) {
+ system("/usr/bin/sed -i 's/Version=1,17,0,6802/Version=2,8,0,15810/' /srv/www/htdocs/agc/webphone/zoiperweb.php");
+ }
+
+ # Modify sip.conf for our external IP
+ if ($TEL==1 && $extip ne 'X') {
+ system("/usr/bin/sed -i 's/^;externip.*=.*/externip = $extip/' /etc/asterisk/sip.conf");
+ system("/usr/bin/sed -i 's/^external_media_address.*=.*/external_media_address = $extip/' /etc/asterisk/pjsip.conf");
+ system("/usr/bin/sed -i 's/^external_signaling_address.*=.*/external_signaling_address = $extip/' /etc/asterisk/pjsip.conf");
+ }
+
+ # Populate audio store if we are primary and not in restore mode
+ if ($TEL==1 && $primarydialer==1 && $restore==0) {
+ print "\nSeeding the audio store, this may take a while...\n";
+ system("/usr/bin/perl /usr/share/astguiclient/ADMIN_audio_store_sync.pl --upload >> /var/log/vicibox.log 2>> /var/log/vicibox.log");
+ }
+
+ # Give some helpful output for the uninitiated
+ $randomstring=random_pass(15);
+ print "\n\nPLEASE use secure passwords inside vicidial. It prevents hackers\n";
+ print "and other undesirables from compromising your system and costing\n";
+ print "you thousands in toll fraud and long distance. A secure password\n";
+ print "Contains at least one capital letter and one number. A good example\n";
+ print "of a secure password would be $randomstring.\n\n";
+ print "Don't feed the black market, secure your systems properly!\n\n";
+ print "System should be installed. Please type 'reboot' to cleanly load everything.\n";
+
+}
+
+# Set-up some default variables so we have known values to work with
+$myname=hostname;
+$myname =~ s/\..*$//; # Yes, someone managed to put in srv.dmn.com for the HOSTNAME, so just get the leftmost part before the .
+$myname=~s/[^a-zA-Z0-9_\-]//go; # and sanitize to something sane
+$debug=0; # Gives extra output while cluttering up the screen
+$restore=0; # Whether we a restoring as a server in a cluster
+$expert=0; # Hides some options that require more knowledge then the average sysadmin
+$legacy=0; # prompts for cluster info instead of using auto-configuration table
+$redirect=1; # We want to enable the HTML redirect by default, it's handy
+$phpmyadmin=0; # phpMyAdmin is evil to the uninitiated, so it's installed through the expert mode
+$DB=0;
+$DBS=0;
+$WEB=0;
+$TEL=0;
+$ARC=0;
+$viciboxexpress=0;
+$skipexternalip=0; # Skip the check for an External IP
+$VICIDBIP = "127.0.0.1";
+$VICIdatabase = "asterisk";
+$VICIport = 3306;
+# Detect MySQL/MariaDB socket (openSUSE uses /var/run/mysql/mysql.sock, others may use /run/mysql/mysql.sock)
+$mysql_socket = "";
+foreach my $sock ("/var/run/mysql/mysql.sock", "/run/mysql/mysql.sock", "/var/lib/mysql/mysql.sock", "/tmp/mysql.sock") {
+ if (-S $sock) { $mysql_socket = $sock; last; }
+}
+$VICIuser = "cron";
+$VICIpass = "1234";
+$VICIcustomuser = "custom";
+$VICIcustompass = "custom1234";
+$VICIslaveuser = "slave";
+$VICIslavepass = "slave1234";
+$TELarchiveip = "X";
+$TELarchiveuser = "cronarchive";
+$TELarchivepass = "archive1234";
+$TELarchiveport = "21";
+$TELarchivedir = '';
+$TELarchiveurl = 'http://'; # We fill it in later, but we define it now for consistencys sake
+$astverstring = "1.4.44-vici";
+$asterisk = "1.4";
+$DBmysqlid=0; # 0 is the master, and slaves are numbered up from there
+$primarydialer=1; # By default assume we are the primary dialer until proven otherwise
+$havearchive=0; # We have no archive server until told differently
+$disablefirewall=0;
+$needdbcron=0; # Whether we should install the DB settings
+$needtelcron=0; # Whether we should install the telephony settings
+my $someinput; # Keep this specific to main since it's my little trash variable
+my $myprompt; # Another trash variable used for user input
+
+# Show who we are and that we mean business
+print "\n\nViciBox Installer\n\n";
+
+
+
+# Parse our run-times, cleaned up from matt-matt code so the rest of us can read it
+$args = "";
+if (defined $ARGV[0]) {
+ $i=0;
+ while ($#ARGV >= $i) {
+ $args = "$args $ARGV[$i]";
+ $i++;
+ }
+ if ($args =~ /--help/i) {
+ print "allowed run time options:\n";
+ print " [--restore] = Restore server from a ViciBox DB entry or user-provided input\n";
+ print " [--legacy] = Force legacy mode on, usually auto-detected by the installer\n";
+ print " [--vicibox-express] = Install an all-in-one ViciBox Express server\n";
+ print " [--debug] = debug mode, shows more output, asks a few more questions\n";
+ exit;
+
+ } else {
+ # Check for debug flag
+ if ($args =~ /--debug/i) {
+ $debug=1;
+ print "\n----- DEBUG Enabled -----\n\n";
+ }
+
+ # Check for restore flag
+ if ($args =~ /--restore/i) {
+ $restore=1;
+ print "Restore mode activated\n";
+ }
+
+ # Check for vicibox-express flag
+ if ($args =~ /--vicibox-express/i) {
+ $viciboxexpress=1;
+ print "Vicibox Express mode activated\n";
+ }
+
+ # Check for legacy flag
+ if ($args =~ /--legacy/i) {
+ $legacy=1;
+ print "Legacy mode activated\n";
+ }
+
+ # Don't check for the external IP
+ if ($args =~ /--skipexternal/i) {
+ $skipexternalip=1;
+ $extip='X';
+ debugoutput(" CLI Check External IP : No",0);
+ }
+ }
+}
+
+# Some output for debug
+if ($debug==1) {
+print "Hostname : $myname\n";
+print "Default Database : $VICIdatabase\n";
+print "Default DB User : $VICIuser\n";
+print "Default DB Pass : $VICIpass\n";
+print "Default DB Custom User : $VICIcustomuser\n";
+print "Default DB Custom Pass : $VICIcustompass\n";
+print "Default DB Port : $VICIport\n";
+}
+
+# Get our local IP info
+$localip = &getlocalip;
+if ($localip eq 'X') {
+ print "Local IP address not found! Please enter the IP address to use for ViciDial on this machine\n";
+ print "Local IP Address : ";
+ $localip = trim();
+ if (&checkipv4($localip)==1) {
+ die "Local IP entered is not valid: $localip\n";
+ }
+ } elsif ($debug==1) { print "Local IP Address : $localip\n";
+}
+
+# Get external IP while simultaneously checking for internet connection
+if ($skipexternalip==0) {
+ $extip = &getextip;
+ if ($extip eq 'X' || &checkipv4($extip)==1) {
+ if ($debug==1) { print "No external IP found! Probably not on the internet\n"; };
+ $extip='X';
+ } elsif ($debug==1) {
+ print "External IP Address : $extip\n";
+ }
+
+ } else {
+ debugoutput("External IP Check disabled",0);
+}
+
+# Find the number of CPU cores for later decisions, hyper-threading skews this but ohh well
+$numcpucores = trim(`grep '^processor' /proc/cpuinfo | sort -u | wc -l`);
+if ($debug==1) { print "Number of CPU Cores: $numcpucores\n" };
+
+# Find out how much memory we got
+$ram = (`cat /proc/meminfo | grep "MemTotal" | awk '{print \$2}'`);
+if ($debug==1) { print "System Ram in kBytes: $ram\n" };
+
+# Get the admin.php version even though the SVN version is MUCH more important
+($buildver, $adminver) = &adminphp;
+
+# Grab our local asterisk version and dynamically use that info
+my @astverARY=split(' ', trim(`/usr/sbin/asterisk -V`));
+$astverstring = &trim($astverARY[1]);
+if ( $astverstring =~ m/^1.4/ ) { if ($debug==1) { print "Asterisk v.1.4 found!\n"; } $asterisk='1.4'; }
+if ( $astverstring =~ m/^1.8/ ) { if ($debug==1) { print "Asterisk v.1.8 found!\n"; } $asterisk='1.8'; }
+if ( $astverstring =~ m/^11./ ) { if ($debug==1) { print "Asterisk v.11 found!\n"; } $asterisk='11'; }
+if ( $astverstring =~ m/^13./ ) { if ($debug==1) { print "Asterisk v.13 found!\n"; } $asterisk='13'; }
+if ( $astverstring =~ m/^16./ ) { if ($debug==1) { print "Asterisk v.16 found!\n"; } $asterisk='16'; }
+if ( $astverstring =~ m/^18./ ) { if ($debug==1) { print "Asterisk v.18 found!\n"; } $asterisk='18'; }
+
+# Get the SVN version of our local copy
+@svninfo = `/usr/bin/svn info /usr/src/astguiclient/trunk | grep Revision | sed -e 's/Revision: //'`;
+$localsvn = trim($svninfo[0]);
+if ($debug==1) { print "Local SVN Revision : $localsvn\n"; }
+
+# See if we have external connectivity and get more info
+if ( $extip ne "X") {
+ @svninfo = `/usr/bin/svn info svn://svn.eflo.net:3690/agc_2-X/trunk | grep Revision | sed -e 's/Revision: //'`;
+ $svnhead = trim($svninfo[0]);
+ if ($debug==1) { print "Head SVN Revision : $svnhead\n"; }
+ } else {
+ $svnhead="X";
+ if ($debug==1) { print "Not connected to internet, SVN head unavailable\n"; }
+}
+
+if ($restore==1) {
+ # We are restoring a server from a cluster, so we do that here.
+ print "\nThis will attempt to restore a missing server in a cluster using the\n";
+ print "information found in the primary database or as supplied by the user.\n";
+ print "What this will NOT restore is a database or a ViciBox express install.\n";
+ print "The restore option is primarily designed to allow for a more graceful\n";
+ print "replacement of web servers, telephony servers, and archive servers. It\n";
+ print "is NOT a substitute for having a proper back-up method and emergency\n";
+ print "procedures in place. It is mean't merely as a time-saving tool to use.\n";
+ print "\nThis server should be attached in it's production network environment\n";
+ print "prior to attempting a restore. Otherwise the restore will fail. This means\n";
+ print "that the server has the SAME IP address as it's entry in the vicibox table\n";
+ print "and/or the ViciBox cluster.\n";
+
+ print "\n\nDo you want to continue with the ViciBox restore? [y/N] :";
+ $myprompt = &yesprompt;
+ if ($myprompt==0) { exit; }
+
+ # Prompt for IP address to use if we don't have one
+ if ( $localip eq "X") {
+ print "\nAn internal IP address could not be found on the system.\n";
+ print "Please enter the IP address to use for this server : ";
+ $someinput = trim();
+ if ( &checkipv4($someinput)==1 ) {
+ die "That is not a valid IP address : $someinput\n";
+ } else {
+ $localip = $someinput;
+ }
+
+ } else {
+ print "\nThe Internal IP address found was $localip.\n";
+ print "Do you want to use this IP address for ViciDial? [Y/n] : ";
+ $myprompt = &noprompt;
+ if ($myprompt==1) {
+ print "Please enter the IP address to use for this server : ";
+ $someinput = trim();
+ if ( &checkipv4($someinput)==1 ) {
+ die "That is not a valid IP address : $someinput\n";
+ } else {
+ $localip = $someinput;
+ }
+ }
+ }
+
+
+ print "\nPlease input the master database IP address (127.0.0.1) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIDBIP = $someinput; }
+ if (&checkipv4($VICIDBIP)!=0) {
+ exit 1;
+ }
+ print "Do you want to connect using the default ViciDial DB settings? [Y/n] : ";
+ $myprompt=&noprompt;
+ if ($myprompt==0) {
+ # Try connecting with default user cron and password 1234
+ $dbhVD = DBI->connect("DBI:mysql:$VICIdatabase:$VICIDBIP:$VICIport", "$VICIuser", "$VICIpass") or die "Couldn't connect to ViciDial database: " . DBI->errstr;
+ $dbhVDC = DBI->connect("DBI:mysql:$VICIdatabase:$VICIDBIP:$VICIport", "$VICIcustomuser", "$VICIcustompass") or die "Couldn't connect as custom user to ViciDial database. Check permissions: " . DBI->errstr;
+ if ($debug==1) { print "Database Connectivity checks good\n"; }
+ } else {
+ # Ask what user info to use for the DB and try to connect
+ print "Please enter the database information below\n";
+ print "DB Username ($VICIuser) : ";
+ $someinput = trim();
+ if (length($someinput)>=3) { $VICIuser = $someinput; }
+ print "DB Password ($VICIpass) : ";
+ $someinput = trim();
+ if (length($someinput)>=3) { $VICIpass = $someinput; }
+ print "DB Name ($VICIdatabase) : ";
+ $someinput = trim();
+ if (length($someinput)>=3) { $VICIdatabase = $someinput; }
+ print "DB Custom Username ($VICIcustomuser) : ";
+ $someinput = trim();
+ if (length($someinput)>=3) { $VICIcustomuser = $someinput; }
+ print "DB Custom Password ($VICIcustompass) : ";
+ $someinput = trim();
+ if (length($someinput)>=3) { $VICIcustompass = $someinput; }
+ print "DB Port ($VICIport) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIport = $someinput; }
+ $dbhVD = DBI->connect("DBI:mysql:$VICIdatabase:$VICIDBIP:$VICIport", "$VICIuser", "$VICIpass") or die "Couldn't connect to ViciDial database: " . DBI->errstr;
+ $dbhVDC = DBI->connect("DBI:mysql:$VICIdatabase:$VICIDBIP:$VICIport", "$VICIcustomuser", "$VICIcustompass") or die "Couldn't connect as custom user to ViciDial database. Check permissions: " . DBI->errstr;
+ if ($debug==1) { print "Database Connectivity checks good\n"; }
+ }
+
+ # Now we check to see if we are a vicibox v.4.0+ install so we can suck in settings or enable legacy mode (yay?)
+ $stmtVBOXcheck = "show tables like 'vicibox';";
+ $sthVBOXcheck = $dbhVD->prepare($stmtVBOXcheck) or die "Preparing stmtVBOXcheck: ",$dbhVD->errstr;
+ $sthVBOXcheck->execute or die "Executing sthVBOXcheck: ",$dbhVD->errstr;
+ $sthVBOXcheckrows = $sthVBOXcheck->rows;
+ if ($sthVBOXcheckrows > 0) {
+ if ($debug==1) { print "ViciBox table found\n"; }
+ # We found a vicibox table, so now lets make sure there's good info in it!
+ # If the info doesn't match, then we enable expert mode and all bets are off
+ $stmtVBOXverify = "select field1,field3,field8,field9 from vicibox where server_type='Database' and server_ip IN ('$VICIDBIP', '127.0.0.1') and field1='0';";
+ $sthVBOXverify = $dbhVD->prepare($stmtVBOXverify) or die "Preparing stmtVBOXverify: ",$dbhVD->errstr;
+ $sthVBOXverify->execute or die "Executing sthVBOXverify: ",$dbhVD->errstr;
+ $sthVBOXverifyrows = $sthVBOXverify->rows;
+ if ($sthVBOXverifyrows < 1) {
+ print "Database entry does not match settings supplied! Enabling legacy mode!\n";
+ print "Please verify all data before continuing! Installing on a cluster that\n";
+ print "is already set-up can cause irreparable damage! You have been warned.\n";
+ $legacy=1;
+
+ } else {
+ # Looks like we got results, so load our settings from the primary DB
+ @aryVBOXverify = $sthVBOXverify->fetchrow_array;
+ $DBsvnrev = $aryVBOXverify[1];
+ if ($debug==1) {
+ print "DB SVN rev : $DBsvnrev\n";
+ }
+ }
+ } elsif ($legacy==0) {
+ print "ViciBox table not found, legacy mode enabled!\n";
+ $legacy=1;
+ }
+
+ if ($legacy==0) {
+ # Look up this server's IP from the vicihost tables
+ $stmtVBOXlookup = "select server_type,field1,field2,field3,field4,field5,field6,field7,field8,field9 from vicibox where server_ip='$localip';";
+ $sthVBOXlookup = $dbhVD->prepare($stmtVBOXlookup) or die "Preparing stmtVBOXlookup: ",$dbhVD->errstr;
+ $sthVBOXlookup->execute or die "Executing sthVBOXlookup: ",$dbhVD->errstr;
+ $sthVBOXlookuprows=$sthVBOXlookup->rows;
+ if ($sthVBOXlookuprows>0) {
+ # Found something, suck in the first result and process
+ while (@aryVBOXlookup=$sthVBOXlookup->fetchrow_array()) {
+ $server_type=$aryVBOXlookup[0];
+ $field1=$aryVBOXlookup[1];
+ $field2=$aryVBOXlookup[2];
+ $field4=$aryVBOXlookup[4];
+ $field5=$aryVBOXlookup[5];
+
+ if ($server_type eq 'Database') { die "The restore option cannot be used for databases at this time"; }
+
+ if ($server_type eq 'Web') {
+ $WEB=1;
+ print "Web server entry found\n";
+ print "---> Install Redirect Page? [y/N] : ";
+ $redirect = &yesprompt;
+ # PhpMyAdmin should never be installed haphazardly, so remove from the installer.
+ #print "---> Install phpMyAdmin ? [y/N] : ";
+ #$phpmyadmin = &yesprompt;
+ }
+
+ if ($server_type eq 'Telephony') {
+ $TEL=1;
+ print "Telephony server entry found\n";
+ $primarydialer=0;
+
+ # See if we have an archive server listed and suck in those settings
+ $stmtVBOXtelarc = "select server_ip,field1,field2,field3,field4,field5 from vicibox where server_type='Archive';";
+ $sthVBOXtelarc = $dbhVD->prepare($stmtVBOXtelarc) or die "Preparing stmtVBOXtelarc: ",$dbhVD->errstr;
+ $sthVBOXtelarc->execute or die "Executing sthVBOXtelarc: ",$dbhVD->errstr;
+ $sthVBOXtelarcrows = $sthVBOXtelarc->rows;
+ if ($sthVBOXtelarcrows > 0) {
+ # We found an archive server! Suck in those settings too
+ @aryVBOXtelarc = $sthVBOXtelarc->fetchrow_array;
+ $TELarchiveip = $aryVBOXtelarc[0];
+ $TELarchiveuser = $aryVBOXtelarc[1];
+ $TELarchivepass = $aryVBOXtelarc[2];
+ $TELarchiveport = $aryVBOXtelarc[3];
+ $TELarchivedir = $aryVBOXtelarc[4];
+ $TELarchiveurl = $aryVBOXtelarc[5];
+ if ($debug==1) {
+ print "Archive IP : $TELarchiveip\n";
+ print "Archive user : $TELarchiveuser\n";
+ print "Archive pass : $TELarchivepass\n";
+ print "Archive port : $TELarchiveport\n";
+ print "Archive directory : $TELarchivedir\n";
+ print "Archive URL : $TELarchiveurl\n";
+ }
+ $havearchive=1;
+ } else {
+ print "No Archive server found in provisioning table\n";
+ }
+
+ }
+
+ if ($server_type eq 'Archive') {
+ $ARC=1;
+ print "Archive server entry found\n";
+ $TELarchivedir=$field4;
+ $TELarchiveuser=$field1;
+ $TELarchivepass=$field2;
+ $TELarchiveurl=$field5;
+ }
+
+ }
+
+ } else {
+ # Ask our legacy questions
+ die "\n\nA server with IP $localip could not be located in the vicibox table!\nPerhaps the server has the wrong IP, try again.";
+ }
+
+ } else {
+ # ask our legacy question
+ print "\nLegacy mode has been enable with a restore. Extra care must be taken to\n";
+ print "make sure that the server being restored exists. If you are trying to add a\n";
+ print "new server then you should not be using the restore option at all.\n";
+
+ print "\nWill this server be used as a Web server? [y/N] : ";
+ $WEB = &yesprompt;
+
+ # If we are a web server and an expert, we get more questions!
+ if ($WEB==1) {
+ print "---> Install Redirect Page? [y/N] : ";
+ $redirect = &yesprompt;
+ #print "---> Install phpMyAdmin ? [y/N] : ";
+ #$phpmyadmin = &yesprompt;
+ }
+
+ print "\nWill this server be used as a Telephony server? [y/N] : ";
+ $TEL = &yesprompt;
+
+ if ($TEL==1) {
+ # If asterisk 18 or higher, ask for PJSIP
+ if ($asterisk >= 18) {
+ print "---> Enable PJSIP? [Y/n] : ";
+ $PJSIP = &noprompt;
+ }
+ print "---> Do you have an archive server? [y/N] : ";
+ $havearchive = &yesprompt;
+ if ($havearchive==1) {
+ # Ask for user input for archive server
+ print "Archive server IP : ";
+ $TELarchiveip = trim();
+ if ( &checkipv4($TELarchiveip)==1) { die "Not a valid archive IP\n"; }
+ print "Archive FTP User ($TELarchiveuser) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchiveuser = $someinput; }
+ print "Archive FTP Password ($TELarchivepass) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchivepass = $someinput; }
+ print "Archive FTP Port : ";
+ $TELarchiveport = trim();
+ print "Archive FTP Directory : ";
+ $TELarchivedir = trim();
+ print "Archive URL : ";
+ $TELarchiveurl = trim();
+ }
+ }
+
+ print "\nWill this server be used as an Archive server? [y/N] : ";
+ $ARC = &yesprompt;
+
+ if ($ARC==1) {
+ print "Archive FTP User ($TELarchiveuser) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchiveuser = $someinput; }
+ print "Archive FTP Password ($TELarchivepass) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchivepass = $someinput; }
+ }
+ }
+
+ print "\nDo you want to disable the built-in firewall? [y/N] : ";
+ $myprompt=&yesprompt;
+ if ($myprompt==1) { $disablefirewall=1; }
+
+
+ # Determine the SVN version assuming that we are in legacy mode
+ if ($legacy==1) {
+ print "\nThe local SVN is build $buildver version $adminver from SVN $localsvn\n";
+ if ( $extip ne "X") {
+ print "Do you want to use the ViciDial version listed above? [Y/n] : ";
+ $uselocalsvn = &yesprompt;
+ if ($uselocalsvn==0) {
+ print "Do you want to use the latest SVN version $svnhead? [Y/n] : ";
+ $usesvnhead = &yesprompt;
+ if ($usesvnhead==0) {
+ print "Please enter the SVN revision to use : ";
+ $usersvnrev = trim();
+ if ($usersvnrev > $svnhead) {
+ die "The is not a valid SVN revision\n";
+ } else {
+ $DBsvnrev = $usersvnrev;
+ }
+ } else {
+ $DBsvnrev = $svnhead;
+ }
+ } else {
+ $DBsvnrev = $localsvn;
+ }
+ } else {
+ print "Internet connectivity was not detected. If the above version of ViciDial\n";
+ print "is not correct then you will need to transfer the correct version to the\n";
+ print "directory /usr/share/astguiclient/trunk. If this is an all-in-one ViciBox\n";
+ print "Express installation then you can disregard this message\n\n";
+ }
+
+ } elsif ($legacy==0 && $DB==0 && $DBsvnrev != $localsvn && $extip eq "X") {
+ print "The SVN revision installed on the database is $DBsvnrev. The local SVN version\n";
+ print "is $localsvn. Unfortunately no internet connection was detected so the install\n";
+ print "can not continue. Please copy the SVN version of ViciDial from the database to\n";
+ print "this machine to complete the installation or connect this machine to the internet.\n";
+ die "Local SVN revision does not match database SVN revision and cannot update to it\n";
+
+ } elsif ($legacy==0 && $DB==0 && $DBsvnrev != $localsvn && $extip ne "X") {
+ if ($debug==1) { print "The database SVN revision is $DBsvnrev. This system will be updated to that revision\n"; }
+
+ } elsif ($DB==1 && $DBS==0 && $extip eq "X") {
+ # We are a database, that is not slave, without internets, we use the local SVN copy
+ if ($debug==1) { print "Internet connectivity not found, using local SVN revision $localsvn.\n"; }
+ $DBsvnrev = $localsvn;
+
+ } elsif ($DB==1 && $DBS==0 && $extip ne "X") {
+ # We are a database, that is not slave, with internets, we use the head SVN copy
+ if ($debug==1) { print "Internet connectivity found, using head SVN revision $svnhead.\n"; }
+ $DBsvnrev = $svnhead;
+
+ } else {
+ # At this point all hell has broken loose, cats and dogs sleeping together, mass hysteria
+ # So we just give generic output and hope for the best
+ if ($debug==1) { print "The database SVN revision is $DBsvnrev. This system will be updated to that revision\n"; }
+ }
+
+ # Summary output
+ print "\n\n--- ViciBox Restore Summary ---\n\n";
+ if ($legacy==1) { print "Legacy : Yes\n"; } else { print "Legacy : No\n"; }
+ if ($WEB==1) { print "Web : Yes\n"; } else { print "Web : No\n"; }
+ if ($WEB==1 && $expert==1) {
+ if ($redirect==1) { print "Redirect : Yes\n"; } else { print "Redirect : No\n"; }
+ #if ($phpmyadmin==1) { print "PMA : Yes\n"; } else { print "PMA : No\n"; }
+ }
+ if ($TEL==1) { print "Telephony: Yes\n"; } else { print "Telephony: No\n"; }
+ if ($TEL==1 && $legacy==1) {
+ if ($havearchive==1) { print "Have Arch: Yes\n"; } else { print "Have Arch: No\n"; }
+ }
+ if ($ARC==1) { print "Archive : Yes\n"; } else { print "Archive : No\n"; }
+ if ($disablefirewall==0) {
+ print "Firewall : Enabled\n";
+ } else {
+ print "Firewall : Disabled\n";
+ }
+
+ print "\n--- Configuration Information ---\n";
+ print "- Database -\n";
+ print "SVN Rev : $DBsvnrev\n";
+ print "IP Addr : $VICIDBIP\n";
+ print "Name : $VICIdatabase\n";
+ print "User : $VICIuser\n";
+ print "Password : $VICIpass\n";
+ print "Cust User: $VICIcustomuser\n";
+ print "Cust Pass: $VICIcustompass\n";
+ print "Port : $VICIport\n";
+
+ if ($TEL==1 && $havearchive==1) {
+ print "\n- Archive -\n";
+ print "IP Addr : $TELarchiveip\n";
+ print "User : $TELarchiveuser\n";
+ print "Password : $TELarchivepass\n";
+ print "Port : $TELarchiveport\n";
+ print "Directory: $TELarchivedir\n";
+ print "URL : $TELarchiveurl\n";
+ }
+
+print "\n\nPlease verify the above information before continuing!\n";
+print "Do you want to continue the restoration? [y/N] : ";
+$myprompt = &yesprompt;
+
+# Now either do the restore, or just exit out
+if ($myprompt==1) { dothedeed; exit; } else { exit; }
+
+}
+
+# Vicibox Express stuff
+if ($viciboxexpress==1) {
+ # Disclaimer and BS goes here
+ print "\nThis will install ViciBox in \"Express\" mode. This will result in a\n";
+ print "single server installation performing all roles of the ViciDial Call\n";
+ print "Center Suite. This is the simplest method of installation and generally\n";
+ print "suitable for use with 20 agents or less. Minimum server specifications\n";
+ print "are Quad-Core CPU, 8GB of ram or more, and two 500-GB SSDs in RAID1. A\n";
+ print "software RAID can be setup by using the MD or MultiDevice install media\n";
+ print "for ViciBox.\n";
+ print "\nTo continue beyond this point will be destructive to the installed system.\n";
+
+ print "\n\nDo you want to continue with the ViciBox Express install? [y/N] :";
+ $myprompt = &yesprompt;
+ if ($myprompt==0) { exit; }
+
+ # Set a bunch of variables and install, most of which are defaults except for server roles
+ $TEL=1;
+ $DB=1;
+ $WEB=1;
+ $PJSIP=1; # Use SIP by default
+ if ($asterisk >= 18) {
+ $PJSIP=0; # Use PJSIP if it's asterisk 18
+ }
+ # If we detect internet connectivity, update from SVN, otherwise use local copy
+ if ($extip ne "X") {
+ $DBsvnrev = $svnhead;
+ } else {
+ $DBsvnrev = $localsvn;
+ }
+ dothedeed;
+
+} else {
+
+# Disclaimer and BS goes here
+print "\nThe installer will ask questions based upon the role that this server is\n";
+print "to provide for the ViciBox Call Center Suite. You should have the database\n";
+print "and optionally archive servers setup prior to installing any other servers.\n";
+print "The installer will not run without there being a configured database! If this\n";
+print "server is to be the database then it must be installed before the archive server\n";
+print "Verify that all servers are connected to the same network and have connectivity\n";
+print "to each other before continuing. This installer will be destructive to the the\n";
+print "server if it is run.\n";
+
+# So we get the nitty gritty out of the way and ask if they want to continue installing
+print "\n\nDo you want to continue with the ViciBox install? [y/N] : ";
+$myprompt = &yesprompt;
+if ($myprompt==0) { exit; }
+
+print "\nDo you want to enable expert installation? [y/N] : ";
+$expert = &yesprompt;
+
+if ($debug==1) {
+print "\nDo you want to enable legacy install support? [y/N] : ";
+$legacy = &yesprompt;
+}
+
+# Prompt for IP address to use if we don't have one
+if ( $localip eq "X") {
+ print "\nAn internal IP address could not be found on the system.\n";
+ print "Please enter the IP address to use for this server : ";
+ $someinput = trim();
+ if ( &checkipv4($someinput)==1 ) {
+ die "That is not a valid IP address : $someinput\n";
+ } else {
+ $localip = $someinput;
+ }
+ } else {
+ print "\nThe Internal IP address found was $localip.\n";
+ print "Do you want to use this IP address for ViciDial? [Y/n] : ";
+ $myprompt = &noprompt;
+ if ($myprompt==1) {
+ print "Please enter the IP address to use for this server : ";
+ $someinput = trim();
+ if ( &checkipv4($someinput)==1 ) {
+ die "That is not a valid IP address : $someinput\n";
+ } else {
+ $localip = $someinput;
+ }
+ }
+}
+
+
+print "\nWill this server be used as the Database? [y/N] : ";
+$DB = &yesprompt;
+
+# If we are an expert and a database, see if we are a slave server
+if ($DB==1 && $expert==1) {
+ print "---> Will this be a Slave Databse? [y/N] : ";
+ $DBS = &yesprompt;
+}
+
+
+# Get the DB info and set-up our mysql connections for further fun
+# This is all the DB related things to do when we are NOT the primary database
+if ($DB==0 || ($DB==1 && $DBS==1)) {
+ print "\nPlease input the master database IP address ($localip) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIDBIP = $someinput; } else { $VICIDBIP=$localip; }
+ if (&checkipv4($VICIDBIP)!=0) {
+ die "Not a valid database IP\n";
+ }
+ print "Do you want to connect using the default ViciDial DB settings? [Y/n] : ";
+ $myprompt=&noprompt;
+ if ($myprompt==0) {
+ # Try connecting with default user cron and password 1234
+ $dbhVD = DBI->connect("DBI:mysql:$VICIdatabase:$VICIDBIP:$VICIport", "$VICIuser", "$VICIpass") or die "Couldn't connect to ViciDial database: " . DBI->errstr;
+ $dbhVDC = DBI->connect("DBI:mysql:$VICIdatabase:$VICIDBIP:$VICIport", "$VICIcustomuser", "$VICIcustompass") or die "Couldn't connect as custom user to ViciDial database. Check permissions: " . DBI->errstr;
+ if ($debug==1) { print "Database Connectivity checks good\n"; }
+ } else {
+ # Ask what user info to use for the DB and try to connect
+ print "Please enter the database information below\n";
+ print "DB Username ($VICIuser) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIuser = $someinput; }
+ print "DB Password ($VICIpass) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIpass = $someinput; }
+ print "DB Name ($VICIdatabase) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIdatabase = $someinput; }
+ print "DB Custom Username ($VICIcustomuser) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIcustomuser = $someinput; }
+ print "DB Custom Password ($VICIcustompass) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIcustompass = $someinput; }
+ print "DB Port ($VICIport) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIport = $someinput; }
+ $dbhVD = DBI->connect("DBI:mysql:$VICIdatabase:$VICIDBIP:$VICIport", "$VICIuser", "$VICIpass") or die "Couldn't connect to ViciDial database: " . DBI->errstr;
+ $dbhVDC = DBI->connect("DBI:mysql:$VICIdatabase:$VICIDBIP:$VICIport", "$VICIcustomuser", "$VICIcustompass") or die "Couldn't connect as custom user to ViciDial database. Check permissions: " . DBI->errstr;
+ if ($debug==1) { print "Database Connectivity checks good\n"; }
+ }
+
+ # Now we check to see if we are a vicibox v.4.0+ install so we can suck in settings or enable legacy mode (yay?)
+ $stmtVBOXcheck = "show tables like 'vicibox';";
+ $sthVBOXcheck = $dbhVD->prepare($stmtVBOXcheck) or die "Preparing stmtVBOXcheck: ",$dbhVD->errstr;
+ $sthVBOXcheck->execute or die "Executing sthVBOXcheck: ",$dbhVD->errstr;
+ $sthVBOXcheckrows = $sthVBOXcheck->rows;
+ if ($sthVBOXcheckrows > 0) {
+ if ($debug==1) { print "ViciBox table found\n"; }
+ # We found a vicibox table, so now lets make sure there's good info in it!
+ # If the info doesn't match, then we enable expert mode and all bets are off
+ $stmtVBOXverify = "select field1,field3,field8,field9 from vicibox where server_type='Database' and server_ip IN ('$VICIDBIP', '127.0.0.1') and field1='0';";
+ $sthVBOXverify = $dbhVD->prepare($stmtVBOXverify) or die "Preparing stmtVBOXverify: ",$dbhVD->errstr;
+ $sthVBOXverify->execute or die "Executing sthVBOXverify: ",$dbhVD->errstr;
+ $sthVBOXverifyrows = $sthVBOXverify->rows;
+ if ($sthVBOXverifyrows < 1) {
+ print "Database entry does not match settings supplied! Enabling legacy mode!\n";
+ print "Please verify all data before continuing! Installing on a cluster that\n";
+ print "is already set-up can cause irreparable damage! You have been warned.\n";
+ $legacy=1;
+
+ } else {
+ # Looks like we got results, so load our settings from the primary DB
+ @aryVBOXverify = $sthVBOXverify->fetchrow_array;
+ $DBmysqlid = $aryVBOXverify[0];
+ $DBsvnrev = $aryVBOXverify[1];
+ $VICIslaveuser = $aryVBOXverify[2];
+ $VICIslavepass = $aryVBOXverify[3];
+ if ($debug==1) {
+ print "DB SVN rev : $DBsvnrev\n";
+ print "DB Slave user : $VICIslaveuser\n";
+ print "DB Slave pass : $VICIslavepass\n";
+ }
+ if ($legacy==1) {
+ print "ViciBox v.4.0+ cluster info found! Recommend disabling legacy mode.\n";
+ print "If you do not have a strong reason for enabling legacy mode, disable it.\n";
+ print "Would you like to disable legacy mode? [Y/n] : ";
+ $menuprompt = &noprompt;
+ if ($menuprompt==0) { $legacy=0; }
+ }
+ }
+ } elsif ($legacy==0) {
+ print "ViciBox table not found, legacy mode enabled!\n";
+ $legacy=1;
+ }
+
+ # Since we are a slave, and we are working with a legacy vicibox cluster, we need more options
+ if ($DBS==1 && $legacy==1) {
+ print "Please enter the MySQL Slave ID to use : ";
+ $DBmysqlid = trim();
+ if ($DBmysqlid<2 or $DBmysqlid>10) {
+ print "\n\nPlease enter a valid slave id that is 2 through 10.\n";
+ exit;
+ }
+ print "Please make sure that the 'replication' priviledge is granted to\n";
+ print "the DB user before continuing. If not then the replication will fail.\n";
+ } elsif ($DBS==1) {
+ # We are a slave, but we have vicibox info, so figure out what server ID to use
+ $stmtVBOXmysqlid = "select field1 from vicibox where server_type='Database' order by field1 desc limit 1;";
+ $sthVBOXmysqlid = $dbhVD->prepare($stmtVBOXmysqlid) or die "Preparing stmtVBOXmysqlid: ",$dbhVD->errstr;
+ $sthVBOXmysqlid->execute or die "Executing sthVBOXmysqlid: ",$dbhVD->errstr;
+ $sthVBOXmysqlidrows = $sthVBOXmysqlid->rows;
+ if ($sthVBOXmysqlidrows > 0) {
+ # We have records, so get it and set our ID
+ @aryVBOXmysqlid = $sthVBOXmysqlid->fetchrow_array;
+ $oldvalue = $aryVBOXmysqlid[0];
+ if ($debug==1) { print "MySQL old ID : $oldvalue\n"; }
+ if ($oldvalue==0) { $DBmysqlid = $oldvalue+2; } else { $DBmysqlid = $oldvalue+1; } #
+ if ($debug==1) { print "MySQL ID : $DBmysqlid\n"; }
+ }
+ }
+ } elsif ($DB==1 && $DBS==0) {
+ # Since we are a primary DB, use the user-selected IP for the DB IP
+ $VICIDBIP=$localip;
+ # Since we are a primary DB, see if we want to use the default ViciDial DB credentials
+ print "Do you want to use the default ViciDial DB settings? [Y/n] : ";
+ $myprompt=&noprompt;
+ if ($myprompt==1) {
+ print "Please enter the database information below\n";
+ print "DB Username ($VICIuser) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIuser = $someinput; }
+ print "DB Password ($VICIpass) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIpass = $someinput; }
+ print "DB Name ($VICIdatabase) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIdatabase = $someinput; }
+ print "DB Custom Username ($VICIcustomuser) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIcustomuser = $someinput; }
+ print "DB Custom Password ($VICIcustompass) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIcustompass = $someinput; }
+ print "DB Port ($VICIport) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIport = $someinput; }
+ print "DB Slave User ($VICIslaveuser) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIslaveuser = $someinput; }
+ print "DB Slave Pass ($VICIslavepass) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $VICIslavepass = $someinput; }
+ }
+}
+
+print "\nWill this server be used as a Web server? [y/N] : ";
+$WEB = &yesprompt;
+
+# If we are a web server and an expert, we get more questions!
+if ($WEB==1 && $expert==1) {
+ print "---> Install Redirect Page? [y/N] : ";
+ $redirect = &yesprompt;
+ #print "---> Install phpMyAdmin ? [y/N] : ";
+ #$phpmyadmin = &yesprompt;
+}
+
+print "\nWill this server be used as a Telephony server? [y/N] : ";
+$TEL = &yesprompt;
+
+if ($TEL==1 and $asterisk >= 18) {
+ print "---> Enable PJSIP? [Y/n] : ";
+ $PJSIP = &noprompt;
+}
+
+# If we are legacy and telephony then ask more questions
+if ($TEL==1 && $legacy==1 && $DB==0) {
+ print "---> Is this the first server in a cluster? [y/N] : ";
+ $primarydialer = &yesprompt;
+ print "---> Do you have an archive server? [y/N] : ";
+ $havearchive = &yesprompt;
+ if ($havearchive==1) {
+ # Ask for user input for archive server
+ print "Archive server IP : ";
+ $TELarchiveip = trim();
+ if ( &checkipv4($TELarchiveip)==1) { die "Not a valid archive IP\n"; }
+ print "Archive FTP User : ";
+ $TELarchiveuser = trim();
+ print "Archive FTP Password : ";
+ $TELarchivepass = trim();
+ print "Archive FTP Port : ";
+ $TELarchiveport = trim();
+ print "Archive FTP Directory : ";
+ $TELarchivedir = trim();
+ print "Archive URL : ";
+ $TELarchiveurl = trim();
+ }
+
+ } elsif ($TEL==1 && $legacy==0 && $DB==0) {
+ # We are a telephony server, and not in legacy mode, so we suck in our settings from vicibox
+ $stmtVBOXtelct = "select server from vicibox where server_type='Telephony';";
+ $sthVBOXtelct = $dbhVD->prepare($stmtVBOXtelct) or die "Preparing stmtVBOXtelct: ",$dbhVD->errstr;
+ $sthVBOXtelct->execute or die "Executing sthVBOXtelct: ",$dbhVD->errstr;
+ $sthVBOXtelctrows = $sthVBOXtelct->rows;
+ if ($sthVBOXtelctrows > 0 ) {
+ $primarydialer=0;
+ if ($debug==1) { print "We are not the first dialer, there are $sthVBOXtelctrows others\n"; }
+ } else {
+ if ($debug==1) { print "We are the first dialer\n"; }
+ }
+
+ # See if we have an archive server listed and suck in those settings
+ $stmtVBOXtelarc = "select server_ip,field1,field2,field3,field4,field5 from vicibox where server_type='Archive';";
+ $sthVBOXtelarc = $dbhVD->prepare($stmtVBOXtelarc) or die "Preparing stmtVBOXtelarc: ",$dbhVD->errstr;
+ $sthVBOXtelarc->execute or die "Executing sthVBOXtelarc: ",$dbhVD->errstr;
+ $sthVBOXtelarcrows = $sthVBOXtelarc->rows;
+ if ($sthVBOXtelarcrows > 0) {
+ # We found an archive server! Suck in those settings too
+ @aryVBOXtelarc = $sthVBOXtelarc->fetchrow_array;
+ $TELarchiveip = $aryVBOXtelarc[0];
+ $TELarchiveuser = $aryVBOXtelarc[1];
+ $TELarchivepass = $aryVBOXtelarc[2];
+ $TELarchiveport = $aryVBOXtelarc[3];
+ $TELarchivedir = $aryVBOXtelarc[4];
+ $TELarchiveurl = $aryVBOXtelarc[5];
+ if ($debug==1) {
+ print "Archive IP : $TELarchiveip\n";
+ print "Archive user : $TELarchiveuser\n";
+ print "Archive pass : $TELarchivepass\n";
+ print "Archive port : $TELarchiveport\n";
+ print "Archive directory : $TELarchivedir\n";
+ print "Archive URL : $TELarchiveurl\n";
+ }
+ $havearchive=1;
+ } else {
+ print "No Archive server found in provisioning table\n";
+ }
+}
+
+print "\nWill this server be used as an Archive server? [y/N] : ";
+$ARC = &yesprompt;
+
+# And now we do some archive server set-up
+if ($ARC==1) {
+ if ($havearchive==1) { die "Archive server already found! Can't set-up two.\n"; }
+ # Some defaults generated from the above messes
+ $TELarchiveurl = "http://" . $localip . "/archive/";
+ $TELarchiveip = $localip;
+
+ if ($legacy==0 && $DB==0) {
+ # Check to see if we already have an archive server defined in non-legacy mode and we aren't the DB
+ $stmtVBOXtelarc = "select server_ip,field1,field2,field3,field4,field5 from vicibox where server_type='Archive';";
+ $sthVBOXtelarc = $dbhVD->prepare($stmtVBOXtelarc) or die "Preparing stmtVBOXtelarc: ",$dbhVD->errstr;
+ $sthVBOXtelarc->execute or die "Executing sthVBOXtelarc: ",$dbhVD->errstr;
+ $sthVBOXtelarcrows = $sthVBOXtelarc->rows;
+ if ($sthVBOXtelarcrows > 0) { die "Archive server found! Can't set-up two.\n"; }
+ }
+
+ if ($legacy==1 || $expert==1) {
+ # Ask for user input for archive server
+ print "Archive server IP ($TELarchiveip) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchiveip = $someinput; }
+ if ( &checkipv4($TELarchiveip)==1) { die "Not a valid archive IP\n"; }
+ print "Archive FTP User ($TELarchiveuser) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchiveuser = $someinput; }
+ print "Archive FTP Password ($TELarchivepass) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchivepass = $someinput; }
+ print "Archive FTP Port ($TELarchiveport) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchiveport = $someinput; }
+ print "Archive FTP Directory ($TELarchivedir) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchivedir = $someinput; }
+ print "Archive URL ($TELarchiveurl) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchiveurl = $someinput; }
+
+ } else {
+ # We will use defaults, but verify that the internal vicidial IP and external URL are correct
+ print "Archive server IP ($TELarchiveip) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchiveip = $someinput; }
+ if ( &checkipv4($TELarchiveip)==1) { die "Not a valid archive IP\n"; }
+ print "Archive URL ($TELarchiveurl) : ";
+ $someinput = trim();
+ if (length($someinput)>3) { $TELarchiveurl = $someinput; }
+ }
+}
+
+
+# Determine the SVN version assuming that we are in legacy mode
+if ($legacy==1) {
+ print "\nThe local SVN is build $buildver version $adminver from SVN $localsvn\n";
+ if ( $extip ne "X") {
+ print "Do you want to use the ViciDial version listed above? [Y/n] : ";
+ $uselocalsvn = &yesprompt;
+ if ($uselocalsvn==0) {
+ print "Do you want to use the latest SVN version $svnhead? [Y/n] : ";
+ $usesvnhead = &yesprompt;
+ if ($usesvnhead==0) {
+ print "Please enter the SVN revision to use : ";
+ $usersvnrev = trim();
+ if ($usersvnrev > $svnhead) {
+ die "The is not a valid SVN revision\n";
+ } else {
+ $DBsvnrev = $usersvnrev;
+ }
+ } else {
+ $DBsvnrev = $svnhead;
+ }
+ } else {
+ $DBsvnrev = $localsvn;
+ }
+ } else {
+ print "Internet connectivity was not detected. If the above version of ViciDial\n";
+ print "is not correct then you will need to transfer the correct version to the\n";
+ print "directory /usr/share/astguiclient/trunk. If this is an all-in-one ViciBox\n";
+ print "Express installation then you can disregard this message\n\n";
+ }
+
+ } elsif ($legacy==0 && $DB==0 && $DBsvnrev != $localsvn && $extip eq "X") {
+ print "The SVN revision installed on the database is $DBsvnrev. The local SVN version\n";
+ print "is $localsvn. Unfortunately no internet connection was detected so the install\n";
+ print "can not continue. Please copy the SVN version of ViciDial from the database to\n";
+ print "this machine to complete the installation or connect this machine to the internet.\n";
+ die "Local SVN revision does not match database SVN revision and cannot update to it\n";
+
+ } elsif ($legacy==0 && $DB==0 && $DBsvnrev != $localsvn && $extip ne "X") {
+ if ($debug==1) { print "The database SVN revision is $DBsvnrev. This system will be updated to that revision\n"; }
+
+ } elsif ($DB==1 && $DBS==0 && $extip eq "X") {
+ # We are a database, that is not slave, without internets, we use the local SVN copy
+ if ($debug==1) { print "Internet connectivity not found, using local SVN revision $localsvn.\n"; }
+ $DBsvnrev = $localsvn;
+
+ } elsif ($DB==1 && $DBS==0 && $extip ne "X") {
+ # We are a database, that is not slave, with internets, we use the head SVN copy
+ if ($debug==1) { print "Internet connectivity found, using head SVN revision $svnhead.\n"; }
+ $DBsvnrev = $svnhead;
+
+ } else {
+ # At this point all hell has broken loose, cats and dogs sleeping together, mass hysteria
+ # So we just give generic output and hope for the best
+ if ($debug==1) { print "The database SVN revision is $DBsvnrev. This system will be updated to that revision\n"; }
+}
+
+# Sanity check
+if ($TEL==0 && $DB==0 && $WEB==0 && $ARC==0) { die "Did not select any server roles, exiting.\n"; }
+
+# See if we want to disable the firewall or not
+if ($DB==1 && $TEL==0 && $WEB==0 && $ARC==0) {
+ # Since we seem to be a dedicated DB, we shouldn't need firewall, default to disabled
+ $disablefirewall=1;
+ print "\nDo you want to enable the built-in firewall? [y/N] : ";
+ $myprompt=&yesprompt;
+ if ($myprompt==1) { $disablefirewall=0; }
+ } else {
+ # Since we aren't dedicated, we are probably on the real internet, so default to enabled
+ print "\nDo you want to disable the built-in firewall? [y/N] : ";
+ $myprompt=&yesprompt;
+ if ($myprompt==1) { $disablefirewall=1; }
+}
+
+# Summary output
+print "\n\n--- ViciBox Install Summary ---\n\n";
+if ($expert==1) { print "Expert : Yes\n"; } else { print "Expert : No\n"; }
+if ($legacy==1) { print "Legacy : Yes\n"; } else { print "Legacy : No\n"; }
+if ($DB==1) { print "Database : Yes\n"; } else { print "Database : No\n"; }
+if ($DBS==1) { print "Slave ID : $DBmysqlid\n"; }
+if ($WEB==1) { print "Web : Yes\n"; } else { print "Web : No\n"; }
+if ($WEB==1 && $expert==1) {
+if ($redirect==1) { print "Redirect : Yes\n"; } else { print "Redirect : No\n"; }
+#if ($phpmyadmin==1) { print "PMA : Yes\n"; } else { print "PMA : No\n"; }
+}
+if ($TEL==1) { print "Telephony: Yes\n"; } else { print "Telephony: No\n"; }
+if ($TEL==1 && $legacy==1) {
+ if ($primarydialer==1) { print "First Srv: Yes\n"; } else { print "First Srv: No\n"; }
+ if ($havearchive==1) { print "Have Arch: Yes\n"; } else { print "Have Arch: No\n"; }
+}
+if ($ARC==1) { print "Archive : Yes\n"; } else { print "Archive : No\n"; }
+if ($disablefirewall==0) {
+ print "Firewall : Enabled\n";
+ } else {
+ print "Firewall : Disabled\n";
+}
+
+print "\n--- Configuration Information ---\n";
+print "- Database -\n";
+print "SVN Rev : $DBsvnrev\n";
+print "IP Addr : $VICIDBIP\n";
+print "Name : $VICIdatabase\n";
+print "User : $VICIuser\n";
+print "Password : $VICIpass\n";
+print "Cust User: $VICIcustomuser\n";
+print "Cust Pass: $VICIcustompass\n";
+if ($DBS==1) {
+ print "Slave Usr: $VICIslaveuser\n";
+ print "Slave Pw : $VICIslavepass\n";
+
+}
+print "Port : $VICIport\n";
+
+if ($TEL==1 && $havearchive==1) {
+print "\n- Archive -\n";
+print "IP Addr : $TELarchiveip\n";
+print "User : $TELarchiveuser\n";
+print "Password : $TELarchivepass\n";
+print "Port : $TELarchiveport\n";
+print "Directory: $TELarchivedir\n";
+print "URL : $TELarchiveurl\n";
+}
+
+print "\n\nPlease verify the above information before continuing!\n";
+print "Do you want to continue the installation? [y/N] : ";
+$myprompt = &yesprompt;
+
+if ($myprompt==1) { dothedeed; }
+
+}
diff --git a/Custom/backvicibox/restore.sh b/Custom/backvicibox/restore.sh
new file mode 100644
index 0000000..9bd2522
--- /dev/null
+++ b/Custom/backvicibox/restore.sh
@@ -0,0 +1,125 @@
+#!/bin/bash
+#
+# Script de restauración de Vicibox para servidor destino
+# Uso: ./restore.sh
+#
+
+set -e
+
+# Colores para output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+NC='\033[0m'
+
+info() {
+ echo -e "${GREEN}[INFO]${NC} $1"
+}
+
+warn() {
+ echo -e "${YELLOW}[WARN]${NC} $1"
+}
+
+error() {
+ echo -e "${RED}[ERROR]${NC} $1"
+}
+
+# Verificar que se ejecuta como root
+if [ "$EUID" -ne 0 ]; then
+ error "Este script debe ejecutarse como root"
+ exit 1
+fi
+
+# Verificar que existen los archivos
+if [ ! -f "vicibox-scripts.tar.gz" ]; then
+ error "No se encuentra vicibox-scripts.tar.gz"
+ exit 1
+fi
+
+if [ ! -f "astguiclient-trunk.tar.gz" ]; then
+ error "No se encuentra astguiclient-trunk.tar.gz"
+ exit 1
+fi
+
+info "=========================================="
+info "Restauración de Vicibox"
+info "=========================================="
+echo ""
+
+# 1. Restaurar scripts de Vicibox
+info "1. Restaurando scripts de Vicibox..."
+mkdir -p /usr/share
+if tar -xzf vicibox-scripts.tar.gz -C /usr/share/ 2>/dev/null; then
+ chmod +x /usr/share/vicibox/*.sh 2>/dev/null
+ chmod +x /usr/share/vicibox/*.pl 2>/dev/null
+ chmod +x /usr/share/vicibox/vicibox-* 2>/dev/null
+ info " ✓ Scripts restaurados"
+else
+ error " ✗ Error al restaurar scripts"
+ exit 1
+fi
+echo ""
+
+# 2. Crear enlaces simbólicos
+info "2. Creando enlaces simbólicos..."
+mkdir -p /usr/local/bin
+ln -sf /usr/share/vicibox/vicibox-install.pl /usr/local/bin/vicibox-install 2>/dev/null
+ln -sf /usr/share/vicibox/vicibox-express /usr/local/bin/vicibox-express 2>/dev/null
+ln -sf /usr/share/vicibox/vicibox-externip /usr/local/bin/vicibox-externip 2>/dev/null
+ln -sf /usr/share/vicibox/vicibox-timezone /usr/local/bin/vicibox-timezone 2>/dev/null
+ln -sf /usr/share/vicibox/vicibox-mdraid1 /usr/local/bin/vicibox-mdraid1 2>/dev/null
+info " ✓ Enlaces simbólicos creados"
+echo ""
+
+# 3. Restaurar código fuente
+info "3. Restaurando código fuente de ViciDial..."
+mkdir -p /usr/src
+if tar -xzf astguiclient-trunk.tar.gz -C /usr/src/ 2>/dev/null; then
+ chmod +x /usr/src/astguiclient/trunk/install.pl 2>/dev/null
+ chmod +x /usr/src/astguiclient/trunk/bin/* 2>/dev/null || true
+ chmod +x /usr/src/astguiclient/trunk/extras/*.sh 2>/dev/null || true
+ info " ✓ Código fuente restaurado"
+else
+ error " ✗ Error al restaurar código fuente"
+ exit 1
+fi
+echo ""
+
+# 4. Verificación
+info "4. Verificando instalación..."
+ERRORS=0
+
+if [ ! -f "/usr/share/vicibox/vicibox-install.pl" ]; then
+ error " ✗ No se encuentra vicibox-install.pl"
+ ERRORS=$((ERRORS+1))
+fi
+
+if [ ! -f "/usr/src/astguiclient/trunk/install.pl" ]; then
+ error " ✗ No se encuentra install.pl de ViciDial"
+ ERRORS=$((ERRORS+1))
+fi
+
+if [ ! -f "/usr/src/astguiclient/trunk/extras/MySQL_AST_CREATE_tables.sql" ]; then
+ error " ✗ No se encuentra MySQL_AST_CREATE_tables.sql"
+ ERRORS=$((ERRORS+1))
+fi
+
+if [ $ERRORS -eq 0 ]; then
+ info " ✓ Verificación completada sin errores"
+else
+ warn " ⚠ Se encontraron $ERRORS errores en la verificación"
+fi
+echo ""
+
+info "=========================================="
+info "Restauración completada!"
+info "=========================================="
+echo ""
+info "Ahora puedes ejecutar la instalación:"
+echo ""
+echo " Para instalación Express (todo-en-uno):"
+echo " vicibox-install --vicibox-express"
+echo ""
+echo " Para instalación personalizada:"
+echo " vicibox-install"
+echo ""
diff --git a/Custom/backvicibox/version-info.txt b/Custom/backvicibox/version-info.txt
new file mode 100644
index 0000000..0564efa
--- /dev/null
+++ b/Custom/backvicibox/version-info.txt
@@ -0,0 +1,21 @@
+=== Información de Versión ===
+Fecha de backup: Fri Feb 6 04:46:49 PM UTC 2026
+
+--- Versión de Vicibox ---
+- ViciBox v.12.0.2 240121
+* MariaDB 10.11 deprecated the old TIMESTAMP behavior
+* ssh service was defined twice in the external.xml zonefile.
+- ViciBox v.12.0.1 250118
+* firewalld (the firewall) was not enabled by default. This is a policy issue and not a bug.
+* Added version into to /etc/issue and Grub. So now it'll say v.12.0.1 instead of v.12.0
+* vicibox-mdraid1 bug see https://docs.vicibox.com/en/latest/bugfix/bugfix1200-1.html
+- ViciBox v.12.0.0-Beta 250116
+
+--- Versión de ViciDial ---
+2.14b0.5
+
+--- Información del Sistema ---
+Linux vicibox12 6.4.0-150600.23.73-default #1 SMP PREEMPT_DYNAMIC Tue Oct 7 08:43:02 UTC 2025 (46f6a23) x86_64 x86_64 x86_64 GNU/Linux
+
+--- Versión de Asterisk ---
+Asterisk 18.26.4-vici
diff --git a/Custom/backvicibox/vicibox-scripts.tar.gz b/Custom/backvicibox/vicibox-scripts.tar.gz
new file mode 100644
index 0000000..854c83e
Binary files /dev/null and b/Custom/backvicibox/vicibox-scripts.tar.gz differ
diff --git a/Custom/installer/custom.css b/Custom/installer/custom.css
index e8b4b9f..48a4022 100644
--- a/Custom/installer/custom.css
+++ b/Custom/installer/custom.css
@@ -1206,7 +1206,7 @@ body:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B9
display: block;
margin-left: auto;
margin-right: auto;
- max-width: 100%;
+ max-width: 70%;
height: auto;
}
@@ -10336,6 +10336,144 @@ body:has(form#vsn) form#vsn textarea#call_notes {
resize: vertical !important;
}
+/* ========== Solo #SearcHForMDisplaYBox (Search for a lead) - estilos únicos para este componente ========== */
+#SearcHForMDisplaYBox {
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh !important;
+ background: rgba(0, 0, 0, 0.45) !important;
+ backdrop-filter: blur(4px) !important;
+ z-index: 73 !important;
+}
+#SearcHForMDisplaYBox > table {
+ width: auto !important;
+ max-width: 520px !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 12px !important;
+ background: var(--color-bg-white, #fff) !important;
+ border: none !important;
+ border-radius: var(--vdc-radius, 8px) !important;
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.06) !important;
+ overflow: hidden !important;
+}
+#SearcHForMDisplaYBox > table > tbody > tr > td {
+ padding: 16px 20px !important;
+ text-align: left !important;
+ vertical-align: top !important;
+ border: none !important;
+ background: transparent !important;
+}
+#SearcHForMDisplaYBox .sd_text,
+#SearcHForMDisplaYBox font.sd_text {
+ font-family: var(--font-family) !important;
+ font-size: 15px !important;
+ font-weight: 700 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ display: block !important;
+ margin-bottom: 8px !important;
+}
+#SearcHForMDisplaYBox .sh_text,
+#SearcHForMDisplaYBox font.sh_text {
+ font-family: var(--font-family) !important;
+ font-size: 12px !important;
+ line-height: 1.4 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeaDSearcHVieWClose"] {
+ display: inline-block !important;
+ padding: 4px 10px !important;
+ border-radius: 6px !important;
+ background: rgba(0, 0, 0, 0.06) !important;
+ color: var(--color-text-dark, #333) !important;
+ font-size: 12px !important;
+ font-weight: 500 !important;
+ text-decoration: none !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeaDSearcHVieWClose"]:hover {
+ background: rgba(0, 0, 0, 0.1) !important;
+}
+#SearcHForMDisplaYBox table table {
+ width: 100% !important;
+ max-width: 100% !important;
+ border: none !important;
+ border-collapse: collapse !important;
+ margin: 10px 0 !important;
+}
+#SearcHForMDisplaYBox table table tr {
+ vertical-align: middle !important;
+}
+#SearcHForMDisplaYBox table table td {
+ padding: 6px 0 !important;
+ border: none !important;
+ vertical-align: middle !important;
+}
+#SearcHForMDisplaYBox table table td[align="right"] {
+ padding-right: 12px !important;
+ width: 1% !important;
+ white-space: nowrap !important;
+ font-weight: 500 !important;
+ font-size: 12px !important;
+}
+#SearcHForMDisplaYBox table table input[type="text"] {
+ width: 100% !important;
+ max-width: 220px !important;
+ box-sizing: border-box !important;
+ padding: 6px 10px !important;
+ border: 1px solid rgba(0, 0, 0, 0.2) !important;
+ border-radius: 6px !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+}
+#SearcHForMDisplaYBox table table input[type="text"]:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ box-shadow: 0 0 0 2px rgba(0, 139, 139, 0.2) !important;
+}
+#SearcHForMDisplaYBox table table input[type="checkbox"] {
+ width: auto !important;
+ margin-right: 6px !important;
+ vertical-align: middle !important;
+}
+#SearcHForMDisplaYBox table table td[align="center"][colspan="2"] {
+ padding-top: 16px !important;
+ padding-bottom: 0 !important;
+ text-align: center !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeadSearchSubmit"] {
+ display: inline-block !important;
+ padding: 8px 18px !important;
+ border-radius: 6px !important;
+ background: var(--color-primary-medium, #008b8b) !important;
+ color: #fff !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ text-decoration: none !important;
+ transition: background 0.2s ease, transform 0.1s ease !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeadSearchSubmit"]:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+ transform: translateY(-1px) !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeadSearchReset"] {
+ display: inline-block !important;
+ padding: 6px 12px !important;
+ border-radius: 6px !important;
+ background: rgba(0, 0, 0, 0.06) !important;
+ color: var(--color-text-dark, #333) !important;
+ font-size: 12px !important;
+ text-decoration: none !important;
+ margin-left: 8px !important;
+}
+#SearcHForMDisplaYBox a[onclick*="LeadSearchReset"]:hover {
+ background: rgba(0, 0, 0, 0.1) !important;
+}
+
/* ========== SearcHResultSDisplaYBox (Search Results) - bloque nuevo ========== */
#SearcHResultSDisplaYBox {
display: flex !important;
@@ -10428,4 +10566,1788 @@ body:has(form#vsn) form#vsn textarea#call_notes {
#SearcHResultSDisplaYBox .scroll_calllog a[href="#"][onclick*="hideDiv"]:hover {
background: var(--color-primary-dark, #2E7D7D) !important;
}
+/* Refinamientos solo #SearcHResultSDisplaYBox: caja más compacta y visibilidad */
+
+#SearcHResultSDisplaYBox > table {
+ max-width: 380px !important;
+}
+#SearcHResultSDisplaYBox #SearcHResultSSpan,
+#SearcHResultSDisplaYBox .scroll_calllog {
+ max-height: 55vh !important;
+ -webkit-overflow-scrolling: touch !important;
+}
+
+/* ========== Solo #AgentTimeDisplayBox (Agent Time Report) - estilos exclusivos ========== */
+body:has(#AgentTimeDisplayBox[style*="visibility: visible"]) {
+ overflow: hidden !important;
+}
+#AgentTimeDisplayBox {
+ position: fixed !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh !important;
+ background: rgba(0, 0, 0, 0.45) !important;
+ backdrop-filter: blur(4px) !important;
+ z-index: 70 !important;
+}
+#AgentTimeDisplayBox > table {
+ width: auto !important;
+ max-width: 520px !important;
+ max-height: 85vh !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 12px !important;
+ background: var(--color-bg-white, #fff) !important;
+ border: none !important;
+ border-radius: var(--vdc-radius, 8px) !important;
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.06) !important;
+ overflow: hidden !important;
+}
+#AgentTimeDisplayBox > table > tbody > tr > td {
+ padding: 16px 20px !important;
+ text-align: center !important;
+ vertical-align: top !important;
+ border: none !important;
+ background: transparent !important;
+}
+#AgentTimeDisplayBox #AgentTimeDisplaySpan,
+#AgentTimeDisplayBox .scroll_calllog {
+ display: block !important;
+ max-height: 55vh !important;
+ overflow-y: auto !important;
+ padding: 12px 0 !important;
+ margin: 0 !important;
+ font-family: var(--font-family) !important;
+ font-size: 13px !important;
+ line-height: 1.5 !important;
+ color: var(--color-text-dark, #2D2D2D) !important;
+ -webkit-overflow-scrolling: touch !important;
+}
+#AgentTimeDisplayBox #AgentTimeDisplaySpan b,
+#AgentTimeDisplayBox .scroll_calllog b {
+ font-weight: 700 !important;
+ color: var(--color-primary-dark, #2E7D7D) !important;
+}
+#AgentTimeDisplayBox #AgentTimeDisplaySpan a[onclick*="AgentTimeReport"],
+#AgentTimeDisplayBox .scroll_calllog a[onclick*="AgentTimeReport"] {
+ display: inline-block !important;
+ padding: 8px 18px !important;
+ margin-top: 12px !important;
+ border-radius: 6px !important;
+ background: var(--color-primary-medium, #008b8b) !important;
+ color: #fff !important;
+ font-size: 13px !important;
+ font-weight: 500 !important;
+ text-decoration: none !important;
+ transition: background 0.2s ease !important;
+}
+#AgentTimeDisplayBox #AgentTimeDisplaySpan a[onclick*="AgentTimeReport"]:hover,
+#AgentTimeDisplayBox .scroll_calllog a[onclick*="AgentTimeReport"]:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+}
+
+#AgentTimeSpan {
+ margin-top: -30px;
+ margin-left: 100px;
+
+}
+
+/* ========== Solo #VolumeControlSpan (controles de volumen) - estilos exclusivos ========== */
+/* Fuente Font Awesome 6 Solid solo para estos iconos (volume-up/down) */
+@font-face {
+ font-family: "Font Awesome 6 Free VDC";
+ font-style: normal;
+ font-weight: 900;
+ font-display: block;
+ src: url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/webfonts/fa-solid-900.woff2") format("woff2");
+}
+#VolumeControlSpan {
+
+ position: absolute !important;
+ left: 10px !important;
+ top: 848px !important;
+ z-index: 14 !important;
+ display: inline-flex !important;
+ flex-direction: column !important;
+ align-items: center !important;
+ gap: 1px !important;
+ padding: 5px 6px !important;
+ background: rgba(255, 255, 255, 0.95) !important;
+ border-radius: 12px !important;
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(0, 0, 0, 0.04) !important;
+ backdrop-filter: blur(8px) !important;
+}
+#VolumeControlSpan br {
+ display: none !important;
+}
+#VolumeControlSpan #VolumeUpSpan,
+#VolumeControlSpan #VolumeDownSpan {
+ display: inline-flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ width: 32px !important;
+ height: 32px !important;
+ line-height: 0 !important;
+ border-radius: 8px !important;
+ transition: transform 0.2s ease, background 0.2s ease, color 0.2s ease !important;
+}
+#VolumeControlSpan #VolumeUpSpan img,
+#VolumeControlSpan #VolumeDownSpan img {
+ position: absolute !important;
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden !important;
+ opacity: 0 !important;
+ pointer-events: none !important;
+}
+#VolumeControlSpan #VolumeUpSpan::before {
+ font-family: "Font Awesome 6 Free VDC" !important;
+ font-weight: 900 !important;
+ content: "\f028" !important; /* fa-volume-high */
+ font-size: 1.125rem !important;
+ color: #2D2D2D !important;
+}
+#VolumeControlSpan #VolumeDownSpan::before {
+ font-family: "Font Awesome 6 Free VDC" !important;
+ font-weight: 900 !important;
+ content: "\f027" !important; /* fa-volume-low */
+ font-size: 1.125rem !important;
+ color: #2D2D2D !important;
+}
+#VolumeControlSpan #VolumeUpSpan:hover,
+#VolumeControlSpan #VolumeDownSpan:hover {
+ background: rgba(0, 139, 139, 0.08) !important;
+ transform: scale(1.06) !important;
+}
+#VolumeControlSpan #VolumeUpSpan:hover::before,
+#VolumeControlSpan #VolumeDownSpan:hover::before {
+ color: #008b8b !important;
+}
+
+/* ========== Solo #AgentStatusSpan (estado del agente) - estilos exclusivos ========== */
+#AgentStatusSpan {
+
+ left: 60px !important;
+ margin-top: 40px;
+ z-index: 15 !important;
+ display: inline-block !important;
+ padding: 10px 14px !important;
+ background: rgba(255, 255, 255, 0.95) !important;
+ border-radius: 10px !important;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(0, 0, 0, 0.04) !important;
+ backdrop-filter: blur(8px) !important;
+}
+#AgentStatusSpan .body_text,
+#AgentStatusSpan font.body_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 13px !important;
+ line-height: 1.5 !important;
+ color: #2D2D2D !important;
+ font-weight: 400 !important;
+}
+#AgentStatusSpan #AgentStatusStatus {
+ display: inline-block !important;
+ padding: 2px 8px !important;
+ margin-left: 2px !important;
+ border-radius: 6px !important;
+ background: rgba(0, 139, 139, 0.12) !important;
+ color: #008b8b !important;
+ font-weight: 600 !important;
+ font-size: 12px !important;
+ letter-spacing: 0.02em !important;
+}
+#AgentStatusSpan br {
+ display: block !important;
+ margin: 4px 0 0 0 !important;
+}
+#AgentStatusSpan #AgentStatusDiaLs {
+ font-weight: 600 !important;
+ color: #2D2D2D !important;
+}
+
+/* ========== Solo #callsinqueuedisplay (Calls In Queue) - estilos exclusivos ========== */
+#callsinqueuedisplay {
+ position: absolute !important;
+ left: 13px !important;
+ top: 912px !important;
+ width: 1176px !important;
+ z-index: 17 !important;
+
+ overflow-x: auto !important;
+ overflow-y: hidden !important;
+ padding: 10px 16px !important;
+ background: rgba(255, 255, 255, 0.98) !important;
+ border-top: 1px solid rgba(0, 0, 0, 0.06) !important;
+ box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.03) !important;
+}
+#callsinqueuedisplay > table {
+ width: 100% !important;
+ max-width: 100% !important;
+ border: none !important;
+ border-collapse: collapse !important;
+}
+#callsinqueuedisplay > table td {
+ padding: 4px 8px !important;
+ border: none !important;
+ vertical-align: middle !important;
+}
+#callsinqueuedisplay > table td:first-child {
+ width: 5px !important;
+ padding-left: 0 !important;
+}
+#callsinqueuedisplay .body_text,
+#callsinqueuedisplay font.body_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 13px !important;
+ color: #2D2D2D !important;
+ font-weight: 500 !important;
+}
+#callsinqueuedisplay #callsinqueuelist {
+ font-size: 13px !important;
+ color: #2D2D2D !important;
+ line-height: 1.4 !important;
+}
+
+/* ========== Solo #AgentViewSpan (Other Agents Status) - estilos exclusivos ========== */
+#AgentViewSpan {
+ position: absolute !important;
+ right: 12px !important;
+ left: auto !important;
+ top: 20px !important;
+ width: 260px !important;
+ height: 500px !important;
+ max-height: 75vh !important;
+ z-index: 21 !important;
+ overflow: auto !important;
+ padding: 12px 14px !important;
+ background: #fafafa !important;
+ border: 1px solid #eee !important;
+ border-radius: 8px !important;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.04) !important;
+}
+#AgentViewSpan > table {
+ width: 100% !important;
+ border: none !important;
+ border-collapse: collapse !important;
+}
+#AgentViewSpan > table td {
+ padding: 4px 0 !important;
+ border: none !important;
+ vertical-align: top !important;
+}
+#AgentViewSpan > table td:first-child {
+ width: 5px !important;
+ padding-right: 6px !important;
+}
+#AgentViewSpan .body_text,
+#AgentViewSpan font.body_text,
+#vicidial_form #AgentViewSpan .body_text,
+#vicidial_form #AgentViewSpan font.body_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ color: #1a1a1a !important;
+}
+#AgentViewSpan #AgentViewStatus {
+ display: block !important;
+ margin-top: 6px !important;
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 12px !important;
+ color: #333 !important;
+ line-height: 1.45 !important;
+}
+#AgentViewSpan #AgentViewStatus > table {
+ width: 100% !important;
+ border: none !important;
+ border-collapse: collapse !important;
+}
+#AgentViewSpan #AgentViewStatus > table td {
+ padding: 6px 8px !important;
+ border: none !important;
+ border-radius: 4px !important;
+ font-size: 12px !important;
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ background: transparent !important;
+}
+#AgentViewSpan #AgentViewStatus > table tr[bgcolor="#ADD8E6"] td { background: #e3f2fd !important; }
+#AgentViewSpan #AgentViewStatus > table tr[bgcolor="#D8BFD8"] td { background: #f3e5f5 !important; }
+#AgentViewSpan #AgentViewStatus > table tr[bgcolor="#F0E68C"] td { background: #fff9c4 !important; }
+#AgentViewSpan #AgentViewStatus br {
+ display: block !important;
+ margin: 8px 0 0 0 !important;
+}
+#AgentViewSpan #AgentViewStatus font[style*="font-size:10px"] {
+ font-size: 11px !important;
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ color: #666 !important;
+}
+#AgentViewSpan #AgentViewStatus font[style*="background-color:#ADD8E6"],
+#AgentViewSpan #AgentViewStatus font[style*="background-color:#D8BFD8"],
+#AgentViewSpan #AgentViewStatus font[style*="background-color:#F0E68C"] {
+ display: inline-block !important;
+ width: 10px !important;
+ height: 10px !important;
+ border-radius: 2px !important;
+ vertical-align: middle !important;
+ margin-right: 2px !important;
+}
+
+/* ========== Solo #InvalidOpenerSpan (mensaje "not opened properly") - estilos exclusivos ========== */
+#InvalidOpenerSpan {
+ position: fixed !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh !important;
+ z-index: 186 !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ background: rgba(0, 0, 0, 0.5) !important;
+ backdrop-filter: blur(4px) !important;
+}
+
+#InvalidOpenerSpan > table {
+ width: auto !important;
+ max-width: 420px !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 16px !important;
+ background: #fff !important;
+ border: none !important;
+ border-radius: 10px !important;
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.06) !important;
+ overflow: hidden !important;
+}
+#InvalidOpenerSpan > table td {
+ padding: 24px 28px !important;
+ text-align: center !important;
+ border: none !important;
+ background: transparent !important;
+}
+#InvalidOpenerSpan .sd_text,
+#InvalidOpenerSpan font.sd_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 15px !important;
+ line-height: 1.5 !important;
+ color: #2D2D2D !important;
+ font-weight: 500 !important;
+}
+#InvalidOpenerSpan br {
+ display: block !important;
+ margin: 0 !important;
+}
+
+/* ========== Solo #blind_monitor_alert_span (ALERT / Go Back) - estilos exclusivos ========== */
+#blind_monitor_alert_span {
+ position: fixed !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh !important;
+ z-index: 184 !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ background: rgba(0, 0, 0, 0.5) !important;
+ backdrop-filter: blur(4px) !important;
+}
+
+#blind_monitor_alert_span > table {
+ width: auto !important;
+ max-width: 480px !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 16px !important;
+ background: #fff !important;
+ border: none !important;
+ border-radius: 10px !important;
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.06) !important;
+ overflow: hidden !important;
+}
+#blind_monitor_alert_span > table td {
+ padding: 24px 28px !important;
+ text-align: center !important;
+ vertical-align: top !important;
+ border: none !important;
+ background: transparent !important;
+}
+#blind_monitor_alert_span .sd_text,
+#blind_monitor_alert_span font.sd_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ color: #2D2D2D !important;
+ line-height: 1.5 !important;
+}
+#blind_monitor_alert_span .sh_text,
+#blind_monitor_alert_span font.sh_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 14px !important;
+ color: #2D2D2D !important;
+ line-height: 1.5 !important;
+}
+#blind_monitor_alert_span .sh_text b,
+#blind_monitor_alert_span .sh_text font[color="red"],
+#blind_monitor_alert_span #blind_monitor_alert_span_contents {
+ font-size: 1.25rem !important;
+ font-weight: 700 !important;
+ color: #c62828 !important;
+}
+#blind_monitor_alert_span br {
+ display: block !important;
+ margin: 4px 0 !important;
+}
+#blind_monitor_alert_span a[onclick*="hideDiv('blind_monitor_alert_span')"] {
+ display: inline-block !important;
+ margin-top: 16px !important;
+ padding: 10px 20px !important;
+ border-radius: 8px !important;
+ background: var(--color-primary-medium, #008b8b) !important;
+ color: #fff !important;
+ font-size: 14px !important;
+ font-weight: 500 !important;
+ text-decoration: none !important;
+ transition: background 0.2s ease !important;
+}
+#blind_monitor_alert_span a[onclick*="hideDiv('blind_monitor_alert_span')"]:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+}
+
+/* ========== Solo #ManualValidateBox (Manual Dial Validation) - estilos exclusivos ========== */
+#ManualValidateBox {
+ position: fixed !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh !important;
+ z-index: 83 !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ background: rgba(0, 0, 0, 0.5) !important;
+ backdrop-filter: blur(4px) !important;
+}
+
+#ManualValidateBox > table {
+ width: auto !important;
+ max-width: 440px !important;
+ height: auto !important;
+ min-height: 0 !important;
+ margin: 16px !important;
+ background: #fff !important;
+ border: none !important;
+ border-radius: 10px !important;
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.06) !important;
+ overflow: hidden !important;
+}
+#ManualValidateBox > table td {
+ padding: 24px 28px !important;
+ text-align: center !important;
+ vertical-align: top !important;
+ border: none !important;
+ background: transparent !important;
+}
+#ManualValidateBox .sd_text,
+#ManualValidateBox font.sd_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 15px !important;
+ font-weight: 600 !important;
+ color: #2D2D2D !important;
+ line-height: 1.5 !important;
+}
+#ManualValidateBox .sh_text,
+#ManualValidateBox font.sh_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 14px !important;
+ color: #2D2D2D !important;
+ line-height: 1.5 !important;
+}
+#ManualValidateBox #ManualValidateContent {
+ display: block !important;
+ margin-bottom: 8px !important;
+ font-weight: 500 !important;
+ color: #333 !important;
+}
+#ManualValidateBox br {
+ display: block !important;
+ margin: 6px 0 !important;
+}
+#ManualValidateBox input#ManualValidateEntry,
+#ManualValidateBox input.cust_form[name="ManualValidateEntry"] {
+ display: inline-block !important;
+ width: 100% !important;
+ max-width: 280px !important;
+ margin: 8px 0 !important;
+ padding: 10px 12px !important;
+ font-size: 14px !important;
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ border: 1px solid #ccc !important;
+ border-radius: 6px !important;
+ box-sizing: border-box !important;
+}
+#ManualValidateBox input#ManualValidateEntry:focus,
+#ManualValidateBox input.cust_form[name="ManualValidateEntry"]:focus {
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ outline: none !important;
+ box-shadow: 0 0 0 2px rgba(0, 139, 139, 0.2) !important;
+}
+#ManualValidateBox a[onclick*="ManualValidateSubmit"] {
+ display: inline-block !important;
+ margin: 4px !important;
+ padding: 10px 20px !important;
+ border-radius: 8px !important;
+ background: var(--color-primary-medium, #008b8b) !important;
+ color: #fff !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ text-decoration: none !important;
+ transition: background 0.2s ease !important;
+}
+#ManualValidateBox a[onclick*="ManualValidateSubmit"]:hover {
+ background: var(--color-primary-dark, #2E7D7D) !important;
+}
+#ManualValidateBox a[onclick*="ManualValidateCancel"] {
+ display: inline-block !important;
+ margin: 4px !important;
+ padding: 10px 20px !important;
+ border-radius: 8px !important;
+ background: #e0e0e0 !important;
+ color: #333 !important;
+ font-size: 14px !important;
+ font-weight: 600 !important;
+ text-decoration: none !important;
+ transition: background 0.2s ease !important;
+}
+#ManualValidateBox a[onclick*="ManualValidateCancel"]:hover {
+ background: #bdbdbd !important;
+}
+
+/* ========== Solo #ScriptTopBGspan (fondo script) - estilos exclusivos ========== */
+#ScriptTopBGspan {
+ position: fixed !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100vw !important;
+ height: 100vh !important;
+ min-height: 100vh !important;
+ z-index: 99 !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ background: rgba(255, 255, 255, 0.97) !important;
+ backdrop-filter: blur(6px) !important;
+}
+#ScriptTopBGspan > table {
+ width: 100% !important;
+ height: 100% !important;
+ max-width: 100% !important;
+ border: none !important;
+ background: transparent !important;
+}
+#ScriptTopBGspan > table td {
+ padding: 0 !important;
+ text-align: center !important;
+ vertical-align: middle !important;
+ border: none !important;
+ background: transparent !important;
+}
+#ScriptTopBGspan .sd_text,
+#ScriptTopBGspan font.sd_text {
+ font-size: 0 !important;
+ line-height: 0 !important;
+}
+#ScriptTopBGspan br {
+ display: none !important;
+}
+
+/* ========== Solo #ViewCommentsBox (View Comment History) - estilos exclusivos ========== */
+#ViewCommentsBox {
+ left: 10px !important;
+}
+#ViewCommentsBox > table {
+ margin-top: 500px !important;
+ width: 1000px !important;
+ height: auto !important;
+ min-height: 200px !important;
+ max-height: 70vh !important;
+ border: none !important;
+ border-collapse: collapse !important;
+ border-radius: 10px !important;
+ overflow: hidden !important;
+ background: #fff !important;
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(0, 0, 0, 0.06) !important;
+}
+#ViewCommentsBox > table td {
+ padding: 12px 14px !important;
+ border: none !important;
+ vertical-align: top !important;
+}
+#ViewCommentsBox > table tr[bgcolor="#FFEEBB"] td {
+ background: #fff8e8 !important;
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ color: #2D2D2D !important;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.06) !important;
+ padding: 10px 14px !important;
+}
+#ViewCommentsBox .sh_text,
+#ViewCommentsBox font.sh_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 13px !important;
+ color: #2D2D2D !important;
+ font-weight: 600 !important;
+}
+#ViewCommentsBox .sk_text,
+#ViewCommentsBox font.sk_text {
+ font-family: var(--font-family, system-ui, sans-serif) !important;
+ font-size: 12px !important;
+ font-weight: 400 !important;
+}
+#ViewCommentsBox #ViewCommentsShowHide a {
+ display: inline-block !important;
+ padding: 4px 10px !important;
+ border-radius: 6px !important;
+ color: var(--color-primary-medium, #008b8b) !important;
+ font-size: 12px !important;
+ text-decoration: none !important;
+ transition: background 0.2s ease, color 0.2s ease !important;
+}
+#ViewCommentsBox #ViewCommentsShowHide a:hover {
+ color: var(--color-primary-dark, #2E7D7D) !important;
+ background: rgba(0, 139, 139, 0.08) !important;
+}
+#ViewCommentsBox > table tr:not([bgcolor]) td,
+#ViewCommentsBox > table tr td[bgcolor="white"] {
+ background: #fff !important;
+ height: auto !important;
+ min-height: 180px !important;
+ max-height: 50vh !important;
+ overflow: auto !important;
+ padding: 12px 14px !important;
+}
+#ViewCommentsBox #audit_comments,
+#ViewCommentsBox pre {
+ font-family: var(--font-family, system-ui, monospace) !important;
+ font-size: 12px !important;
+ line-height: 1.5 !important;
+ color: #2D2D2D !important;
+ white-space: pre-wrap !important;
+ word-break: break-word !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ border: none !important;
+ background: transparent !important;
+}
+#ViewCommentsBox pre font[size="1"] {
+ font-size: 12px !important;
+}
+
+/* ========== Bloque Administration (tabla 800px, solo este componente) ========== */
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] {
+ border-collapse: separate !important;
+ border-spacing: 12px 10px !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] tbody > tr > td[width="220"] {
+ vertical-align: top !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] tbody > tr > td[width="220"] > table {
+ width: 100% !important;
+ border-collapse: separate !important;
+ border-spacing: 0 6px !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected {
+ cursor: pointer !important;
+ border-radius: 10px !important;
+ background: #fff !important;
+ border: 1px solid rgba(0, 0, 0, 0.08) !important;
+ transition: background 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease !important;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06) !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected:hover {
+ background: #f5f7fa !important;
+ border-color: rgba(0, 139, 139, 0.25) !important;
+ box-shadow: 0 4px 12px rgba(0, 139, 139, 0.12) !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td {
+ padding: 10px 12px !important;
+ vertical-align: middle !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected a {
+ text-decoration: none !important;
+ display: inline-flex !important;
+ align-items: center !important;
+ gap: 12px !important;
+ color: inherit !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected span,
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected font {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 14px !important;
+ font-weight: bold !important;
+ color: #1a1a1a !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child a {
+ position: relative !important;
+ width: 42px !important;
+ height: 42px !important;
+ min-width: 42px !important;
+ min-height: 42px !important;
+ align-items: center !important;
+ justify-content: center !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child a img {
+ position: absolute !important;
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden !important;
+ opacity: 0 !important;
+ pointer-events: none !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child a::before {
+ font-family: "Font Awesome 6 Free VDC" !important;
+ font-weight: 900 !important;
+ font-size: 1.35rem !important;
+ color: #008b8b !important;
+ line-height: 1 !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_calltimes"]) a::before { content: "\f017" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_shifts"]) a::before { content: "\f073" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_phones"]) a::before { content: "\f095" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_templates"]) a::before { content: "\f5fd" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_carriers"]) a::before { content: "\f0d1" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_servers"]) a::before { content: "\f233" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_conferences"]) a::before { content: "\f0c0" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_settings"]) a::before { content: "\f013" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_screenlabels"]) a::before { content: "\f02c" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_screencolors"]) a::before { content: "\f53f" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_statuses"]) a::before { content: "\f201" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_statusgroups"]) a::before { content: "\f247" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_cidgroups"]) a::before { content: "\f2c2" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_voicemail"]) a::before { content: "\f2a0" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_audiostore"]) a::before { content: "\f001" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_musiconhold"]) a::before { content: "\f001" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_languages"]) a::before { content: "\f1ab" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_vm_messages"]) a::before { content: "\f0e0" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_settingscontainer"]) a::before { content: "\f187" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_queuegroups"]) a::before { content: "\f022" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) > img[src*="icon_black_admin"] {
+ position: absolute !important;
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden !important;
+ opacity: 0 !important;
+ pointer-events: none !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) > font:first-of-type {
+ display: inline-flex !important;
+ align-items: center !important;
+ gap: 12px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 1.25rem !important;
+ font-weight: bold !important;
+ color: #1a1a1a !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) > font:first-of-type::before {
+ content: "\f505" !important;
+ font-family: "Font Awesome 6 Free VDC" !important;
+ font-weight: 900 !important;
+ font-size: 1.75rem !important;
+ color: #008b8b !important;
+ line-height: 1 !important;
+}
+
+/* ========== Formulario "MODIFY A CONFERENCE RECORD" (solo este componente) ========== */
+/* Contenedor principal del formulario de Conference (tabla 850px dentro del área de contenido admin) */
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] {
+ background: #ffffff !important;
+ border-radius: 12px !important;
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+ box-shadow: 0 6px 18px rgba(15, 23, 42, 0.08) !important;
+ padding: 18px 20px !important;
+ box-sizing: border-box !important;
+}
+
+/* Filas del formulario (campos de configuración) */
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] {
+ background: #f8fafc !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td {
+ padding: 8px 10px !important;
+ vertical-align: middle !important;
+}
+
+/* Etiquetas alineadas a la derecha (columna izquierda) */
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td[align="right"] {
+ white-space: nowrap !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ color: #1f2933 !important;
+ font-weight: 600 !important;
+}
+
+/* Inputs de texto y selects dentro del formulario de Conference */
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"],
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select {
+ border-radius: 6px !important;
+ border: 1px solid #cbd5e1 !important;
+ padding: 6px 8px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 12px !important;
+ color: #111827 !important;
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"]:focus,
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ box-shadow: 0 0 0 1px rgba(0, 139, 139, 0.15) !important;
+}
+
+/* Iconos de ayuda dentro del formulario (help.png) */
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] img[alt="HELP"] {
+ cursor: pointer !important;
+ margin-left: 6px !important;
+ vertical-align: middle !important;
+}
+
+/* Botón SUBMIT del formulario de Conference (más grande, estilo pill) */
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"] {
+ background-color: var(--color-primary-medium, #008b8b) !important;
+ color: #ffffff !important;
+ border: none !important;
+ border-radius: 999px !important;
+ padding: 8px 22px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ cursor: pointer !important;
+ box-shadow: 0 2px 6px rgba(15, 23, 42, 0.15) !important;
+ text-transform: uppercase !important;
+ letter-spacing: 0.04em !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:hover {
+ background-color: var(--color-primary-dark, #006b6b) !important;
+ box-shadow: 0 3px 9px rgba(15, 23, 42, 0.2) !important;
+ transform: translateY(-1px);
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:active {
+ transform: translateY(0);
+ box-shadow: 0 1px 4px rgba(15, 23, 42, 0.15) !important;
+}
+
+/* Variante para páginas sin el contenedor td[width="870"][bgcolor="#D9E6FE"] */
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] {
+ background: #ffffff !important;
+ border-radius: 12px !important;
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+ box-shadow: 0 6px 18px rgba(15, 23, 42, 0.08) !important;
+ padding: 18px 20px !important;
+ box-sizing: border-box !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] {
+ background: #f8fafc !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td {
+ padding: 8px 10px !important;
+ vertical-align: middle !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td[align="right"] {
+ white-space: nowrap !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ color: #1f2933 !important;
+ font-weight: 600 !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] input[type="text"],
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] select {
+ border-radius: 6px !important;
+ border: 1px solid #cbd5e1 !important;
+ padding: 6px 8px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 12px !important;
+ color: #111827 !important;
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] input[type="text"]:focus,
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] select:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ box-shadow: 0 0 0 1px rgba(0, 139, 139, 0.15) !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] {
+ cursor: pointer !important;
+ margin-left: 6px !important;
+ vertical-align: middle !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] input[type="submit"] {
+ background-color: var(--color-primary-medium, #008b8b) !important;
+ color: #ffffff !important;
+ border: none !important;
+ border-radius: 999px !important;
+ padding: 8px 22px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ cursor: pointer !important;
+ box-shadow: 0 2px 6px rgba(15, 23, 42, 0.15) !important;
+ text-transform: uppercase !important;
+ letter-spacing: 0.04em !important;
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] input[type="submit"]:hover {
+ background-color: var(--color-primary-dark, #006b6b) !important;
+ box-shadow: 0 3px 9px rgba(15, 23, 42, 0.2) !important;
+ transform: translateY(-1px);
+}
+
+body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850"][cellspacing="3"] input[type="submit"]:active {
+ transform: translateY(0);
+ box-shadow: 0 1px 4px rgba(15, 23, 42, 0.15) !important;
+}
+
+/* ========== Formulario "MODIFY A PHONE RECORD" (solo este componente) ========== */
+/* Contenedor principal del formulario de Phone (tabla 850px dentro del área de contenido admin) */
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] {
+ background: #ffffff !important;
+ border-radius: 12px !important;
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+ box-shadow: 0 6px 18px rgba(15, 23, 42, 0.08) !important;
+ padding: 18px 20px !important;
+ box-sizing: border-box !important;
+}
+
+/* Filas del formulario (campos de configuración, distintos colores de fondo originales) */
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"],
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#8EBCFD"],
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#CCFFFF"] {
+ background: #f8fafc !important;
+}
+
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor] td {
+ padding: 8px 10px !important;
+ vertical-align: middle !important;
+}
+
+/* Etiquetas alineadas a la derecha (columna izquierda) */
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor] td[align="right"] {
+ white-space: nowrap !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ color: #1f2933 !important;
+ font-weight: 600 !important;
+}
+
+/* Inputs de texto, selects y textarea dentro del formulario de Phone */
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"],
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select,
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] textarea {
+ border-radius: 6px !important;
+ border: 1px solid #cbd5e1 !important;
+ padding: 6px 8px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 12px !important;
+ color: #111827 !important;
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+}
+
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"]:focus,
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select:focus,
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] textarea:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ box-shadow: 0 0 0 1px rgba(0, 139, 139, 0.15) !important;
+}
+
+/* Checkboxes (por si este formulario incluye alguno) */
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="checkbox"] {
+ margin-right: 4px !important;
+}
+
+/* Iconos de ayuda dentro del formulario (help.png) */
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] img[alt="HELP"] {
+ cursor: pointer !important;
+ margin-left: 6px !important;
+ vertical-align: middle !important;
+}
+
+/* Enlaces auxiliares internos del formulario (audio chooser, Server IP, etc.) */
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 11px !important;
+ color: var(--color-primary-medium, #008b8b) !important;
+ text-decoration: none !important;
+}
+
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a:hover {
+ text-decoration: underline !important;
+}
+
+/* Botón SUBMIT del formulario de Phone (más grande, estilo pill) */
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"] {
+ background-color: var(--color-primary-medium, #008b8b) !important;
+ color: #ffffff !important;
+ border: none !important;
+ border-radius: 999px !important;
+ padding: 8px 22px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ cursor: pointer !important;
+ box-shadow: 0 2px 6px rgba(15, 23, 42, 0.15) !important;
+ text-transform: uppercase !important;
+ letter-spacing: 0.04em !important;
+}
+
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:hover {
+ background-color: var(--color-primary-dark, #006b6b) !important;
+ box-shadow: 0 3px 9px rgba(15, 23, 42, 0.2) !important;
+ transform: translateY(-1px);
+}
+
+body:has(input[name="old_extension"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:active {
+ transform: translateY(0);
+ box-shadow: 0 1px 4px rgba(15, 23, 42, 0.15) !important;
+}
+
+/* ========== Formulario "MODIFY A CONF TEMPLATE RECORD" (solo este componente) ========== */
+/* Contenedor principal del formulario de Conf Template (tabla 850px dentro del área de contenido admin) */
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] {
+ background: #ffffff !important;
+ border-radius: 12px !important;
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+ box-shadow: 0 6px 18px rgba(15, 23, 42, 0.08) !important;
+ padding: 18px 20px !important;
+ box-sizing: border-box !important;
+}
+
+/* Filas del formulario (campos de configuración) */
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] {
+ background: #f8fafc !important;
+}
+
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td {
+ padding: 8px 10px !important;
+ vertical-align: middle !important;
+}
+
+/* Etiquetas alineadas a la derecha (columna izquierda) */
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td[align="right"] {
+ white-space: nowrap !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ color: #1f2933 !important;
+ font-weight: 600 !important;
+}
+
+/* Inputs de texto, selects y textarea dentro del formulario de Conf Template */
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"],
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select,
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] textarea {
+ border-radius: 6px !important;
+ border: 1px solid #cbd5e1 !important;
+ padding: 6px 8px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 12px !important;
+ color: #111827 !important;
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+}
+
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"]:focus,
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select:focus,
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] textarea:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ box-shadow: 0 0 0 1px rgba(0, 139, 139, 0.15) !important;
+}
+
+/* Iconos de ayuda dentro del formulario (help.png) */
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] img[alt="HELP"] {
+ cursor: pointer !important;
+ margin-left: 6px !important;
+ vertical-align: middle !important;
+}
+
+/* Enlaces internos (si los hay dentro de la tabla) */
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 11px !important;
+ color: var(--color-primary-medium, #008b8b) !important;
+ text-decoration: none !important;
+}
+
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a:hover {
+ text-decoration: underline !important;
+}
+
+/* Botón SUBMIT del formulario de Conf Template (más grande, estilo pill) */
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"] {
+ background-color: var(--color-primary-medium, #008b8b) !important;
+ color: #ffffff !important;
+ border: none !important;
+ border-radius: 999px !important;
+ padding: 8px 22px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ cursor: pointer !important;
+ box-shadow: 0 2px 6px rgba(15, 23, 42, 0.15) !important;
+ text-transform: uppercase !important;
+ letter-spacing: 0.04em !important;
+}
+
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:hover {
+ background-color: var(--color-primary-dark, #006b6b) !important;
+ box-shadow: 0 3px 9px rgba(15, 23, 42, 0.2) !important;
+ transform: translateY(-1px);
+}
+
+body:has(input[type="hidden"][name="template_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:active {
+ transform: translateY(0);
+ box-shadow: 0 1px 4px rgba(15, 23, 42, 0.15) !important;
+}
+
+/* ========== Formulario "MODIFY A CARRIER RECORD" (solo este componente) ========== */
+/* Contenedor principal del formulario de Carrier (tabla 850px dentro del área de contenido admin) */
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] {
+ background: #ffffff !important;
+ border-radius: 12px !important;
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+ box-shadow: 0 6px 18px rgba(15, 23, 42, 0.08) !important;
+ padding: 18px 20px !important;
+ box-sizing: border-box !important;
+}
+
+/* Filas del formulario (campos de configuración) */
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] {
+ background: #f8fafc !important;
+}
+
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td {
+ padding: 8px 10px !important;
+ vertical-align: middle !important;
+}
+
+/* Etiquetas alineadas a la derecha (columna izquierda) */
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td[align="right"] {
+ white-space: nowrap !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ color: #1f2933 !important;
+ font-weight: 600 !important;
+}
+
+/* Inputs de texto, selects y textarea dentro del formulario de Carrier */
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"],
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select,
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] textarea {
+ border-radius: 6px !important;
+ border: 1px solid #cbd5e1 !important;
+ padding: 6px 8px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 12px !important;
+ color: #111827 !important;
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+}
+
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"]:focus,
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select:focus,
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] textarea:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ box-shadow: 0 0 0 1px rgba(0, 139, 139, 0.15) !important;
+}
+
+/* Iconos de ayuda dentro del formulario (help.png) */
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] img[alt="HELP"] {
+ cursor: pointer !important;
+ margin-left: 6px !important;
+ vertical-align: middle !important;
+}
+
+/* Enlaces internos dentro de la tabla (Template ID, etc.) */
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 11px !important;
+ color: var(--color-primary-medium, #008b8b) !important;
+ text-decoration: none !important;
+}
+
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a:hover {
+ text-decoration: underline !important;
+}
+
+/* Botón SUBMIT del formulario de Carrier (más grande, estilo pill) */
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"] {
+ background-color: var(--color-primary-medium, #008b8b) !important;
+ color: #ffffff !important;
+ border: none !important;
+ border-radius: 999px !important;
+ padding: 8px 22px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ cursor: pointer !important;
+ box-shadow: 0 2px 6px rgba(15, 23, 42, 0.15) !important;
+ text-transform: uppercase !important;
+ letter-spacing: 0.04em !important;
+}
+
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:hover {
+ background-color: var(--color-primary-dark, #006b6b) !important;
+ box-shadow: 0 3px 9px rgba(15, 23, 42, 0.2) !important;
+ transform: translateY(-1px);
+}
+
+body:has(input[type="hidden"][name="carrier_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:active {
+ transform: translateY(0);
+ box-shadow: 0 1px 4px rgba(15, 23, 42, 0.15) !important;
+}
+
+/* ========== Formulario "MODIFY A SERVER RECORD" (solo este componente) ========== */
+/* Contenedor principal del formulario de Server (tabla 850px dentro del área de contenido admin) */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] {
+ background: #ffffff !important;
+ border-radius: 12px !important;
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+ box-shadow: 0 6px 18px rgba(15, 23, 42, 0.08) !important;
+ padding: 18px 20px !important;
+ box-sizing: border-box !important;
+}
+
+/* Filas del formulario (B6D3FC y 8EBCFD) */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"],
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#8EBCFD"] {
+ background: #f8fafc !important;
+}
+
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor] td {
+ padding: 8px 10px !important;
+ vertical-align: middle !important;
+}
+
+/* Etiquetas alineadas a la derecha (columna izquierda) */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor] td[align="right"] {
+ white-space: nowrap !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ color: #1f2933 !important;
+ font-weight: 600 !important;
+}
+
+/* Inputs de texto, selects y textarea dentro del formulario de Server */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"],
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] textarea {
+ border-radius: 6px !important;
+ border: 1px solid #cbd5e1 !important;
+ padding: 6px 8px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 12px !important;
+ color: #111827 !important;
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+}
+
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"]:focus,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select:focus,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] textarea:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ box-shadow: 0 0 0 1px rgba(0, 139, 139, 0.15) !important;
+}
+
+/* Iconos de ayuda dentro del formulario (help.png) */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] img[alt="HELP"] {
+ cursor: pointer !important;
+ margin-left: 6px !important;
+ vertical-align: middle !important;
+}
+
+/* Enlaces internos dentro de la tabla (si los hay) */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 11px !important;
+ color: var(--color-primary-medium, #008b8b) !important;
+ text-decoration: none !important;
+}
+
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a:hover {
+ text-decoration: underline !important;
+}
+
+/* Botón SUBMIT del formulario de Server (más grande, estilo pill) */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"] {
+ background-color: var(--color-primary-medium, #008b8b) !important;
+ color: #ffffff !important;
+ border: none !important;
+ border-radius: 999px !important;
+ padding: 8px 22px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ cursor: pointer !important;
+ box-shadow: 0 2px 6px rgba(15, 23, 42, 0.15) !important;
+ text-transform: uppercase !important;
+ letter-spacing: 0.04em !important;
+}
+
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:hover {
+ background-color: var(--color-primary-dark, #006b6b) !important;
+ box-shadow: 0 3px 9px rgba(15, 23, 42, 0.2) !important;
+ transform: translateY(-1px);
+}
+
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:active {
+ transform: translateY(0);
+ box-shadow: 0 1px 4px rgba(15, 23, 42, 0.15) !important;
+}
+
+/* ========== Listados inferiores en pantalla de SERVER (trunks, carriers, phones, conferences) ========== */
+/* Tablas de resumen debajo del formulario de servidor: 500 / 600 / 400 px de ancho */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="500"][cellspacing="3"],
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="600"][cellspacing="3"],
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="400"][cellspacing="3"] {
+ border-collapse: separate !important;
+ border-spacing: 0 !important;
+ border-radius: 8px !important;
+ border: 1px solid rgba(15, 23, 42, 0.08) !important;
+ background: #ffffff !important;
+ overflow: hidden;
+}
+
+/* Cabecera de estas tablas (primera fila) */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="500"][cellspacing="3"] > tbody > tr:first-child td,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="600"][cellspacing="3"] > tbody > tr:first-child td,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="400"][cellspacing="3"] > tbody > tr:first-child td {
+ background: #015B91 !important;
+ color: #ffffff !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 11px !important;
+ font-weight: 600 !important;
+ padding: 6px 8px !important;
+}
+
+/* Filas de datos (a partir de la segunda fila) */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="500"][cellspacing="3"] > tbody > tr:nth-child(n+2) td,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="600"][cellspacing="3"] > tbody > tr:nth-child(n+2) td,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="400"][cellspacing="3"] > tbody > tr:nth-child(n+2) td {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 11px !important;
+ color: #111827 !important;
+ padding: 5px 8px !important;
+}
+
+/* Enlaces dentro de estas tablas (IDs clicables) */
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="500"][cellspacing="3"] a,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="600"][cellspacing="3"] a,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="400"][cellspacing="3"] a {
+ color: var(--color-primary-medium, #008b8b) !important;
+ text-decoration: none !important;
+}
+
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="500"][cellspacing="3"] a:hover,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="600"][cellspacing="3"] a:hover,
+body:has(input[type="hidden"][name="old_server_id"]) td[width="870"][bgcolor="#D9E6FE"] table[width="400"][cellspacing="3"] a:hover {
+ text-decoration: underline !important;
+}
+
+/* ========== Formulario "MODIFY A SHIFT" (solo este componente) ========== */
+/* Contenedor principal del formulario de Shift (tabla 850px dentro del área de contenido admin) */
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] {
+ background: #ffffff !important;
+ border-radius: 12px !important;
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+ box-shadow: 0 6px 18px rgba(15, 23, 42, 0.08) !important;
+ padding: 18px 20px !important;
+ box-sizing: border-box !important;
+}
+
+/* Filas del formulario (campos de configuración) */
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] {
+ background: #f8fafc !important;
+}
+
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td {
+ padding: 8px 10px !important;
+ vertical-align: middle !important;
+}
+
+/* Etiquetas alineadas a la derecha (columna izquierda) */
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td[align="right"] {
+ white-space: nowrap !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ color: #1f2933 !important;
+ font-weight: 600 !important;
+}
+
+/* Inputs de texto, selects y checkboxes dentro del formulario de Shift */
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"],
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select {
+ border-radius: 6px !important;
+ border: 1px solid #cbd5e1 !important;
+ padding: 6px 8px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 12px !important;
+ color: #111827 !important;
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+}
+
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"]:focus,
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ box-shadow: 0 0 0 1px rgba(0, 139, 139, 0.15) !important;
+}
+
+/* Checkboxes de Shift Weekdays */
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="checkbox"] {
+ margin-right: 4px !important;
+}
+
+/* Botón "Calculate Shift Length" (leve y un poco más grande) */
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="button"][name="shift_calc"] {
+ background-color: rgba(0, 139, 139, 0.06) !important;
+ color: #025a5a !important;
+ border-radius: 999px !important;
+ border: 1px solid rgba(0, 139, 139, 0.18) !important;
+ padding: 6px 16px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 12px !important;
+ font-weight: 600 !important;
+ cursor: pointer !important;
+}
+
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="button"][name="shift_calc"]:hover {
+ background-color: rgba(0, 139, 139, 0.12) !important;
+ border-color: rgba(0, 139, 139, 0.3) !important;
+}
+
+/* Iconos de ayuda dentro del formulario (help.png) */
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] img[alt="HELP"] {
+ cursor: pointer !important;
+ margin-left: 6px !important;
+ vertical-align: middle !important;
+}
+
+/* Enlaces dentro de este formulario (si hubiera) */
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 11px !important;
+ color: var(--color-primary-medium, #008b8b) !important;
+ text-decoration: none !important;
+}
+
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a:hover {
+ text-decoration: underline !important;
+}
+
+/* Botón SUBMIT del formulario de Shift (más grande, estilo pill) */
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"] {
+ background-color: var(--color-primary-medium, #008b8b) !important;
+ color: #ffffff !important;
+ border: none !important;
+ border-radius: 999px !important;
+ padding: 8px 22px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ cursor: pointer !important;
+ box-shadow: 0 2px 6px rgba(15, 23, 42, 0.15) !important;
+ text-transform: uppercase !important;
+ letter-spacing: 0.04em !important;
+}
+
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:hover {
+ background-color: var(--color-primary-dark, #006b6b) !important;
+ box-shadow: 0 3px 9px rgba(15, 23, 42, 0.2) !important;
+ transform: translateY(-1px);
+}
+
+body:has(input[name="shift_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:active {
+ transform: translateY(0);
+ box-shadow: 0 1px 4px rgba(15, 23, 42, 0.15) !important;
+}
+
+/* ========== Barra de enlaces de Call Times (fila gris) ========== */
+/* Contenedor de la barra: fila gris con enlaces de Call Times dentro del área principal admin */
+body:has(a[href="/vicidial/admin.php?ADD=100000000"]) td[width="870"][bgcolor="#D9E6FE"] tr[bgcolor="#C6C6C6"] td[align="LEFT"][colspan="2"] {
+ padding: 6px 10px !important;
+}
+
+/* Enlaces de la barra convertidos en "botones" leves */
+body:has(a[href="/vicidial/admin.php?ADD=100000000"]) td[width="870"][bgcolor="#D9E6FE"] tr[bgcolor="#C6C6C6"] td[align="LEFT"][colspan="2"] a {
+ display: inline-flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ padding: 5px 12px !important;
+ margin-right: 4px !important;
+ border-radius: 999px !important;
+ background: rgba(0, 139, 139, 0.06) !important;
+ border: 1px solid rgba(0, 139, 139, 0.14) !important;
+ text-decoration: none !important;
+ cursor: pointer !important;
+}
+
+/* Texto dentro de los "botones" */
+body:has(a[href="/vicidial/admin.php?ADD=100000000"]) td[width="870"][bgcolor="#D9E6FE"] tr[bgcolor="#C6C6C6"] td[align="LEFT"][colspan="2"] a font {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 11px !important;
+ font-weight: 600 !important;
+ color: #025a5a !important;
+}
+
+/* Hover suave sobre los "botones" */
+body:has(a[href="/vicidial/admin.php?ADD=100000000"]) td[width="870"][bgcolor="#D9E6FE"] tr[bgcolor="#C6C6C6"] td[align="LEFT"][colspan="2"] a:hover {
+ background: rgba(0, 139, 139, 0.14) !important;
+ border-color: rgba(0, 139, 139, 0.28) !important;
+}
+
+
+/* ========== Formulario "MODIFY A CALL TIME" (solo este componente) ========== */
+/* Contenedor principal del formulario de Call Time (tabla 850px dentro del área de contenido admin) */
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] {
+ background: #ffffff !important;
+ border-radius: 12px !important;
+ border: 1px solid rgba(0, 0, 0, 0.06) !important;
+ box-shadow: 0 6px 18px rgba(15, 23, 42, 0.08) !important;
+ padding: 18px 20px !important;
+ box-sizing: border-box !important;
+}
+
+/* Filas del formulario (campos de configuración) */
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] {
+ background: #f8fafc !important;
+}
+
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td {
+ padding: 8px 10px !important;
+ vertical-align: middle !important;
+}
+
+/* Etiquetas alineadas a la derecha (columna izquierda) */
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td[align="right"] {
+ white-space: nowrap !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ color: #1f2933 !important;
+ font-weight: 600 !important;
+}
+
+/* Inputs de texto y selects dentro del formulario de Call Time */
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"],
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select {
+ border-radius: 6px !important;
+ border: 1px solid #cbd5e1 !important;
+ padding: 6px 8px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 12px !important;
+ color: #111827 !important;
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+}
+
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="text"]:focus,
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] select:focus {
+ outline: none !important;
+ border-color: var(--color-primary-medium, #008b8b) !important;
+ box-shadow: 0 0 0 1px rgba(0, 139, 139, 0.15) !important;
+}
+
+/* Iconos de ayuda dentro del formulario (help.png) */
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] img[alt="HELP"] {
+ cursor: pointer !important;
+ margin-left: 6px !important;
+ vertical-align: middle !important;
+}
+
+/* Enlaces "audio chooser" y otros links auxiliares dentro de filas de tiempo */
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 11px !important;
+ color: var(--color-primary-medium, #008b8b) !important;
+ text-decoration: none !important;
+}
+
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] a:hover {
+ text-decoration: underline !important;
+}
+
+/* Botones SUBMIT del formulario de Call Time (un poco más grandes y nivelados) */
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"] {
+ background-color: var(--color-primary-medium, #008b8b) !important;
+ color: #ffffff !important;
+ border: none !important;
+ border-radius: 999px !important;
+ padding: 8px 22px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ cursor: pointer !important;
+ box-shadow: 0 2px 6px rgba(15, 23, 42, 0.15) !important;
+ text-transform: uppercase !important;
+ letter-spacing: 0.04em !important;
+}
+
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:hover {
+ background-color: var(--color-primary-dark, #006b6b) !important;
+ box-shadow: 0 3px 9px rgba(15, 23, 42, 0.2) !important;
+ transform: translateY(-1px);
+}
+
+body:has(input[name="call_time_id"]) td[width="870"][bgcolor="#D9E6FE"] center > table[width="850"][cellspacing="3"] input[type="submit"]:active {
+ transform: translateY(0);
+ box-shadow: 0 1px 4px rgba(15, 23, 42, 0.15) !important;
+}
+
+
+/* ========== Bloque Administration (tabla 800px, solo este componente) ========== */
+/* Contenedor: td colspan=2 que contiene "Admin" y tabla width=800 */
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] {
+ border-collapse: separate !important;
+ border-spacing: 12px 10px !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] tbody > tr > td[width="220"] {
+ vertical-align: top !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] tbody > tr > td[width="220"] > table {
+ width: 100% !important;
+ border-collapse: separate !important;
+ border-spacing: 0 6px !important;
+}
+/* Filas del menú admin (solo dentro de este bloque) */
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected {
+ cursor: pointer !important;
+ border-radius: 10px !important;
+ background: #fff !important;
+ border: 1px solid rgba(0, 0, 0, 0.08) !important;
+ transition: background 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease !important;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06) !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected:hover {
+ background: #f5f7fa !important;
+ border-color: rgba(0, 139, 139, 0.25) !important;
+ box-shadow: 0 4px 12px rgba(0, 139, 139, 0.12) !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td {
+ padding: 10px 12px !important;
+ vertical-align: middle !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected a {
+ text-decoration: none !important;
+ display: inline-flex !important;
+ align-items: center !important;
+ gap: 12px !important;
+ color: inherit !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected span,
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected font {
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 14px !important;
+ font-weight: bold !important;
+ color: #1a1a1a !important;
+}
+/* Ocultar imágenes originales y mostrar icono FA en el primer td */
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child a {
+ position: relative !important;
+ width: 42px !important;
+ height: 42px !important;
+ min-width: 42px !important;
+ min-height: 42px !important;
+ align-items: center !important;
+ justify-content: center !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child a img {
+ position: absolute !important;
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden !important;
+ opacity: 0 !important;
+ pointer-events: none !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child a::before {
+ font-family: "Font Awesome 6 Free VDC" !important;
+ font-weight: 900 !important;
+ font-size: 1.35rem !important;
+ color: #008b8b !important;
+ line-height: 1 !important;
+}
+/* Iconos por imagen (reemplazo con Font Awesome) */
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_calltimes"]) a::before { content: "\f017" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_shifts"]) a::before { content: "\f073" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_phones"]) a::before { content: "\f095" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_templates"]) a::before { content: "\f5fd" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_carriers"]) a::before { content: "\f0d1" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_servers"]) a::before { content: "\f233" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_conferences"]) a::before { content: "\f0c0" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_settings"]) a::before { content: "\f013" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_screenlabels"]) a::before { content: "\f02c" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_screencolors"]) a::before { content: "\f53f" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_statuses"]) a::before { content: "\f201" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_statusgroups"]) a::before { content: "\f247" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_cidgroups"]) a::before { content: "\f2c2" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_voicemail"]) a::before { content: "\f2a0" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_audiostore"]) a::before { content: "\f001" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_musiconhold"]) a::before { content: "\f001" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_languages"]) a::before { content: "\f1ab" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_vm_messages"]) a::before { content: "\f0e0" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_settingscontainer"]) a::before { content: "\f187" !important; }
+td[colspan="2"]:has(img[alt="Admin"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_queuegroups"]) a::before { content: "\f022" !important; }
+/* Título "Administration" y icono de cabecera (solo en este td colspan=2) */
+td[colspan="2"]:has(img[alt="Admin"]) > img[src*="icon_black_admin"] {
+ position: absolute !important;
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden !important;
+ opacity: 0 !important;
+ pointer-events: none !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) {
+ position: relative !important;
+ padding-left: 0 !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) > font:first-of-type {
+ display: inline-flex !important;
+ align-items: center !important;
+ gap: 12px !important;
+ font-family: Arial, Helvetica, sans-serif !important;
+ font-size: 1.25rem !important;
+ font-weight: bold !important;
+ color: #1a1a1a !important;
+}
+td[colspan="2"]:has(img[alt="Admin"]) > font:first-of-type::before {
+ content: "\f505" !important;
+ font-family: "Font Awesome 6 Free VDC" !important;
+ font-weight: 900 !important;
+ font-size: 1.75rem !important;
+ color: #008b8b !important;
+ line-height: 1 !important;
+}