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 @@
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Instalación ViciBox (dependencias + restore + express)
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m Perl:
+[0;32m[INFO][0m 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'.
+[0;32m[INFO][0m MariaDB instalado y en ejecución
+[0;32m[INFO][0m 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]
+[0;32m[INFO][0m PHP instalado
+[0;32m[INFO][0m 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'.
+[0;32m[INFO][0m Apache instalado y apuntando a /vicidial/welcome.php
+[0;32m[INFO][0m 5. Ejecutando restore.sh...
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Restauración de Vicibox
+[0;32m[INFO][0m ==========================================
+
+[0;32m[INFO][0m 1. Restaurando scripts de Vicibox...
+[0;32m[INFO][0m ✓ Scripts restaurados
+
+[0;32m[INFO][0m 2. Creando enlaces simbólicos...
+[0;32m[INFO][0m ✓ Enlaces simbólicos creados
+
+[0;32m[INFO][0m 3. Restaurando código fuente de ViciDial...
+[0;32m[INFO][0m ✓ Código fuente restaurado
+
+[0;32m[INFO][0m 4. Verificando instalación...
+[0;32m[INFO][0m ✓ Verificación completada sin errores
+
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Restauración completada!
+[0;32m[INFO][0m ==========================================
+
+[0;32m[INFO][0m Ahora puedes ejecutar la instalación:
+
+ Para instalación Express (todo-en-uno):
+ vicibox-install --vicibox-express
+
+ Para instalación personalizada:
+ vicibox-install
+
+[0;32m[INFO][0m 6. Aplicando parches a vicibox-install.pl (socket MySQL, random_pass, etc.)...
+[0;32m[INFO][0m Copiado vicibox-install.pl con parches desde patches/
+[0;32m[INFO][0m 7. Ejecutando vicibox-install --vicibox-express (confirmación automática 'y')...
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m 8. /etc/astguiclient.conf no existe aún (normal si la instalación Express falló antes de crearlo).
+[0;32m[INFO][0m 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.
+[1;33m[WARN][0m No se pudo crear el usuario (¿base de datos ya instalada?). Puedes ejecutar después: sudo /home/backvicibox/create-admin-sapian.sh
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Proceso de instalación finalizado
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Log guardado en: /home/backvicibox/install-vicibox.log
+[0;32m[INFO][0m Comprueba el estado de servicios: systemctl status mariadb apache2
+[0;32m[INFO][0m Acceso web: http:///vicidial/welcome.php
+[0;32m[INFO][0m Admin ViciDial: usuario sapian, password sap64adm (admin.php)
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Instalación ViciBox (dependencias + restore + express)
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m Perl:
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m MariaDB instalado y en ejecución
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m PHP instalado
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m Apache instalado y apuntando a /vicidial/welcome.php
+[0;32m[INFO][0m 5. Ejecutando restore.sh...
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Restauración de Vicibox
+[0;32m[INFO][0m ==========================================
+
+[0;32m[INFO][0m 1. Restaurando scripts de Vicibox...
+[0;32m[INFO][0m ✓ Scripts restaurados
+
+[0;32m[INFO][0m 2. Creando enlaces simbólicos...
+[0;32m[INFO][0m ✓ Enlaces simbólicos creados
+
+[0;32m[INFO][0m 3. Restaurando código fuente de ViciDial...
+[0;32m[INFO][0m ✓ Código fuente restaurado
+
+[0;32m[INFO][0m 4. Verificando instalación...
+[0;32m[INFO][0m ✓ Verificación completada sin errores
+
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Restauración completada!
+[0;32m[INFO][0m ==========================================
+
+[0;32m[INFO][0m Ahora puedes ejecutar la instalación:
+
+ Para instalación Express (todo-en-uno):
+ vicibox-install --vicibox-express
+
+ Para instalación personalizada:
+ vicibox-install
+
+[0;32m[INFO][0m 6. Aplicando parches a vicibox-install.pl (socket MySQL, random_pass, etc.)...
+[0;32m[INFO][0m Copiado vicibox-install.pl con parches desde patches/
+[0;32m[INFO][0m 7. Ejecutando vicibox-install --vicibox-express (confirmación automática 'y')...
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m 8. /etc/astguiclient.conf no existe aún (normal si la instalación Express falló antes de crearlo).
+[0;32m[INFO][0m 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.
+[1;33m[WARN][0m No se pudo crear el usuario (¿base de datos ya instalada?). Puedes ejecutar después: sudo /home/backvicibox/create-admin-sapian.sh
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Proceso de instalación finalizado
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Log guardado en: /home/backvicibox/install-vicibox.log
+[0;32m[INFO][0m Comprueba el estado de servicios: systemctl status mariadb apache2
+[0;32m[INFO][0m Acceso web: http:///vicidial/welcome.php
+[0;32m[INFO][0m Admin ViciDial: usuario sapian, password sap64adm (admin.php)
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Instalación ViciBox (dependencias + restore + express)
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m Perl:
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m MariaDB instalado y en ejecución
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m PHP instalado
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m Apache instalado y apuntando a /vicidial/welcome.php
+[0;32m[INFO][0m 5. Ejecutando restore.sh...
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Restauración de Vicibox
+[0;32m[INFO][0m ==========================================
+
+[0;32m[INFO][0m 1. Restaurando scripts de Vicibox...
+[0;32m[INFO][0m ✓ Scripts restaurados
+
+[0;32m[INFO][0m 2. Creando enlaces simbólicos...
+[0;32m[INFO][0m ✓ Enlaces simbólicos creados
+
+[0;32m[INFO][0m 3. Restaurando código fuente de ViciDial...
+[0;32m[INFO][0m ✓ Código fuente restaurado
+
+[0;32m[INFO][0m 4. Verificando instalación...
+[0;32m[INFO][0m ✓ Verificación completada sin errores
+
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Restauración completada!
+[0;32m[INFO][0m ==========================================
+
+[0;32m[INFO][0m Ahora puedes ejecutar la instalación:
+
+ Para instalación Express (todo-en-uno):
+ vicibox-install --vicibox-express
+
+ Para instalación personalizada:
+ vicibox-install
+
+[0;32m[INFO][0m 6. Aplicando parches a vicibox-install.pl (socket MySQL, random_pass, etc.)...
+[0;32m[INFO][0m Copiado vicibox-install.pl con parches desde patches/
+[0;32m[INFO][0m 7. Ejecutando vicibox-install --vicibox-express (confirmación automática 'y')...
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m 8. /etc/astguiclient.conf no existe aún (normal si la instalación Express falló antes de crearlo).
+[0;32m[INFO][0m 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.
+[1;33m[WARN][0m No se pudo crear el usuario (¿base de datos ya instalada?). Puedes ejecutar después: sudo /home/backvicibox/create-admin-sapian.sh
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Proceso de instalación finalizado
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Log guardado en: /home/backvicibox/install-vicibox.log
+[0;32m[INFO][0m Comprueba el estado de servicios: systemctl status mariadb apache2
+[0;32m[INFO][0m Acceso web: http:///vicidial/welcome.php
+[0;32m[INFO][0m Admin ViciDial: usuario sapian, password sap64adm (admin.php)
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Instalación ViciBox (dependencias + restore + express)
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m perl-DBI, perl-DBD-mysql, perl-libwww-perl instalados
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m Perl:
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m MariaDB instalado y en ejecución
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m PHP instalado
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m Apache instalado y apuntando a /vicidial/welcome.php
+[0;32m[INFO][0m 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.
+[1;33m[WARN][0m Repo Asterisk no disponible. Instala manualmente: zypper ar .../home:vicidial:asterisk-18.repo && zypper in asterisk
+[0;32m[INFO][0m 5. Ejecutando restore.sh...
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Restauración de Vicibox
+[0;32m[INFO][0m ==========================================
+
+[0;32m[INFO][0m 1. Restaurando scripts de Vicibox...
+[0;32m[INFO][0m ✓ Scripts restaurados
+
+[0;32m[INFO][0m 2. Creando enlaces simbólicos...
+[0;32m[INFO][0m ✓ Enlaces simbólicos creados
+
+[0;32m[INFO][0m 3. Restaurando código fuente de ViciDial...
+[0;32m[INFO][0m ✓ Código fuente restaurado
+
+[0;32m[INFO][0m 4. Verificando instalación...
+[0;32m[INFO][0m ✓ Verificación completada sin errores
+
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Restauración completada!
+[0;32m[INFO][0m ==========================================
+
+[0;32m[INFO][0m Ahora puedes ejecutar la instalación:
+
+ Para instalación Express (todo-en-uno):
+ vicibox-install --vicibox-express
+
+ Para instalación personalizada:
+ vicibox-install
+
+[0;32m[INFO][0m 6. Aplicando parches a vicibox-install.pl (socket MySQL, random_pass, etc.)...
+[0;32m[INFO][0m Copiado vicibox-install.pl con parches desde patches/
+[0;32m[INFO][0m 7. Ejecutando vicibox-install --vicibox-express (confirmación automática 'y')...
+[0;32m[INFO][0m 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.
+[0;32m[INFO][0m 8. Configuración: VARDB_server => 127.0.0.1 en /etc/astguiclient.conf (para la web)
+[0;32m[INFO][0m 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.
+[1;33m[WARN][0m No se pudo crear el usuario (¿base de datos ya instalada?). Puedes ejecutar después: sudo /home/backvicibox/create-admin-sapian.sh
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Proceso de instalación finalizado
+[0;32m[INFO][0m ==========================================
+[0;32m[INFO][0m Log guardado en: /home/backvicibox/install-vicibox.log
+[0;32m[INFO][0m Comprueba el estado de servicios: systemctl status mariadb apache2 asterisk
+[0;32m[INFO][0m Acceso web: http:///vicidial/welcome.php
+[0;32m[INFO][0m 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."
}