diff --git a/Custom/CCopiaSec b/Custom/CCopiaSec deleted file mode 100644 index fc4610f..0000000 --- a/Custom/CCopiaSec +++ /dev/null @@ -1,10899 +0,0 @@ -/* . */ -/* -------------------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 index 2d0334d..d0c2565 100644 --- a/Custom/backvicibox/README.txt +++ b/Custom/backvicibox/README.txt @@ -4,6 +4,27 @@ BACKUP DE VICIBOX - AMBIENTE DE CONFIGURACIÓN Fecha de creación: Fri Feb 6 04:46:49 PM UTC 2026 + +INSTRUCCIONES RÁPIDAS (instalación automática): +---------------------------------------------- +1. Instalar git zypper install git +2. git clone https://git.sapian.cloud/Sapian/vicidial_sapian.git (Se descargan los archivos instalador voe y custom) + +1. Copiar este directorio al servidor destino, debe quedar en la ruta /home/ 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 + + NOTA + El script ./install-vicibox.sh ejecuta todos los sh necesarios para la instalacion + +3. Revisar el log si algo falla: install-vicibox.log + + + + ARCHIVOS INCLUIDOS: ------------------- 1. vicibox-scripts.tar.gz @@ -27,27 +48,14 @@ ARCHIVOS INCLUIDOS: - 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/ +6. patches/ - vicibox-install.pl: copia del instalador con parches ya aplicados (recomendado) - README.txt: descripción de los parches -8. version-info.txt +7. 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): ------------------------------------ @@ -73,6 +81,5 @@ NOTAS: - 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/backvicibox3/README.txt b/Custom/backvicibox3/README.txt new file mode 100644 index 0000000..2d0334d --- /dev/null +++ b/Custom/backvicibox3/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/backvicibox3/apply-vicibox-patches.sh b/Custom/backvicibox3/apply-vicibox-patches.sh new file mode 100644 index 0000000..48a4052 --- /dev/null +++ b/Custom/backvicibox3/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/backvicibox3/astguiclient-trunk.tar.gz b/Custom/backvicibox3/astguiclient-trunk.tar.gz new file mode 100644 index 0000000..c0b003b Binary files /dev/null and b/Custom/backvicibox3/astguiclient-trunk.tar.gz differ diff --git a/Custom/backvicibox3/create-admin-sapian.sh b/Custom/backvicibox3/create-admin-sapian.sh new file mode 100644 index 0000000..ab193fd --- /dev/null +++ b/Custom/backvicibox3/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/backvicibox3/extensions.ael b/Custom/backvicibox3/extensions.ael new file mode 100644 index 0000000..e69de29 diff --git a/Custom/backvicibox3/extensions.lua b/Custom/backvicibox3/extensions.lua new file mode 100644 index 0000000..e69de29 diff --git a/Custom/backvicibox3/install-vicibox.log b/Custom/backvicibox3/install-vicibox.log new file mode 100644 index 0000000..beeda2d --- /dev/null +++ b/Custom/backvicibox3/install-vicibox.log @@ -0,0 +1,743 @@ +[INFO] ========================================== +[INFO] Instalación ViciBox (dependencias + restore + express) +[INFO] ========================================== +[INFO] 1. Instalando Perl, Subversion y módulos (DBI, DBD-mysql, LWP::Simple)... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'perl' is already installed. +No update candidate for 'perl-5.42.0-160000.2.2.x86_64'. The highest available version is already installed. +'libwww-perl' not found in package names. Trying capabilities. +No provider of 'libwww-perl' found. +[INFO] Perl: +[INFO] 2. Instalando MariaDB... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +Resolving package dependencies... + +The following recommended package was automatically selected: + mariadb + +The following 9 NEW packages are going to be installed: + libJudy1 libltdl7 libmariadb3 libodbc2 libpcre2-posix3 mariadb mariadb-client mariadb-errormessages python313-mysqlclient + +9 new packages to install. + +Package download size: 26.0 MiB + +Package install size change: + | 151.7 MiB required by packages that will be installed + 151.7 MiB | - 0 B released by packages that will be removed + +Backend: classic_rpmtrans +Continue? [y/n/v/...? shows all options] (y): y +Preloading Packages [.. +Preloading: libltdl7-2.4.7-160000.2.2.x86_64.rpm [done] +. +Preloading: libpcre2-posix3-10.45-160000.2.2.x86_64.rpm [done] +. +Preloading: libmariadb3-3.4.5-160000.2.2.x86_64.rpm [done] +. +Preloading: mariadb-client-11.8.5-160000.3.1.x86_64.rpm [Error: "The requested URL returned error: 404", trying next mirror.] +. +Preloading: libodbc2-2.3.12-160000.2.2.x86_64.rpm [done] +. +Preloading: python313-mysqlclient-2.2.7-160000.2.2.x86_64.rpm [done] +. +Preloading: mariadb-errormessages-11.8.5-160000.3.1.noarch.rpm [done] +. +Preloading: libJudy1-1.0.5-160000.3.2.x86_64.rpm [done] +. +Preloading: mariadb-client-11.8.5-160000.3.1.x86_64.rpm [done] +.. +Preloading: mariadb-11.8.5-160000.3.1.x86_64.rpm [done] +.done] +Retrieving: libJudy1-1.0.5-160000.3.2.x86_64 (repo-oss (16.0)) (1/9), 110.7 KiB +Retrieving: libltdl7-2.4.7-160000.2.2.x86_64 (repo-oss (16.0)) (2/9), 44.1 KiB +Retrieving: libmariadb3-3.4.5-160000.2.2.x86_64 (repo-oss (16.0)) (3/9), 157.7 KiB +Retrieving: libpcre2-posix3-10.45-160000.2.2.x86_64 (repo-oss (16.0)) (4/9), 66.6 KiB +Retrieving: mariadb-errormessages-11.8.5-160000.3.1.noarch (repo-oss (16.0)) (5/9), 343.9 KiB +Retrieving: libodbc2-2.3.12-160000.2.2.x86_64 (repo-oss (16.0)) (6/9), 202.5 KiB +Retrieving: mariadb-client-11.8.5-160000.3.1.x86_64 (repo-oss (16.0)) (7/9), 1.5 MiB +Retrieving: python313-mysqlclient-2.2.7-160000.2.2.x86_64 (repo-oss (16.0)) (8/9), 119.0 KiB +Retrieving: mariadb-11.8.5-160000.3.1.x86_64 (repo-oss (16.0)) (9/9), 23.5 MiB + +Checking for file conflicts: [...done] +(1/9) Installing: libJudy1-1.0.5-160000.3.2.x86_64 [..done] +(2/9) Installing: libltdl7-2.4.7-160000.2.2.x86_64 [..done] +(3/9) Installing: libmariadb3-3.4.5-160000.2.2.x86_64 [..done] +(4/9) Installing: libpcre2-posix3-10.45-160000.2.2.x86_64 [..done] +(5/9) Installing: mariadb-errormessages-11.8.5-160000.3.1.noarch [..done] +(6/9) Installing: libodbc2-2.3.12-160000.2.2.x86_64 [..done] +(7/9) Installing: mariadb-client-11.8.5-160000.3.1.x86_64 [.. +/usr/bin/systemd-sysusers --replace=/usr/lib/sysusers.d/mysql-user.conf - +Creating group 'mysql' with GID 60. +Creating user 'mysql' (MySQL database admin) with UID 60 and GID 60. +..done] +(8/9) Installing: python313-mysqlclient-2.2.7-160000.2.2.x86_64 [..done] +(9/9) Installing: mariadb-11.8.5-160000.3.1.x86_64 [...........done] +Running post-transaction scripts [.....done] +Update notifications were received from the following packages: +mariadb-11.8.5-160000.3.1.x86_64 (/var/adm/update-messages/mariadb-11.8.5-160000.3.1-something) +View the notifications now? [y/n] (n): n +Created symlink '/etc/systemd/system/mysql.service' → '/usr/lib/systemd/system/mariadb.service'. +Created symlink '/etc/systemd/system/multi-user.target.wants/mariadb.service' → '/usr/lib/systemd/system/mariadb.service'. +[INFO] MariaDB instalado y en ejecución +[INFO] 3. Instalando PHP 8 y módulo Apache... +Retrieving repository 'php 8.0 (SLE_15_SP6)' metadata [... +Looking for gpg keys in repository php 8.0 (SLE_15_SP6). + gpgkey=https://download.opensuse.org/repositories/devel:/languages:/php:/php80/SLE_15_SP6/repodata/repomd.xml.key +... + +Automatically trusting the following key: + + Repository: php 8.0 (SLE_15_SP6) + Key Fingerprint: E1E2 F102 BC77 314F 4A4B 7542 BED0 FF75 7D17 C956 + Key Name: devel:languages:php OBS Project + Key Algorithm: RSA 4096 + Key Created: Thu May 2 07:49:48 2024 + Key Expires: Sat Jul 11 07:49:47 2026 + Rpm Name: gpg-pubkey-7d17c956-6633459c + + + + Note: A GPG pubkey is clearly identified by its fingerprint. Do not rely on the key's name. If + you are not sure whether the presented key is authentic, ask the repository provider or check + their web site. Many providers maintain a web page showing the fingerprints of the GPG keys they + are using. +..done] +Building repository 'php 8.0 (SLE_15_SP6)' cache [....done] +Repository 'repo-openh264 (16.0)' is up to date. +Repository 'repo-oss (16.0)' is up to date. +All repositories have been refreshed. +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +Resolving package dependencies... + +The following 11 recommended packages were automatically selected: + apache2-utils php8-ctype php8-dom php8-iconv php8-openssl php8-sqlite php8-tokenizer php8-xmlreader php8-xmlwriter postfix w3m + +The following 4 packages are suggested, but will not be installed: + php8-cli php8-gd php8-gettext php8-mbstring + +The following 40 NEW packages are going to be installed: + apache2 apache2-mod_php8 apache2-prefork apache2-utils ed git-web libapr-util1-0 libapr1-0 libargon2-1 libbrotlienc1 libgc1 libicu77 libicu77-ledata liblmdb-0_9_30 perl-CGI perl-Clone perl-Encode-Locale perl-HTML-Parser perl-HTML-Tagset perl-HTTP-Date perl-HTTP-Message perl-IO-HTML perl-LWP-MediaTypes perl-MIME-Base32 perl-URI php8 php8-ctype php8-dom php8-iconv php8-mysql php8-openssl php8-pdo php8-sqlite php8-tokenizer php8-xmlreader php8-xmlwriter postfix system-user-wwwrun w3m which + +40 new packages to install. + +Package download size: 23.7 MiB + +Package install size change: + | 65.6 MiB required by packages that will be installed + 65.6 MiB | - 0 B released by packages that will be removed + +Backend: classic_rpmtrans +Continue? [y/n/v/...? shows all options] (y): y +Preloading Packages [.. +Preloading: perl-HTTP-Message-7.0.0-160000.2.2.noarch.rpm [done] +. +Preloading: apache2-2.4.63-160000.3.1.x86_64.rpm [done] +. +Preloading: php8-8.4.16-160000.1.1.x86_64.rpm [Error: "The requested URL returned error: 404", trying next mirror.] +. +Preloading: apache2-prefork-2.4.63-160000.3.1.x86_64.rpm [done] +. +Preloading: postfix-3.10.2-160000.2.2.x86_64.rpm [done] +. +Preloading: apache2-mod_php8-8.4.16-160000.1.1.x86_64.rpm [Error: "The requested URL returned error: 404", trying next mirror.] +. +Preloading: perl-HTML-Parser-3.830.0-160000.2.2.x86_64.rpm [done] +. +Preloading: perl-CGI-4.670.0-160000.2.2.noarch.rpm [done] +. +Preloading: git-web-2.51.0-160000.1.2.x86_64.rpm [done] +. +Preloading: php8-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: php8-iconv-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: apache2-utils-2.4.63-160000.3.1.x86_64.rpm [done] +. +Preloading: apache2-mod_php8-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: php8-openssl-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: php8-sqlite-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: php8-tokenizer-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: php8-xmlreader-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: php8-dom-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: php8-xmlwriter-8.4.16-160000.1.1.x86_64.rpm [done] +.. +Preloading: php8-mysql-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: libapr1-0-1.7.5-160000.2.2.x86_64.rpm [done] +. +Preloading: libargon2-1-20190702-160000.2.2.x86_64.rpm [done] +. +Preloading: libbrotlienc1-1.1.0-160000.2.2.x86_64.rpm [done] +. +Preloading: php8-pdo-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: perl-HTTP-Date-6.06-160000.2.2.noarch.rpm [done] +. +Preloading: libgc1-8.2.8-160000.2.2.x86_64.rpm [done] +. +Preloading: php8-ctype-8.4.16-160000.1.1.x86_64.rpm [done] +. +Preloading: liblmdb-0_9_30-0.9.30-160000.3.2.x86_64.rpm [done] +. +Preloading: perl-Clone-0.46-160000.2.2.x86_64.rpm [done] +. +Preloading: perl-Encode-Locale-1.05-160000.2.2.noarch.rpm [done] +. +Preloading: perl-LWP-MediaTypes-6.04-160000.2.2.noarch.rpm [done] +. +Preloading: ed-1.21.1-160000.2.2.x86_64.rpm [done] +. +Preloading: perl-IO-HTML-1.004-160000.2.2.noarch.rpm [done] +. +Preloading: system-user-wwwrun-20170617-160000.2.2.noarch.rpm [done] +. +Preloading: perl-MIME-Base32-1.303.0-160000.2.2.noarch.rpm [done] +. +Preloading: which-2.23-160000.2.2.x86_64.rpm [done] +. +Preloading: w3m-0.5.3+git20230121-160000.2.2.x86_64.rpm [done] +. +Preloading: libicu77-ledata-77.1-160000.2.2.noarch.rpm [done] +. +Preloading: libapr-util1-0-1.6.3-160000.2.2.x86_64.rpm [done] +. +Preloading: perl-URI-5.310.0-160000.2.2.noarch.rpm [done] +. +Preloading: libicu77-77.1-160000.2.2.x86_64.rpm [done] +. +Preloading: perl-HTML-Tagset-3.240.0-160000.2.2.noarch.rpm [done] +.done] +Retrieving: ed-1.21.1-160000.2.2.x86_64 (repo-oss (16.0)) (1/40), 85.9 KiB +Retrieving: libapr1-0-1.7.5-160000.2.2.x86_64 (repo-oss (16.0)) (2/40), 151.3 KiB +Retrieving: libargon2-1-20190702-160000.2.2.x86_64 (repo-oss (16.0)) (3/40), 20.5 KiB +Retrieving: libbrotlienc1-1.1.0-160000.2.2.x86_64 (repo-oss (16.0)) (4/40), 263.6 KiB +Retrieving: libgc1-8.2.8-160000.2.2.x86_64 (repo-oss (16.0)) (5/40), 109.3 KiB +Retrieving: libicu77-ledata-77.1-160000.2.2.noarch (repo-oss (16.0)) (6/40), 8.6 MiB +Retrieving: liblmdb-0_9_30-0.9.30-160000.3.2.x86_64 (repo-oss (16.0)) (7/40), 60.4 KiB +Retrieving: perl-Clone-0.46-160000.2.2.x86_64 (repo-oss (16.0)) (8/40), 23.1 KiB +Retrieving: perl-Encode-Locale-1.05-160000.2.2.noarch (repo-oss (16.0)) (9/40), 22.4 KiB +Retrieving: perl-HTML-Tagset-3.240.0-160000.2.2.noarch (repo-oss (16.0)) (10/40), 19.3 KiB +Retrieving: perl-HTTP-Date-6.06-160000.2.2.noarch (repo-oss (16.0)) (11/40), 28.4 KiB +Retrieving: perl-IO-HTML-1.004-160000.2.2.noarch (repo-oss (16.0)) (12/40), 28.5 KiB +Retrieving: perl-LWP-MediaTypes-6.04-160000.2.2.noarch (repo-oss (16.0)) (13/40), 34.2 KiB +Retrieving: perl-MIME-Base32-1.303.0-160000.2.2.noarch (repo-oss (16.0)) (14/40), 20.3 KiB +Retrieving: system-user-wwwrun-20170617-160000.2.2.noarch (repo-oss (16.0)) (15/40), 12.7 KiB +Retrieving: which-2.23-160000.2.2.x86_64 (repo-oss (16.0)) (16/40), 39.5 KiB +Retrieving: libapr-util1-0-1.6.3-160000.2.2.x86_64 (repo-oss (16.0)) (17/40), 123.8 KiB +Retrieving: w3m-0.5.3+git20230121-160000.2.2.x86_64 (repo-oss (16.0)) (18/40), 1.0 MiB +Retrieving: libicu77-77.1-160000.2.2.x86_64 (repo-oss (16.0)) (19/40), 2.1 MiB +Retrieving: perl-URI-5.310.0-160000.2.2.noarch (repo-oss (16.0)) (20/40), 137.2 KiB +Retrieving: apache2-utils-2.4.63-160000.3.1.x86_64 (repo-oss (16.0)) (21/40), 588.9 KiB +Retrieving: postfix-3.10.2-160000.2.2.x86_64 (repo-oss (16.0)) (22/40), 1.4 MiB +Retrieving: perl-HTTP-Message-7.0.0-160000.2.2.noarch (repo-oss (16.0)) (23/40), 116.5 KiB +Retrieving: apache2-prefork-2.4.63-160000.3.1.x86_64 (repo-oss (16.0)) (24/40), 1.8 MiB +Retrieving: apache2-2.4.63-160000.3.1.x86_64 (repo-oss (16.0)) (25/40), 905.9 KiB +Retrieving: perl-HTML-Parser-3.830.0-160000.2.2.x86_64 (repo-oss (16.0)) (26/40), 121.1 KiB +Retrieving: php8-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (27/40), 281.8 KiB +Retrieving: apache2-mod_php8-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (28/40), 2.2 MiB +Retrieving: perl-CGI-4.670.0-160000.2.2.noarch (repo-oss (16.0)) (29/40), 221.5 KiB +Retrieving: php8-dom-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (30/40), 748.6 KiB +Retrieving: git-web-2.51.0-160000.1.2.x86_64 (repo-oss (16.0)) (31/40), 350.5 KiB +Retrieving: php8-ctype-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (32/40), 218.2 KiB +Retrieving: php8-iconv-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (33/40), 232.7 KiB +Retrieving: php8-openssl-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (34/40), 291.9 KiB +Retrieving: php8-pdo-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (35/40), 263.9 KiB +Retrieving: php8-sqlite-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (36/40), 252.4 KiB +Retrieving: php8-tokenizer-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (37/40), 225.6 KiB +Retrieving: php8-xmlreader-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (38/40), 230.6 KiB +Retrieving: php8-xmlwriter-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (39/40), 228.2 KiB +Retrieving: php8-mysql-8.4.16-160000.1.1.x86_64 (repo-oss (16.0)) (40/40), 345.5 KiB + +Checking for file conflicts: [...done] +( 1/40) Installing: ed-1.21.1-160000.2.2.x86_64 [..done] +( 2/40) Installing: libapr1-0-1.7.5-160000.2.2.x86_64 [..done] +( 3/40) Installing: libargon2-1-20190702-160000.2.2.x86_64 [..done] +( 4/40) Installing: libbrotlienc1-1.1.0-160000.2.2.x86_64 [..done] +( 5/40) Installing: libgc1-8.2.8-160000.2.2.x86_64 [..done] +( 6/40) Installing: libicu77-ledata-77.1-160000.2.2.noarch [.....done] +( 7/40) Installing: liblmdb-0_9_30-0.9.30-160000.3.2.x86_64 [..done] +( 8/40) Installing: perl-Clone-0.46-160000.2.2.x86_64 [..done] +( 9/40) Installing: perl-Encode-Locale-1.05-160000.2.2.noarch [..done] +(10/40) Installing: perl-HTML-Tagset-3.240.0-160000.2.2.noarch [..done] +(11/40) Installing: perl-HTTP-Date-6.06-160000.2.2.noarch [..done] +(12/40) Installing: perl-IO-HTML-1.004-160000.2.2.noarch [..done] +(13/40) Installing: perl-LWP-MediaTypes-6.04-160000.2.2.noarch [..done] +(14/40) Installing: perl-MIME-Base32-1.303.0-160000.2.2.noarch [..done] +(15/40) Installing: system-user-wwwrun-20170617-160000.2.2.noarch [.. +/usr/bin/systemd-sysusers --replace=/usr/lib/sysusers.d/system-user-wwwrun.conf - +Creating group 'www' with GID 474. +Creating group 'wwwrun' with GID 473. +Creating user 'wwwrun' (WWW daemon apache) with UID 473 and GID 473. +done] +(16/40) Installing: which-2.23-160000.2.2.x86_64 [..done] +(17/40) Installing: libapr-util1-0-1.6.3-160000.2.2.x86_64 [..done] +(18/40) Installing: w3m-0.5.3+git20230121-160000.2.2.x86_64 [..done] +(19/40) Installing: libicu77-77.1-160000.2.2.x86_64 [..done] +(20/40) Installing: perl-URI-5.310.0-160000.2.2.noarch [..done] +(21/40) Installing: apache2-utils-2.4.63-160000.3.1.x86_64 [..done] +(22/40) Installing: postfix-3.10.2-160000.2.2.x86_64 [.. +/usr/bin/systemd-sysusers --replace=/usr/lib/sysusers.d/postfix-user.conf - +Creating group 'postfix' with GID 51. +Creating group 'maildrop' with GID 59. +Creating user 'postfix' (Postfix Daemon) with UID 51 and GID 51. +. +Updating /etc/sysconfig/postfix ... +Updating /etc/sysconfig/mail ... +Created symlink '/etc/systemd/system/multi-user.target.wants/postfix.service' -> '/usr/lib/systemd/system/postfix.service'. +done] +(23/40) Installing: perl-HTTP-Message-7.0.0-160000.2.2.noarch [..done] +(24/40) Installing: apache2-prefork-2.4.63-160000.3.1.x86_64 [...done] +(25/40) Installing: apache2-2.4.63-160000.3.1.x86_64 [.... +Please check /etc/permissions.local for settings of /usr/sbin/suexec . +Updating /etc/sysconfig/apache2 ... +done] +(26/40) Installing: perl-HTML-Parser-3.830.0-160000.2.2.x86_64 [..done] +(27/40) Installing: php8-8.4.16-160000.1.1.x86_64 [..done] +(28/40) Installing: apache2-mod_php8-8.4.16-160000.1.1.x86_64 [...done] +(29/40) Installing: perl-CGI-4.670.0-160000.2.2.noarch [..done] +(30/40) Installing: php8-dom-8.4.16-160000.1.1.x86_64 [..done] +(31/40) Installing: git-web-2.51.0-160000.1.2.x86_64 [..done] +(32/40) Installing: php8-ctype-8.4.16-160000.1.1.x86_64 [..done] +(33/40) Installing: php8-iconv-8.4.16-160000.1.1.x86_64 [..done] +(34/40) Installing: php8-openssl-8.4.16-160000.1.1.x86_64 [..done] +(35/40) Installing: php8-pdo-8.4.16-160000.1.1.x86_64 [..done] +(36/40) Installing: php8-sqlite-8.4.16-160000.1.1.x86_64 [..done] +(37/40) Installing: php8-tokenizer-8.4.16-160000.1.1.x86_64 [..done] +(38/40) Installing: php8-xmlreader-8.4.16-160000.1.1.x86_64 [..done] +(39/40) Installing: php8-xmlwriter-8.4.16-160000.1.1.x86_64 [..done] +(40/40) Installing: php8-mysql-8.4.16-160000.1.1.x86_64 [..done] +Running post-transaction scripts [.......done] +[INFO] PHP instalado +[INFO] 4. Instalando Apache y configurando welcome.php... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'apache2' is already installed. +No update candidate for 'apache2-2.4.63-160000.3.1.x86_64'. The highest available version is already installed. +'apache2-prefork' is already installed. +No update candidate for 'apache2-prefork-2.4.63-160000.3.1.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +Created symlink '/etc/systemd/system/httpd.service' → '/usr/lib/systemd/system/apache2.service'. +Created symlink '/etc/systemd/system/apache.service' → '/usr/lib/systemd/system/apache2.service'. +Created symlink '/etc/systemd/system/multi-user.target.wants/apache2.service' → '/usr/lib/systemd/system/apache2.service'. +[INFO] Apache instalado y apuntando a /vicidial/welcome.php +[INFO] 5. Ejecutando restore.sh... +[INFO] ========================================== +[INFO] Restauración de Vicibox +[INFO] ========================================== + +[INFO] 1. Restaurando scripts de Vicibox... +[INFO] ✓ Scripts restaurados + +[INFO] 2. Creando enlaces simbólicos... +[INFO] ✓ Enlaces simbólicos creados + +[INFO] 3. Restaurando código fuente de ViciDial... +[INFO] ✓ Código fuente restaurado + +[INFO] 4. Verificando instalación... +[INFO] ✓ Verificación completada sin errores + +[INFO] ========================================== +[INFO] Restauración completada! +[INFO] ========================================== + +[INFO] Ahora puedes ejecutar la instalación: + + Para instalación Express (todo-en-uno): + vicibox-install --vicibox-express + + Para instalación personalizada: + vicibox-install + +[INFO] 6. Aplicando parches a vicibox-install.pl (socket MySQL, random_pass, etc.)... +[INFO] Copiado vicibox-install.pl con parches desde patches/ +[INFO] 7. Ejecutando vicibox-install --vicibox-express (confirmación automática 'y')... +[INFO] Esto puede tardar varios minutos... +Can't locate LWP/Simple.pm in @INC (you may need to install the LWP::Simple module) (@INC entries checked: /usr/lib/perl5/site_perl/5.42.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.42.0 /usr/lib/perl5/vendor_perl/5.42.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.42.0 /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi /usr/lib/perl5/5.42.0 /usr/lib/perl5/site_perl) at /usr/share/vicibox/vicibox-install.pl line 78. +BEGIN failed--compilation aborted at /usr/share/vicibox/vicibox-install.pl line 78. +[INFO] 8. /etc/astguiclient.conf no existe aún (normal si la instalación Express falló antes de crearlo). +[INFO] 9. Creando usuario administrador sapian en ViciDial... +La base de datos asterisk no existe o no hay acceso. Ejecutar después de la instalación Express. +[WARN] No se pudo crear el usuario (¿base de datos ya instalada?). Puedes ejecutar después: sudo /home/backvicibox/create-admin-sapian.sh +[INFO] ========================================== +[INFO] Proceso de instalación finalizado +[INFO] ========================================== +[INFO] Log guardado en: /home/backvicibox/install-vicibox.log +[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) +[INFO] ========================================== +[INFO] Instalación ViciBox (dependencias + restore + express) +[INFO] ========================================== +[INFO] 1. Instalando Perl, Subversion y módulos (DBI, DBD-mysql, LWP::Simple)... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'perl' is already installed. +No update candidate for 'perl-5.42.0-160000.2.2.x86_64'. The highest available version is already installed. +'libwww-perl' not found in package names. Trying capabilities. +No provider of 'libwww-perl' found. +[INFO] Perl: +[INFO] 2. Instalando MariaDB... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'mariadb' is already installed. +No update candidate for 'mariadb-11.8.5-160000.3.1.x86_64'. The highest available version is already installed. +'mariadb-client' is already installed. +No update candidate for 'mariadb-client-11.8.5-160000.3.1.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +[INFO] MariaDB instalado y en ejecución +[INFO] 3. Instalando PHP 8 y módulo Apache... +Repository 'php 8.0 (SLE_15_SP6)' is up to date. +Repository 'repo-openh264 (16.0)' is up to date. +Repository 'repo-oss (16.0)' is up to date. +All repositories have been refreshed. +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'php8' is already installed. +No update candidate for 'php8-8.4.16-160000.1.1.x86_64'. The highest available version is already installed. +'apache2-mod_php8' is already installed. +No update candidate for 'apache2-mod_php8-8.4.16-160000.1.1.x86_64'. The highest available version is already installed. +'php8-mysql' is already installed. +No update candidate for 'php8-mysql-8.4.16-160000.1.1.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +[INFO] PHP instalado +[INFO] 4. Instalando Apache y configurando welcome.php... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'apache2' is already installed. +No update candidate for 'apache2-2.4.63-160000.3.1.x86_64'. The highest available version is already installed. +'apache2-prefork' is already installed. +No update candidate for 'apache2-prefork-2.4.63-160000.3.1.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +[INFO] Apache instalado y apuntando a /vicidial/welcome.php +[INFO] 5. Ejecutando restore.sh... +[INFO] ========================================== +[INFO] Restauración de Vicibox +[INFO] ========================================== + +[INFO] 1. Restaurando scripts de Vicibox... +[INFO] ✓ Scripts restaurados + +[INFO] 2. Creando enlaces simbólicos... +[INFO] ✓ Enlaces simbólicos creados + +[INFO] 3. Restaurando código fuente de ViciDial... +[INFO] ✓ Código fuente restaurado + +[INFO] 4. Verificando instalación... +[INFO] ✓ Verificación completada sin errores + +[INFO] ========================================== +[INFO] Restauración completada! +[INFO] ========================================== + +[INFO] Ahora puedes ejecutar la instalación: + + Para instalación Express (todo-en-uno): + vicibox-install --vicibox-express + + Para instalación personalizada: + vicibox-install + +[INFO] 6. Aplicando parches a vicibox-install.pl (socket MySQL, random_pass, etc.)... +[INFO] Copiado vicibox-install.pl con parches desde patches/ +[INFO] 7. Ejecutando vicibox-install --vicibox-express (confirmación automática 'y')... +[INFO] Esto puede tardar varios minutos... +Can't locate LWP/Simple.pm in @INC (you may need to install the LWP::Simple module) (@INC entries checked: /usr/lib/perl5/site_perl/5.42.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.42.0 /usr/lib/perl5/vendor_perl/5.42.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.42.0 /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi /usr/lib/perl5/5.42.0 /usr/lib/perl5/site_perl) at /usr/share/vicibox/vicibox-install.pl line 78. +BEGIN failed--compilation aborted at /usr/share/vicibox/vicibox-install.pl line 78. +[INFO] 8. /etc/astguiclient.conf no existe aún (normal si la instalación Express falló antes de crearlo). +[INFO] 9. Creando usuario administrador sapian en ViciDial... +La base de datos asterisk no existe o no hay acceso. Ejecutar después de la instalación Express. +[WARN] No se pudo crear el usuario (¿base de datos ya instalada?). Puedes ejecutar después: sudo /home/backvicibox/create-admin-sapian.sh +[INFO] ========================================== +[INFO] Proceso de instalación finalizado +[INFO] ========================================== +[INFO] Log guardado en: /home/backvicibox/install-vicibox.log +[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) +[INFO] ========================================== +[INFO] Instalación ViciBox (dependencias + restore + express) +[INFO] ========================================== +[INFO] 1. Instalando Perl, Subversion y módulos (DBI, DBD-mysql, LWP::Simple)... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'perl' is already installed. +No update candidate for 'perl-5.42.0-160000.2.2.x86_64'. The highest available version is already installed. +'libwww-perl' not found in package names. Trying capabilities. +No provider of 'libwww-perl' found. +[INFO] Perl: +[INFO] 2. Instalando MariaDB... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'mariadb' is already installed. +No update candidate for 'mariadb-11.8.5-160000.3.1.x86_64'. The highest available version is already installed. +'mariadb-client' is already installed. +No update candidate for 'mariadb-client-11.8.5-160000.3.1.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +[INFO] MariaDB instalado y en ejecución +[INFO] 3. Instalando PHP 8 y módulo Apache... +Repository 'php 8.0 (SLE_15_SP6)' is up to date. +Repository 'repo-openh264 (16.0)' is up to date. +Repository 'repo-oss (16.0)' is up to date. +All repositories have been refreshed. +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'php8' is already installed. +No update candidate for 'php8-8.4.16-160000.1.1.x86_64'. The highest available version is already installed. +'apache2-mod_php8' is already installed. +No update candidate for 'apache2-mod_php8-8.4.16-160000.1.1.x86_64'. The highest available version is already installed. +'php8-mysql' is already installed. +No update candidate for 'php8-mysql-8.4.16-160000.1.1.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +[INFO] PHP instalado +[INFO] 4. Instalando Apache y configurando welcome.php... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'apache2' is already installed. +No update candidate for 'apache2-2.4.63-160000.3.1.x86_64'. The highest available version is already installed. +'apache2-prefork' is already installed. +No update candidate for 'apache2-prefork-2.4.63-160000.3.1.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +[INFO] Apache instalado y apuntando a /vicidial/welcome.php +[INFO] 5. Ejecutando restore.sh... +[INFO] ========================================== +[INFO] Restauración de Vicibox +[INFO] ========================================== + +[INFO] 1. Restaurando scripts de Vicibox... +[INFO] ✓ Scripts restaurados + +[INFO] 2. Creando enlaces simbólicos... +[INFO] ✓ Enlaces simbólicos creados + +[INFO] 3. Restaurando código fuente de ViciDial... +[INFO] ✓ Código fuente restaurado + +[INFO] 4. Verificando instalación... +[INFO] ✓ Verificación completada sin errores + +[INFO] ========================================== +[INFO] Restauración completada! +[INFO] ========================================== + +[INFO] Ahora puedes ejecutar la instalación: + + Para instalación Express (todo-en-uno): + vicibox-install --vicibox-express + + Para instalación personalizada: + vicibox-install + +[INFO] 6. Aplicando parches a vicibox-install.pl (socket MySQL, random_pass, etc.)... +[INFO] Copiado vicibox-install.pl con parches desde patches/ +[INFO] 7. Ejecutando vicibox-install --vicibox-express (confirmación automática 'y')... +[INFO] Esto puede tardar varios minutos... +Can't locate LWP/Simple.pm in @INC (you may need to install the LWP::Simple module) (@INC entries checked: /usr/lib/perl5/site_perl/5.42.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.42.0 /usr/lib/perl5/vendor_perl/5.42.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.42.0 /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi /usr/lib/perl5/5.42.0 /usr/lib/perl5/site_perl) at /usr/share/vicibox/vicibox-install.pl line 78. +BEGIN failed--compilation aborted at /usr/share/vicibox/vicibox-install.pl line 78. +[INFO] 8. /etc/astguiclient.conf no existe aún (normal si la instalación Express falló antes de crearlo). +[INFO] 9. Creando usuario administrador sapian en ViciDial... +La base de datos asterisk no existe o no hay acceso. Ejecutar después de la instalación Express. +[WARN] No se pudo crear el usuario (¿base de datos ya instalada?). Puedes ejecutar después: sudo /home/backvicibox/create-admin-sapian.sh +[INFO] ========================================== +[INFO] Proceso de instalación finalizado +[INFO] ========================================== +[INFO] Log guardado en: /home/backvicibox/install-vicibox.log +[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) +[INFO] ========================================== +[INFO] Instalación ViciBox (dependencias + restore + express) +[INFO] ========================================== +[INFO] 0. Instalando módulos Perl requeridos (perl-DBI, perl-DBD-mysql, perl-libwww-perl)... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'perl-DBD-mysql' is already installed. +No update candidate for 'perl-DBD-mysql-4.050-160000.2.2.x86_64'. The highest available version is already installed. +'perl-libwww-perl' is already installed. +No update candidate for 'perl-libwww-perl-6.770.0-160000.2.2.noarch'. The highest available version is already installed. +'perl-DBI' is already installed. +No update candidate for 'perl-DBI-1.647.0-160000.2.2.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +[INFO] perl-DBI, perl-DBD-mysql, perl-libwww-perl instalados +[INFO] 1. Instalando Perl, Subversion y resto de dependencias... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'perl' is already installed. +No update candidate for 'perl-5.42.0-160000.2.2.x86_64'. The highest available version is already installed. +'perl-DBD-mysql' is already installed. +No update candidate for 'perl-DBD-mysql-4.050-160000.2.2.x86_64'. The highest available version is already installed. +'perl-DBI' is already installed. +No update candidate for 'perl-DBI-1.647.0-160000.2.2.x86_64'. The highest available version is already installed. +'libwww-perl' not found in package names. Trying capabilities. +No provider of 'libwww-perl' found. +[INFO] Perl: +[INFO] 2. Instalando MariaDB... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'mariadb' is already installed. +No update candidate for 'mariadb-11.8.5-160000.3.1.x86_64'. The highest available version is already installed. +'mariadb-client' is already installed. +No update candidate for 'mariadb-client-11.8.5-160000.3.1.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +[INFO] MariaDB instalado y en ejecución +[INFO] 3. Instalando PHP 8 y módulo Apache... +Repository 'php 8.0 (SLE_15_SP6)' is up to date. +Repository 'repo-openh264 (16.0)' is up to date. +Repository 'repo-oss (16.0)' is up to date. +All repositories have been refreshed. +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'php8' is already installed. +No update candidate for 'php8-8.4.16-160000.1.1.x86_64'. The highest available version is already installed. +'apache2-mod_php8' is already installed. +No update candidate for 'apache2-mod_php8-8.4.16-160000.1.1.x86_64'. The highest available version is already installed. +'php8-mysql' is already installed. +No update candidate for 'php8-mysql-8.4.16-160000.1.1.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +[INFO] PHP instalado +[INFO] 4. Instalando Apache y configurando welcome.php... +Refreshing service 'openSUSE'. +Loading repository data... +Reading installed packages... +'apache2' is already installed. +No update candidate for 'apache2-2.4.63-160000.3.1.x86_64'. The highest available version is already installed. +'apache2-prefork' is already installed. +No update candidate for 'apache2-prefork-2.4.63-160000.3.1.x86_64'. The highest available version is already installed. +Resolving package dependencies... +Nothing to do. +[INFO] Apache instalado y apuntando a /vicidial/welcome.php +[INFO] 4b. Instalando Asterisk (repositorio VICIdial asterisk-18)... +Adding repository 'asterisk (15.6)' [.....done] +Repository 'asterisk (15.6)' successfully added + +URI : https://download.opensuse.org/repositories/home:/vicidial:/asterisk-18/15.6/ +Enabled : Yes +GPG Check : Yes +Autorefresh : Yes +Priority : 99 (default priority) + +Repository priorities are without effect. All enabled repositories share the same priority. +[WARN] Repo Asterisk no disponible. Instala manualmente: zypper ar .../home:vicidial:asterisk-18.repo && zypper in asterisk +[INFO] 5. Ejecutando restore.sh... +[INFO] ========================================== +[INFO] Restauración de Vicibox +[INFO] ========================================== + +[INFO] 1. Restaurando scripts de Vicibox... +[INFO] ✓ Scripts restaurados + +[INFO] 2. Creando enlaces simbólicos... +[INFO] ✓ Enlaces simbólicos creados + +[INFO] 3. Restaurando código fuente de ViciDial... +[INFO] ✓ Código fuente restaurado + +[INFO] 4. Verificando instalación... +[INFO] ✓ Verificación completada sin errores + +[INFO] ========================================== +[INFO] Restauración completada! +[INFO] ========================================== + +[INFO] Ahora puedes ejecutar la instalación: + + Para instalación Express (todo-en-uno): + vicibox-install --vicibox-express + + Para instalación personalizada: + vicibox-install + +[INFO] 6. Aplicando parches a vicibox-install.pl (socket MySQL, random_pass, etc.)... +[INFO] Copiado vicibox-install.pl con parches desde patches/ +[INFO] 7. Ejecutando vicibox-install --vicibox-express (confirmación automática 'y')... +[INFO] Esto puede tardar varios minutos... + + +ViciBox Installer + +Vicibox Express mode activated +Can't exec "/usr/sbin/asterisk": No such file or directory at /usr/share/vicibox/vicibox-install.pl line 803. +Use of uninitialized value $string in substitution (s///) at /usr/share/vicibox/vicibox-install.pl line 137. +Use of uninitialized value $string in substitution (s///) at /usr/share/vicibox/vicibox-install.pl line 138. +Use of uninitialized value in split at /usr/share/vicibox/vicibox-install.pl line 803. +Use of uninitialized value $string in substitution (s///) at /usr/share/vicibox/vicibox-install.pl line 137. +Use of uninitialized value $string in substitution (s///) at /usr/share/vicibox/vicibox-install.pl line 138. +Use of uninitialized value $astverstring in pattern match (m//) at /usr/share/vicibox/vicibox-install.pl line 805. +Use of uninitialized value $astverstring in pattern match (m//) at /usr/share/vicibox/vicibox-install.pl line 806. +Use of uninitialized value $astverstring in pattern match (m//) at /usr/share/vicibox/vicibox-install.pl line 807. +Use of uninitialized value $astverstring in pattern match (m//) at /usr/share/vicibox/vicibox-install.pl line 808. +Use of uninitialized value $astverstring in pattern match (m//) at /usr/share/vicibox/vicibox-install.pl line 809. +Use of uninitialized value $astverstring in pattern match (m//) at /usr/share/vicibox/vicibox-install.pl line 810. +sh: line 1: /usr/bin/svn: No such file or directory +Use of uninitialized value $string in substitution (s///) at /usr/share/vicibox/vicibox-install.pl line 137. +Use of uninitialized value $string in substitution (s///) at /usr/share/vicibox/vicibox-install.pl line 138. +sh: line 1: /usr/bin/svn: No such file or directory +Use of uninitialized value $string in substitution (s///) at /usr/share/vicibox/vicibox-install.pl line 137. +Use of uninitialized value $string in substitution (s///) at /usr/share/vicibox/vicibox-install.pl line 138. + +This will install ViciBox in "Express" mode. This will result in a +single server installation performing all roles of the ViciDial Call +Center Suite. This is the simplest method of installation and generally +suitable for use with 20 agents or less. Minimum server specifications +are Quad-Core CPU, 8GB of ram or more, and two 500-GB SSDs in RAID1. A +software RAID can be setup by using the MD or MultiDevice install media +for ViciBox. + +To continue beyond this point will be destructive to the installed system. + + +Do you want to continue with the ViciBox Express install? [y/N] : + +Beginning installation, expect lots of output... + +Local SVN revision matches DB revision: 0 +Doing general DataBase requirements... +Database already exists! Server was previously installed. +[INFO] 8. Configuración: VARDB_server => 127.0.0.1 en /etc/astguiclient.conf (para la web) +[INFO] 9. Creando usuario administrador sapian en ViciDial... +La base de datos asterisk no existe o no hay acceso. Ejecutar después de la instalación Express. +[WARN] No se pudo crear el usuario (¿base de datos ya instalada?). Puedes ejecutar después: sudo /home/backvicibox/create-admin-sapian.sh +[INFO] ========================================== +[INFO] Proceso de instalación finalizado +[INFO] ========================================== +[INFO] Log guardado en: /home/backvicibox/install-vicibox.log +[INFO] Comprueba el estado de servicios: systemctl status mariadb apache2 asterisk +[INFO] Acceso web: http:///vicidial/welcome.php +[INFO] Admin ViciDial: usuario sapian, password sap64adm (admin.php) diff --git a/Custom/backvicibox3/install-vicibox.sh b/Custom/backvicibox3/install-vicibox.sh new file mode 100644 index 0000000..0cd6c13 --- /dev/null +++ b/Custom/backvicibox3/install-vicibox.sh @@ -0,0 +1,190 @@ +#!/bin/bash +# +# Script de instalación completa de ViciBox (ambiente de configuración) +# Basado en la carpeta backvicibox. +# +# Orden: Perl (DBI/DBD-mysql/libwww) → MariaDB → PHP → Apache → Asterisk +# → 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 "" + +# --- 0. Módulos Perl (antes que todo) --- +info "0. Instalando módulos Perl requeridos (perl-DBI, perl-DBD-mysql, perl-libwww-perl)..." +zypper -n install -y perl-DBI perl-DBD-mysql perl-libwww-perl >> "$LOG_FILE" 2>&1 || true +info " perl-DBI, perl-DBD-mysql, perl-libwww-perl instalados" +echo "" + +# --- 1. Perl (versión del sistema) y resto de módulos --- +info "1. Instalando Perl, Subversion y resto de dependencias..." +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 "" + +# --- 4b. Asterisk (requerido por vicibox-install; el instalador no lo instala) --- +info "4b. Instalando Asterisk (repositorio VICIdial asterisk-18)..." +AST_REPO_NAME="home:vicidial:asterisk-18" +AST_REPO_URL="https://download.opensuse.org/repositories/${AST_REPO_NAME}" +# Detectar versión (ej. 16.0 en openSUSE Leap 16.0) +AST_OS_VER="" +[ -f /etc/os-release ] && AST_OS_VER=$(grep -E '^VERSION_ID=' /etc/os-release | cut -d'"' -f2) +# Probar versión del sistema primero; luego 16.0, 15.6, 15.5 +AST_VERSIONS="$AST_OS_VER 16.0 15.6 15.5" +AST_REPO_ADDED=0 +for AST_VER in $AST_VERSIONS; do + [ -z "$AST_VER" ] && continue + if zypper lr 2>/dev/null | grep -q "$AST_REPO_NAME"; then + AST_REPO_ADDED=1 + break + fi + info " Añadiendo repo: ${AST_REPO_NAME} (${AST_VER})..." + zypper -n addrepo --refresh "${AST_REPO_URL}/${AST_VER}/${AST_REPO_NAME}.repo" >> "$LOG_FILE" 2>&1 && AST_REPO_ADDED=1 && break +done +if [ "$AST_REPO_ADDED" = "1" ] && zypper lr 2>/dev/null | grep -q "$AST_REPO_NAME"; then + info " Refrescando repositorios..." + zypper --no-gpg-checks -n refresh >> "$LOG_FILE" 2>&1 + info " Instalando asterisk..." + zypper -n install -y asterisk >> "$LOG_FILE" 2>&1 + info " Habilitando e iniciando asterisk..." + systemctl enable asterisk >> "$LOG_FILE" 2>&1 + systemctl start asterisk >> "$LOG_FILE" 2>&1 || true + info " Asterisk: $(asterisk -V 2>/dev/null || echo 'revisar servicio')" +else + warn " Repo Asterisk no disponible. Para Leap 16.0 ejecuta manualmente:" + warn " zypper ar --refresh ${AST_REPO_URL}/16.0/${AST_REPO_NAME}.repo" + warn " zypper --no-gpg-checks ref && zypper in -y asterisk && systemctl enable --now asterisk" +fi +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 asterisk" +info "Acceso web: http:///vicidial/welcome.php" +info "Admin ViciDial: usuario sapian, password sap64adm (admin.php)" +echo "" diff --git a/Custom/backvicibox3/patches/README.txt b/Custom/backvicibox3/patches/README.txt new file mode 100644 index 0000000..2868ae5 --- /dev/null +++ b/Custom/backvicibox3/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/backvicibox3/patches/vicibox-install.pl b/Custom/backvicibox3/patches/vicibox-install.pl new file mode 100644 index 0000000..c0423a7 --- /dev/null +++ b/Custom/backvicibox3/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/backvicibox3/restore.sh b/Custom/backvicibox3/restore.sh new file mode 100644 index 0000000..9bd2522 --- /dev/null +++ b/Custom/backvicibox3/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/backvicibox3/version-info.txt b/Custom/backvicibox3/version-info.txt new file mode 100644 index 0000000..0564efa --- /dev/null +++ b/Custom/backvicibox3/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/backvicibox3/vicibox-scripts.tar.gz b/Custom/backvicibox3/vicibox-scripts.tar.gz new file mode 100644 index 0000000..854c83e Binary files /dev/null and b/Custom/backvicibox3/vicibox-scripts.tar.gz differ diff --git a/Custom/installer/LogoAgent.png b/Custom/installer custom/LogoAgent.png similarity index 100% rename from Custom/installer/LogoAgent.png rename to Custom/installer custom/LogoAgent.png diff --git a/Custom/installer/LogoHome.png b/Custom/installer custom/LogoHome.png similarity index 100% rename from Custom/installer/LogoHome.png rename to Custom/installer custom/LogoHome.png diff --git a/Custom/installer/custom.css b/Custom/installer custom/custom.css similarity index 82% rename from Custom/installer/custom.css rename to Custom/installer custom/custom.css index 48a4022..22a51b9 100644 --- a/Custom/installer/custom.css +++ b/Custom/installer custom/custom.css @@ -11366,6 +11366,135 @@ td[colspan="2"]:has(img[alt="Admin"]) > font:first-of-type::before { line-height: 1 !important; } +/* ========== Formulario "ADD NEW QUEUE GROUP" (solo este componente) ========== */ + +/* Contenedor principal del formulario (tabla 850px dentro del área de contenido admin) */ +body:has(input[type="hidden"][name="ADD"][value="298111111111"]) 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 */ +body:has(input[type="hidden"][name="ADD"][value="298111111111"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] { + background: #f8fafc !important; +} + +body:has(input[type="hidden"][name="ADD"][value="298111111111"]) 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="ADD"][value="298111111111"]) 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 */ +body:has(input[type="hidden"][name="ADD"][value="298111111111"]) center > table[width="850"][cellspacing="3"] input[type="text"], +body:has(input[type="hidden"][name="ADD"][value="298111111111"]) 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="ADD"][value="298111111111"]) center > table[width="850"][cellspacing="3"] input[type="text"]:focus, +body:has(input[type="hidden"][name="ADD"][value="298111111111"]) 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.25) !important; +} + +/* Iconos de ayuda */ +body:has(input[type="hidden"][name="ADD"][value="298111111111"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* Botón SUBMIT más grande y con estilo pill */ +body:has(input[type="hidden"][name="ADD"][value="298111111111"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td[align="center"] 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: 12px !important; + font-weight: 600 !important; + text-transform: uppercase !important; + letter-spacing: 0.03em !important; + cursor: pointer !important; + box-shadow: 0 4px 10px rgba(15, 23, 42, 0.18) !important; + transition: background-color 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease !important; +} + +body:has(input[type="hidden"][name="ADD"][value="298111111111"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td[align="center"] input[type="submit"]:hover { + background-color: var(--color-primary-dark, #006b6b) !important; + transform: translateY(-1px) !important; + box-shadow: 0 6px 14px rgba(15, 23, 42, 0.22) !important; +} + +body:has(input[type="hidden"][name="ADD"][value="298111111111"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td[align="center"] input[type="submit"]:active { + transform: translateY(0) !important; + box-shadow: 0 3px 8px rgba(15, 23, 42, 0.18) !important; +} + +/* ========== Tabla "AVAILABLE TIMEZONES" (solo esta página) ========== */ + +/* Contenedor de la tabla de zonas horarias dentro de Admin */ +body:has(a[href="/vicidial/admin.php?ADD=999988"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + background: #ffffff !important; + border-radius: 12px !important; + border: 1px solid rgba(15, 23, 42, 0.08) !important; + box-shadow: 0 4px 14px rgba(15, 23, 42, 0.06) !important; + overflow: hidden !important; + font-family: Arial, Helvetica, sans-serif !important; +} + +/* Cabecera de la tabla */ +body:has(a[href="/vicidial/admin.php?ADD=999988"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#8EBCFD"] td { + padding: 8px 10px !important; + font-size: 12px !important; + font-weight: 600 !important; + color: #0f172a !important; + border-bottom: 1px solid rgba(15, 23, 42, 0.08) !important; +} + +/* Celdas de datos */ +body:has(a[href="/vicidial/admin.php?ADD=999988"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#B9CBFD"] td, +body:has(a[href="/vicidial/admin.php?ADD=999988"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#9BB9FB"] td { + padding: 6px 10px !important; + font-size: 11px !important; + color: #111827 !important; + border-bottom: 1px solid rgba(15, 23, 42, 0.04) !important; +} + +/* Texto interno más legible */ +body:has(a[href="/vicidial/admin.php?ADD=999988"]) center > table[width="850"][cellspacing="3"] font[size="1"] { + font-size: 11px !important; +} + +/* Hover suave por fila */ +body:has(a[href="/vicidial/admin.php?ADD=999988"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#B9CBFD"]:hover td, +body:has(a[href="/vicidial/admin.php?ADD=999988"]) center > table[width="850"][cellspacing="3"] tr[bgcolor="#9BB9FB"]:hover td { + background-color: rgba(0, 139, 139, 0.06) !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"] { @@ -11528,6 +11657,107 @@ body:has(input[type="hidden"][name="old_conf_exten"]) center > table[width="850" box-shadow: 0 1px 4px rgba(15, 23, 42, 0.15) !important; } +/* ========== Formulario "MODIFY SYSTEM SETTINGS" (solo este componente) ========== */ +/* Contenedor principal: tabla 900px cuando existe sounds_web_directory */ +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] { + background: #ffffff !important; + border-radius: 12px !important; + border: 1px solid rgba(0, 0, 0, 0.06) !important; + box-shadow: 0 4px 14px rgba(15, 23, 42, 0.08) !important; + padding: 14px 18px !important; + box-sizing: border-box !important; +} + +/* Filas alternas (distintos bg originales) */ +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] tr[bgcolor="#B6D3FC"], +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] tr[bgcolor="#8EBCFD"], +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] tr[bgcolor="#99FFCC"], +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] tr[bgcolor="#CCFFFF"] { + background: #f8fafc !important; +} + +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] tr[bgcolor] td { + padding: 6px 10px !important; + vertical-align: middle !important; +} + +/* Etiquetas de la primera columna */ +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][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; +} + +/* Campos de entrada y selects */ +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] input[type="text"], +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] select, +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] textarea { + border-radius: 6px !important; + border: 1px solid #cbd5e1 !important; + padding: 5px 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="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] input[type="text"]:focus, +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] select:focus, +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][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 */ +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] img[alt="HELP"] { + cursor: pointer !important; + margin-left: 6px !important; + vertical-align: middle !important; +} + +/* Enlaces dentro del formulario (versiones, Phone Codes, etc.) */ +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] a { + font-family: Arial, Helvetica, sans-serif !important; + font-size: 12px !important; + color: var(--color-primary-medium, #008b8b) !important; + text-decoration: none !important; +} + +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] a:hover { + text-decoration: underline !important; +} + +/* Botón SUBMIT principal de System Settings */ +body:has(input[type="hidden"][name="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] input[type="submit"][name="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="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] input[type="submit"][name="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="sounds_web_directory"]) center > table[width="900"][cellspacing="3"] input[type="submit"][name="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"] { @@ -12351,3 +12581,1764 @@ td[colspan="2"]:has(img[alt="Admin"]) > font:first-of-type::before { line-height: 1 !important; } +/* ========== Fila "Container Entry" (Settings Containers) ========== */ +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] tr:has(textarea[name="container_entry"]) { + background: #f8fafc !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] tr:has(textarea[name="container_entry"]) td { + padding: 8px 10px !important; + vertical-align: top !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] tr:has(textarea[name="container_entry"]) 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; + padding-top: 12px !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] textarea[name="container_entry"] { + border-radius: 6px !important; + border: 1px solid #cbd5e1 !important; + padding: 8px 10px !important; + font-family: Arial, Helvetica, sans-serif !important; + font-size: 12px !important; + color: #111827 !important; + background-color: #ffffff !important; + box-sizing: border-box !important; + resize: vertical !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] textarea[name="container_entry"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008b8b) !important; + box-shadow: 0 0 0 1px rgba(0, 139, 139, 0.25) !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] tr:has(textarea[name="container_entry"]) img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: top !important; + cursor: pointer !important; +} + +/* ========== MODIFY SETTINGS CONTAINER (tabla completa) ========== */ +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + overflow: hidden !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="container_notes"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; + min-width: 200px !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="container_notes"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] select[name="container_type"], +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} +body:has(textarea[name="container_entry"]) td[colspan="2"] > a[href*="DELETE THIS SETTINGS CONTAINER"] { + display: inline-block !important; + margin-top: 8px !important; + padding: 6px 12px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p2, 12px) !important; + color: var(--color-primary-dark, #2E7D7D) !important; + text-decoration: none !important; + border-radius: 6px !important; + background: var(--bg-decorative-2, rgba(0, 139, 139, 0.1)) !important; +} +body:has(textarea[name="container_entry"]) td[colspan="2"] > a[href*="DELETE THIS SETTINGS CONTAINER"]:hover { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(textarea[name="container_entry"]) td[colspan="2"] > a[href*="Admin changes to this settings container"] { + display: inline-block !important; + margin-top: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p2, 12px) !important; + color: var(--color-primary-medium, #008b8b) !important; + text-decoration: none !important; +} +body:has(textarea[name="container_entry"]) td[colspan="2"] > a[href*="Admin changes to this settings container"]:hover { + text-decoration: underline !important; +} +body:has(textarea[name="container_entry"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== ADD NEW SETTINGS CONTAINER ========== */ +/* Reemplazo del icono de imagen por Font Awesome */ +td[colspan="2"]:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) { + position: relative !important; +} +td[colspan="2"]:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) > img[src*="icon_settingscontainer"][alt="Settings Container"] { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +td[colspan="2"]:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) > font:first-of-type { + display: inline-flex !important; + align-items: center !important; + gap: 10px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-h1, 14px) !important; + font-weight: 600 !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +td[colspan="2"]:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) > font:first-of-type::before { + content: "\f085" !important; + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 1.6rem !important; + color: var(--color-primary-medium, #008b8b) !important; + line-height: 1 !important; +} + +/* Tabla y campos del formulario ADD NEW SETTINGS CONTAINER */ +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} + +/* Inputs y selects con borde usando variables de :root */ +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="container_id"], +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="container_notes"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="container_id"]:focus, +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="container_notes"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] select[name="container_type"], +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} + +/* Botón SUBMIT coherente con la paleta global */ +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} + +/* Iconos de ayuda como pequeños botones clicables */ +body:has(img[src*="icon_settingscontainer"][alt="Settings Container"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== ADD NEW VM MESSAGE GROUP ========== */ +/* Reemplazo del icono de imagen por Font Awesome */ +td[colspan="2"]:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) { + position: relative !important; +} +td[colspan="2"]:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) > img[src*="icon_vm_messages"][alt="VM Message Groups"] { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +td[colspan="2"]:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) > font:first-of-type { + display: inline-flex !important; + align-items: center !important; + gap: 10px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-h1, 14px) !important; + font-weight: 600 !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +td[colspan="2"]:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) > font:first-of-type::before { + content: "\f0a1" !important; + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 1.6rem !important; + color: var(--color-primary-medium, #008b8b) !important; + line-height: 1 !important; +} + +/* Tabla y campos del formulario ADD NEW VM MESSAGE GROUP */ +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} + +/* Inputs y selects con borde usando variables de :root */ +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="leave_vm_message_group_id"], +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="leave_vm_message_group_notes"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="leave_vm_message_group_id"]:focus, +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="leave_vm_message_group_notes"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] select[name="active"], +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} + +/* Botón SUBMIT coherente con la paleta global */ +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} + +/* Iconos HELP en este formulario */ +body:has(img[src*="icon_vm_messages"][alt="VM Message Groups"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== INBOUND SECTION (iconos) ========== */ +/* Título principal "Inbound" - reemplazar imagen por icono Font Awesome */ +td[colspan="2"]:has(img[src*="icon_black_inbound"][alt="Inbound"]) { + position: relative !important; +} +td[colspan="2"]:has(img[src*="icon_black_inbound"][alt="Inbound"]) > img[src*="icon_black_inbound"][alt="Inbound"] { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +td[colspan="2"]:has(img[src*="icon_black_inbound"][alt="Inbound"]) > font:first-of-type { + display: inline-flex !important; + align-items: center !important; + gap: 10px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-h1, 14px) !important; + font-weight: 600 !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +td[colspan="2"]:has(img[src*="icon_black_inbound"][alt="Inbound"]) > font:first-of-type::before { + content: "\f095" !important; /* icono teléfono para sección Inbound */ + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 1.6rem !important; + color: var(--color-primary-medium, #008b8b) !important; + line-height: 1 !important; +} + +/* Iconos grandes (42x42) de cada bloque de menú Inbound */ +td[colspan="2"]:has(img[alt="Inbound"]) 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; + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; +} +td[colspan="2"]:has(img[alt="Inbound"]) table[width="800"] .adminmenu_style_selected td:first-child a img[width="42"][height="42"] { + 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="Inbound"]) 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: var(--color-primary-medium, #008b8b) !important; + line-height: 1 !important; +} +/* Mapeo de iconos por imagen en la sección Inbound */ +td[colspan="2"]:has(img[alt="Inbound"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_black_inbound"]) a::before { content: "\f0e0" !important; } /* grupos inbound */ +td[colspan="2"]:has(img[alt="Inbound"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_cidgroups"]) a::before { content: "\f2c2" !important; } /* DIDs */ +td[colspan="2"]:has(img[alt="Inbound"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_callmenu"]) a::before { content: "\f03a" !important; } /* call menus */ +td[colspan="2"]:has(img[alt="Inbound"]) table[width="800"] .adminmenu_style_selected td:first-child:has(img[src*="icon_filterphonegroup"]) a::before { content: "\f0b0" !important; } /* filter phone groups */ + +/* ========== ADD NEW VOICEMAIL BOX ========== */ +/* Reemplazo del icono de imagen por Font Awesome */ +td[colspan="2"]:has(img[src*="icon_voicemail"][alt="Voicemail"]) { + position: relative !important; +} +td[colspan="2"]:has(img[src*="icon_voicemail"][alt="Voicemail"]) > img[src*="icon_voicemail"][alt="Voicemail"] { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +td[colspan="2"]:has(img[src*="icon_voicemail"][alt="Voicemail"]) > font:first-of-type { + display: inline-flex !important; + align-items: center !important; + gap: 10px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-h1, 14px) !important; + font-weight: 600 !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +td[colspan="2"]:has(img[src*="icon_voicemail"][alt="Voicemail"]) > font:first-of-type::before { + content: "\f2a0" !important; /* icono de buzón de voz */ + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 1.6rem !important; + color: var(--color-primary-medium, #008b8b) !important; + line-height: 1 !important; +} + +/* Tabla y campos del formulario ADD NEW VOICEMAIL BOX */ +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} + +/* Inputs y selects con borde usando variables de :root */ +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="voicemail_id"], +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="pass"], +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="fullname"], +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="email"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="voicemail_id"]:focus, +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="pass"]:focus, +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="fullname"]:focus, +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="email"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] select[name="active"], +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} + +/* Botón SUBMIT coherente con la paleta global */ +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} + +/* Iconos HELP en este formulario */ +body:has(img[src*="icon_voicemail"][alt="Voicemail"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== ADD NEW CID GROUP ========== */ +/* Reemplazo del icono de imagen por Font Awesome */ +td[colspan="2"]:has(img[src*="icon_cidgroups"][alt="CID Groups"]) { + position: relative !important; +} +td[colspan="2"]:has(img[src*="icon_cidgroups"][alt="CID Groups"]) > img[src*="icon_cidgroups"][alt="CID Groups"] { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +td[colspan="2"]:has(img[src*="icon_cidgroups"][alt="CID Groups"]) > font:first-of-type { + display: inline-flex !important; + align-items: center !important; + gap: 10px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-h1, 14px) !important; + font-weight: 600 !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +td[colspan="2"]:has(img[src*="icon_cidgroups"][alt="CID Groups"]) > font:first-of-type::before { + content: "\f2c2" !important; /* icono de grupo/contactos */ + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 1.6rem !important; + color: var(--color-primary-medium, #008b8b) !important; + line-height: 1 !important; +} + +/* Tabla y campos del formulario ADD NEW CID GROUP */ +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} + +/* Inputs y selects con borde usando variables de :root */ +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="cid_group_id"], +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="cid_group_notes"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="cid_group_id"]:focus, +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="cid_group_notes"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] select[name="cid_group_type"], +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} + +/* Botón SUBMIT coherente con la paleta global */ +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} + +/* Iconos HELP en este formulario */ +body:has(img[src*="icon_cidgroups"][alt="CID Groups"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== ADD NEW STATUSES GROUP ========== */ +/* Reemplazo del icono de imagen por Font Awesome */ +td[colspan="2"]:has(img[src*="icon_statusgroups"][alt="Status Groups"]) { + position: relative !important; +} +td[colspan="2"]:has(img[src*="icon_statusgroups"][alt="Status Groups"]) > img[src*="icon_statusgroups"][alt="Status Groups"] { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +td[colspan="2"]:has(img[src*="icon_statusgroups"][alt="Status Groups"]) > font:first-of-type { + display: inline-flex !important; + align-items: center !important; + gap: 10px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-h1, 14px) !important; + font-weight: 600 !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +td[colspan="2"]:has(img[src*="icon_statusgroups"][alt="Status Groups"]) > font:first-of-type::before { + content: "\f247" !important; /* icono de grupo/estados */ + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 1.6rem !important; + color: var(--color-primary-medium, #008b8b) !important; + line-height: 1 !important; +} + +/* Tabla y campos del formulario ADD NEW STATUSES GROUP */ +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} + +/* Inputs y selects con borde usando variables de :root */ +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="status_group_id"], +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="status_group_notes"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="status_group_id"]:focus, +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="status_group_notes"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} + +/* Botón SUBMIT coherente con la paleta global */ +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} + +/* Iconos HELP en este formulario */ +body:has(img[src*="icon_statusgroups"][alt="Status Groups"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== ADD NEW STATE CALL TIME (HOLIDAYS) ========== */ +/* Reemplazo del icono de imagen por Font Awesome */ +td[colspan="2"]:has(img[src*="icon_calltimes"][alt="Holidays"]) { + position: relative !important; +} +td[colspan="2"]:has(img[src*="icon_calltimes"][alt="Holidays"]) > img[src*="icon_calltimes"][alt="Holidays"] { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +td[colspan="2"]:has(img[src*="icon_calltimes"][alt="Holidays"]) > font:first-of-type { + display: inline-flex !important; + align-items: center !important; + gap: 10px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-h1, 14px) !important; + font-weight: 600 !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +td[colspan="2"]:has(img[src*="icon_calltimes"][alt="Holidays"]) > font:first-of-type::before { + content: "\f133" !important; /* icono calendario */ + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 1.6rem !important; + color: var(--color-primary-medium, #008b8b) !important; + line-height: 1 !important; +} + +/* Tabla y campos del formulario ADD NEW STATE CALL TIME (Holiday Definition) */ +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} + +/* Inputs y selects con borde usando variables de :root */ +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="holiday_id"], +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="holiday_name"], +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="holiday_comments"], +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="holiday_date"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="holiday_id"]:focus, +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="holiday_name"]:focus, +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="holiday_comments"]:focus, +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="holiday_date"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} + +/* Botón SUBMIT coherente con la paleta global */ +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="SUBMIT"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="SUBMIT"]:hover { + background: var(--color-primary-dark, #2D2D7D) !important; +} + +/* Iconos HELP en este formulario */ +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* Icono de calendario (cal.gif) reemplazado por Font Awesome */ +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] img.tcalIcon { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] td[align="left"]:has(#holiday_date) { + position: relative !important; +} +body:has(img[src*="icon_calltimes"][alt="Holidays"]) center > table[width="850"][cellspacing="3"] td[align="left"]:has(#holiday_date)::after { + content: "\f133" !important; + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 1.1rem !important; + color: var(--color-primary-medium, #008b8b) !important; + position: absolute !important; + top: 50% !important; + transform: translateY(-50%) !important; + margin-left: 8px !important; +} + +/* ========== ADD A NEW GROUP ALIAS (Phones) ========== */ +/* Reemplazo del icono de imagen por Font Awesome */ +td[colspan="2"]:has(img[src*="icon_phones"][alt="Phones"]) { + position: relative !important; +} +td[colspan="2"]:has(img[src*="icon_phones"][alt="Phones"]) > img[src*="icon_phones"][alt="Phones"] { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +td[colspan="2"]:has(img[src*="icon_phones"][alt="Phones"]) > font:first-of-type { + display: inline-flex !important; + align-items: center !important; + gap: 10px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-h1, 14px) !important; + font-weight: 600 !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +td[colspan="2"]:has(img[src*="icon_phones"][alt="Phones"]) > font:first-of-type::before { + content: "\f095" !important; /* icono teléfono */ + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 1.6rem !important; + color: var(--color-primary-medium, #008b8b) !important; + line-height: 1 !important; +} + +/* Tabla y campos del formulario ADD A NEW GROUP ALIAS */ +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} + +/* Inputs y selects con borde usando variables de :root */ +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="group_alias_id"], +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="group_alias_name"], +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="caller_id_number"], +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="caller_id_name"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="group_alias_id"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="group_alias_name"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="caller_id_number"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="caller_id_name"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] select[name="active"], +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} + +/* Botón SUBMIT coherente con la paleta global */ +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} + +/* Iconos HELP en este formulario */ +body:has(img[src*="icon_phones"][alt="Phones"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== ADD A NEW PHONE (mismo icono Phones, form con extension) ========== */ +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="extension"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="dialplan_number"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="voicemail_id"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="outbound_cid"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="login"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="pass"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="conf_secret"]), +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="phone_type"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="fullname"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="text"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[name="conf_secret"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] select[name="user_group"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] select[name="server_ip"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] select[name="status"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] select[name="active"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] select[name="protocol"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] select[name="local_gmt"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="extension"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== ADD A NEW PHONE ALIAS (form con alias_id) ========== */ +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="alias_id"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="alias_name"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="logins_list"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="alias_id"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="alias_name"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="logins_list"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="alias_id"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== COPY A PHONE (form con new_extension) ========== */ +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} + +/* Inputs y selects con borde usando variables de :root */ +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_extension"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_dialplan_number"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_voicemail_id"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_outbound_cid"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_login"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_pass"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_conf_secret"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_fullname"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_extension"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_dialplan_number"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_voicemail_id"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_outbound_cid"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_login"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_pass"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_conf_secret"]:focus, +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="new_fullname"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] select[name="new_server_ip"], +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] select[name="source_phone"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 220px !important; +} + +/* Botón SUBMIT coherente con la paleta global */ +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="SUBMIT"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="SUBMIT"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} + +/* Iconos HELP en este formulario */ +body:has(img[src*="icon_phones"][alt="Phones"]):has(input[name="new_extension"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== ADD NEW CONF TEMPLATE (Templates) ========== */ +/* Reemplazo del icono de imagen por Font Awesome */ +td[colspan="2"]:has(img[src*="icon_templates"][alt="Templates"]) { + position: relative !important; +} +td[colspan="2"]:has(img[src*="icon_templates"][alt="Templates"]) > img[src*="icon_templates"][alt="Templates"] { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +td[colspan="2"]:has(img[src*="icon_templates"][alt="Templates"]) > font:first-of-type { + display: inline-flex !important; + align-items: center !important; + gap: 10px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-h1, 14px) !important; + font-weight: 600 !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +td[colspan="2"]:has(img[src*="icon_templates"][alt="Templates"]) > font:first-of-type::before { + content: "\f5fd" !important; /* icono de plantilla/documento */ + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 1.6rem !important; + color: var(--color-primary-medium, #008b8b) !important; + line-height: 1 !important; +} + +/* Tabla y campos del formulario ADD NEW CONF TEMPLATE */ +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} + +/* Inputs y selects con borde usando variables de :root */ +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="template_id"], +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="template_name"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="template_id"]:focus, +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] input[type="text"][name="template_name"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} + +/* Textarea de contenido de plantilla */ +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] textarea[name="template_contents"] { + border-radius: 6px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + padding: 8px 10px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: 12px !important; + color: var(--color-text-dark, #2D2D2D) !important; + background-color: #ffffff !important; + box-sizing: border-box !important; + resize: vertical !important; + min-height: 180px !important; +} +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] textarea[name="template_contents"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; + background-color: var(--color-bg-lighter, #E0F7FA) !important; +} + +/* Botón SUBMIT coherente con la paleta global */ +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} + +/* Iconos HELP en este formulario */ +body:has(img[src*="icon_templates"][alt="Templates"]) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} + +/* ========== MODIFY SETTINGS CONTAINER (READ_ONLY: sin textarea, con pre) ========== */ +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] { + border-collapse: separate !important; + border-spacing: 0 !important; + border-radius: 8px !important; + overflow: hidden !important; + background-color: var(--color-bg-white, #ffffff) !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] tr { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] tr td { + padding: 10px 14px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] tr td[align="right"] { + font-weight: 600 !important; + width: 1% !important; + white-space: nowrap !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] input[type="text"][name="container_notes"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; + min-width: 200px !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] input[type="text"][name="container_notes"]:focus { + outline: none !important; + border-color: var(--color-primary-medium, #008B8B) !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] select[name="container_type"], +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] select[name="user_group"] { + padding: 6px 10px !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + min-width: 180px !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"] { + padding: 8px 20px !important; + background: var(--color-primary-medium, #008B8B) !important; + border: none !important; + border-radius: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 600 !important; + color: var(--color-text-light, #ffffff) !important; + cursor: pointer !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] input[type="submit"][name="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) td[colspan="2"] > a[href*="DELETE THIS SETTINGS CONTAINER"] { + display: inline-block !important; + margin-top: 8px !important; + padding: 6px 12px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p2, 12px) !important; + color: var(--color-primary-dark, #2E7D7D) !important; + text-decoration: none !important; + border-radius: 6px !important; + background: var(--bg-decorative-2, rgba(0, 139, 139, 0.1)) !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) td[colspan="2"] > a[href*="DELETE THIS SETTINGS CONTAINER"]:hover { + background: var(--bg-decorative-1, rgba(32, 178, 170, 0.1)) !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) td[colspan="2"] > a[href*="Admin changes to this settings container"] { + display: inline-block !important; + margin-top: 6px !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p2, 12px) !important; + color: var(--color-primary-medium, #008b8b) !important; + text-decoration: none !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) td[colspan="2"] > a[href*="Admin changes to this settings container"]:hover { + text-decoration: underline !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] img[alt="HELP"] { + margin-left: 6px !important; + vertical-align: middle !important; + cursor: pointer !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] tr:has(pre) td { + vertical-align: top !important; +} +body:has(input[name="container_notes"]):has(center > table[width="850"][cellspacing="3"]):not(:has(textarea[name="container_entry"])) center > table[width="850"][cellspacing="3"] pre { + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: 12px !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-lighter, #E0F7FA) !important; + padding: 10px 12px !important; + border-radius: 6px !important; + margin: 0 !important; + white-space: pre-wrap !important; +} + +/* ========== REAL-TIME HEADER: convertir barra superior en sidebar (AST_timeonVDAD.php y similares) ========== */ +/* Solo páginas que tienen una tabla simple azul (#015B91) y NO el layout de admin con sidebar 170px */ +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) { + display: flex !important; + align-items: flex-start !important; + margin: 0 !important; + padding: 0 !important; + background: var(--color-bg-white, #ffffff) !important; + box-sizing: border-box !important; +} + +/* Sidebar a la izquierda: la primera tabla azul se convierte en columna vertical */ +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] { + display: block !important; + width: 190px !important; + min-width: 190px !important; + max-width: 190px !important; + background: var(--color-bg-white, #ffffff) !important; + border-right: none !important; + + box-sizing: border-box !important; + flex-shrink: 0 !important; + overflow: visible !important; +} + +/* Contenido principal (tabla del reporte) a la derecha */ +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="4"][cellspacing="0"] { + display: block !important; + flex: 1 !important; + min-width: 0 !important; + margin-left: 12px !important; + margin-top: 0 !important; + width: auto !important; +} + +/* Fila de navegación convertida en columna */ +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody > tr { + display: block !important; +} + +/* Cada celda se apila en vertical */ +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody > tr > td { + display: block !important; + padding: 6px 0 !important; + background: transparent !important; + border: none !important; + overflow: visible !important; + min-width: 0 !important; +} + +/* Logo en la parte superior del sidebar */ +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody > tr > td:first-child { + text-align: center !important; + +} +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody > tr > td:first-child a img { + display: block !important; + margin: 0 auto !important; + filter: none !important; + width: auto !important; + height: auto !important; + max-width: 70% !important; +} + +/* Botones de navegación (Reports, Users, Campaigns, etc.) con el mismo estilo que la sidebar .head_style */ +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody > tr > td:not(:first-child) a { + display: inline-flex !important; + align-items: center !important; + gap: 8px !important; + width: 100% !important; + max-width: 100% !important; + min-width: 0 !important; + padding: 10px 12px !important; + margin: 4px 0 !important; + background: var(--color-primary-light, #20B2AA) !important; + border: 2px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 8px !important; + text-decoration: none !important; + box-sizing: border-box !important; + overflow: visible !important; + color: var(--color-text-light, #ffffff) !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + font-weight: 500 !important; +} + +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody > tr > td:not(:first-child) a:hover { + background: var(--color-primary-medium, #008B8B) !important; + border-color: var(--color-primary-medium, #008B8B) !important; + transform: translateY(-2px) !important; + box-shadow: 0 4px 12px rgba(0, 139, 139, 0.25) !important; +} + +/* Texto de los botones */ +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody > tr > td:not(:first-child) a font { + color: var(--color-text-light, #ffffff) !important; + font-family: var(--font-family, Arial, Helvetica, sans-serif) !important; + font-size: var(--font-size-p1, 13px) !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow: visible !important; + text-overflow: clip !important; +} + +/* Iconos dentro de los botones */ +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"] tbody > tr > td:not(:first-child) a img { + width: 14px !important; + height: 14px !important; + filter: brightness(0) invert(1) !important; + margin: 0 !important; +} + +/* ========== REAL-TIME REPORT: tabla de contenido (pre con SERVER / Agents Time On Calls) ========== */ +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="4"][cellspacing="0"] { + background: var(--color-bg-white, #ffffff) !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 8px !important; + box-shadow: 0 2px 8px rgba(32, 178, 170, 0.12) !important; +} +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="4"][cellspacing="0"] td { + padding: 12px 16px !important; + background: var(--color-bg-lighter, #E0F7FA) !important; + border: none !important; +} +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="4"][cellspacing="0"] pre { + font-family: var(--font-family, monospace) !important; + font-size: var(--font-size-p2, 12px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 6px !important; + padding: 14px 16px !important; + margin: 0 !important; + overflow-x: auto !important; + line-height: 1.4 !important; +} +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="4"][cellspacing="0"] pre font { + color: var(--color-text-dark, #2D2D2D) !important; + font-size: inherit !important; +} +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="4"][cellspacing="0"] pre a { + color: var(--color-primary-medium, #008B8B) !important; + text-decoration: none !important; + font-weight: 500 !important; +} +body:has(table[cellpadding="0"][cellspacing="0"][bgcolor="#015B91"]):not(:has(table[bgcolor="white"][cellpadding="0"] td[width="170"][bgcolor="#015B91"])) > table[cellpadding="4"][cellspacing="0"] pre a:hover { + color: var(--color-primary-dark, #2E7D7D) !important; + text-decoration: underline !important; +} + +/* ========== MODIFY A USERS RECORD (admin user form, ADD=4A) ========== */ +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] { + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 8px !important; + background: var(--color-bg-white, #ffffff) !important; + overflow: hidden !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] td { + padding: 6px 10px !important; + font-family: var(--font-family, Arial, sans-serif) !important; + font-size: var(--font-size-p1, 14px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] tr[bgcolor="#B6D3FC"], +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] tr[bgcolor="#9BB9FB"], +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] tr[bgcolor="#B9CBFD"] { + background: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td, +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] tr[bgcolor="#9BB9FB"] td, +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] tr[bgcolor="#B9CBFD"] td { + background: var(--color-bg-lighter, #E0F7FA) !important; + border: none !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] tr[bgcolor="#015B91"] { + background: var(--color-bg-lighter, #E0F7FA) !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] tr[bgcolor="#015B91"] td { + background: var(--color-bg-lighter, #E0F7FA) !important; + color: var(--color-text-dark, #2D2D2D) !important; + font-weight: 600 !important; + padding: 8px 10px !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] tr[bgcolor="#015B91"] font { + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] input[type="text"], +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] input[type="password"], +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] select { + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 4px !important; + padding: 4px 8px !important; + font-family: var(--font-family, Arial, sans-serif) !important; + font-size: var(--font-size-p1, 14px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] input[type="submit"] { + background: var(--color-primary-medium, #008B8B) !important; + color: var(--color-text-light, #ffffff) !important; + border: 2px solid var(--color-primary-medium, #008B8B) !important; + border-radius: 6px !important; + padding: 8px 16px !important; + font-weight: 500 !important; + cursor: pointer !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] input[type="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; + border-color: var(--color-primary-dark, #2E7D7D) !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] a { + color: var(--color-text-dark, #2D2D2D) !important; + text-decoration: none !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] a:hover { + color: var(--color-primary-dark, #2E7D7D) !important; + text-decoration: underline !important; +} +body:has(form input[name="ADD"][value="4A"]) form table[width="980"][cellspacing="3"] tr[bgcolor="#015B91"] a { + color: var(--color-text-dark, #2D2D2D) !important; + text-decoration: underline !important; +} +body:has(form input[name="ADD"][value="4A"]) td[colspan="2"]:has(table) > table font[color="BLACK"], +body:has(form input[name="ADD"][value="4A"]) form font[color="BLACK"], +body:has(form input[name="ADD"][value="4A"]) form font[size="2"] { + color: var(--color-text-dark, #2D2D2D) !important; + font-family: var(--font-family, Arial, sans-serif) !important; + font-size: var(--font-size-p1, 14px) !important; +} +body:has(form input[name="ADD"][value="4A"]) td[colspan="2"] > table + table font, +body:has(form input[name="ADD"][value="4A"]) form br + a, +body:has(form input[name="ADD"][value="4A"]) form font a { + color: var(--color-text-dark, #2D2D2D) !important; + text-decoration: none !important; +} +body:has(form input[name="ADD"][value="4A"]) form font a:hover { + text-decoration: underline !important; + color: var(--color-primary-dark, #2E7D7D) !important; +} + +/* ========== ADD A NEW USER (admin form, ADD=2) ========== */ +body:has(form input[name="ADD"][value="2"]):has(img[src*="icon_black_users.png"]) td:has(img[alt="Users"]) { + position: relative !important; +} +body:has(form input[name="ADD"][value="2"]):has(img[src*="icon_black_users.png"]) td:has(img[alt="Users"]) img[src*="icon_black_users.png"] { + position: absolute !important; + width: 0 !important; + height: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + pointer-events: none !important; +} +body:has(form input[name="ADD"][value="2"]):has(img[src*="icon_black_users.png"]) td:has(img[alt="Users"])::before { + content: "\f0c0" !important; + font-family: "Font Awesome 6 Free VDC" !important; + font-weight: 900 !important; + font-size: 26px !important; + color: var(--color-primary-medium, #008B8B) !important; + margin-right: 8px !important; + vertical-align: middle !important; +} +body:has(form input[name="ADD"][value="2"]) form table[width="850"][cellspacing="3"] { + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 8px !important; + background: var(--color-bg-white, #ffffff) !important; + overflow: hidden !important; +} +body:has(form input[name="ADD"][value="2"]) form table[width="850"][cellspacing="3"] td { + padding: 6px 10px !important; + font-family: var(--font-family, Arial, sans-serif) !important; + font-size: var(--font-size-p1, 14px) !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(form input[name="ADD"][value="2"]) form table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"], +body:has(form input[name="ADD"][value="2"]) form table[width="850"][cellspacing="3"] tr[bgcolor="#B6D3FC"] td { + background: var(--color-bg-lighter, #E0F7FA) !important; + border: none !important; + color: var(--color-text-dark, #2D2D2D) !important; +} +body:has(form input[name="ADD"][value="2"]) form table[width="850"][cellspacing="3"] input[type="text"], +body:has(form input[name="ADD"][value="2"]) form table[width="850"][cellspacing="3"] select { + border: 1px solid var(--color-primary-light, #20B2AA) !important; + border-radius: 4px !important; + padding: 4px 8px !important; + font-family: var(--font-family, Arial, sans-serif) !important; + font-size: var(--font-size-p1, 14px) !important; + color: var(--color-text-dark, #2D2D2D) !important; + background: var(--color-bg-white, #ffffff) !important; +} +body:has(form input[name="ADD"][value="2"]) form table[width="850"][cellspacing="3"] input[type="button"], +body:has(form input[name="ADD"][value="2"]) form table[width="850"][cellspacing="3"] input[type="submit"] { + background: var(--color-primary-medium, #008B8B) !important; + color: var(--color-text-light, #ffffff) !important; + border: 2px solid var(--color-primary-medium, #008B8B) !important; + border-radius: 6px !important; + padding: 8px 16px !important; + font-weight: 500 !important; + cursor: pointer !important; +} +body:has(form input[name="ADD"][value="2"]) form table[width="850"][cellspacing="3"] input[type="button"]:hover, +body:has(form input[name="ADD"][value="2"]) form table[width="850"][cellspacing="3"] input[type="submit"]:hover { + background: var(--color-primary-dark, #2E7D7D) !important; + border-color: var(--color-primary-dark, #2E7D7D) !important; +} +body:has(form input[name="ADD"][value="2"]) td:has(img[alt="Users"]) font, +body:has(form input[name="ADD"][value="2"]) form font { + color: var(--color-text-dark, #2D2D2D) !important; + font-family: var(--font-family, Arial, sans-serif) !important; + font-size: var(--font-size-p1, 14px) !important; +} diff --git a/Custom/installer/install_custom_css.sh b/Custom/installer custom/install_custom_css.sh similarity index 90% rename from Custom/installer/install_custom_css.sh rename to Custom/installer custom/install_custom_css.sh index 453d73c..049cba8 100644 --- a/Custom/installer/install_custom_css.sh +++ b/Custom/installer custom/install_custom_css.sh @@ -17,6 +17,7 @@ # GUÍA DE INSTALACIÓN (también en custom.css al inicio): # 1. Import en vicidial_stylesheet.php (al inicio del CSS) para la mayoría de pantallas. # 2. Link en admin_header.php (antes de ) para pantallas que usan admin_header. +# 2b. Link en admin_header.php (bloque short_header) para reportes en tiempo real (AST_timeonVDAD.php, etc.). # 3. Link en VERM/VERM_admin.php (tras VERM_stylesheet.php) para la interfaz VERM admin. # 4. Link en VERM/VERM_wallboards.php (tras VERM_wallboard_stylesheet.php) para el wallboard. # 5. Link en VERM/VERM_custom_report.php (tras VERM_stylesheet.php) para el formulario de custom report. @@ -215,25 +216,57 @@ install_stylesheet_ref() { info "Añadido @import en vicidial_stylesheet.php" } +# Comprueba si el bloque short_header ya tiene el link a custom.css (p. ej. AST_timeonVDAD.php) +has_admin_header_short_ref() { + [[ ! -f "$ADMIN_HEADER" ]] && return 1 + local short_line + short_line=$(grep -n "LOGreports_header_override == 'LOGO_ONLY_SMALL'" "$ADMIN_HEADER" | head -1 | cut -d: -f1) + [[ -z "$short_line" ]] || [[ $short_line -le 1 ]] && return 1 + local prev_line + prev_line=$(sed -n "$((short_line - 1))p" "$ADMIN_HEADER") + [[ "$prev_line" == *"custom.css"* ]] +} + install_admin_header_ref() { - if installed_admin_header; then - info "admin_header.php: custom.css ya referenciado." - return 0 - fi if [[ ! -f "$ADMIN_HEADER" ]]; then warn "No existe: $ADMIN_HEADER" return 1 fi - save_pre_agc_backup "$ADMIN_HEADER" - local line_num - line_num=$(grep -n 'echo "' "$ADMIN_HEADER" | head -1 | cut -d: -f1) - [[ -n "$line_num" ]] || { error "No se encontró echo \"\" en admin_header.php"; return 1; } - local insert_line='echo "\n";' - head -n $((line_num - 1)) "$ADMIN_HEADER" > "${ADMIN_HEADER}.tmp" - echo "$insert_line" >> "${ADMIN_HEADER}.tmp" - tail -n +"$line_num" "$ADMIN_HEADER" >> "${ADMIN_HEADER}.tmp" - mv "${ADMIN_HEADER}.tmp" "$ADMIN_HEADER" - info "Añadido en admin_header.php" + + # 1) Añadir antes de si aún no hay ninguna referencia a custom.css + if ! grep -q "agc/css/custom.css" "$ADMIN_HEADER"; then + save_pre_agc_backup "$ADMIN_HEADER" + local line_num + line_num=$(grep -n 'echo "' "$ADMIN_HEADER" | head -1 | cut -d: -f1) + [[ -n "$line_num" ]] || { error "No se encontró echo \"\" en admin_header.php"; return 1; } + local insert_line='echo "\n";' + head -n $((line_num - 1)) "$ADMIN_HEADER" > "${ADMIN_HEADER}.tmp" + echo "$insert_line" >> "${ADMIN_HEADER}.tmp" + tail -n +"$line_num" "$ADMIN_HEADER" >> "${ADMIN_HEADER}.tmp" + mv "${ADMIN_HEADER}.tmp" "$ADMIN_HEADER" + info "Añadido en admin_header.php (antes de )" + else + info "admin_header.php: custom.css ya referenciado ()." + fi + + # 2) Añadir en el bloque short_header si falta (reportes en tiempo real, etc.) + if ! has_admin_header_short_ref; then + local short_line + short_line=$(grep -n "LOGreports_header_override == 'LOGO_ONLY_SMALL'" "$ADMIN_HEADER" | head -1 | cut -d: -f1) + if [[ -n "$short_line" ]]; then + if [[ ! -f "${ADMIN_HEADER}${BACKUP_SUFFIX}" ]]; then + save_pre_agc_backup "$ADMIN_HEADER" + fi + local insert_line=$'\t\t'"echo \"\\n\";" + head -n $((short_line - 1)) "$ADMIN_HEADER" > "${ADMIN_HEADER}.tmp" + echo "$insert_line" >> "${ADMIN_HEADER}.tmp" + tail -n +"$short_line" "$ADMIN_HEADER" >> "${ADMIN_HEADER}.tmp" + mv "${ADMIN_HEADER}.tmp" "$ADMIN_HEADER" + info "Añadido custom.css en admin_header.php (short header)" + fi + else + info "admin_header.php: custom.css ya referenciado (short header)." + fi } install_verm_ref() { @@ -615,8 +648,10 @@ restore_logos() { } # --- Placeholders en vicidial.php (Phone Login size=10) --- +# Comprueba que el input size=10 (primer login) tenga ya placeholder (compatible stock y variantes) has_placeholders() { - [[ -f "$VICIDIAL_PHP" ]] && grep -q 'placeholder=.*_QXZ.*Phone Login' "$VICIDIAL_PHP" + [[ -f "$VICIDIAL_PHP" ]] || return 1 + grep -q 'name=\\"phone_login\\" size=\\"10\\".*placeholder' "$VICIDIAL_PHP" } install_placeholders() { @@ -626,14 +661,16 @@ install_placeholders() { return 0 fi save_pre_agc_backup "$VICIDIAL_PHP" - sed -i '/name=\\"phone_login\\" size=\\"10\\"/s/ value=\\"\\" \/>/ value=\\"\\" placeholder=\\""._QXZ("Phone Login")."\\" \/>/' "$VICIDIAL_PHP" - sed -i '/name=\\"phone_pass\\" size=\\"10\\"/s/ value=\\"\\" \/>/ value=\\"\\" placeholder=\\""._QXZ("Phone Password")."\\" \/>/' "$VICIDIAL_PHP" + # Permite 0 o más espacios entre value="" y /> (compatible con stock ViciDial) + sed -i '/name=\\"phone_login\\" size=\\"10\\"/s/ value=\\"\\" *\/>/ value=\\"\\" placeholder=\\""._QXZ("Phone Login")."\\" \/>/' "$VICIDIAL_PHP" + sed -i '/name=\\"phone_pass\\" size=\\"10\\"/s/ value=\\"\\" *\/>/ value=\\"\\" placeholder=\\""._QXZ("Phone Password")."\\" \/>/' "$VICIDIAL_PHP" info "Placeholders Phone Login añadidos en vicidial.php." } # --- Placeholders Re-Login (phone_login/phone_pass size=20) --- has_relogin_placeholders() { - [[ -f "$VICIDIAL_PHP" ]] && grep -q 'phone_login.*size="20".*placeholder' "$VICIDIAL_PHP" + [[ -f "$VICIDIAL_PHP" ]] || return 1 + grep -q 'name=\\"phone_login\\" size=\\"20\\".*placeholder' "$VICIDIAL_PHP" } install_relogin_placeholders() { @@ -643,14 +680,15 @@ install_relogin_placeholders() { return 0 fi [[ -f "${VICIDIAL_PHP}${BACKUP_SUFFIX}" ]] || save_pre_agc_backup "$VICIDIAL_PHP" - sed -i '/name=\\"phone_login\\" size=\\"20\\"/s/ value=\\"\$phone_login\\" \/>/ value=\\"\$phone_login\\" placeholder=\\""._QXZ("Phone Login")."\\" \/>/' "$VICIDIAL_PHP" - sed -i '/name=\\"phone_pass\\" size=\\"20\\"/s/ value=\\"\$phone_pass\\" \/>/ value=\\"\$phone_pass\\" placeholder=\\""._QXZ("Phone Password")."\\" \/>/' "$VICIDIAL_PHP" + sed -i '/name=\\"phone_login\\" size=\\"20\\"/s/ value=\\"\$phone_login\\" *\/>/ value=\\"\$phone_login\\" placeholder=\\""._QXZ("Phone Login")."\\" \/>/' "$VICIDIAL_PHP" + sed -i '/name=\\"phone_pass\\" size=\\"20\\"/s/ value=\\"\$phone_pass\\" *\/>/ value=\\"\$phone_pass\\" placeholder=\\""._QXZ("Phone Password")."\\" \/>/' "$VICIDIAL_PHP" info "Placeholders Re-Login añadidos." } # --- Placeholders Campaign Login (VD_login/VD_pass) --- has_campaign_placeholders() { - [[ -f "$VICIDIAL_PHP" ]] && grep -q 'VD_login.*placeholder.*User Login' "$VICIDIAL_PHP" + [[ -f "$VICIDIAL_PHP" ]] || return 1 + grep -q 'name=\\"VD_login\\" size=\\"20\\".*placeholder' "$VICIDIAL_PHP" } install_campaign_placeholders() { @@ -660,8 +698,8 @@ install_campaign_placeholders() { return 0 fi [[ -f "${VICIDIAL_PHP}${BACKUP_SUFFIX}" ]] || save_pre_agc_backup "$VICIDIAL_PHP" - sed -i '/name=\\"VD_login\\" size=\\"20\\"/s/ value=\\"\$VD_login\\" \/>/ value=\\"\$VD_login\\" placeholder=\\""._QXZ("User Login")."\\" \/>/' "$VICIDIAL_PHP" - sed -i '/name=\\"VD_pass\\" size=\\"20\\"/s/ value=\\"\$VD_pass\\" \/>/ value=\\"\$VD_pass\\" placeholder=\\""._QXZ("User Password")."\\" \/>/' "$VICIDIAL_PHP" + sed -i '/name=\\"VD_login\\" size=\\"20\\"/s/ value=\\"\$VD_login\\" *\/>/ value=\\"\$VD_login\\" placeholder=\\""._QXZ("User Login")."\\" \/>/' "$VICIDIAL_PHP" + sed -i '/name=\\"VD_pass\\" size=\\"20\\"/s/ value=\\"\$VD_pass\\" *\/>/ value=\\"\$VD_pass\\" placeholder=\\""._QXZ("User Password")."\\" \/>/' "$VICIDIAL_PHP" info "Placeholders Campaign Login añadidos." }