{"id":15,"date":"2026-05-02T14:26:36","date_gmt":"2026-05-02T12:26:36","guid":{"rendered":"https:\/\/radionorandino1240amstgodechuco.com\/?page_id=15"},"modified":"2026-05-19T19:12:03","modified_gmt":"2026-05-19T17:12:03","slug":"inicio","status":"publish","type":"page","link":"https:\/\/radionorandino1240amstgodechuco.com\/","title":{"rendered":"INICIO"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"15\" class=\"elementor elementor-15\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8934490 e-flex e-con-boxed e-con e-parent\" data-id=\"8934490\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-774d19c e-con-full e-flex e-con e-child\" data-id=\"774d19c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e45fb1b elementor-widget elementor-widget-html\" data-id=\"e45fb1b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=cover\">\r\n    <title>Radio Nor Andino | Player HD para PC y M\u00f3vil<\/title>\r\n    <!-- Font Awesome 6 -->\r\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.0.0-beta3\/css\/all.min.css\">\r\n    <style>\r\n        * {\r\n            margin: 0;\r\n            padding: 0;\r\n            box-sizing: border-box;\r\n        }\r\n\r\n        body {\r\n            font-family: 'Inter', 'Segoe UI', system-ui, 'Poppins', sans-serif;\r\n            background: radial-gradient(circle at 30% 20%, #7e2a18, #2f0a02);\r\n            min-height: 100vh;\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n            padding: 30px;\r\n        }\r\n\r\n        \/* Contenedor principal: en PC se ampl\u00eda, en m\u00f3vil se adapta *\/\r\n        .radio-container {\r\n            width: 100%;\r\n            max-width: 880px;   \/* \u00a1Ahora m\u00e1s ancho para PC! *\/\r\n            margin: 0 auto;\r\n            transition: all 0.2s;\r\n        }\r\n\r\n        \/* Tarjeta principal con efecto glass elegante *\/\r\n        .player-card {\r\n            background: rgba(255, 255, 255, 0.98);\r\n            border-radius: 70px;\r\n            box-shadow: 0 35px 70px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 245, 235, 0.4) inset;\r\n            overflow: hidden;\r\n            transition: transform 0.2s ease;\r\n        }\r\n\r\n        .player-inner {\r\n            padding: 40px 40px 48px;\r\n        }\r\n\r\n        \/* === PORTADA (mucho m\u00e1s grande en PC) === *\/\r\n        .artwork-zone {\r\n            display: flex;\r\n            justify-content: center;\r\n            margin-bottom: 28px;\r\n            position: relative;\r\n        }\r\n\r\n        .cover-circle {\r\n            width: 300px;     \/* Tama\u00f1o grande para PC *\/\r\n            height: 300px;\r\n            background: #f3e9e2;\r\n            border-radius: 60px;\r\n            box-shadow: 0 25px 40px -12px rgba(0, 0, 0, 0.5);\r\n            overflow: hidden;\r\n            transition: all 0.3s;\r\n        }\r\n\r\n        #album-art {\r\n            width: 100%;\r\n            height: 100%;\r\n            object-fit: cover;\r\n            transition: transform 0.4s ease;\r\n        }\r\n\r\n        .live-badge {\r\n            position: absolute;\r\n            top: 18px;\r\n            right: 18px;\r\n            background: #e02b21;\r\n            padding: 8px 20px;\r\n            border-radius: 60px;\r\n            font-size: 14px;\r\n            font-weight: 800;\r\n            letter-spacing: 1.5px;\r\n            color: white;\r\n            backdrop-filter: blur(6px);\r\n            box-shadow: 0 6px 14px rgba(0,0,0,0.25);\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n            z-index: 3;\r\n        }\r\n\r\n        .live-badge i {\r\n            font-size: 12px;\r\n            animation: pulseLive 1.2s infinite;\r\n        }\r\n\r\n        @keyframes pulseLive {\r\n            0% { opacity: 1; transform: scale(1);}\r\n            50% { opacity: 0.5; transform: scale(0.85);}\r\n            100% { opacity: 1; transform: scale(1);}\r\n        }\r\n\r\n        \/* Informaci\u00f3n de canci\u00f3n (textos m\u00e1s grandes en PC) *\/\r\n        .track-info {\r\n            text-align: center;\r\n            margin: 20px 0 28px;\r\n        }\r\n\r\n        #title {\r\n            font-size: 2.2rem;      \/* Grande en PC *\/\r\n            font-weight: 800;\r\n            letter-spacing: -0.5px;\r\n            background: linear-gradient(135deg, #2c1b12, #a5432c);\r\n            background-clip: text;\r\n            -webkit-background-clip: text;\r\n            color: transparent;\r\n            white-space: normal;\r\n            word-break: break-word;\r\n            line-height: 1.2;\r\n            padding: 0 10px;\r\n        }\r\n\r\n        #artist {\r\n            font-size: 1.15rem;\r\n            font-weight: 500;\r\n            color: #bc7e64;\r\n            margin-top: 12px;\r\n        }\r\n\r\n        \/* Controles grandes y t\u00e1ctiles *\/\r\n        .controls-row {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            gap: 35px;\r\n            margin: 35px 0 28px;\r\n        }\r\n\r\n        .ctrl-btn {\r\n            background: #f4efea;\r\n            border: none;\r\n            width: 72px;\r\n            height: 72px;\r\n            border-radius: 72px;\r\n            font-size: 30px;\r\n            cursor: pointer;\r\n            display: inline-flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            transition: all 0.2s ease;\r\n            color: #4f2d1d;\r\n            box-shadow: 0 8px 18px rgba(0, 0, 0, 0.12);\r\n        }\r\n\r\n        .ctrl-btn:active {\r\n            transform: scale(0.94);\r\n        }\r\n\r\n        .ctrl-btn.play-main {\r\n            background: #e02b21;\r\n            color: white;\r\n            width: 92px;\r\n            height: 92px;\r\n            font-size: 40px;\r\n            box-shadow: 0 14px 28px rgba(224, 43, 33, 0.45);\r\n        }\r\n\r\n        .ctrl-btn.live-edge {\r\n            background: #2c3e32;\r\n            color: #ffdec6;\r\n            font-size: 28px;\r\n        }\r\n\r\n        \/* Barra de volumen *\/\r\n        .volume-panel {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 18px;\r\n            background: #efe7e0;\r\n            padding: 12px 24px;\r\n            border-radius: 80px;\r\n            margin: 16px 0 12px;\r\n        }\r\n\r\n        .volume-panel i {\r\n            font-size: 24px;\r\n            color: #bc6f4c;\r\n            cursor: pointer;\r\n            width: 32px;\r\n            text-align: center;\r\n        }\r\n\r\n        input[type=\"range\"] {\r\n            flex: 1;\r\n            height: 6px;\r\n            -webkit-appearance: none;\r\n            background: #cfbcaf;\r\n            border-radius: 20px;\r\n        }\r\n\r\n        input[type=\"range\"]::-webkit-slider-thumb {\r\n            -webkit-appearance: none;\r\n            width: 20px;\r\n            height: 20px;\r\n            background: #c53a2b;\r\n            border-radius: 50%;\r\n            cursor: pointer;\r\n            box-shadow: 0 2px 10px rgba(0,0,0,0.2);\r\n        }\r\n\r\n        .status-area {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            gap: 12px;\r\n            font-size: 14px;\r\n            color: #aa7a60;\r\n            margin-top: 20px;\r\n            font-weight: 500;\r\n        }\r\n\r\n        .spinner-dot {\r\n            width: 16px;\r\n            height: 16px;\r\n            border: 2px solid #e0a386;\r\n            border-top: 2px solid #c0392b;\r\n            border-radius: 50%;\r\n            animation: spin 0.7s linear infinite;\r\n            display: inline-block;\r\n        }\r\n\r\n        @keyframes spin { to { transform: rotate(360deg); } }\r\n\r\n        \/* Redes sociales (tama\u00f1o acorde a PC) *\/\r\n        .social-bar {\r\n            display: flex;\r\n            justify-content: center;\r\n            gap: 35px;\r\n            margin-top: 38px;\r\n            border-top: 2px solid #f0e2d8;\r\n            padding-top: 34px;\r\n        }\r\n\r\n        .social-icon {\r\n            background: #fffaf5;\r\n            width: 60px;\r\n            height: 60px;\r\n            border-radius: 40px;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            transition: all 0.25s;\r\n            box-shadow: 0 6px 14px rgba(0, 0, 0, 0.08);\r\n            text-decoration: none;\r\n        }\r\n\r\n        .social-icon img {\r\n            width: 32px;\r\n            height: 32px;\r\n            transition: transform 0.2s;\r\n        }\r\n\r\n        .social-icon:hover {\r\n            transform: translateY(-6px);\r\n            background: white;\r\n            box-shadow: 0 12px 20px rgba(0,0,0,0.15);\r\n        }\r\n\r\n        \/* ========== RESPONSIVE PARA TABLET Y M\u00d3VIL ========== *\/\r\n        @media (max-width: 780px) {\r\n            .radio-container {\r\n                max-width: 680px;\r\n            }\r\n            .cover-circle {\r\n                width: 250px;\r\n                height: 250px;\r\n            }\r\n            #title {\r\n                font-size: 1.8rem;\r\n            }\r\n            .ctrl-btn {\r\n                width: 64px;\r\n                height: 64px;\r\n                font-size: 26px;\r\n            }\r\n            .ctrl-btn.play-main {\r\n                width: 82px;\r\n                height: 82px;\r\n                font-size: 36px;\r\n            }\r\n            .social-icon {\r\n                width: 54px;\r\n                height: 54px;\r\n            }\r\n            .social-icon img {\r\n                width: 28px;\r\n                height: 28px;\r\n            }\r\n        }\r\n\r\n        @media (max-width: 580px) {\r\n            .player-inner {\r\n                padding: 28px 22px 32px;\r\n            }\r\n            .radio-container {\r\n                max-width: 100%;\r\n            }\r\n            .cover-circle {\r\n                width: 190px;\r\n                height: 190px;\r\n                border-radius: 45px;\r\n            }\r\n            #title {\r\n                font-size: 1.45rem;\r\n            }\r\n            #artist {\r\n                font-size: 0.9rem;\r\n            }\r\n            .controls-row {\r\n                gap: 22px;\r\n                margin: 25px 0 20px;\r\n            }\r\n            .ctrl-btn {\r\n                width: 55px;\r\n                height: 55px;\r\n                font-size: 22px;\r\n            }\r\n            .ctrl-btn.play-main {\r\n                width: 72px;\r\n                height: 72px;\r\n                font-size: 32px;\r\n            }\r\n            .ctrl-btn.live-edge {\r\n                font-size: 22px;\r\n            }\r\n            .volume-panel {\r\n                padding: 8px 16px;\r\n                gap: 12px;\r\n            }\r\n            .volume-panel i {\r\n                font-size: 20px;\r\n            }\r\n            .social-bar {\r\n                gap: 24px;\r\n                margin-top: 28px;\r\n                padding-top: 24px;\r\n            }\r\n            .social-icon {\r\n                width: 48px;\r\n                height: 48px;\r\n            }\r\n            .social-icon img {\r\n                width: 24px;\r\n                height: 24px;\r\n            }\r\n            .live-badge {\r\n                padding: 5px 12px;\r\n                font-size: 10px;\r\n                top: 6px;\r\n                right: 6px;\r\n            }\r\n        }\r\n\r\n        @media (max-width: 420px) {\r\n            .cover-circle {\r\n                width: 160px;\r\n                height: 160px;\r\n            }\r\n            .ctrl-btn.play-main {\r\n                width: 65px;\r\n                height: 65px;\r\n                font-size: 28px;\r\n            }\r\n            .ctrl-btn {\r\n                width: 50px;\r\n                height: 50px;\r\n                font-size: 20px;\r\n            }\r\n            #title {\r\n                font-size: 1.25rem;\r\n            }\r\n        }\r\n\r\n        button {\r\n            touch-action: manipulation;\r\n        }\r\n\r\n        \/* Notificaci\u00f3n de autoplay (flotante) *\/\r\n        .autoplay-hint {\r\n            position: fixed;\r\n            bottom: 25px;\r\n            left: 50%;\r\n            transform: translateX(-50%);\r\n            background: rgba(0,0,0,0.88);\r\n            backdrop-filter: blur(12px);\r\n            color: white;\r\n            padding: 14px 28px;\r\n            border-radius: 70px;\r\n            font-size: 15px;\r\n            font-weight: 500;\r\n            z-index: 200;\r\n            border: 1px solid #ffb48a;\r\n            pointer-events: none;\r\n            transition: opacity 0.3s;\r\n            white-space: nowrap;\r\n            font-family: monospace;\r\n            letter-spacing: 0.5px;\r\n        }\r\n        @media (max-width: 550px) {\r\n            .autoplay-hint {\r\n                font-size: 12px;\r\n                padding: 10px 20px;\r\n                white-space: nowrap;\r\n            }\r\n        }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div class=\"radio-container\">\r\n    <div class=\"player-card\">\r\n        <div class=\"player-inner\">\r\n            <!-- Portada + badge live -->\r\n            <div class=\"artwork-zone\">\r\n                <div class=\"cover-circle\">\r\n                    <img decoding=\"async\" id=\"album-art\" src=\"https:\/\/radionorandino1240amstgodechuco.com\/wp-content\/uploads\/2026\/05\/norandino.png\" alt=\"Radio Nor Andino\">\r\n                <\/div>\r\n                <div class=\"live-badge\">\r\n                    <i class=\"fas fa-circle\"><\/i> EN VIVO\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- T\u00edtulo y artista -->\r\n            <div class=\"track-info\">\r\n                <div id=\"title\">Radio Nor Andino<\/div>\r\n                <div id=\"artist\">Sonido de los Andes<\/div>\r\n            <\/div>\r\n\r\n            <!-- Controles principales -->\r\n            <div class=\"controls-row\">\r\n                <button class=\"ctrl-btn live-edge\" id=\"liveResetBtn\" title=\"Volver al directo (Live)\">\r\n                    <i class=\"fas fa-forward-step\"><\/i>\r\n                <\/button>\r\n                <button class=\"ctrl-btn play-main\" id=\"playPauseBtn\">\r\n                    <i class=\"fas fa-play\"><\/i>\r\n                <\/button>\r\n                <button class=\"ctrl-btn\" id=\"reloadStreamBtn\" title=\"Recargar stream\">\r\n                    <i class=\"fas fa-rotate-right\"><\/i>\r\n                <\/button>\r\n            <\/div>\r\n\r\n            <!-- Volumen t\u00e1ctil -->\r\n            <div class=\"volume-panel\">\r\n                <i id=\"muteIcon\" class=\"fas fa-volume-up\"><\/i>\r\n                <input type=\"range\" id=\"volumeRange\" min=\"0\" max=\"1\" step=\"0.01\" value=\"0.85\">\r\n            <\/div>\r\n\r\n            <!-- Estado de la transmisi\u00f3n -->\r\n            <div class=\"status-area\" id=\"statusMsg\">\r\n                <i class=\"fas fa-head-side-headphones\"><\/i> <span id=\"statusText\">Cargando emisora...<\/span>\r\n            <\/div>\r\n\r\n            <!-- Redes sociales -->\r\n            <div class=\"social-bar\">\r\n                <a href=\"https:\/\/www.facebook.com\/profile.php?id=61559798416889&locale=es_LA\" target=\"_blank\" class=\"social-icon\" aria-label=\"Facebook\">\r\n                    <img decoding=\"async\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/b\/b8\/2021_Facebook_icon.svg\" alt=\"FB\">\r\n                <\/a>\r\n                <a href=\"https:\/\/wa.me\/51993010425\" target=\"_blank\" class=\"social-icon\" aria-label=\"WhatsApp\">\r\n                    <img decoding=\"async\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/6\/6b\/WhatsApp.svg\" alt=\"WA\">\r\n                <\/a>\r\n                <a href=\"https:\/\/www.facebook.com\/profile.php?id=61559798416889&sk=reels_tab&locale=es_LA\" target=\"_blank\" class=\"social-icon\" aria-label=\"YouTube\">\r\n                    <img decoding=\"async\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/0\/09\/YouTube_full-color_icon_%282017%29.svg\" alt=\"YT\">\r\n                <\/a>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\n    \/\/ ========== CONFIGURACI\u00d3N DEL STREAM ==========\r\n    const STREAM_URL = \"https:\/\/server.streamingradios.net:8198\/;\";\r\n    const METADATA_API = \"https:\/\/server.streamingradios.net\/cp\/get_info.php?p=8198\";\r\n    const PROXY_CORS = \"https:\/\/api.allorigins.win\/get?url=\";\r\n    const DEFAULT_COVER = \"https:\/\/radionorandino1240amstgodechuco.com\/wp-content\/uploads\/2026\/05\/norandino.png\";\r\n\r\n    \/\/ Elementos DOM\r\n    const audio = new Audio();\r\n    audio.preload = \"auto\";\r\n    audio.crossOrigin = \"anonymous\";\r\n\r\n    const playPauseBtn = document.getElementById('playPauseBtn');\r\n    const liveResetBtn = document.getElementById('liveResetBtn');\r\n    const reloadStreamBtn = document.getElementById('reloadStreamBtn');\r\n    const volumeRange = document.getElementById('volumeRange');\r\n    const muteIcon = document.getElementById('muteIcon');\r\n    const statusSpan = document.getElementById('statusText');\r\n    const albumImg = document.getElementById('album-art');\r\n    const titleElement = document.getElementById('title');\r\n    const artistElement = document.getElementById('artist');\r\n\r\n    \/\/ Estados\r\n    let isPlaying = false;\r\n    let isLoading = false;\r\n    let currentMetaTitle = \"\";\r\n    let lastVolume = 0.85;\r\n\r\n    \/\/ UI helpers\r\n    function setStatus(text, isBuffering = false) {\r\n        if (isBuffering) {\r\n            statusSpan.innerHTML = `<span class=\"spinner-dot\"><\/span> ${text}`;\r\n        } else {\r\n            statusSpan.innerHTML = text;\r\n        }\r\n    }\r\n\r\n    function updatePlayButton(playing) {\r\n        if (playing) {\r\n            playPauseBtn.innerHTML = '<i class=\"fas fa-pause\"><\/i>';\r\n        } else {\r\n            playPauseBtn.innerHTML = '<i class=\"fas fa-play\"><\/i>';\r\n        }\r\n    }\r\n\r\n    \/\/ ========== FUNCI\u00d3N CLAVE: RESET Y REPRODUCCI\u00d3N EN DIRECTO ==========\r\n    async function forceLiveAndPlay() {\r\n        if (isLoading) return;\r\n        isLoading = true;\r\n        const currentVol = audio.volume;\r\n        setStatus(\"Conectando al directo...\", true);\r\n        try {\r\n            audio.pause();\r\n            audio.src = '';\r\n            audio.load();\r\n            audio.src = STREAM_URL;\r\n            audio.load();\r\n            audio.volume = currentVol;\r\n\r\n            await new Promise((resolve) => {\r\n                const readyHandler = () => {\r\n                    audio.removeEventListener('canplay', readyHandler);\r\n                    resolve();\r\n                };\r\n                audio.addEventListener('canplay', readyHandler, { once: true });\r\n                setTimeout(resolve, 1300);\r\n            });\r\n\r\n            await audio.play();\r\n            isPlaying = true;\r\n            updatePlayButton(true);\r\n            setStatus(\"\ud83d\udd34 EN VIVO \u00b7 transmitiendo ahora\", false);\r\n        } catch (err) {\r\n            console.warn(\"ForceLive error:\", err);\r\n            setStatus(\"Toca PLAY para escuchar\", false);\r\n            isPlaying = false;\r\n            updatePlayButton(false);\r\n        } finally {\r\n            isLoading = false;\r\n        }\r\n    }\r\n\r\n    function pauseRadio() {\r\n        if (!isPlaying && audio.paused) return;\r\n        audio.pause();\r\n        isPlaying = false;\r\n        updatePlayButton(false);\r\n        setStatus(\"\u23f8 Pausado \u00b7 haz play para directo\", false);\r\n    }\r\n\r\n    \/\/ Smart Play: SIEMPRE resetea al directo, as\u00ed no queda buffer antiguo\r\n    async function smartPlay() {\r\n        if (isLoading) return;\r\n        if (isPlaying && !audio.paused) return;\r\n        await forceLiveAndPlay();\r\n    }\r\n\r\n    function togglePlayback() {\r\n        if (isPlaying && !audio.paused) {\r\n            pauseRadio();\r\n        } else {\r\n            smartPlay();\r\n        }\r\n    }\r\n\r\n    async function resetToLive() {\r\n        if (isLoading) return;\r\n        await forceLiveAndPlay();\r\n    }\r\n\r\n    \/\/ ========== VOLUMEN ==========\r\n    function initVolume() {\r\n        audio.volume = 0.85;\r\n        volumeRange.value = 0.85;\r\n        lastVolume = 0.85;\r\n        muteIcon.className = \"fas fa-volume-up\";\r\n    }\r\n\r\n    volumeRange.addEventListener('input', (e) => {\r\n        let val = parseFloat(e.target.value);\r\n        audio.volume = val;\r\n        lastVolume = val;\r\n        muteIcon.className = val === 0 ? \"fas fa-volume-mute\" : \"fas fa-volume-up\";\r\n    });\r\n\r\n    muteIcon.addEventListener('click', () => {\r\n        if (audio.volume > 0) {\r\n            lastVolume = audio.volume;\r\n            audio.volume = 0;\r\n            volumeRange.value = 0;\r\n            muteIcon.className = \"fas fa-volume-mute\";\r\n        } else {\r\n            audio.volume = lastVolume;\r\n            volumeRange.value = lastVolume;\r\n            muteIcon.className = \"fas fa-volume-up\";\r\n        }\r\n    });\r\n\r\n    \/\/ ========== METADATA + CAR\u00c1TULA (iTunes) ==========\r\n    async function fetchMetadata() {\r\n        try {\r\n            const cacheBust = `&_=${Date.now()}`;\r\n            const proxyUrl = `${PROXY_CORS}${encodeURIComponent(METADATA_API + cacheBust)}`;\r\n            const response = await fetch(proxyUrl);\r\n            const data = await response.json();\r\n            const info = JSON.parse(data.contents);\r\n            if (info.title && info.title !== currentMetaTitle) {\r\n                currentMetaTitle = info.title;\r\n                let raw = info.title;\r\n                let artist = \"Radio Nor Andino\";\r\n                let song = raw;\r\n                if (raw.includes(' - ')) {\r\n                    const split = raw.split(' - ');\r\n                    artist = split[0].trim();\r\n                    song = split[1].trim();\r\n                } else {\r\n                    artist = \"Radio Nor Andino\";\r\n                    song = raw;\r\n                }\r\n                titleElement.innerText = song.length > 55 ? song.substring(0,52)+\"...\" : song;\r\n                artistElement.innerText = artist;\r\n                await fetchCoverFromiTunes(artist, song);\r\n            } else if (!currentMetaTitle && info.title) {\r\n                let raw = info.title;\r\n                if (raw.includes(' - ')) {\r\n                    const parts = raw.split(' - ');\r\n                    artistElement.innerText = parts[0];\r\n                    titleElement.innerText = parts[1];\r\n                    await fetchCoverFromiTunes(parts[0], parts[1]);\r\n                } else {\r\n                    titleElement.innerText = raw;\r\n                }\r\n            }\r\n        } catch (err) {\r\n            console.warn(\"Metadata error:\", err);\r\n        }\r\n    }\r\n\r\n    async function fetchCoverFromiTunes(artist, track) {\r\n        try {\r\n            if (!artist && !track) return;\r\n            let query = `${artist} ${track}`.replace(\/feat\\.|ft\\.|feat|ft|\\(|\\)\/gi, \"\").trim();\r\n            const searchUrl = `https:\/\/itunes.apple.com\/search?term=${encodeURIComponent(query)}&media=music&entity=song&limit=1`;\r\n            const res = await fetch(searchUrl);\r\n            const json = await res.json();\r\n            if (json.results && json.results.length > 0 && json.results[0].artworkUrl100) {\r\n                const highRes = json.results[0].artworkUrl100.replace('100x100bb.jpg', '600x600bb.jpg');\r\n                albumImg.src = highRes;\r\n                albumImg.style.objectFit = \"cover\";\r\n                return;\r\n            }\r\n            albumImg.src = DEFAULT_COVER;\r\n            albumImg.style.objectFit = \"contain\";\r\n        } catch (e) {\r\n            albumImg.src = DEFAULT_COVER;\r\n            albumImg.style.objectFit = \"contain\";\r\n        }\r\n    }\r\n\r\n    \/\/ ========== EVENTOS DEL AUDIO ==========\r\n    function bindAudioEvents() {\r\n        audio.addEventListener('play', () => {\r\n            isPlaying = true;\r\n            updatePlayButton(true);\r\n            setStatus(\"\ud83d\udd0a Sonando en vivo\", false);\r\n        });\r\n        audio.addEventListener('pause', () => {\r\n            if (!isLoading) {\r\n                isPlaying = false;\r\n                updatePlayButton(false);\r\n            }\r\n        });\r\n        audio.addEventListener('waiting', () => {\r\n            if (isPlaying) setStatus(\"Cargando buffer...\", true);\r\n        });\r\n        audio.addEventListener('canplay', () => {\r\n            if (isLoading) {\r\n                isLoading = false;\r\n                setStatus(\"En vivo\", false);\r\n            }\r\n        });\r\n        audio.addEventListener('error', () => {\r\n            setStatus(\"\u26a0\ufe0f Error de red \u00b7 pulsa LIVE\", false);\r\n            isLoading = false;\r\n            isPlaying = false;\r\n            updatePlayButton(false);\r\n        });\r\n        audio.addEventListener('ended', () => {\r\n            if (isPlaying) resetToLive();\r\n        });\r\n    }\r\n\r\n    \/\/ ========== AUTOPLAY AUTOM\u00c1TICO + GESTI\u00d3N DE POL\u00cdTICAS ==========\r\n    let autoHintRemoved = false;\r\n    function attemptAutoplay() {\r\n        const playPromise = audio.play();\r\n        if (playPromise !== undefined) {\r\n            playPromise.then(() => {\r\n                isPlaying = true;\r\n                updatePlayButton(true);\r\n                setStatus(\"\ud83d\udd34 EN DIRECTO\", false);\r\n                if (window.hintDiv) window.hintDiv.style.opacity = '0';\r\n            }).catch(() => {\r\n                \/\/ Autoplay bloqueado: mostramos hint amigable\r\n                if (!autoHintRemoved) {\r\n                    const hint = document.createElement('div');\r\n                    hint.className = 'autoplay-hint';\r\n                    hint.innerHTML = '\ud83c\udfa7 Toca en cualquier parte para iniciar la radio en vivo \ud83c\udfa4';\r\n                    document.body.appendChild(hint);\r\n                    window.hintDiv = hint;\r\n                    const removeHint = () => {\r\n                        if (hint && hint.parentNode) hint.style.opacity = '0';\r\n                        setTimeout(() => { if(hint && hint.parentNode) hint.remove(); }, 500);\r\n                        autoHintRemoved = true;\r\n                        document.removeEventListener('click', globalFirstClick);\r\n                        document.removeEventListener('touchstart', globalFirstClick);\r\n                    };\r\n                    const globalFirstClick = () => {\r\n                        smartPlay().catch(e=>console.log);\r\n                        removeHint();\r\n                    };\r\n                    document.addEventListener('click', globalFirstClick, { once: true });\r\n                    document.addEventListener('touchstart', globalFirstClick, { once: true });\r\n                    setTimeout(() => {\r\n                        if (hint && hint.parentNode && !autoHintRemoved) removeHint();\r\n                    }, 5500);\r\n                }\r\n                setStatus(\"\ud83c\udfb5 Presiona PLAY para escuchar\", false);\r\n                isPlaying = false;\r\n                updatePlayButton(false);\r\n            });\r\n        }\r\n    }\r\n\r\n    \/\/ ========== INICIO ==========\r\n    function init() {\r\n        bindAudioEvents();\r\n        initVolume();\r\n        audio.src = STREAM_URL;\r\n        audio.load();\r\n\r\n        playPauseBtn.addEventListener('click', togglePlayback);\r\n        liveResetBtn.addEventListener('click', resetToLive);\r\n        reloadStreamBtn.addEventListener('click', resetToLive);\r\n\r\n        fetchMetadata();\r\n        setInterval(fetchMetadata, 12000);\r\n\r\n        albumImg.src = DEFAULT_COVER;\r\n        attemptAutoplay();  \/\/ Intento autom\u00e1tico al cargar\r\n    }\r\n\r\n    window.addEventListener('load', init);\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Radio Nor Andino | Player HD para PC y M\u00f3vil EN VIVO Radio Nor Andino Sonido de los Andes Cargando emisora&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-15","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/radionorandino1240amstgodechuco.com\/index.php?rest_route=\/wp\/v2\/pages\/15","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/radionorandino1240amstgodechuco.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/radionorandino1240amstgodechuco.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/radionorandino1240amstgodechuco.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/radionorandino1240amstgodechuco.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15"}],"version-history":[{"count":43,"href":"https:\/\/radionorandino1240amstgodechuco.com\/index.php?rest_route=\/wp\/v2\/pages\/15\/revisions"}],"predecessor-version":[{"id":63,"href":"https:\/\/radionorandino1240amstgodechuco.com\/index.php?rest_route=\/wp\/v2\/pages\/15\/revisions\/63"}],"wp:attachment":[{"href":"https:\/\/radionorandino1240amstgodechuco.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}