{"id":729,"date":"2026-08-09T20:50:09","date_gmt":"2026-08-10T00:50:09","guid":{"rendered":"https:\/\/propiedades.yappweb.cl\/?page_id=729"},"modified":"2026-08-09T20:56:59","modified_gmt":"2026-08-10T00:56:59","slug":"radi","status":"publish","type":"page","link":"https:\/\/propiedades.yappweb.cl\/?page_id=729","title":{"rendered":"Radi"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"729\" class=\"elementor elementor-729\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3ef96b9 e-flex e-con-boxed e-con e-parent\" data-id=\"3ef96b9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5a3ca34 elementor-widget elementor-widget-html\" data-id=\"5a3ca34\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"yw-radio-app\">\r\n\r\n    <div class=\"yw-radio-card\">\r\n\r\n        <div class=\"yw-radio-live\">\r\n            <span class=\"yw-live-dot\"><\/span>\r\n            RADIO ONLINE\r\n        <\/div>\r\n\r\n        <div class=\"yw-radio-cover-wrap\">\r\n\r\n            <img decoding=\"async\"\r\n                id=\"yw-radio-cover\"\r\n                class=\"yw-radio-cover\"\r\n                src=\"\"\r\n                alt=\"\"\r\n            >\r\n\r\n            <div\r\n                id=\"yw-radio-cover-placeholder\"\r\n                class=\"yw-radio-cover-placeholder\"\r\n            >\r\n                \u266a\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n        <div class=\"yw-radio-content\">\r\n\r\n            <div class=\"yw-radio-label\">\r\n                AHORA SUENA\r\n            <\/div>\r\n\r\n            <h2 id=\"yw-radio-title\">\r\n                Cargando radio...\r\n            <\/h2>\r\n\r\n            <div id=\"yw-radio-artist\" class=\"yw-radio-artist\">\r\n                \u2014\r\n            <\/div>\r\n\r\n            <div class=\"yw-radio-progress\">\r\n\r\n                <div class=\"yw-radio-progress-track\">\r\n\r\n                    <div\r\n                        id=\"yw-radio-progress-bar\"\r\n                        class=\"yw-radio-progress-bar\"\r\n                    ><\/div>\r\n\r\n                <\/div>\r\n\r\n                <div class=\"yw-radio-times\">\r\n\r\n                    <span id=\"yw-radio-current\">\r\n                        0:00\r\n                    <\/span>\r\n\r\n                    <span id=\"yw-radio-duration\">\r\n                        0:00\r\n                    <\/span>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n            <div class=\"yw-radio-controls\">\r\n\r\n                <button\r\n                    id=\"yw-radio-play\"\r\n                    class=\"yw-radio-play\"\r\n                    type=\"button\"\r\n                    aria-label=\"Escuchar radio\"\r\n                >\r\n\r\n                    <svg\r\n                        id=\"yw-radio-play-icon\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        aria-hidden=\"true\"\r\n                    >\r\n                        <path\r\n                            fill=\"currentColor\"\r\n                            d=\"M8 5v14l11-7z\"\r\n                        \/>\r\n                    <\/svg>\r\n\r\n                <\/button>\r\n\r\n                <div class=\"yw-volume\">\r\n\r\n                    <svg\r\n                        viewBox=\"0 0 24 24\"\r\n                        aria-hidden=\"true\"\r\n                    >\r\n                        <path\r\n                            fill=\"currentColor\"\r\n                            d=\"M3 9v6h4l5 5V4L7 9H3zm13.5 3a4.5 4.5 0 0 0-2.5-4.03v8.05A4.5 4.5 0 0 0 16.5 12zm0-8.5v2.06A7 7 0 0 1 19 12a7 7 0 0 1-2.5 6.44v2.06A9 9 0 0 0 21 12a9 9 0 0 0-4.5-8.5z\"\r\n                        \/>\r\n                    <\/svg>\r\n\r\n                    <input\r\n                        id=\"yw-radio-volume\"\r\n                        type=\"range\"\r\n                        min=\"0\"\r\n                        max=\"1\"\r\n                        value=\".8\"\r\n                        step=\".01\"\r\n                        aria-label=\"Volumen\"\r\n                    >\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n            <div\r\n                id=\"yw-radio-status\"\r\n                class=\"yw-radio-status\"\r\n            >\r\n                Presiona Play para escuchar\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n        <div class=\"yw-radio-next\">\r\n\r\n            <div class=\"yw-next-label\">\r\n                SIGUIENTE\r\n            <\/div>\r\n\r\n            <strong id=\"yw-next-title\">\r\n                \u2014\r\n            <\/strong>\r\n\r\n            <span id=\"yw-next-artist\">\r\n                \u2014\r\n            <\/span>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <audio\r\n        id=\"yw-radio-audio\"\r\n        preload=\"auto\"\r\n        playsinline\r\n    ><\/audio>\r\n\r\n<\/div>\r\n\r\n<style>\r\n\r\n#yw-radio-app,\r\n#yw-radio-app *{\r\n    box-sizing:border-box;\r\n}\r\n\r\n#yw-radio-app{\r\n    --bg:#080808;\r\n    --card:#111111;\r\n    --card2:#171717;\r\n    --text:#ffffff;\r\n    --muted:#8d8d98;\r\n    --accent:#6b00ff;\r\n    --accent2:#b400f5;\r\n\r\n    width:100%;\r\n    max-width:1100px;\r\n    margin:0 auto;\r\n\r\n    font-family:Inter,Arial,sans-serif;\r\n}\r\n\r\n.yw-radio-card{\r\n    position:relative;\r\n\r\n    display:grid;\r\n\r\n    grid-template-columns:260px 1fr 220px;\r\n\r\n    gap:32px;\r\n\r\n    align-items:center;\r\n\r\n    padding:32px;\r\n\r\n    border-radius:26px;\r\n\r\n    background:\r\n        radial-gradient(\r\n            circle at 15% 10%,\r\n            rgba(107,0,255,.18),\r\n            transparent 35%\r\n        ),\r\n        linear-gradient(\r\n            135deg,\r\n            #111,\r\n            #080808\r\n        );\r\n\r\n    border:1px solid rgba(255,255,255,.08);\r\n\r\n    color:var(--text);\r\n\r\n    overflow:hidden;\r\n}\r\n\r\n.yw-radio-live{\r\n    position:absolute;\r\n\r\n    top:22px;\r\n    left:24px;\r\n\r\n    z-index:3;\r\n\r\n    display:flex;\r\n\r\n    align-items:center;\r\n\r\n    gap:8px;\r\n\r\n    font-size:11px;\r\n\r\n    font-weight:800;\r\n\r\n    letter-spacing:1.5px;\r\n}\r\n\r\n.yw-live-dot{\r\n    width:8px;\r\n    height:8px;\r\n\r\n    border-radius:50%;\r\n\r\n    background:#ff2449;\r\n\r\n    box-shadow:\r\n        0 0 0 4px rgba(255,36,73,.12),\r\n        0 0 15px rgba(255,36,73,.65);\r\n\r\n    animation:\r\n        ywRadioPulse 1.4s infinite;\r\n}\r\n\r\n@keyframes ywRadioPulse{\r\n\r\n    0%,100%{\r\n        opacity:1;\r\n    }\r\n\r\n    50%{\r\n        opacity:.4;\r\n    }\r\n\r\n}\r\n\r\n.yw-radio-cover-wrap{\r\n    position:relative;\r\n\r\n    width:100%;\r\n\r\n    aspect-ratio:1\/1;\r\n\r\n    border-radius:20px;\r\n\r\n    overflow:hidden;\r\n\r\n    background:#181818;\r\n}\r\n\r\n.yw-radio-cover{\r\n    display:none;\r\n\r\n    width:100%;\r\n    height:100%;\r\n\r\n    object-fit:cover;\r\n}\r\n\r\n.yw-radio-cover-placeholder{\r\n    display:flex;\r\n\r\n    width:100%;\r\n    height:100%;\r\n\r\n    align-items:center;\r\n    justify-content:center;\r\n\r\n    font-size:80px;\r\n\r\n    color:rgba(255,255,255,.25);\r\n\r\n    background:\r\n        radial-gradient(\r\n            circle,\r\n            #32106b,\r\n            #111\r\n        );\r\n}\r\n\r\n.yw-radio-content{\r\n    min-width:0;\r\n}\r\n\r\n.yw-radio-label,\r\n.yw-next-label{\r\n    margin-bottom:9px;\r\n\r\n    font-size:10px;\r\n\r\n    font-weight:800;\r\n\r\n    letter-spacing:1.7px;\r\n\r\n    color:var(--muted);\r\n}\r\n\r\n#yw-radio-title{\r\n    margin:0 0 6px 0;\r\n\r\n    color:#fff;\r\n\r\n    font-size:clamp(27px,4vw,50px);\r\n\r\n    line-height:1.03;\r\n\r\n    font-weight:800;\r\n\r\n    overflow:hidden;\r\n\r\n    white-space:nowrap;\r\n\r\n    text-overflow:ellipsis;\r\n}\r\n\r\n.yw-radio-artist{\r\n    font-size:17px;\r\n\r\n    color:var(--muted);\r\n\r\n    overflow:hidden;\r\n\r\n    white-space:nowrap;\r\n\r\n    text-overflow:ellipsis;\r\n}\r\n\r\n.yw-radio-progress{\r\n    margin-top:27px;\r\n}\r\n\r\n.yw-radio-progress-track{\r\n    position:relative;\r\n\r\n    height:4px;\r\n\r\n    border-radius:50px;\r\n\r\n    background:rgba(255,255,255,.12);\r\n\r\n    overflow:hidden;\r\n}\r\n\r\n.yw-radio-progress-bar{\r\n    width:0;\r\n\r\n    height:100%;\r\n\r\n    border-radius:50px;\r\n\r\n    background:\r\n        linear-gradient(\r\n            90deg,\r\n            var(--accent),\r\n            var(--accent2)\r\n        );\r\n\r\n    transition:\r\n        width .3s linear;\r\n}\r\n\r\n.yw-radio-times{\r\n    display:flex;\r\n\r\n    justify-content:space-between;\r\n\r\n    margin-top:7px;\r\n\r\n    color:var(--muted);\r\n\r\n    font-size:11px;\r\n}\r\n\r\n.yw-radio-controls{\r\n    display:flex;\r\n\r\n    align-items:center;\r\n\r\n    gap:24px;\r\n\r\n    margin-top:16px;\r\n}\r\n\r\n.yw-radio-play{\r\n    display:flex;\r\n\r\n    width:64px;\r\n    height:64px;\r\n\r\n    align-items:center;\r\n\r\n    justify-content:center;\r\n\r\n    flex:none;\r\n\r\n    border:0;\r\n\r\n    border-radius:50%;\r\n\r\n    cursor:pointer;\r\n\r\n    color:#fff;\r\n\r\n    background:\r\n        linear-gradient(\r\n            135deg,\r\n            var(--accent),\r\n            var(--accent2)\r\n        );\r\n\r\n    box-shadow:\r\n        0 8px 30px rgba(107,0,255,.3);\r\n\r\n    transition:\r\n        transform .2s ease,\r\n        box-shadow .2s ease;\r\n}\r\n\r\n.yw-radio-play:hover{\r\n    transform:scale(1.06);\r\n\r\n    box-shadow:\r\n        0 10px 35px rgba(107,0,255,.45);\r\n}\r\n\r\n.yw-radio-play svg{\r\n    width:27px;\r\n    height:27px;\r\n}\r\n\r\n.yw-volume{\r\n    display:flex;\r\n\r\n    align-items:center;\r\n\r\n    gap:10px;\r\n}\r\n\r\n.yw-volume svg{\r\n    width:21px;\r\n    height:21px;\r\n\r\n    color:var(--muted);\r\n}\r\n\r\n.yw-volume input{\r\n    width:125px;\r\n\r\n    accent-color:var(--accent2);\r\n}\r\n\r\n.yw-radio-status{\r\n    margin-top:13px;\r\n\r\n    color:var(--muted);\r\n\r\n    font-size:11px;\r\n}\r\n\r\n.yw-radio-next{\r\n    padding:21px;\r\n\r\n    border-radius:18px;\r\n\r\n    background:rgba(255,255,255,.045);\r\n\r\n    border:1px solid rgba(255,255,255,.06);\r\n}\r\n\r\n.yw-radio-next strong{\r\n    display:block;\r\n\r\n    margin-bottom:5px;\r\n\r\n    font-size:15px;\r\n\r\n    color:#fff;\r\n}\r\n\r\n.yw-radio-next span{\r\n    display:block;\r\n\r\n    color:var(--muted);\r\n\r\n    font-size:12px;\r\n}\r\n\r\n@media(max-width:850px){\r\n\r\n    .yw-radio-card{\r\n        grid-template-columns:180px 1fr;\r\n    }\r\n\r\n    .yw-radio-next{\r\n        grid-column:1\/-1;\r\n    }\r\n\r\n}\r\n\r\n@media(max-width:600px){\r\n\r\n    .yw-radio-card{\r\n        display:block;\r\n\r\n        padding:\r\n            65px\r\n            20px\r\n            20px;\r\n\r\n        border-radius:22px;\r\n    }\r\n\r\n    .yw-radio-cover-wrap{\r\n        width:100%;\r\n\r\n        max-width:320px;\r\n\r\n        margin:0 auto 25px;\r\n    }\r\n\r\n    #yw-radio-title{\r\n        font-size:32px;\r\n\r\n        white-space:normal;\r\n    }\r\n\r\n    .yw-radio-artist{\r\n        font-size:15px;\r\n    }\r\n\r\n    .yw-radio-next{\r\n        margin-top:25px;\r\n    }\r\n\r\n    .yw-radio-controls{\r\n        justify-content:space-between;\r\n    }\r\n\r\n    .yw-volume input{\r\n        width:100px;\r\n    }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n<script>\r\n\r\n(function(){\r\n\r\n    const API =\r\n        window.location.origin +\r\n        '\/?rest_route=\/yw-radio\/v1\/playlist';\r\n\r\n    const audio =\r\n        document.getElementById(\r\n            'yw-radio-audio'\r\n        );\r\n\r\n    const playButton =\r\n        document.getElementById(\r\n            'yw-radio-play'\r\n        );\r\n\r\n    const playIcon =\r\n        document.getElementById(\r\n            'yw-radio-play-icon'\r\n        );\r\n\r\n    const title =\r\n        document.getElementById(\r\n            'yw-radio-title'\r\n        );\r\n\r\n    const artist =\r\n        document.getElementById(\r\n            'yw-radio-artist'\r\n        );\r\n\r\n    const cover =\r\n        document.getElementById(\r\n            'yw-radio-cover'\r\n        );\r\n\r\n    const coverPlaceholder =\r\n        document.getElementById(\r\n            'yw-radio-cover-placeholder'\r\n        );\r\n\r\n    const nextTitle =\r\n        document.getElementById(\r\n            'yw-next-title'\r\n        );\r\n\r\n    const nextArtist =\r\n        document.getElementById(\r\n            'yw-next-artist'\r\n        );\r\n\r\n    const progressBar =\r\n        document.getElementById(\r\n            'yw-radio-progress-bar'\r\n        );\r\n\r\n    const currentTimeText =\r\n        document.getElementById(\r\n            'yw-radio-current'\r\n        );\r\n\r\n    const durationText =\r\n        document.getElementById(\r\n            'yw-radio-duration'\r\n        );\r\n\r\n    const volume =\r\n        document.getElementById(\r\n            'yw-radio-volume'\r\n        );\r\n\r\n    const status =\r\n        document.getElementById(\r\n            'yw-radio-status'\r\n        );\r\n\r\n    let songs = [];\r\n\r\n    let totalDuration = 0;\r\n\r\n    let serverDelta = 0;\r\n\r\n    let currentIndex = -1;\r\n\r\n    let userStarted = false;\r\n\r\n    let loadingSong = false;\r\n\r\n    audio.volume = .8;\r\n\r\n    function formatTime(seconds){\r\n\r\n        seconds =\r\n            Math.max(\r\n                0,\r\n                Math.floor(seconds || 0)\r\n            );\r\n\r\n        const m =\r\n            Math.floor(seconds \/ 60);\r\n\r\n        const s =\r\n            seconds % 60;\r\n\r\n        return (\r\n            m +\r\n            ':' +\r\n            String(s).padStart(2,'0')\r\n        );\r\n\r\n    }\r\n\r\n    function getServerTime(){\r\n\r\n        return (\r\n            Date.now() \/ 1000\r\n        ) + serverDelta;\r\n\r\n    }\r\n\r\n    function getScheduledPosition(){\r\n\r\n        if(\r\n            !songs.length ||\r\n            totalDuration <= 0\r\n        ){\r\n            return null;\r\n        }\r\n\r\n        let cyclePosition =\r\n            getServerTime() %\r\n            totalDuration;\r\n\r\n        let accumulated = 0;\r\n\r\n        for(\r\n            let i = 0;\r\n            i < songs.length;\r\n            i++\r\n        ){\r\n\r\n            const end =\r\n                accumulated +\r\n                Number(\r\n                    songs[i].duration\r\n                );\r\n\r\n            if(cyclePosition < end){\r\n\r\n                return {\r\n\r\n                    index:i,\r\n\r\n                    offset:\r\n                        cyclePosition -\r\n                        accumulated\r\n\r\n                };\r\n\r\n            }\r\n\r\n            accumulated = end;\r\n\r\n        }\r\n\r\n        return {\r\n            index:0,\r\n            offset:0\r\n        };\r\n\r\n    }\r\n\r\n    function updateSongUI(index){\r\n\r\n        const song =\r\n            songs[index];\r\n\r\n        if(!song){\r\n            return;\r\n        }\r\n\r\n        title.textContent =\r\n            song.title ||\r\n            'Sin t\u00edtulo';\r\n\r\n        artist.textContent =\r\n            song.artist ||\r\n            'Artista desconocido';\r\n\r\n        durationText.textContent =\r\n            formatTime(\r\n                song.duration\r\n            );\r\n\r\n        if(song.cover){\r\n\r\n            cover.src =\r\n                song.cover;\r\n\r\n            cover.style.display =\r\n                'block';\r\n\r\n            coverPlaceholder.style.display =\r\n                'none';\r\n\r\n        }else{\r\n\r\n            cover.removeAttribute('src');\r\n\r\n            cover.style.display =\r\n                'none';\r\n\r\n            coverPlaceholder.style.display =\r\n                'flex';\r\n\r\n        }\r\n\r\n        const nextIndex =\r\n            (index + 1) %\r\n            songs.length;\r\n\r\n        const nextSong =\r\n            songs[nextIndex];\r\n\r\n        nextTitle.textContent =\r\n            nextSong\r\n                ? nextSong.title\r\n                : '\u2014';\r\n\r\n        nextArtist.textContent =\r\n            nextSong\r\n                ? (\r\n                    nextSong.artist ||\r\n                    'Artista desconocido'\r\n                )\r\n                : '\u2014';\r\n\r\n    }\r\n\r\n    function setPlayIcon(playing){\r\n\r\n        if(playing){\r\n\r\n            playIcon.innerHTML = `\r\n                <path\r\n                    fill=\"currentColor\"\r\n                    d=\"M6 5h4v14H6zm8 0h4v14h-4z\"\r\n                \/>\r\n            `;\r\n\r\n        }else{\r\n\r\n            playIcon.innerHTML = `\r\n                <path\r\n                    fill=\"currentColor\"\r\n                    d=\"M8 5v14l11-7z\"\r\n                \/>\r\n            `;\r\n\r\n        }\r\n\r\n    }\r\n\r\n    function waitForMetadata(){\r\n\r\n        return new Promise(resolve => {\r\n\r\n            if(audio.readyState >= 1){\r\n\r\n                resolve();\r\n\r\n                return;\r\n            }\r\n\r\n            let finished = false;\r\n\r\n            const complete = () => {\r\n\r\n                if(finished){\r\n                    return;\r\n                }\r\n\r\n                finished = true;\r\n\r\n                audio.removeEventListener(\r\n                    'loadedmetadata',\r\n                    complete\r\n                );\r\n\r\n                resolve();\r\n\r\n            };\r\n\r\n            audio.addEventListener(\r\n                'loadedmetadata',\r\n                complete\r\n            );\r\n\r\n            setTimeout(\r\n                complete,\r\n                5000\r\n            );\r\n\r\n        });\r\n\r\n    }\r\n\r\n    async function tuneToLive(forcePlay){\r\n\r\n        const scheduled =\r\n            getScheduledPosition();\r\n\r\n        if(!scheduled){\r\n            return;\r\n        }\r\n\r\n        const song =\r\n            songs[scheduled.index];\r\n\r\n        if(!song){\r\n            return;\r\n        }\r\n\r\n        const changedSong =\r\n            currentIndex !==\r\n            scheduled.index;\r\n\r\n        if(changedSong){\r\n\r\n            loadingSong = true;\r\n\r\n            currentIndex =\r\n                scheduled.index;\r\n\r\n            updateSongUI(\r\n                currentIndex\r\n            );\r\n\r\n            audio.src =\r\n                song.audio;\r\n\r\n            audio.load();\r\n\r\n            await waitForMetadata();\r\n\r\n            loadingSong = false;\r\n\r\n        }\r\n\r\n        try{\r\n\r\n            const correctPosition =\r\n                getScheduledPosition();\r\n\r\n            if(\r\n                correctPosition &&\r\n                correctPosition.index ===\r\n                currentIndex\r\n            ){\r\n\r\n                const target =\r\n                    Math.max(\r\n                        0,\r\n                        Math.min(\r\n                            correctPosition.offset,\r\n                            Math.max(\r\n                                0,\r\n                                Number(\r\n                                    song.duration\r\n                                ) - .3\r\n                            )\r\n                        )\r\n                    );\r\n\r\n                if(\r\n                    Math.abs(\r\n                        audio.currentTime -\r\n                        target\r\n                    ) > 1.5\r\n                ){\r\n\r\n                    audio.currentTime =\r\n                        target;\r\n\r\n                }\r\n\r\n            }\r\n\r\n        }catch(e){\r\n\r\n            console.warn(\r\n                'No se pudo sincronizar currentTime:',\r\n                e\r\n            );\r\n\r\n        }\r\n\r\n        if(\r\n            forcePlay &&\r\n            userStarted\r\n        ){\r\n\r\n            try{\r\n\r\n                await audio.play();\r\n\r\n                setPlayIcon(true);\r\n\r\n                status.textContent =\r\n                    '\u25cf Escuchando en vivo';\r\n\r\n            }catch(e){\r\n\r\n                setPlayIcon(false);\r\n\r\n                status.textContent =\r\n                    'Presiona Play para escuchar';\r\n\r\n            }\r\n\r\n        }\r\n\r\n    }\r\n\r\n    async function loadRadio(){\r\n\r\n        try{\r\n\r\n            status.textContent =\r\n                'Conectando con la radio...';\r\n\r\n            const requestStarted =\r\n                Date.now() \/ 1000;\r\n\r\n            const response =\r\n                await fetch(\r\n                    API +\r\n                    '&t=' +\r\n                    Date.now(),\r\n                    {\r\n                        method:'GET',\r\n                        cache:'no-store',\r\n                        credentials:'same-origin'\r\n                    }\r\n                );\r\n\r\n            if(!response.ok){\r\n\r\n                throw new Error(\r\n                    'HTTP ' +\r\n                    response.status\r\n                );\r\n\r\n            }\r\n\r\n            const data =\r\n                await response.json();\r\n\r\n            const requestEnded =\r\n                Date.now() \/ 1000;\r\n\r\n            const estimatedClientTime =\r\n                (\r\n                    requestStarted +\r\n                    requestEnded\r\n                ) \/ 2;\r\n\r\n            serverDelta =\r\n                Number(\r\n                    data.server_time\r\n                ) -\r\n                estimatedClientTime;\r\n\r\n            songs =\r\n                Array.isArray(\r\n                    data.songs\r\n                )\r\n                    ? data.songs\r\n                    : [];\r\n\r\n            totalDuration =\r\n                Number(\r\n                    data.total_duration\r\n                ) || 0;\r\n\r\n            if(\r\n                !data.success ||\r\n                !songs.length\r\n            ){\r\n\r\n                title.textContent =\r\n                    'Radio sin canciones';\r\n\r\n                artist.textContent =\r\n                    'Agrega canciones desde WordPress';\r\n\r\n                status.textContent =\r\n                    'No hay canciones publicadas.';\r\n\r\n                return;\r\n            }\r\n\r\n            if(totalDuration <= 0){\r\n\r\n                throw new Error(\r\n                    'Duraci\u00f3n total inv\u00e1lida'\r\n                );\r\n\r\n            }\r\n\r\n            await tuneToLive(false);\r\n\r\n            status.textContent =\r\n                'Presiona Play para escuchar';\r\n\r\n        }catch(error){\r\n\r\n            console.error(\r\n                'YappWeb Radio:',\r\n                error\r\n            );\r\n\r\n            title.textContent =\r\n                'Radio no disponible';\r\n\r\n            artist.textContent =\r\n                'No se pudo cargar la playlist';\r\n\r\n            status.textContent =\r\n                'Error de conexi\u00f3n';\r\n\r\n        }\r\n\r\n    }\r\n\r\n    playButton.addEventListener(\r\n        'click',\r\n        async function(){\r\n\r\n            if(!songs.length){\r\n                return;\r\n            }\r\n\r\n            if(!userStarted){\r\n\r\n                userStarted = true;\r\n\r\n                await tuneToLive(true);\r\n\r\n                return;\r\n\r\n            }\r\n\r\n            if(audio.paused){\r\n\r\n                await tuneToLive(true);\r\n\r\n            }else{\r\n\r\n                audio.pause();\r\n\r\n                setPlayIcon(false);\r\n\r\n                status.textContent =\r\n                    'Radio pausada';\r\n\r\n            }\r\n\r\n        }\r\n    );\r\n\r\n    volume.addEventListener(\r\n        'input',\r\n        function(){\r\n\r\n            audio.volume =\r\n                Number(\r\n                    this.value\r\n                );\r\n\r\n        }\r\n    );\r\n\r\n    audio.addEventListener(\r\n        'ended',\r\n        function(){\r\n\r\n            if(userStarted){\r\n\r\n                tuneToLive(true);\r\n\r\n            }\r\n\r\n        }\r\n    );\r\n\r\n    audio.addEventListener(\r\n        'error',\r\n        function(){\r\n\r\n            if(\r\n                !audio.error\r\n            ){\r\n                return;\r\n            }\r\n\r\n            console.error(\r\n                'Error de audio:',\r\n                audio.error\r\n            );\r\n\r\n            status.textContent =\r\n                'Error al cargar el audio';\r\n\r\n        }\r\n    );\r\n\r\n    setInterval(\r\n        function(){\r\n\r\n            const scheduled =\r\n                getScheduledPosition();\r\n\r\n            if(\r\n                !scheduled ||\r\n                !songs[\r\n                    scheduled.index\r\n                ]\r\n            ){\r\n                return;\r\n            }\r\n\r\n            const song =\r\n                songs[\r\n                    scheduled.index\r\n                ];\r\n\r\n            if(\r\n                scheduled.index !==\r\n                currentIndex &&\r\n                !loadingSong\r\n            ){\r\n\r\n                tuneToLive(\r\n                    userStarted &&\r\n                    !audio.paused\r\n                );\r\n\r\n                return;\r\n            }\r\n\r\n            const percent =\r\n                Number(\r\n                    song.duration\r\n                ) > 0\r\n                    ? (\r\n                        scheduled.offset \/\r\n                        Number(\r\n                            song.duration\r\n                        )\r\n                    ) * 100\r\n                    : 0;\r\n\r\n            progressBar.style.width =\r\n                Math.max(\r\n                    0,\r\n                    Math.min(\r\n                        100,\r\n                        percent\r\n                    )\r\n                ) + '%';\r\n\r\n            currentTimeText.textContent =\r\n                formatTime(\r\n                    scheduled.offset\r\n                );\r\n\r\n            durationText.textContent =\r\n                formatTime(\r\n                    song.duration\r\n                );\r\n\r\n        },\r\n        500\r\n    );\r\n\r\n    setInterval(\r\n        function(){\r\n\r\n            if(\r\n                userStarted &&\r\n                !audio.paused\r\n            ){\r\n\r\n                const scheduled =\r\n                    getScheduledPosition();\r\n\r\n                if(\r\n                    scheduled &&\r\n                    scheduled.index ===\r\n                    currentIndex\r\n                ){\r\n\r\n                    if(\r\n                        Math.abs(\r\n                            audio.currentTime -\r\n                            scheduled.offset\r\n                        ) > 3\r\n                    ){\r\n\r\n                        try{\r\n\r\n                            audio.currentTime =\r\n                                scheduled.offset;\r\n\r\n                        }catch(e){}\r\n\r\n                    }\r\n\r\n                }else{\r\n\r\n                    tuneToLive(true);\r\n\r\n                }\r\n\r\n            }\r\n\r\n        },\r\n        15000\r\n    );\r\n\r\n    document.addEventListener(\r\n        'visibilitychange',\r\n        function(){\r\n\r\n            if(\r\n                !document.hidden &&\r\n                userStarted &&\r\n                !audio.paused\r\n            ){\r\n\r\n                tuneToLive(true);\r\n\r\n            }\r\n\r\n        }\r\n    );\r\n\r\n    loadRadio();\r\n\r\n})();\r\n\r\n<\/script>\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 ONLINE \u266a AHORA SUENA Cargando radio&#8230; \u2014 0:00 0:00 Presiona Play para escuchar SIGUIENTE \u2014 \u2014<\/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-729","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/propiedades.yappweb.cl\/index.php?rest_route=\/wp\/v2\/pages\/729","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/propiedades.yappweb.cl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/propiedades.yappweb.cl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/propiedades.yappweb.cl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/propiedades.yappweb.cl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=729"}],"version-history":[{"count":9,"href":"https:\/\/propiedades.yappweb.cl\/index.php?rest_route=\/wp\/v2\/pages\/729\/revisions"}],"predecessor-version":[{"id":746,"href":"https:\/\/propiedades.yappweb.cl\/index.php?rest_route=\/wp\/v2\/pages\/729\/revisions\/746"}],"wp:attachment":[{"href":"https:\/\/propiedades.yappweb.cl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}