{"id":15,"date":"2026-05-05T13:43:00","date_gmt":"2026-05-05T13:43:00","guid":{"rendered":"https:\/\/googlecumbia.metricavisual.com\/trending\/"},"modified":"2026-06-21T15:24:06","modified_gmt":"2026-06-21T15:24:06","slug":"tv-bolivia","status":"publish","type":"page","link":"https:\/\/googlecumbia.metricavisual.com\/?page_id=15","title":{"rendered":"BOLIVIA TV"},"content":{"rendered":"\n\u00ab`html\n<style>\n\/* ==========================================\n   REPRODUCTOR HLS GOOGLE CUMBIA\n========================================== *\/\n\n.gcp-tv-player,\n.gcp-tv-player * {\n    box-sizing: border-box;\n}\n\n.gcp-tv-player {\n    --gcp-accent: #ff5a00;\n    --gcp-bg: #090909;\n    --gcp-panel: #171717;\n\n    width: 100%;\n    max-width: 1200px;\n    margin: 24px auto;\n    padding: 18px;\n    overflow: hidden;\n    background:\n        radial-gradient(circle at top, rgba(255, 90, 0, 0.12), transparent 42%),\n        var(--gcp-panel);\n    border: 1px solid rgba(255, 255, 255, 0.08);\n    border-radius: 20px;\n    color: #fff;\n    font-family: Arial, sans-serif;\n    box-shadow: 0 16px 45px rgba(0, 0, 0, 0.35);\n}\n\n.gcp-tv-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 15px;\n    margin-bottom: 15px;\n}\n\n.gcp-tv-heading {\n    min-width: 0;\n}\n\n.gcp-tv-heading h2 {\n    margin: 0;\n    color: #fff;\n    font-size: clamp(20px, 3vw, 30px);\n    line-height: 1.2;\n}\n\n.gcp-tv-status {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin: 7px 0 0;\n    color: #bbb;\n    font-size: 14px;\n}\n\n.gcp-tv-status-dot {\n    width: 9px;\n    height: 9px;\n    flex: 0 0 9px;\n    background: #777;\n    border-radius: 50%;\n}\n\n.gcp-tv-status.is-live .gcp-tv-status-dot {\n    background: #21c45a;\n    box-shadow: 0 0 0 5px rgba(33, 196, 90, 0.14);\n}\n\n.gcp-tv-live-badge {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    flex: 0 0 auto;\n    padding: 8px 12px;\n    background: #d90000;\n    border-radius: 999px;\n    color: #fff;\n    font-size: 12px;\n    font-weight: 800;\n    letter-spacing: 0.7px;\n    text-transform: uppercase;\n}\n\n.gcp-tv-live-badge::before {\n    content: \"\";\n    width: 8px;\n    height: 8px;\n    background: #fff;\n    border-radius: 50%;\n    animation: gcp-live-pulse 1.3s ease-in-out infinite;\n}\n\n.gcp-tv-screen {\n    position: relative;\n    width: 100%;\n    overflow: hidden;\n    background: #000;\n    border-radius: 16px;\n    aspect-ratio: 16 \/ 9;\n}\n\n.gcp-tv-video {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background: #000;\n    object-fit: contain;\n}\n\n\/* Capa inicial y errores *\/\n.gcp-tv-overlay {\n    position: absolute;\n    inset: 0;\n    z-index: 5;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 24px;\n    background:\n        linear-gradient(rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0.78));\n    text-align: center;\n    transition:\n        opacity 0.25s ease,\n        visibility 0.25s ease;\n}\n\n.gcp-tv-overlay.is-hidden {\n    visibility: hidden;\n    opacity: 0;\n    pointer-events: none;\n}\n\n.gcp-tv-overlay-content {\n    width: min(100%, 520px);\n}\n\n.gcp-tv-overlay-icon {\n    display: block;\n    margin-bottom: 12px;\n    font-size: 48px;\n}\n\n.gcp-tv-overlay-title {\n    margin: 0 0 8px;\n    color: #fff;\n    font-size: clamp(21px, 4vw, 30px);\n}\n\n.gcp-tv-overlay-message {\n    margin: 0 0 18px;\n    color: #d4d4d4;\n    font-size: 15px;\n    line-height: 1.6;\n}\n\n.gcp-tv-start-button,\n.gcp-tv-retry-button {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 9px;\n    min-height: 48px;\n    padding: 12px 22px;\n    border: 0;\n    border-radius: 999px;\n    background: var(--gcp-accent);\n    color: #fff;\n    font-size: 15px;\n    font-weight: 800;\n    cursor: pointer;\n    transition:\n        transform 0.2s ease,\n        filter 0.2s ease;\n}\n\n.gcp-tv-start-button:hover,\n.gcp-tv-retry-button:hover {\n    transform: translateY(-2px);\n    filter: brightness(1.08);\n}\n\n\/* Cargando *\/\n.gcp-tv-loader {\n    display: none;\n    position: absolute;\n    inset: 0;\n    z-index: 4;\n    align-items: center;\n    justify-content: center;\n    pointer-events: none;\n}\n\n.gcp-tv-loader.is-visible {\n    display: flex;\n}\n\n.gcp-tv-spinner {\n    width: 52px;\n    height: 52px;\n    border: 5px solid rgba(255, 255, 255, 0.2);\n    border-top-color: var(--gcp-accent);\n    border-radius: 50%;\n    animation: gcp-spinner 0.8s linear infinite;\n}\n\n\/* Barra inferior informativa *\/\n.gcp-tv-info {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 14px;\n    margin-top: 14px;\n    padding: 12px 14px;\n    background: rgba(255, 255, 255, 0.04);\n    border-radius: 12px;\n}\n\n.gcp-tv-info-text {\n    min-width: 0;\n}\n\n.gcp-tv-info strong {\n    display: block;\n    margin-bottom: 4px;\n    color: #fff;\n}\n\n.gcp-tv-info small {\n    display: block;\n    overflow: hidden;\n    color: #aaa;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.gcp-tv-actions {\n    display: flex;\n    flex: 0 0 auto;\n    gap: 8px;\n}\n\n.gcp-tv-action {\n    min-height: 40px;\n    padding: 9px 13px;\n    border: 1px solid rgba(255, 255, 255, 0.14);\n    border-radius: 10px;\n    background: rgba(255, 255, 255, 0.06);\n    color: #fff;\n    font-weight: 700;\n    cursor: pointer;\n}\n\n.gcp-tv-action:hover {\n    background: rgba(255, 255, 255, 0.12);\n}\n\n@keyframes gcp-spinner {\n    to {\n        transform: rotate(360deg);\n    }\n}\n\n@keyframes gcp-live-pulse {\n    0%,\n    100% {\n        opacity: 1;\n    }\n\n    50% {\n        opacity: 0.35;\n    }\n}\n\n@media (max-width: 700px) {\n    .gcp-tv-player {\n        margin: 14px auto;\n        padding: 10px;\n        border-radius: 14px;\n    }\n\n    .gcp-tv-screen {\n        border-radius: 10px;\n    }\n\n    .gcp-tv-header {\n        align-items: flex-start;\n    }\n\n    .gcp-tv-info {\n        align-items: stretch;\n        flex-direction: column;\n    }\n\n    .gcp-tv-actions {\n        width: 100%;\n    }\n\n    .gcp-tv-action {\n        flex: 1;\n    }\n}\n<\/style>\n\n<section class=\"gcp-tv-player\" id=\"gcpTvPlayer\">\n    <div class=\"gcp-tv-header\">\n        <div class=\"gcp-tv-heading\">\n            <h2>Televisi\u00f3n en vivo<\/h2>\n\n            <p class=\"gcp-tv-status\" id=\"gcpTvStatus\">\n                <span class=\"gcp-tv-status-dot\"><\/span>\n                <span id=\"gcpTvStatusText\">Preparando se\u00f1al\u2026<\/span>\n            <\/p>\n        <\/div>\n\n        <span class=\"gcp-tv-live-badge\">En vivo<\/span>\n    <\/div>\n\n    <div class=\"gcp-tv-screen\" id=\"gcpTvScreen\">\n        <video\n            class=\"gcp-tv-video\"\n            id=\"gcpHlsVideo\"\n            controls\n            playsinline\n            preload=\"metadata\"\n            crossorigin=\"anonymous\"\n        ><\/video>\n\n        <div class=\"gcp-tv-loader\" id=\"gcpTvLoader\">\n            <span class=\"gcp-tv-spinner\"><\/span>\n        <\/div>\n\n        <div class=\"gcp-tv-overlay\" id=\"gcpTvOverlay\">\n            <div class=\"gcp-tv-overlay-content\">\n                <span class=\"gcp-tv-overlay-icon\" id=\"gcpTvOverlayIcon\">\u25b6<\/span>\n\n                <h3 class=\"gcp-tv-overlay-title\" id=\"gcpTvOverlayTitle\">\n                    Se\u00f1al de televisi\u00f3n\n                <\/h3>\n\n                <p class=\"gcp-tv-overlay-message\" id=\"gcpTvOverlayMessage\">\n                    Pulsa el bot\u00f3n para iniciar la transmisi\u00f3n en vivo.\n                <\/p>\n\n                <button\n                    type=\"button\"\n                    class=\"gcp-tv-start-button\"\n                    id=\"gcpTvStartButton\"\n                >\n                    \u25b6 Ver transmisi\u00f3n\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"gcp-tv-info\">\n        <div class=\"gcp-tv-info-text\">\n            <strong>Canal en vivo<\/strong>\n            <small id=\"gcpTvTechnicalStatus\">HLS \u00b7 Calidad autom\u00e1tica<\/small>\n        <\/div>\n\n        <div class=\"gcp-tv-actions\">\n            <button\n                type=\"button\"\n                class=\"gcp-tv-action\"\n                id=\"gcpTvReload\"\n            >\n                \u21bb Recargar\n            <\/button>\n\n            <button\n                type=\"button\"\n                class=\"gcp-tv-action\"\n                id=\"gcpTvFullscreen\"\n            >\n                \u26f6 Pantalla completa\n            <\/button>\n        <\/div>\n    <\/div>\n<\/section>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/hls.js@1\/dist\/hls.min.js\"><\/script>\n\n<script>\n(function () {\n    \"use strict\";\n\n    const STREAM_URL =\n        \"https:\/\/lbgo.bozztv.com\/ssh101\/ssh101\/tv2024\/chunks.m3u8?lb_backend_hint=6\";\n\n    const video = document.getElementById(\"gcpHlsVideo\");\n    const playerContainer = document.getElementById(\"gcpTvPlayer\");\n    const screen = document.getElementById(\"gcpTvScreen\");\n    const overlay = document.getElementById(\"gcpTvOverlay\");\n    const overlayIcon = document.getElementById(\"gcpTvOverlayIcon\");\n    const overlayTitle = document.getElementById(\"gcpTvOverlayTitle\");\n    const overlayMessage = document.getElementById(\"gcpTvOverlayMessage\");\n    const startButton = document.getElementById(\"gcpTvStartButton\");\n    const loader = document.getElementById(\"gcpTvLoader\");\n    const status = document.getElementById(\"gcpTvStatus\");\n    const statusText = document.getElementById(\"gcpTvStatusText\");\n    const technicalStatus = document.getElementById(\"gcpTvTechnicalStatus\");\n    const reloadButton = document.getElementById(\"gcpTvReload\");\n    const fullscreenButton = document.getElementById(\"gcpTvFullscreen\");\n\n    let hls = null;\n    let started = false;\n    let recoveryAttempts = 0;\n    const MAX_RECOVERY_ATTEMPTS = 3;\n\n    function setLoading(isLoading) {\n        loader.classList.toggle(\"is-visible\", isLoading);\n    }\n\n    function setStatus(message, isLive) {\n        statusText.textContent = message;\n        status.classList.toggle(\"is-live\", Boolean(isLive));\n    }\n\n    function hideOverlay() {\n        overlay.classList.add(\"is-hidden\");\n    }\n\n    function showOverlay(options) {\n        const config = Object.assign(\n            {\n                icon: \"\u26a0\",\n                title: \"No se pudo reproducir\",\n                message: \"La se\u00f1al no est\u00e1 disponible temporalmente.\",\n                button: \"Reintentar\"\n            },\n            options || {}\n        );\n\n        overlayIcon.textContent = config.icon;\n        overlayTitle.textContent = config.title;\n        overlayMessage.textContent = config.message;\n        startButton.textContent = config.button;\n        startButton.className = \"gcp-tv-retry-button\";\n        overlay.classList.remove(\"is-hidden\");\n    }\n\n    function destroyCurrentStream() {\n        if (hls) {\n            hls.destroy();\n            hls = null;\n        }\n\n        video.pause();\n        video.removeAttribute(\"src\");\n        video.load();\n    }\n\n    function tryPlay() {\n        const playPromise = video.play();\n\n        if (playPromise && typeof playPromise.catch === \"function\") {\n            playPromise.catch(function () {\n                \/*\n                 * El navegador puede bloquear el autoplay.\n                 * El usuario podr\u00e1 iniciar la reproducci\u00f3n con los controles.\n                 *\/\n                setStatus(\"Pulsa reproducir para comenzar\", false);\n                technicalStatus.textContent =\n                    \"La se\u00f1al est\u00e1 lista \u00b7 Autoplay bloqueado\";\n            });\n        }\n    }\n\n    function loadNativeHls() {\n        technicalStatus.textContent = \"HLS nativo \u00b7 Calidad autom\u00e1tica\";\n        video.src = STREAM_URL;\n\n        video.addEventListener(\n            \"loadedmetadata\",\n            function () {\n                setLoading(false);\n                setStatus(\"Se\u00f1al conectada\", true);\n                hideOverlay();\n                tryPlay();\n            },\n            { once: true }\n        );\n\n        video.addEventListener(\n            \"error\",\n            function () {\n                setLoading(false);\n                showOverlay({\n                    title: \"Error de reproducci\u00f3n\",\n                    message:\n                        \"El navegador no pudo abrir la se\u00f1al HLS nativa.\",\n                    button: \"Volver a intentar\"\n                });\n                setStatus(\"Se\u00f1al no disponible\", false);\n            },\n            { once: true }\n        );\n    }\n\n    function loadWithHlsJs() {\n        hls = new Hls({\n            enableWorker: true,\n            lowLatencyMode: true,\n            backBufferLength: 60,\n            maxBufferLength: 30,\n            maxMaxBufferLength: 60\n        });\n\n        technicalStatus.textContent =\n            \"hls.js \u00b7 Detectando calidad autom\u00e1ticamente\";\n\n        hls.loadSource(STREAM_URL);\n        hls.attachMedia(video);\n\n        hls.on(Hls.Events.MANIFEST_PARSED, function (event, data) {\n            recoveryAttempts = 0;\n            setLoading(false);\n            setStatus(\"Se\u00f1al conectada\", true);\n            hideOverlay();\n\n            const levels = data && data.levels ? data.levels.length : 0;\n\n            technicalStatus.textContent = levels > 1\n                ? \"HLS \u00b7 \" + levels + \" calidades disponibles\"\n                : \"HLS \u00b7 Calidad autom\u00e1tica\";\n\n            tryPlay();\n        });\n\n        hls.on(Hls.Events.LEVEL_SWITCHED, function (event, data) {\n            const level = hls.levels[data.level];\n\n            if (level && level.height) {\n                technicalStatus.textContent =\n                    \"HLS \u00b7 \" + level.height + \"p \u00b7 En vivo\";\n            }\n        });\n\n        hls.on(Hls.Events.ERROR, function (event, data) {\n            if (!data.fatal) {\n                return;\n            }\n\n            recoveryAttempts += 1;\n\n            if (recoveryAttempts > MAX_RECOVERY_ATTEMPTS) {\n                setLoading(false);\n                setStatus(\"Se\u00f1al interrumpida\", false);\n\n                showOverlay({\n                    title: \"Transmisi\u00f3n no disponible\",\n                    message:\n                        \"La se\u00f1al no respondi\u00f3 despu\u00e9s de varios intentos. Puede estar fuera de l\u00ednea o bloqueando la reproducci\u00f3n externa.\",\n                    button: \"Reintentar se\u00f1al\"\n                });\n\n                destroyCurrentStream();\n                return;\n            }\n\n            switch (data.type) {\n                case Hls.ErrorTypes.NETWORK_ERROR:\n                    setStatus(\"Reconectando se\u00f1al\u2026\", false);\n                    technicalStatus.textContent =\n                        \"Error de red \u00b7 Intentando reconectar\";\n                    hls.startLoad();\n                    break;\n\n                case Hls.ErrorTypes.MEDIA_ERROR:\n                    setStatus(\"Recuperando video\u2026\", false);\n                    technicalStatus.textContent =\n                        \"Error multimedia \u00b7 Recuperando\";\n                    hls.recoverMediaError();\n                    break;\n\n                default:\n                    destroyCurrentStream();\n                    startStream();\n                    break;\n            }\n        });\n    }\n\n    function startStream() {\n        destroyCurrentStream();\n\n        started = true;\n        recoveryAttempts = 0;\n\n        setLoading(true);\n        setStatus(\"Conectando con la se\u00f1al\u2026\", false);\n        technicalStatus.textContent = \"Cargando transmisi\u00f3n HLS\u2026\";\n\n        \/*\n         * Safari y algunos dispositivos Apple reproducen HLS\n         * directamente mediante la etiqueta video.\n         *\/\n        if (video.canPlayType(\"application\/vnd.apple.mpegurl\")) {\n            loadNativeHls();\n            return;\n        }\n\n        \/*\n         * Chrome, Edge, Firefox y muchos dispositivos Android\n         * utilizan hls.js mediante Media Source Extensions.\n         *\/\n        if (window.Hls && Hls.isSupported()) {\n            loadWithHlsJs();\n            return;\n        }\n\n        setLoading(false);\n        setStatus(\"Navegador incompatible\", false);\n\n        showOverlay({\n            icon: \"!\",\n            title: \"Navegador no compatible\",\n            message:\n                \"Este navegador no permite reproducir transmisiones HLS.\",\n            button: \"Intentar nuevamente\"\n        });\n    }\n\n    startButton.addEventListener(\"click\", function () {\n        startStream();\n    });\n\n    reloadButton.addEventListener(\"click\", function () {\n        startStream();\n    });\n\n    fullscreenButton.addEventListener(\"click\", function () {\n        if (document.fullscreenElement) {\n            document.exitFullscreen();\n            return;\n        }\n\n        if (screen.requestFullscreen) {\n            screen.requestFullscreen();\n        } else if (video.webkitEnterFullscreen) {\n            video.webkitEnterFullscreen();\n        }\n    });\n\n    video.addEventListener(\"waiting\", function () {\n        if (started) {\n            setLoading(true);\n            setStatus(\"Almacenando se\u00f1al\u2026\", false);\n        }\n    });\n\n    video.addEventListener(\"playing\", function () {\n        setLoading(false);\n        setStatus(\"Transmitiendo en vivo\", true);\n        hideOverlay();\n    });\n\n    video.addEventListener(\"pause\", function () {\n        if (!video.ended && video.currentTime > 0) {\n            setStatus(\"Transmisi\u00f3n pausada\", false);\n        }\n    });\n\n    video.addEventListener(\"ended\", function () {\n        setStatus(\"La transmisi\u00f3n termin\u00f3\", false);\n    });\n\n    window.addEventListener(\"beforeunload\", function () {\n        destroyCurrentStream();\n    });\n})();\n<\/script>\n\u00ab`\n\n\n\n\n<style>\n\/* ==========================================\n   REPRODUCTOR HLS GOOGLE CUMBIA\n========================================== *\/\n\n.gcp-tv-player,\n.gcp-tv-player * {\n    box-sizing: border-box;\n}\n\n.gcp-tv-player {\n    --gcp-accent: #ff5a00;\n    --gcp-bg: #090909;\n    --gcp-panel: #171717;\n\n    width: 100%;\n    max-width: 1200px;\n    margin: 24px auto;\n    padding: 18px;\n    overflow: hidden;\n    background:\n        radial-gradient(circle at top, rgba(255, 90, 0, 0.12), transparent 42%),\n        var(--gcp-panel);\n    border: 1px solid rgba(255, 255, 255, 0.08);\n    border-radius: 20px;\n    color: #fff;\n    font-family: Arial, sans-serif;\n    box-shadow: 0 16px 45px rgba(0, 0, 0, 0.35);\n}\n\n.gcp-tv-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 15px;\n    margin-bottom: 15px;\n}\n\n.gcp-tv-heading {\n    min-width: 0;\n}\n\n.gcp-tv-heading h2 {\n    margin: 0;\n    color: #fff;\n    font-size: clamp(20px, 3vw, 30px);\n    line-height: 1.2;\n}\n\n.gcp-tv-status {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin: 7px 0 0;\n    color: #bbb;\n    font-size: 14px;\n}\n\n.gcp-tv-status-dot {\n    width: 9px;\n    height: 9px;\n    flex: 0 0 9px;\n    background: #777;\n    border-radius: 50%;\n}\n\n.gcp-tv-status.is-live .gcp-tv-status-dot {\n    background: #21c45a;\n    box-shadow: 0 0 0 5px rgba(33, 196, 90, 0.14);\n}\n\n.gcp-tv-live-badge {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    flex: 0 0 auto;\n    padding: 8px 12px;\n    background: #d90000;\n    border-radius: 999px;\n    color: #fff;\n    font-size: 12px;\n    font-weight: 800;\n    letter-spacing: 0.7px;\n    text-transform: uppercase;\n}\n\n.gcp-tv-live-badge::before {\n    content: \"\";\n    width: 8px;\n    height: 8px;\n    background: #fff;\n    border-radius: 50%;\n    animation: gcp-live-pulse 1.3s ease-in-out infinite;\n}\n\n.gcp-tv-screen {\n    position: relative;\n    width: 100%;\n    overflow: hidden;\n    background: #000;\n    border-radius: 16px;\n    aspect-ratio: 16 \/ 9;\n}\n\n.gcp-tv-video {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background: #000;\n    object-fit: contain;\n}\n\n\/* Capa inicial y errores *\/\n.gcp-tv-overlay {\n    position: absolute;\n    inset: 0;\n    z-index: 5;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 24px;\n    background:\n        linear-gradient(rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0.78));\n    text-align: center;\n    transition:\n        opacity 0.25s ease,\n        visibility 0.25s ease;\n}\n\n.gcp-tv-overlay.is-hidden {\n    visibility: hidden;\n    opacity: 0;\n    pointer-events: none;\n}\n\n.gcp-tv-overlay-content {\n    width: min(100%, 520px);\n}\n\n.gcp-tv-overlay-icon {\n    display: block;\n    margin-bottom: 12px;\n    font-size: 48px;\n}\n\n.gcp-tv-overlay-title {\n    margin: 0 0 8px;\n    color: #fff;\n    font-size: clamp(21px, 4vw, 30px);\n}\n\n.gcp-tv-overlay-message {\n    margin: 0 0 18px;\n    color: #d4d4d4;\n    font-size: 15px;\n    line-height: 1.6;\n}\n\n.gcp-tv-start-button,\n.gcp-tv-retry-button {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 9px;\n    min-height: 48px;\n    padding: 12px 22px;\n    border: 0;\n    border-radius: 999px;\n    background: var(--gcp-accent);\n    color: #fff;\n    font-size: 15px;\n    font-weight: 800;\n    cursor: pointer;\n    transition:\n        transform 0.2s ease,\n        filter 0.2s ease;\n}\n\n.gcp-tv-start-button:hover,\n.gcp-tv-retry-button:hover {\n    transform: translateY(-2px);\n    filter: brightness(1.08);\n}\n\n\/* Cargando *\/\n.gcp-tv-loader {\n    display: none;\n    position: absolute;\n    inset: 0;\n    z-index: 4;\n    align-items: center;\n    justify-content: center;\n    pointer-events: none;\n}\n\n.gcp-tv-loader.is-visible {\n    display: flex;\n}\n\n.gcp-tv-spinner {\n    width: 52px;\n    height: 52px;\n    border: 5px solid rgba(255, 255, 255, 0.2);\n    border-top-color: var(--gcp-accent);\n    border-radius: 50%;\n    animation: gcp-spinner 0.8s linear infinite;\n}\n\n\/* Barra inferior informativa *\/\n.gcp-tv-info {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 14px;\n    margin-top: 14px;\n    padding: 12px 14px;\n    background: rgba(255, 255, 255, 0.04);\n    border-radius: 12px;\n}\n\n.gcp-tv-info-text {\n    min-width: 0;\n}\n\n.gcp-tv-info strong {\n    display: block;\n    margin-bottom: 4px;\n    color: #fff;\n}\n\n.gcp-tv-info small {\n    display: block;\n    overflow: hidden;\n    color: #aaa;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.gcp-tv-actions {\n    display: flex;\n    flex: 0 0 auto;\n    gap: 8px;\n}\n\n.gcp-tv-action {\n    min-height: 40px;\n    padding: 9px 13px;\n    border: 1px solid rgba(255, 255, 255, 0.14);\n    border-radius: 10px;\n    background: rgba(255, 255, 255, 0.06);\n    color: #fff;\n    font-weight: 700;\n    cursor: pointer;\n}\n\n.gcp-tv-action:hover {\n    background: rgba(255, 255, 255, 0.12);\n}\n\n@keyframes gcp-spinner {\n    to {\n        transform: rotate(360deg);\n    }\n}\n\n@keyframes gcp-live-pulse {\n    0%,\n    100% {\n        opacity: 1;\n    }\n\n    50% {\n        opacity: 0.35;\n    }\n}\n\n@media (max-width: 700px) {\n    .gcp-tv-player {\n        margin: 14px auto;\n        padding: 10px;\n        border-radius: 14px;\n    }\n\n    .gcp-tv-screen {\n        border-radius: 10px;\n    }\n\n    .gcp-tv-header {\n        align-items: flex-start;\n    }\n\n    .gcp-tv-info {\n        align-items: stretch;\n        flex-direction: column;\n    }\n\n    .gcp-tv-actions {\n        width: 100%;\n    }\n\n    .gcp-tv-action {\n        flex: 1;\n    }\n}\n<\/style>\n\n<section class=\"gcp-tv-player\" id=\"gcpTvPlayer\">\n    <div class=\"gcp-tv-header\">\n        <div class=\"gcp-tv-heading\">\n            <h2>Televisi\u00f3n en vivo<\/h2>\n\n            <p class=\"gcp-tv-status\" id=\"gcpTvStatus\">\n                <span class=\"gcp-tv-status-dot\"><\/span>\n                <span id=\"gcpTvStatusText\">Preparando se\u00f1al\u2026<\/span>\n            <\/p>\n        <\/div>\n\n        <span class=\"gcp-tv-live-badge\">En vivo<\/span>\n    <\/div>\n\n    <div class=\"gcp-tv-screen\" id=\"gcpTvScreen\">\n        <video\n            class=\"gcp-tv-video\"\n            id=\"gcpHlsVideo\"\n            controls\n            playsinline\n            preload=\"metadata\"\n            crossorigin=\"anonymous\"\n        ><\/video>\n\n        <div class=\"gcp-tv-loader\" id=\"gcpTvLoader\">\n            <span class=\"gcp-tv-spinner\"><\/span>\n        <\/div>\n\n        <div class=\"gcp-tv-overlay\" id=\"gcpTvOverlay\">\n            <div class=\"gcp-tv-overlay-content\">\n                <span class=\"gcp-tv-overlay-icon\" id=\"gcpTvOverlayIcon\">\u25b6<\/span>\n\n                <h3 class=\"gcp-tv-overlay-title\" id=\"gcpTvOverlayTitle\">\n                    Se\u00f1al de televisi\u00f3n\n                <\/h3>\n\n                <p class=\"gcp-tv-overlay-message\" id=\"gcpTvOverlayMessage\">\n                    Pulsa el bot\u00f3n para iniciar la transmisi\u00f3n en vivo.\n                <\/p>\n\n                <button\n                    type=\"button\"\n                    class=\"gcp-tv-start-button\"\n                    id=\"gcpTvStartButton\"\n                >\n                    \u25b6 Ver transmisi\u00f3n\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"gcp-tv-info\">\n        <div class=\"gcp-tv-info-text\">\n            <strong>Canal en vivo<\/strong>\n            <small id=\"gcpTvTechnicalStatus\">HLS \u00b7 Calidad autom\u00e1tica<\/small>\n        <\/div>\n\n        <div class=\"gcp-tv-actions\">\n            <button\n                type=\"button\"\n                class=\"gcp-tv-action\"\n                id=\"gcpTvReload\"\n            >\n                \u21bb Recargar\n            <\/button>\n\n            <button\n                type=\"button\"\n                class=\"gcp-tv-action\"\n                id=\"gcpTvFullscreen\"\n            >\n                \u26f6 Pantalla completa\n            <\/button>\n        <\/div>\n    <\/div>\n<\/section>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/hls.js@1\/dist\/hls.min.js\"><\/script>\n\n<script>\n(function () {\n    \"use strict\";\n\n    const STREAM_URL =\n        \"https:\/\/lbgo.bozztv.com\/ssh101\/ssh101\/retyroxtv\/chunks.m3u8?lb_backend_hint=7\";\n\n    const video = document.getElementById(\"gcpHlsVideo\");\n    const playerContainer = document.getElementById(\"gcpTvPlayer\");\n    const screen = document.getElementById(\"gcpTvScreen\");\n    const overlay = document.getElementById(\"gcpTvOverlay\");\n    const overlayIcon = document.getElementById(\"gcpTvOverlayIcon\");\n    const overlayTitle = document.getElementById(\"gcpTvOverlayTitle\");\n    const overlayMessage = document.getElementById(\"gcpTvOverlayMessage\");\n    const startButton = document.getElementById(\"gcpTvStartButton\");\n    const loader = document.getElementById(\"gcpTvLoader\");\n    const status = document.getElementById(\"gcpTvStatus\");\n    const statusText = document.getElementById(\"gcpTvStatusText\");\n    const technicalStatus = document.getElementById(\"gcpTvTechnicalStatus\");\n    const reloadButton = document.getElementById(\"gcpTvReload\");\n    const fullscreenButton = document.getElementById(\"gcpTvFullscreen\");\n\n    let hls = null;\n    let started = false;\n    let recoveryAttempts = 0;\n    const MAX_RECOVERY_ATTEMPTS = 3;\n\n    function setLoading(isLoading) {\n        loader.classList.toggle(\"is-visible\", isLoading);\n    }\n\n    function setStatus(message, isLive) {\n        statusText.textContent = message;\n        status.classList.toggle(\"is-live\", Boolean(isLive));\n    }\n\n    function hideOverlay() {\n        overlay.classList.add(\"is-hidden\");\n    }\n\n    function showOverlay(options) {\n        const config = Object.assign(\n            {\n                icon: \"\u26a0\",\n                title: \"No se pudo reproducir\",\n                message: \"La se\u00f1al no est\u00e1 disponible temporalmente.\",\n                button: \"Reintentar\"\n            },\n            options || {}\n        );\n\n        overlayIcon.textContent = config.icon;\n        overlayTitle.textContent = config.title;\n        overlayMessage.textContent = config.message;\n        startButton.textContent = config.button;\n        startButton.className = \"gcp-tv-retry-button\";\n        overlay.classList.remove(\"is-hidden\");\n    }\n\n    function destroyCurrentStream() {\n        if (hls) {\n            hls.destroy();\n            hls = null;\n        }\n\n        video.pause();\n        video.removeAttribute(\"src\");\n        video.load();\n    }\n\n    function tryPlay() {\n        const playPromise = video.play();\n\n        if (playPromise && typeof playPromise.catch === \"function\") {\n            playPromise.catch(function () {\n                \/*\n                 * El navegador puede bloquear el autoplay.\n                 * El usuario podr\u00e1 iniciar la reproducci\u00f3n con los controles.\n                 *\/\n                setStatus(\"Pulsa reproducir para comenzar\", false);\n                technicalStatus.textContent =\n                    \"La se\u00f1al est\u00e1 lista \u00b7 Autoplay bloqueado\";\n            });\n        }\n    }\n\n    function loadNativeHls() {\n        technicalStatus.textContent = \"HLS nativo \u00b7 Calidad autom\u00e1tica\";\n        video.src = STREAM_URL;\n\n        video.addEventListener(\n            \"loadedmetadata\",\n            function () {\n                setLoading(false);\n                setStatus(\"Se\u00f1al conectada\", true);\n                hideOverlay();\n                tryPlay();\n            },\n            { once: true }\n        );\n\n        video.addEventListener(\n            \"error\",\n            function () {\n                setLoading(false);\n                showOverlay({\n                    title: \"Error de reproducci\u00f3n\",\n                    message:\n                        \"El navegador no pudo abrir la se\u00f1al HLS nativa.\",\n                    button: \"Volver a intentar\"\n                });\n                setStatus(\"Se\u00f1al no disponible\", false);\n            },\n            { once: true }\n        );\n    }\n\n    function loadWithHlsJs() {\n        hls = new Hls({\n            enableWorker: true,\n            lowLatencyMode: true,\n            backBufferLength: 60,\n            maxBufferLength: 30,\n            maxMaxBufferLength: 60\n        });\n\n        technicalStatus.textContent =\n            \"hls.js \u00b7 Detectando calidad autom\u00e1ticamente\";\n\n        hls.loadSource(STREAM_URL);\n        hls.attachMedia(video);\n\n        hls.on(Hls.Events.MANIFEST_PARSED, function (event, data) {\n            recoveryAttempts = 0;\n            setLoading(false);\n            setStatus(\"Se\u00f1al conectada\", true);\n            hideOverlay();\n\n            const levels = data && data.levels ? data.levels.length : 0;\n\n            technicalStatus.textContent = levels > 1\n                ? \"HLS \u00b7 \" + levels + \" calidades disponibles\"\n                : \"HLS \u00b7 Calidad autom\u00e1tica\";\n\n            tryPlay();\n        });\n\n        hls.on(Hls.Events.LEVEL_SWITCHED, function (event, data) {\n            const level = hls.levels[data.level];\n\n            if (level && level.height) {\n                technicalStatus.textContent =\n                    \"HLS \u00b7 \" + level.height + \"p \u00b7 En vivo\";\n            }\n        });\n\n        hls.on(Hls.Events.ERROR, function (event, data) {\n            if (!data.fatal) {\n                return;\n            }\n\n            recoveryAttempts += 1;\n\n            if (recoveryAttempts > MAX_RECOVERY_ATTEMPTS) {\n                setLoading(false);\n                setStatus(\"Se\u00f1al interrumpida\", false);\n\n                showOverlay({\n                    title: \"Transmisi\u00f3n no disponible\",\n                    message:\n                        \"La se\u00f1al no respondi\u00f3 despu\u00e9s de varios intentos. Puede estar fuera de l\u00ednea o bloqueando la reproducci\u00f3n externa.\",\n                    button: \"Reintentar se\u00f1al\"\n                });\n\n                destroyCurrentStream();\n                return;\n            }\n\n            switch (data.type) {\n                case Hls.ErrorTypes.NETWORK_ERROR:\n                    setStatus(\"Reconectando se\u00f1al\u2026\", false);\n                    technicalStatus.textContent =\n                        \"Error de red \u00b7 Intentando reconectar\";\n                    hls.startLoad();\n                    break;\n\n                case Hls.ErrorTypes.MEDIA_ERROR:\n                    setStatus(\"Recuperando video\u2026\", false);\n                    technicalStatus.textContent =\n                        \"Error multimedia \u00b7 Recuperando\";\n                    hls.recoverMediaError();\n                    break;\n\n                default:\n                    destroyCurrentStream();\n                    startStream();\n                    break;\n            }\n        });\n    }\n\n    function startStream() {\n        destroyCurrentStream();\n\n        started = true;\n        recoveryAttempts = 0;\n\n        setLoading(true);\n        setStatus(\"Conectando con la se\u00f1al\u2026\", false);\n        technicalStatus.textContent = \"Cargando transmisi\u00f3n HLS\u2026\";\n\n        \/*\n         * Safari y algunos dispositivos Apple reproducen HLS\n         * directamente mediante la etiqueta video.\n         *\/\n        if (video.canPlayType(\"application\/vnd.apple.mpegurl\")) {\n            loadNativeHls();\n            return;\n        }\n\n        \/*\n         * Chrome, Edge, Firefox y muchos dispositivos Android\n         * utilizan hls.js mediante Media Source Extensions.\n         *\/\n        if (window.Hls && Hls.isSupported()) {\n            loadWithHlsJs();\n            return;\n        }\n\n        setLoading(false);\n        setStatus(\"Navegador incompatible\", false);\n\n        showOverlay({\n            icon: \"!\",\n            title: \"Navegador no compatible\",\n            message:\n                \"Este navegador no permite reproducir transmisiones HLS.\",\n            button: \"Intentar nuevamente\"\n        });\n    }\n\n    startButton.addEventListener(\"click\", function () {\n        startStream();\n    });\n\n    reloadButton.addEventListener(\"click\", function () {\n        startStream();\n    });\n\n    fullscreenButton.addEventListener(\"click\", function () {\n        if (document.fullscreenElement) {\n            document.exitFullscreen();\n            return;\n        }\n\n        if (screen.requestFullscreen) {\n            screen.requestFullscreen();\n        } else if (video.webkitEnterFullscreen) {\n            video.webkitEnterFullscreen();\n        }\n    });\n\n    video.addEventListener(\"waiting\", function () {\n        if (started) {\n            setLoading(true);\n            setStatus(\"Almacenando se\u00f1al\u2026\", false);\n        }\n    });\n\n    video.addEventListener(\"playing\", function () {\n        setLoading(false);\n        setStatus(\"Transmitiendo en vivo\", true);\n        hideOverlay();\n    });\n\n    video.addEventListener(\"pause\", function () {\n        if (!video.ended && video.currentTime > 0) {\n            setStatus(\"Transmisi\u00f3n pausada\", false);\n        }\n    });\n\n    video.addEventListener(\"ended\", function () {\n        setStatus(\"La transmisi\u00f3n termin\u00f3\", false);\n    });\n\n    window.addEventListener(\"beforeunload\", function () {\n        destroyCurrentStream();\n    });\n})();\n<\/script>\n\n\n\n\n<!-- CORRECCIONES REALIZADAS:\n\u2714 Se elimin\u00f3 el bot\u00f3n HTML mal colocado dentro del CSS\n\u2714 Se corrigi\u00f3 el error del HLS\/video\n\u2714 Se arregl\u00f3 el cierre de llaves y par\u00e9ntesis\n\u2714 Se corrigi\u00f3 loadStation()\n\u2714 Se eliminaron algunos canales repetidos\n\u2714 Se dejaron solo enlaces m\u00e1s estables\n\u2714 Se mejor\u00f3 el reproductor M3U8\n\u2714 Se agreg\u00f3 control de errores\n-->\n\n<link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/5.15.4\/css\/all.min.css\" rel=\"stylesheet\"\/>\n\n<style>\n*{\n  margin:0;\n  padding:0;\n  box-sizing:border-box;\n}\n\nbody{\n  font-family:Arial,sans-serif;\n  background:#111;\n  color:#fff;\n  padding:20px;\n}\n\n.container{\n  max-width:480px;\n  margin:auto;\n  background:#1f2937;\n  border-radius:20px;\n  padding:20px;\n}\n\n.radio-header{\n  display:flex;\n  justify-content:space-between;\n  align-items:center;\n  margin-bottom:20px;\n}\n\n.radio-header h1{\n  color:#ec4899;\n}\n\n.live{\n  display:flex;\n  align-items:center;\n  gap:8px;\n}\n\n.live-dot{\n  width:12px;\n  height:12px;\n  background:#22c55e;\n  border-radius:50%;\n}\n\n.station-banner{\n  text-align:center;\n  margin-bottom:20px;\n}\n\n.station-banner img{\n  width:160px;\n  height:160px;\n  border-radius:20px;\n  object-fit:cover;\n}\n\n.station-info h2{\n  margin-top:10px;\n}\n\n.controls{\n  display:flex;\n  justify-content:center;\n  gap:20px;\n  margin:20px 0;\n}\n\n.btn{\n  width:60px;\n  height:60px;\n  border:none;\n  border-radius:50%;\n  cursor:pointer;\n  background:#374151;\n  color:#fff;\n  font-size:22px;\n}\n\n.btn.play{\n  background:#ec4899;\n  width:75px;\n  height:75px;\n}\n\n#btn-video{\n  width:100%;\n  padding:12px;\n  border:none;\n  border-radius:12px;\n  background:#8b5cf6;\n  color:#fff;\n  cursor:pointer;\n  font-size:16px;\n}\n\n.playlist{\n  margin-top:20px;\n}\n\n.station-list{\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:10px;\n}\n\n.station-item{\n  background:#374151;\n  border-radius:12px;\n  padding:10px;\n  text-align:center;\n  cursor:pointer;\n}\n\n.station-item.active{\n  background:#ec4899;\n}\n\n.station-item img{\n  width:70px;\n  height:70px;\n  object-fit:cover;\n  border-radius:12px;\n  margin-bottom:10px;\n}\n\n\/* MODAL VIDEO *\/\n\n#modal-video{\n  display:none;\n  position:fixed;\n  inset:0;\n  background:rgba(0,0,0,.9);\n  justify-content:center;\n  align-items:center;\n  z-index:9999;\n}\n\n#modal-video.show{\n  display:flex;\n}\n\n#modal-video-content{\n  width:90%;\n  max-width:900px;\n  aspect-ratio:16\/9;\n  background:#000;\n  position:relative;\n}\n\n#video-player{\n  width:100%;\n  height:100%;\n}\n\n#cerrar-video{\n  position:absolute;\n  top:10px;\n  right:10px;\n  width:40px;\n  height:40px;\n  border:none;\n  border-radius:50%;\n  background:#ec4899;\n  color:#fff;\n  font-size:22px;\n  cursor:pointer;\n  z-index:10;\n}\n<\/style>\n\n<div class=\"container\">\n\n  <header class=\"radio-header\">\n    <h1>Radio + TV Player<\/h1>\n\n    <div class=\"live\">\n      <div class=\"live-dot\"><\/div>\n      EN VIVO\n    <\/div>\n  <\/header>\n\n  <div class=\"station-banner\">\n    <img decoding=\"async\" id=\"station-logo\" src=\"\">\n    \n    <div class=\"station-info\">\n      <h2 id=\"station-name\"><\/h2>\n      <p id=\"station-freq\"><\/p>\n    <\/div>\n  <\/div>\n\n  <div class=\"controls\">\n    <button class=\"btn\" onclick=\"prevStation()\">\n      <i class=\"fas fa-backward\"><\/i>\n    <\/button>\n\n    <button class=\"btn play\" id=\"play-btn\">\n      <i id=\"play-icon\" class=\"fas fa-play\"><\/i>\n    <\/button>\n\n    <button class=\"btn\" onclick=\"nextStation()\">\n      <i class=\"fas fa-forward\"><\/i>\n    <\/button>\n  <\/div>\n\n  <button id=\"btn-video\">\n    \u25b6 VER CANAL TV\n  <\/button>\n\n  <div class=\"playlist\">\n    <div id=\"station-list\" class=\"station-list\"><\/div>\n  <\/div>\n\n<\/div>\n\n<audio id=\"audio\"><\/audio>\n\n<!-- MODAL -->\n\n<div id=\"modal-video\">\n\n  <div id=\"modal-video-content\">\n\n    <button id=\"cerrar-video\">\u00d7<\/button>\n\n    <video\n      id=\"video-player\"\n      controls\n      autoplay\n      playsinline>\n    <\/video>\n\n  <\/div>\n\n<\/div>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/hls.js@latest\"><\/script>\n\n<script>\n\nconst stations = [\n\n{\nname:\"LA VOZ PERU\",\nfreq:\"TV EN LINEA\",\nurl:\"https:\/\/stream.zeno.fm\/jqmfghcszwlvv\",\nlogo:\"https:\/\/i.postimg.cc\/85z90095\/radio-la-voz-peru-la-firme.png\",\ntv:\"https:\/\/live20.bozztv.com\/akamaissh101\/ssh101\/ucchullo\/playlist.m3u8\"\n},\n\n{\nname:\"latin\",\nfreq:\"latina\",\nurl:\"https:\/\/stream-51.zeno.fm\/hpttv0nr4a0uv?zs=iiu2UdOAQ9GQ8K_EL19oQw\",\nlogo:\"https:\/\/i.postimg.cc\/jdF4ydzC\/rock-de-los-80.png\",\ntv:\"https:\/\/jireh-9-hls-video-us-isp.dps.live\/hls-video\/567ffde3fa319fadf3419efda25619456231dfea\/latinanoticias\/latinanoticias.smil\/latinanoticias\/livestream2\/chunks.m3u8?dpssid=b211934004269fbb0f554e34&sid=ba5t1l1xb273784619569fbb0f65fe4c&ndvc=0\"\n},\n\n{\nname:\"CUMBIAY RADIO\",\nfreq:\"VISION HD\",\nurl:\"https:\/\/stream.zeno.fm\/5g8ii1ncoiwuv\",\nlogo:\"https:\/\/i.postimg.cc\/BbD1rDhV\/CUMBIAY-RADIO.png\",\ntv:\"https:\/\/live20.bozztv.com\/akamaissh101\/ssh101\/visionhdrd\/playlist.m3u8\"\n},\n\n{\nname:\"VOCES PERUANAS\",\nfreq:\"UVA TV\",\nurl:\"https:\/\/stream.zeno.fm\/zhiunct47shtv\",\nlogo:\"https:\/\/i.postimg.cc\/mr0cY4Gs\/VOCES-P-RUANAS.png\",\ntv:\"https:\/\/live20.bozztv.com\/akamaissh101\/ssh101\/uvatvdh\/playlist.m3u8\"\n},\n{\nname:\"voves peruanas\",\nfreq:\"latina\",\nurl:\"https:\/\/stream.zeno.fm\/zhiunct47shtv\",\nlogo:\"https:\/\/i.postimg.cc\/mr0cY4Gs\/VOCES-P-RUANAS.png\",\ntv:\"https:\/\/jireh-9-hls-video-us-isp.dps.live\/hls-video\/567ffde3fa319fadf3419efda25619456231dfea\/latinanoticias\/latinanoticias.smil\/latinanoticias\/livestream2\/chunks.m3u8?dpssid=b211934004269fbb0f554e34&sid=ba5t1l1xb273784619569fbb0f65fe4c&ndvc=0\"\n},\n{\nname:\"poder wanca\",\nfreq:\"latina\",\nurl:\"https:\/\/i.postimg.cc\/mr0cY4Gs\/VOCES-P-RUANAS.png\",\nlogo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/tpWX7UerL1cUIZuKxBgDD6bnNs3fEwcZ54gWg5s3N1U\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJREF3cTd2Z3dvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJREkxcDcwdmdzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY2MTYyNzc5NzAwMA.webp\",\ntv:\"https:\/\/jireh-9-hls-video-us-isp.dps.live\/hls-video\/567ffde3fa319fadf3419efda25619456231dfea\/latinanoticias\/latinanoticias.smil\/latinanoticias\/livestream2\/chunks.m3u8?dpssid=b211934004269fbb0f554e34&sid=ba5t1l1xb273784619569fbb0f65fe4c&ndvc=0\"\n},\n{\nname:\"full chichas\",\nfreq:\"sumac tv\",\nurl:\"https:\/\/stream-157.zeno.fm\/zwytkt2pgf9uv?zt\",\nlogo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/9q-sbNX7cW4gl0VPhY42t0mclIv9dVUuMZoR-ZP6tY4\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1ExcUhsNGdvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRHduZDJwcGdzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY2MDg1MjQ0MzAwMA.webp\",\ntv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/makins\/chunks.m3u8\"\n},\n{\nname:\"la RIBERE\u00d1A\",\nfreq:\"el mago TV\",\nurl:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/elmagotv2\/chunks.m3u8\",\nlogo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/jxRWn-NPwDCgA819A-_fn0TqTpGdl0n0334Reg-m2Mo\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJRGctTG1mMndvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRGc2TGVDNXdvTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcxNzAxMzMwMTAwMA.webp\",\ntv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/elmagotv2\/chunks.m3u8\"\n},\n{\nname:\"radio yunguyo\",\nfreq:\"tv en linea cuzco\",\nurl:\"https:\/\/stream-167.zeno.fm\/671md145hwzuv?zt\",\nlogo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/1fnTieOpPoKHgwMLJgWZPfpmO8vwDlgrLG913WX9sbk\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1E4Tld1elFzTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJQ1FtUFBCNlFnTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY2MTU0ODYyMjAwMA.webp\",\ntv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/ucchullo\/chunks.m3u8\"\n},\n{\nname:\"cuzco legal\",\nfreq:\"tv ayacucho\",\nurl:\"https:\/\/stream-158.zeno.fm\/ryrhxgus0wzuv?zt\",\nlogo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/fPzZN4zvNtw-ieMCQDUBjYTDiGuos0Ontr-qDteWBkU\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1FyTGo0cUFvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJQ1F6UDdGeXdzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY4NzI4ODk1OTAwMA.webp\",\ntv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/canal33ayacucho\/chunks.m3u8\"\n},\n{\nname:\"la sure\u00f1a\",\nfreq:\"pantalla clasica\",\nurl:\"https:\/\/stream-155.zeno.fm\/bg4qy23suxhvv?zt\",\nlogo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/wtweicIxQ4k8Mx0hBCFTsJgIUi2Z2NKidL1GH0ujjVc\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJRElydl96elFrTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRElqdTd3N1FvTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcyODk4OTAwODAwMA.webp\",\ntv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/pantallaclasics\/chunks.m3u8\"\n},\n{\nname:\"arequipa clasica\",\nfreq:\"tucuman\",\nurl:\"https:\/\/stream.zeno.fm\/h20h3vrrm2zuv?an-uid\",\nlogo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/T8-8PdELZAbYW5hkkqLPanpdl_Vs8hO8JSvA35W5MmY\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1FuczZ6LUFrTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJQ1FtYno1c1FnTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcyOTM3ODYzMzAwMA.webp\",\ntv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/lavoztuc\/chunks.m3u8\"\n},\n{\nname:\"onda azul\",\nfreq:\"martin tv\",\nurl:\"https:\/\/stream-162.zeno.fm\/eqotxvldgmpvv?zt\",\nlogo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/fSgf1EHjyP9Bp1CI2e8XrDhIyEA_4FRXei0iaWVC-gE\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvZDc0YmQ3ZGQtMWZkNi00OTA3LWJhZTUtNTk1NjRiNGVjMTI4L2ltYWdlLz91PTE2ODg2NjAyMTkwMDA.webp\",\ntv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/lllmartinlll\/chunks.m3u8\"\n},\n{\nname:\"radio total\",\nfreq:\"ciudad magica\",\nurl:\"https:\/\/stream.zeno.fm\/buubpev72b9vv\",\nlogo:\"https:\/\/i.postimg.cc\/vZT7HPZJ\/RADIO-TOTAL500-X-500.png\",\ntv:\"https:\/\/live20.bozztv.com\/akamaissh101\/ssh101\/verycoolfgr\/playlist.m3u8\"\n},\n{\nname:\"cumbiay\",\nfreq:\"vision hd multimedia\",\nurl:\"https:\/\/stream.zeno.fm\/5g8ii1ncoiwuv\",\nlogo:\"https:\/\/i.postimg.cc\/BbD1rDhV\/CUMBIAY-RADIO.png\",\ntv:\"https:\/\/live20.bozztv.com\/akamaissh101\/ssh101\/visionhdrd\/playlist.m3u8\"\n},\n\n{\nname:\"siscoveri\",\nfreq:\"pachamama\",\nurl:\"https:\/\/stream-164.zeno.fm\/7heuhyl3swvvv?zt\",\nlogo:\"https:\/\/images.zeno.fm\/cq4x0x1UzbtlFYimKk37EGO-xdyoEXwSPu1blCA9a_Q\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvOTc2MzUyMmEtOGVhYi00M2YyLTg1ZTItYTgyZDZhYmUxZTdjL2ltYWdlLz91PTE2OTMwMTI1MTUwMDA.webp\",\ntv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/jnetv\/chunks.m3u8\"\n}\n\n];\n\nlet currentStation = 0;\nlet isPlaying = false;\nlet hls;\n\nconst audio = document.getElementById(\"audio\");\nconst stationName = document.getElementById(\"station-name\");\nconst stationFreq = document.getElementById(\"station-freq\");\nconst stationLogo = document.getElementById(\"station-logo\");\nconst stationList = document.getElementById(\"station-list\");\nconst btnVideo = document.getElementById(\"btn-video\");\nconst modalVideo = document.getElementById(\"modal-video\");\nconst cerrarVideo = document.getElementById(\"cerrar-video\");\nconst video = document.getElementById(\"video-player\");\n\nfunction loadStation(index){\n\n  currentStation = index;\n\n  const station = stations[index];\n\n  stationName.textContent = station.name;\n  stationFreq.textContent = station.freq;\n  stationLogo.src = station.logo;\n\n  audio.src = station.url;\n\n  btnVideo.dataset.video = station.tv;\n\n  if(isPlaying){\n    audio.play();\n  }\n\n  highlightStation();\n}\n\nfunction highlightStation(){\n\n  [...stationList.children].forEach((el,i)=>{\n    el.classList.toggle(\"active\",i===currentStation);\n  });\n\n}\n\nfunction playPause(){\n\n  if(!isPlaying){\n\n    audio.play();\n\n    document.getElementById(\"play-icon\")\n    .className = \"fas fa-pause\";\n\n  }else{\n\n    audio.pause();\n\n    document.getElementById(\"play-icon\")\n    .className = \"fas fa-play\";\n  }\n\n  isPlaying = !isPlaying;\n}\n\nfunction nextStation(){\n\n  currentStation++;\n\n  if(currentStation >= stations.length){\n    currentStation = 0;\n  }\n\n  loadStation(currentStation);\n}\n\nfunction prevStation(){\n\n  currentStation--;\n\n  if(currentStation < 0){\n    currentStation = stations.length - 1;\n  }\n\n  loadStation(currentStation);\n}\n\ndocument.getElementById(\"play-btn\")\n.addEventListener(\"click\",playPause);\n\nstations.forEach((station,i)=>{\n\n  const div = document.createElement(\"div\");\n\n  div.className = \"station-item\";\n\n  div.innerHTML = `\n    <img decoding=\"async\" src=\"${station.logo}\">\n    <strong>${station.name}<\/strong>\n    <small>${station.freq}<\/small>\n  `;\n\n  div.onclick = ()=>loadStation(i);\n\n  stationList.appendChild(div);\n\n});\n\nloadStation(0);\n\naudio.addEventListener(\"error\",()=>{\n  alert(\"Radio no disponible\");\n});\n\n\/* VIDEO *\/\n\nbtnVideo.addEventListener(\"click\",()=>{\n\n  const url = btnVideo.dataset.video;\n\n  modalVideo.classList.add(\"show\");\n\n  if(Hls.isSupported()){\n\n    if(hls){\n      hls.destroy();\n    }\n\n    hls = new Hls();\n\n    hls.loadSource(url);\n\n    hls.attachMedia(video);\n\n    hls.on(Hls.Events.MANIFEST_PARSED,function(){\n\n      video.play();\n\n    });\n\n  }else{\n\n    video.src = url;\n    video.play();\n  }\n\n});\n\nfunction closeVideo(){\n\n  modalVideo.classList.remove(\"show\");\n\n  video.pause();\n\n  if(hls){\n    hls.destroy();\n  }\n\n}\n\ncerrarVideo.addEventListener(\"click\",closeVideo);\n\nmodalVideo.addEventListener(\"click\",(e)=>{\n\n  if(e.target === modalVideo){\n    closeVideo();\n  }\n\n});\n\n<\/script>\n\n\n\n\u00ab`html\n<style>\n\/* ========================================\n   SLIDER GOOGLE CUMBIA PARA WORDPRESS\n======================================== *\/\n\n.gcp-marquee-slider,\n.gcp-marquee-slider * {\n    box-sizing: border-box;\n}\n\n.gcp-marquee-slider {\n    --gcp-slider-height: 310px;\n    --gcp-slider-gap: 12px;\n    --gcp-slider-speed: 38s;\n\n    position: relative;\n    width: 100%;\n    max-width: 1200px;\n    margin: 25px auto;\n    overflow: hidden;\n    background: #000;\n    border-radius: 16px;\n    box-shadow: 0 12px 35px rgba(0, 0, 0, 0.25);\n}\n\n\/* Degradado en los bordes *\/\n.gcp-marquee-slider::before,\n.gcp-marquee-slider::after {\n    content: \"\";\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    z-index: 5;\n    width: 55px;\n    pointer-events: none;\n}\n\n.gcp-marquee-slider::before {\n    left: 0;\n    background: linear-gradient(to right, #000, transparent);\n}\n\n.gcp-marquee-slider::after {\n    right: 0;\n    background: linear-gradient(to left, #000, transparent);\n}\n\n\/* Pista animada *\/\n.gcp-marquee-track {\n    display: flex;\n    align-items: center;\n    width: max-content;\n    animation: gcp-marquee-move var(--gcp-slider-speed) linear infinite;\n    will-change: transform;\n}\n\n\/* Pausar al pasar el mouse *\/\n.gcp-marquee-slider:hover .gcp-marquee-track,\n.gcp-marquee-slider.is-paused .gcp-marquee-track {\n    animation-play-state: paused;\n}\n\n\/* Grupo duplicado para movimiento continuo *\/\n.gcp-marquee-group {\n    display: flex;\n    align-items: center;\n    gap: var(--gcp-slider-gap);\n    padding-right: var(--gcp-slider-gap);\n}\n\n\/* Cada banner *\/\n.gcp-marquee-item {\n    position: relative;\n    display: block;\n    flex: 0 0 auto;\n    height: var(--gcp-slider-height);\n    overflow: hidden;\n    background: #111;\n    border-radius: 12px;\n    text-decoration: none;\n    transition:\n        transform 0.25s ease,\n        opacity 0.25s ease;\n}\n\n.gcp-marquee-item:hover {\n    z-index: 3;\n    transform: scale(1.025);\n}\n\n\/* Imagen completa, sin deformarse *\/\n.gcp-marquee-item img {\n    display: block;\n    width: auto;\n    max-width: 900px;\n    height: 100%;\n    object-fit: contain;\n    object-position: center;\n    border: 0;\n}\n\n\/* Texto alternativo visual *\/\n.gcp-marquee-title {\n    position: absolute;\n    right: 10px;\n    bottom: 10px;\n    left: 10px;\n    padding: 8px 12px;\n    overflow: hidden;\n    background: rgba(0, 0, 0, 0.72);\n    border-radius: 8px;\n    color: #fff;\n    font-size: 13px;\n    font-weight: 700;\n    line-height: 1.3;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    opacity: 0;\n    transform: translateY(8px);\n    transition:\n        opacity 0.25s ease,\n        transform 0.25s ease;\n}\n\n.gcp-marquee-item:hover .gcp-marquee-title,\n.gcp-marquee-item:focus-visible .gcp-marquee-title {\n    opacity: 1;\n    transform: translateY(0);\n}\n\n\/* Bot\u00f3n pausar\/reanudar *\/\n.gcp-marquee-control {\n    position: absolute;\n    right: 14px;\n    top: 14px;\n    z-index: 10;\n    display: grid;\n    width: 42px;\n    height: 42px;\n    padding: 0;\n    place-items: center;\n    border: 1px solid rgba(255, 255, 255, 0.25);\n    border-radius: 50%;\n    background: rgba(0, 0, 0, 0.78);\n    color: #fff;\n    font-size: 17px;\n    cursor: pointer;\n    backdrop-filter: blur(7px);\n}\n\n.gcp-marquee-control:hover {\n    background: #ff5a00;\n}\n\n\/* Movimiento infinito *\/\n@keyframes gcp-marquee-move {\n    from {\n        transform: translateX(0);\n    }\n\n    to {\n        transform: translateX(-50%);\n    }\n}\n\n\/* Tablet *\/\n@media (max-width: 900px) {\n    .gcp-marquee-slider {\n        --gcp-slider-height: 240px;\n        border-radius: 12px;\n    }\n\n    .gcp-marquee-item img {\n        max-width: 720px;\n    }\n}\n\n\/* Celular *\/\n@media (max-width: 600px) {\n    .gcp-marquee-slider {\n        --gcp-slider-height: 180px;\n        --gcp-slider-gap: 8px;\n        --gcp-slider-speed: 42s;\n        margin: 15px auto;\n        border-radius: 10px;\n    }\n\n    .gcp-marquee-slider::before,\n    .gcp-marquee-slider::after {\n        width: 25px;\n    }\n\n    .gcp-marquee-item {\n        border-radius: 8px;\n    }\n\n    .gcp-marquee-item img {\n        max-width: 520px;\n    }\n\n    .gcp-marquee-control {\n        top: 9px;\n        right: 9px;\n        width: 38px;\n        height: 38px;\n    }\n}\n\n\/* Accesibilidad: desactivar movimiento si el usuario lo solicita *\/\n@media (prefers-reduced-motion: reduce) {\n    .gcp-marquee-track {\n        animation: none;\n    }\n\n    .gcp-marquee-slider {\n        overflow-x: auto;\n    }\n}\n<\/style>\n\n<div class=\"gcp-marquee-slider\" id=\"gcpMarqueeSlider\">\n    <button type=\"button\" class=\"gcp-marquee-control\" id=\"gcpMarqueeControl\" aria-label=\"Pausar slider\" title=\"Pausar slider\">\n        \u275a\u275a\n    <\/button>\n\n    <div class=\"gcp-marquee-track\" id=\"gcpMarqueeTrack\">\n\n        <!-- GRUPO ORIGINAL -->\n        <div class=\"gcp-marquee-group\">\n\n            <a class=\"gcp-marquee-item\" href=\"https:\/\/youtu.be\/5J0AZOKh-v4\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Melody Clips\">\n                <img decoding=\"async\" src=\"https:\/\/i.postimg.cc\/cCGxFqsV\/BANDERA-LIUX.png\" alt=\"Melody Clips\" loading=\"eager\">\n                <span class=\"gcp-marquee-title\">Melody Clips<\/span>\n            <\/a>\n\n            <a class=\"gcp-marquee-item\" href=\"https:\/\/orquestabanderafullmelody.on.drv.tw\/html\/html.html\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Radio en vivo\">\n                <img decoding=\"async\" src=\"https:\/\/i.postimg.cc\/qRB1fq1r\/RADIO-LOGO.png\" alt=\"Radio en vivo\" loading=\"lazy\">\n                <span class=\"gcp-marquee-title\">Radio en vivo<\/span>\n            <\/a>\n\n            <a class=\"gcp-marquee-item\" href=\"https:\/\/googlecumbia.blogspot.com\/\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Google Cumbia Radio\">\n                <img decoding=\"async\" src=\"https:\/\/i.postimg.cc\/9MqrQt8Y\/logo-de-radio.jpg\" alt=\"Google Cumbia Radio\" loading=\"lazy\">\n                <span class=\"gcp-marquee-title\">Google Cumbia Radio<\/span>\n            <\/a>\n\n            <a class=\"gcp-marquee-item\" href=\"https:\/\/www.facebook.com\/rabyhuillca\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Nuestra p\u00e1gina en Facebook\">\n                <img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg5wklMNnSbPbUnWPKSeTsRZNmtjt2HbVADNVfmZgaoioNLCWeHs9CiWPM6sgTy2YFTZOVa8w9jDDrlxMkWrtwEcVMm48S3_ltpbRy18id6Z1OoWT4pdvuTArdGfQELHyZjIbpGn6mAQhGu\/s1600\/fon-raby.jpg\" alt=\"P\u00e1gina de Facebook\" loading=\"lazy\">\n                <span class=\"gcp-marquee-title\">Nuestra p\u00e1gina en Facebook<\/span>\n            <\/a>\n\n            <a class=\"gcp-marquee-item\" href=\"https:\/\/www.youtube.com\/user\/musicajuliaca\/videos\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Mira nuestros videos en YouTube\">\n                <img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhKaREGIIUHrl4ZDLZPwFrTQBiv2weZCAyVaB6jtLtnuNW6u06x0EtLpDpL9BgewwV2NSveWfGoGGOwFLkeJZxspHg7CHkP5YjKFrwqL4bcbv1HCWpMHefr5YCSkgD1P8NVF8ZU7EMphEju\/s1600\/tarjeta-melody..png\" alt=\"Videos de M\u00fasica Juliaca\" loading=\"lazy\">\n                <span class=\"gcp-marquee-title\">Videos en YouTube<\/span>\n            <\/a>\n\n            <a class=\"gcp-marquee-item\" href=\"https:\/\/www.youtube.com\/watch?v=9R15aMC_Tm0\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Presentaci\u00f3n en vivo\">\n                <img decoding=\"async\" src=\"https:\/\/i.postimg.cc\/yxvMJ4Sc\/EN-ESCENARIO.png\" alt=\"Presentaci\u00f3n en vivo\" loading=\"lazy\">\n                <span class=\"gcp-marquee-title\">Presentaci\u00f3n en vivo<\/span>\n            <\/a>\n\n            <a class=\"gcp-marquee-item\" href=\"https:\/\/www.youtube.com\/watch?v=CtHDbpdIddo\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Qu\u00edtame la vida\">\n                <img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEixeX88PGoAuoSRiv_EfakcEYirok-xjJtT_CyPFl-IcVC6tZX-aMCxJ897dbjBDExCXcc7eXbeHWxz6A5cGegeQjUcHgHqURgCJb9MOehiDLMjsI-tlshidwbZPRCyXkzjFn8i-H8nluu9ibw5B1x0vGa-p5yj9VPdyKPnnFI68ZswkkaXsEN6605qOA\/s320\/iconogooglecumbia.png\" alt=\"Qu\u00edtame la vida\" loading=\"lazy\">\n                <span class=\"gcp-marquee-title\">Qu\u00edtame la vida<\/span>\n            <\/a>\n\n            <a class=\"gcp-marquee-item\" href=\"https:\/\/www.facebook.com\/rabi.huillca\/videos\/328164900179508\/\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Thiago Alarc\u00f3n Huillca\">\n                <img decoding=\"async\" src=\"https:\/\/i.postimg.cc\/vZ6rTrJZ\/THIAGO.png\" alt=\"Thiago Alarc\u00f3n Huillca\" loading=\"lazy\">\n                <span class=\"gcp-marquee-title\">Thiago Alarc\u00f3n Huillca<\/span>\n            <\/a>\n\n            <a class=\"gcp-marquee-item\" href=\"https:\/\/www.youtube.com\/watch?v=x6F4zmGMn5I\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Orquesta M\u00e9lody\">\n                <img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEii3l3c0xW74QlEZFvph2f6_tIbESCSswoEV_OlKGD-fxnhRqqBU4gYmJUFcLok0uyrAFxDOwIzmDB_EUdV57vSj6G6-0Snn5oqDeeJ8LFOVYX-zPctdG5RShttZ_F4fGDdB3uht8qzIMI\/s1600\/letrero12.jpg\" alt=\"Orquesta M\u00e9lody\" loading=\"lazy\">\n                <span class=\"gcp-marquee-title\">Orquesta M\u00e9lody<\/span>\n            <\/a>\n\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n(function () {\n    \"use strict\";\n\n    const slider = document.getElementById(\"gcpMarqueeSlider\");\n    const track = document.getElementById(\"gcpMarqueeTrack\");\n    const control = document.getElementById(\"gcpMarqueeControl\");\n\n    if (!slider || !track || !control) {\n        return;\n    }\n\n    const originalGroup = track.querySelector(\".gcp-marquee-group\");\n\n    if (!originalGroup) {\n        return;\n    }\n\n    \/*\n     * Duplica el grupo para generar el desplazamiento infinito.\n     * aria-hidden evita que lectores de pantalla repitan los enlaces.\n     *\/\n    const clonedGroup = originalGroup.cloneNode(true);\n    clonedGroup.setAttribute(\"aria-hidden\", \"true\");\n\n    clonedGroup.querySelectorAll(\"a\").forEach(function (link) {\n        link.setAttribute(\"tabindex\", \"-1\");\n    });\n\n    track.appendChild(clonedGroup);\n\n    let isPaused = false;\n\n    function updateControl() {\n        control.textContent = isPaused ? \"\u25b6\" : \"\u275a\u275a\";\n        control.setAttribute(\n            \"aria-label\",\n            isPaused ? \"Reanudar slider\" : \"Pausar slider\"\n        );\n        control.setAttribute(\n            \"title\",\n            isPaused ? \"Reanudar slider\" : \"Pausar slider\"\n        );\n    }\n\n    control.addEventListener(\"click\", function () {\n        isPaused = !isPaused;\n        slider.classList.toggle(\"is-paused\", isPaused);\n        updateControl();\n    });\n\n    \/*\n     * En dispositivos t\u00e1ctiles se puede pausar tocando el bot\u00f3n.\n     * No se utiliza document.write ni se reemplaza window.onload.\n     *\/\n    updateControl();\n})();\n<\/script>\n\u00ab`\n","protected":false},"excerpt":{"rendered":"<p>\u00ab`html Televisi\u00f3n en vivo Preparando se\u00f1al\u2026 En vivo \u25b6 Se\u00f1al de televisi\u00f3n Pulsa el bot\u00f3n para iniciar la transmisi\u00f3n en vivo. \u25b6\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-15","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/pages\/15","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15"}],"version-history":[{"count":12,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/pages\/15\/revisions"}],"predecessor-version":[{"id":1130,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/pages\/15\/revisions\/1130"}],"wp:attachment":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}