{"id":61,"date":"2026-08-12T12:20:20","date_gmt":"2026-08-12T16:20:20","guid":{"rendered":"https:\/\/realrockrevival.com\/?page_id=61"},"modified":"2026-08-15T16:32:45","modified_gmt":"2026-08-15T20:32:45","slug":"new-home","status":"publish","type":"page","link":"https:\/\/realrockrevival.com\/","title":{"rendered":"New Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"61\" class=\"elementor elementor-61\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-363a36f e-con-full e-flex e-con e-parent\" data-id=\"363a36f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4baf43d elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"4baf43d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ==========================================================\n   REAL ROCK REVIVAL \u2014 HOME HERO\n   DIGITAL WAVE VERSION\n   ========================================================== *\/\n\n#rrr-home-hero {\n    --rrr-red: #cc1e20;\n    --rrr-red-bright: #ef2428;\n    --rrr-orange: #ff6a00;\n    --rrr-yellow: #ffc20e;\n    --rrr-white: #ffffff;\n    --rrr-muted: #b9b9b9;\n\n    position: relative;\n    isolation: isolate;\n    overflow: hidden;\n\n    width: 100%;\n    max-width: none;\n    margin: 0;\n    padding: 42px 0 36px;\n    box-sizing: border-box;\n\n    background:\n        linear-gradient(\n            145deg,\n            #151515 0%,\n            #090909 55%,\n            #111111 100%\n        );\n\n    border-top: 1px solid rgba(255,255,255,.04);\n    border-bottom: 1px solid rgba(255,255,255,.07);\n\n    color: var(--rrr-white);\n\n    font-family:\n        Arial,\n        Helvetica,\n        sans-serif;\n}\n\n\n\/* ==========================================================\n   MIRRORED DIGITAL BACKGROUND ANALYZER\n   ========================================================== *\/\n\n#rrr-bg-led-display {\n    position: absolute;\n\n    z-index: 0;\n\n    left: 0;\n    right: 0;\n\n    top: 54px;\n\n    height: 360px;\n\n    display: flex;\n    align-items: center;\n\n    gap: 4px;\n\n    padding: 0 1.2%;\n\n    box-sizing: border-box;\n\n    pointer-events: none;\n\n    \/* THIS IS THE .2 SETTING YOU LIKED *\/\n    opacity: .2;\n\n    -webkit-mask-image:\n        linear-gradient(\n            to bottom,\n            transparent 0%,\n            #000 18%,\n            #000 82%,\n            transparent 100%\n        );\n\n    mask-image:\n        linear-gradient(\n            to bottom,\n            transparent 0%,\n            #000 18%,\n            #000 82%,\n            transparent 100%\n        );\n}\n\n\n.rrr-bg-led-column {\n    flex: 1 1 0;\n\n    min-width: 0;\n\n    height: 100%;\n\n    display: flex;\n\n    flex-direction: column;\n\n    justify-content: center;\n\n    gap: 2px;\n}\n\n\n.rrr-bg-led {\n    width: 100%;\n\n    height: 4px;\n\n    border-radius: 1px;\n\n    background: #301012;\n\n    opacity: .12;\n}\n\n\n.rrr-bg-led.active.low {\n    background: #d91d24;\n\n    opacity: .85;\n\n    box-shadow:\n        0 0 3px\n        rgba(217,29,36,.25);\n}\n\n\n.rrr-bg-led.active.mid {\n    background: #ff7200;\n\n    opacity: .8;\n\n    box-shadow:\n        0 0 3px\n        rgba(255,114,0,.22);\n}\n\n\n.rrr-bg-led.active.high {\n    background: #ffc20e;\n\n    opacity: .75;\n\n    box-shadow:\n        0 0 4px\n        rgba(255,194,14,.18);\n}\n\n\n\/* ==========================================================\n   INNER WRAPPER\n   ========================================================== *\/\n\n.rrr-home-inner {\n    position: relative;\n\n    z-index: 2;\n\n    width: calc(100% - 56px);\n\n    max-width: 1400px;\n\n    margin: 0 auto;\n\n    box-sizing: border-box;\n}\n\n\n\/* ==========================================================\n   TOP ROW\n   ========================================================== *\/\n\n.rrr-home-top {\n    display: grid;\n\n    grid-template-columns:\n        1fr 1fr;\n\n    gap: 64px;\n\n    align-items: center;\n\n    padding-top: 10px;\n}\n\n\n\/* ==========================================================\n   LOGO\n   ========================================================== *\/\n\n.rrr-home-logo-wrap {\n    min-width: 0;\n\n    display: flex;\n\n    align-items: center;\n}\n\n\n.rrr-home-logo {\n    display: block;\n\n    width: 520px;\n\n    max-width: 100%;\n\n    height: auto;\n\n    filter:\n        drop-shadow(\n            0 14px 24px\n            rgba(0,0,0,.55)\n        )\n        drop-shadow(\n            0 0 10px\n            rgba(204,30,32,.08)\n        );\n}\n\n\n\/* ==========================================================\n   NOW PLAYING CARD\n   ========================================================== *\/\n\n.rrr-now-card {\n    width: 100%;\n\n    min-width: 0;\n\n    padding: 22px;\n\n    box-sizing: border-box;\n\n    background:\n        linear-gradient(\n            145deg,\n            rgba(255,255,255,.048),\n            rgba(255,255,255,.018)\n        );\n\n    border:\n        1px solid\n        rgba(255,255,255,.09);\n\n    border-radius: 18px;\n\n    box-shadow:\n        0 24px 55px\n        rgba(0,0,0,.45),\n\n        0 0 16px\n        rgba(204,30,32,.08),\n\n        inset 0 1px 0\n        rgba(255,255,255,.025);\n}\n\n\n.rrr-now-card-top {\n    display: flex;\n\n    align-items: center;\n\n    justify-content:\n        space-between;\n\n    gap: 12px;\n\n    margin-bottom: 18px;\n}\n\n\n.rrr-now-card-label {\n    display: flex;\n\n    align-items: center;\n\n    gap: 8px;\n\n    color:\n        var(--rrr-red-bright);\n\n    font-size: 13px;\n\n    font-weight: 900;\n\n    letter-spacing: 1.4px;\n\n    text-transform: uppercase;\n}\n\n\n.rrr-now-live-dot {\n    width: 9px;\n\n    height: 9px;\n\n    border-radius: 50%;\n\n    background:\n        var(--rrr-red-bright);\n\n    box-shadow:\n        0 0 5px\n        var(--rrr-red),\n\n        0 0 12px\n        rgba(239,36,40,.75);\n\n    animation:\n        rrrHomePulse\n        1.4s\n        ease-in-out\n        infinite;\n}\n\n\n#rrr-home-status {\n    color: #777777;\n\n    font-size: 11px;\n\n    font-weight: 700;\n\n    letter-spacing: .8px;\n\n    text-transform: uppercase;\n}\n\n\n.rrr-now-content {\n    display: grid;\n\n    grid-template-columns:\n        170px minmax(0,1fr);\n\n    gap: 22px;\n\n    align-items: center;\n}\n\n\n\/* ==========================================================\n   ALBUM ART\n   ========================================================== *\/\n\n.rrr-home-art-frame {\n    width: 170px;\n\n    height: 170px;\n\n    padding: 4px;\n\n    box-sizing: border-box;\n\n    border-radius: 16px;\n\n    background:\n        linear-gradient(\n            135deg,\n            var(--rrr-red),\n            var(--rrr-orange) 45%,\n            var(--rrr-yellow) 75%,\n            #ffffff\n        );\n\n    box-shadow:\n        0 0 16px\n        rgba(204,30,32,.32),\n\n        0 8px 20px\n        rgba(0,0,0,.28);\n}\n\n\n.rrr-home-art-frame img {\n    width: 100%;\n\n    height: 100%;\n\n    display: block;\n\n    object-fit: cover;\n\n    border-radius: 12px;\n\n    background: #090909;\n}\n\n\n\/* ==========================================================\n   SONG INFO\n   ========================================================== *\/\n\n.rrr-now-text {\n    min-width: 0;\n}\n\n\n.rrr-now-small {\n    margin-bottom: 7px;\n\n    color:\n        var(--rrr-yellow);\n\n    font-size: 12px;\n\n    font-weight: 900;\n\n    letter-spacing: 1.2px;\n\n    text-transform: uppercase;\n}\n\n\n#rrr-home-artist {\n    margin:\n        0 0 6px;\n\n    color: #ffffff;\n\n    font-size: 28px;\n\n    line-height: 1.05;\n\n    font-weight: 900;\n\n    text-transform: uppercase;\n}\n\n\n#rrr-home-song {\n    margin: 0;\n\n    color:\n        var(--rrr-muted);\n\n    font-size: 18px;\n\n    line-height: 1.35;\n\n    font-weight: 600;\n}\n\n\n\/* ==========================================================\n   FOREGROUND FIXED LED ANALYZER\n   ========================================================== *\/\n\n#rrr-home-led-display {\n    width: 100%;\n\n    max-width: 100%;\n\n    height: 68px;\n\n    margin-top: 17px;\n\n    padding:\n        8px 10px;\n\n    box-sizing: border-box;\n\n    display: flex;\n\n    align-items: stretch;\n\n    gap: 4px;\n\n    overflow: hidden;\n\n    border-radius: 7px;\n\n    background:\n        linear-gradient(\n            to bottom,\n            #060606,\n            #101010\n        );\n\n    border:\n        1px solid\n        rgba(255,255,255,.08);\n\n    box-shadow:\n        inset 0 0 18px\n        rgba(0,0,0,.95),\n\n        0 0 12px\n        rgba(204,30,32,.09);\n}\n\n\n.rrr-home-led-column {\n    flex: 1 1 0;\n\n    min-width: 0;\n\n    display: flex;\n\n    flex-direction:\n        column-reverse;\n\n    gap: 2px;\n}\n\n\n.rrr-home-led {\n    flex: 1 1 0;\n\n    min-width: 0;\n\n    min-height: 3px;\n\n    border-radius: 1px;\n\n    background:\n        #261012;\n\n    opacity: .22;\n\n    transition:\n        background .04s linear,\n        opacity .04s linear,\n        box-shadow .04s linear;\n}\n\n\n.rrr-home-led.low.active {\n    background:\n        #d91d24;\n\n    opacity: 1;\n\n    box-shadow:\n        0 0 3px\n        rgba(217,29,36,.75);\n}\n\n\n.rrr-home-led.mid.active {\n    background:\n        #ff7200;\n\n    opacity: 1;\n\n    box-shadow:\n        0 0 4px\n        rgba(255,114,0,.72);\n}\n\n\n.rrr-home-led.high.active {\n    background:\n        #ffc20e;\n\n    opacity: 1;\n\n    box-shadow:\n        0 0 5px\n        rgba(255,194,14,.78);\n}\n\n\n\/* ==========================================================\n   MESSAGE AREA\n   ========================================================== *\/\n\n.rrr-home-message {\n    position: relative;\n\n    margin-top: 24px;\n\n    padding-top: 26px;\n\n    text-align: center;\n}\n\n\n.rrr-home-message::before {\n    content: \"\";\n\n    position: absolute;\n\n    top: 0;\n\n    left: 4%;\n\n    right: 4%;\n\n    height: 1px;\n\n    background:\n        linear-gradient(\n            to right,\n            transparent 0%,\n            rgba(204,30,32,.16) 18%,\n            rgba(204,30,32,.45) 50%,\n            rgba(204,30,32,.16) 82%,\n            transparent 100%\n        );\n}\n\n\n.rrr-home-kicker {\n    margin-bottom: 10px;\n\n    color:\n        var(--rrr-red-bright);\n\n    font-size: 13px;\n\n    font-weight: 900;\n\n    letter-spacing: 2px;\n\n    text-transform: uppercase;\n}\n\n\n.rrr-home-heading {\n    max-width: 1200px;\n\n    margin:\n        0 auto 16px;\n\n    color: #ffffff;\n\n    font-size:\n        clamp(\n            38px,\n            4.4vw,\n            68px\n        );\n\n    line-height: .98;\n\n    font-weight: 900;\n\n    text-transform: uppercase;\n\n    letter-spacing: -1.5px;\n\n    text-shadow:\n        0 3px 10px\n        rgba(0,0,0,.42);\n}\n\n\n.rrr-home-heading span {\n    color:\n        var(--rrr-yellow);\n}\n\n\n.rrr-home-copy {\n    max-width: 820px;\n\n    margin:\n        0 auto 22px;\n\n    color: #c8c8c8;\n\n    font-size: 18px;\n\n    line-height: 1.55;\n}\n\n\n.rrr-home-actions {\n    display: flex;\n\n    justify-content: center;\n\n    align-items: center;\n}\n\n\n\/* ==========================================================\n   LISTEN LIVE\n   ========================================================== *\/\n\n.rrr-home-listen {\n    display: inline-flex;\n\n    align-items: center;\n\n    justify-content: center;\n\n    gap: 10px;\n\n    padding:\n        15px 22px;\n\n    background:\n        var(--rrr-red);\n\n    color:\n        #ffffff !important;\n\n    border-radius: 7px;\n\n    text-decoration: none;\n\n    text-transform: uppercase;\n\n    font-size: 16px;\n\n    font-weight: 900;\n\n    box-shadow:\n        0 0 16px\n        rgba(204,30,32,.30),\n\n        0 7px 16px\n        rgba(0,0,0,.22);\n\n    transition:\n        transform .18s ease,\n        background .18s ease,\n        box-shadow .18s ease;\n}\n\n\n.rrr-home-listen:hover {\n    background:\n        #e82a2e;\n\n    transform:\n        translateY(-1px);\n\n    box-shadow:\n        0 0 22px\n        rgba(204,30,32,.45),\n\n        0 9px 20px\n        rgba(0,0,0,.25);\n}\n\n\n.rrr-home-play-icon {\n    width: 30px;\n\n    height: 30px;\n\n    display: inline-flex;\n\n    align-items: center;\n\n    justify-content: center;\n\n    border-radius: 50%;\n\n    background: #111111;\n\n    color:\n        var(--rrr-yellow);\n\n    font-size: 14px;\n\n    padding-left: 2px;\n\n    box-sizing: border-box;\n}\n\n\n\/* ==========================================================\n   ANIMATION\n   ========================================================== *\/\n\n@keyframes rrrHomePulse {\n\n    0%,\n    100% {\n        opacity: 1;\n\n        transform:\n            scale(1);\n    }\n\n    50% {\n        opacity: .45;\n\n        transform:\n            scale(.75);\n    }\n}\n\n\n\/* ==========================================================\n   RESPONSIVE\n   ========================================================== *\/\n\n@media (max-width: 980px) {\n\n    .rrr-home-inner {\n        width:\n            calc(100% - 36px);\n    }\n\n    .rrr-home-top {\n        grid-template-columns:\n            1fr;\n\n        gap: 30px;\n\n        padding-top: 5px;\n    }\n\n    .rrr-home-logo-wrap {\n        justify-content:\n            center;\n    }\n\n    .rrr-home-logo {\n        width: 440px;\n    }\n\n    .rrr-now-card {\n        max-width: 680px;\n\n        margin:\n            0 auto;\n    }\n\n    .rrr-home-message {\n        margin-top: 26px;\n    }\n\n    #rrr-bg-led-display {\n        opacity: .12;\n    }\n}\n\n\n@media (max-width: 620px) {\n\n    #rrr-home-hero {\n        padding:\n            32px 0 30px;\n    }\n\n    .rrr-home-inner {\n        width:\n            calc(100% - 28px);\n    }\n\n    .rrr-home-logo {\n        width: 340px;\n    }\n\n    .rrr-now-content {\n        grid-template-columns:\n            1fr;\n\n        text-align: center;\n    }\n\n    .rrr-home-art-frame {\n        margin:\n            0 auto;\n\n        width: 160px;\n\n        height: 160px;\n    }\n\n    .rrr-now-card-top {\n        align-items:\n            flex-start;\n\n        flex-direction:\n            column;\n    }\n\n    #rrr-home-led-display {\n        height: 62px;\n    }\n\n    .rrr-home-heading {\n        font-size: 38px;\n    }\n\n    .rrr-home-copy {\n        font-size: 16px;\n    }\n\n    #rrr-bg-led-display {\n        display: none;\n    }\n}\n<\/style>\n\n\n<section id=\"rrr-home-hero\">\n\n\n    <!-- BACKGROUND DIGITAL WAVE -->\n\n    <div\n        id=\"rrr-bg-led-display\"\n        aria-hidden=\"true\"\n    ><\/div>\n\n\n    <div class=\"rrr-home-inner\">\n\n\n        <!-- TOP ROW -->\n\n        <div class=\"rrr-home-top\">\n\n\n            <!-- LOGO -->\n\n            <div class=\"rrr-home-logo-wrap\">\n\n                <img decoding=\"async\"\n                    class=\"rrr-home-logo\"\n                    src=\"http:\/\/realrockrevival.com\/wp-content\/uploads\/2026\/08\/82a86fcb-5682-47c5-9dce-4bbdacd0c8a3.png\"\n                    alt=\"Real Rock Revival\"\n                >\n\n            <\/div>\n\n\n            <!-- NOW PLAYING -->\n\n            <div class=\"rrr-now-card\">\n\n\n                <div class=\"rrr-now-card-top\">\n\n\n                    <div class=\"rrr-now-card-label\">\n\n                        <span\n                            class=\"rrr-now-live-dot\"\n                        ><\/span>\n\n                        <span>\n                            Live On Air\n                        <\/span>\n\n                    <\/div>\n\n\n                    <div id=\"rrr-home-status\">\n                        Connecting...\n                    <\/div>\n\n\n                <\/div>\n\n\n                <div class=\"rrr-now-content\">\n\n\n                    <div class=\"rrr-home-art-frame\">\n\n                        <img decoding=\"async\"\n                            id=\"rrr-home-art\"\n                            src=\"http:\/\/realrockrevival.com\/wp-content\/uploads\/2026\/08\/6b17152f-c6fd-4654-811c-87c133876acd.png\"\n                            alt=\"Now Playing\"\n                        >\n\n                    <\/div>\n\n\n                    <div class=\"rrr-now-text\">\n\n\n                        <div class=\"rrr-now-small\">\n                            Now Playing\n                        <\/div>\n\n\n                        <h2 id=\"rrr-home-artist\">\n                            Real Rock Revival\n                        <\/h2>\n\n\n                        <p id=\"rrr-home-song\">\n                            Loading live song information...\n                        <\/p>\n\n\n                        <div\n                            id=\"rrr-home-led-display\"\n                            aria-hidden=\"true\"\n                        ><\/div>\n\n\n                    <\/div>\n\n\n                <\/div>\n\n\n            <\/div>\n\n\n        <\/div>\n\n\n        <!-- MESSAGE AREA -->\n\n        <div class=\"rrr-home-message\">\n\n\n            <div class=\"rrr-home-kicker\">\n                REAL ROCK \u2022 REAL PEOPLE \u2022 REAL RADIO.\n            <\/div>\n\n\n            <h1 class=\"rrr-home-heading\">\n\n                Real Rock Radio.\n\n                <span>\n                    The Signal Lives On.\n                <\/span>\n\n            <\/h1>\n\n\n            <p class=\"rrr-home-copy\">\n\n                The music, the personalities,\n                and the attitude that made\n                real rock radio matter \u2014\n                streaming 24\/7.\n\n            <\/p>\n\n\n            <div class=\"rrr-home-actions\">\n\n\n                <a\n                    href=\"#\"\n                    id=\"rrr-home-open-player\"\n                    class=\"rrr-home-listen\"\n                >\n\n                    <span\n                        class=\"rrr-home-play-icon\"\n                    >\n                        \u25b6\n                    <\/span>\n\n                    <span>\n                        Listen Live\n                    <\/span>\n\n                <\/a>\n\n\n            <\/div>\n\n\n        <\/div>\n\n\n    <\/div>\n\n\n<\/section>\n\n\n<script>\n(function () {\n\n\n    \/* ======================================================\n       BASIC SETUP\n       ====================================================== *\/\n\n    const hero =\n        document.getElementById(\n            'rrr-home-hero'\n        );\n\n\n    if (!hero) {\n        return;\n    }\n\n\n    if (\n        hero.dataset\n            .rrrHomeInitialized ===\n        'yes'\n    ) {\n        return;\n    }\n\n\n    hero.dataset\n        .rrrHomeInitialized =\n        'yes';\n\n\n    const METADATA_URL =\n        '\/wp-json\/real-rock-revival\/v1\/now-playing';\n\n\n    const FALLBACK_ART =\n        'http:\/\/realrockrevival.com\/wp-content\/uploads\/2026\/08\/6b17152f-c6fd-4654-811c-87c133876acd.png';\n\n\n    const artistEl =\n        document.getElementById(\n            'rrr-home-artist'\n        );\n\n\n    const songEl =\n        document.getElementById(\n            'rrr-home-song'\n        );\n\n\n    const artEl =\n        document.getElementById(\n            'rrr-home-art'\n        );\n\n\n    const statusEl =\n        document.getElementById(\n            'rrr-home-status'\n        );\n\n\n    const openPlayerButton =\n        document.getElementById(\n            'rrr-home-open-player'\n        );\n\n\n    const ledDisplay =\n        document.getElementById(\n            'rrr-home-led-display'\n        );\n\n\n    const bgLedDisplay =\n        document.getElementById(\n            'rrr-bg-led-display'\n        );\n\n\n    \/* ==========================================================\n   OPEN STANDALONE RRR PLAYER\n   ========================================================== *\/\n\nif (openPlayerButton) {\n\n    openPlayerButton\n        .addEventListener(\n            'click',\n            function (event) {\n\n                event.preventDefault();\n\n                const playerWindow =\n                    window.open(\n                        '\/index.php\/rrr-player\/',\n                        'RRRPlayer',\n                        'width=700,height=650,resizable=yes,scrollbars=no'\n                    );\n\n                if (playerWindow) {\n                    playerWindow.focus();\n                }\n\n            }\n        );\n\n}\n\n\n    \/* ======================================================\n       FOREGROUND ANALYZER\n       ====================================================== *\/\n\n    const COLUMN_COUNT =\n        24;\n\n\n    const LED_COUNT =\n        10;\n\n\n    const columns =\n        [];\n\n\n    ledDisplay.innerHTML =\n        '';\n\n\n    for (\n        let columnIndex = 0;\n        columnIndex < COLUMN_COUNT;\n        columnIndex++\n    ) {\n\n\n        const column =\n            document.createElement(\n                'div'\n            );\n\n\n        column.className =\n            'rrr-home-led-column';\n\n\n        const leds =\n            [];\n\n\n        for (\n            let ledIndex = 0;\n            ledIndex < LED_COUNT;\n            ledIndex++\n        ) {\n\n\n            const led =\n                document.createElement(\n                    'span'\n                );\n\n\n            led.classList.add(\n                'rrr-home-led'\n            );\n\n\n            if (\n                ledIndex < 5\n            ) {\n\n                led.classList.add(\n                    'low'\n                );\n\n            }\n\n            else if (\n                ledIndex < 8\n            ) {\n\n                led.classList.add(\n                    'mid'\n                );\n\n            }\n\n            else {\n\n                led.classList.add(\n                    'high'\n                );\n\n            }\n\n\n            column.appendChild(\n                led\n            );\n\n\n            leds.push(\n                led\n            );\n\n        }\n\n\n        ledDisplay.appendChild(\n            column\n        );\n\n\n        columns.push(\n            leds\n        );\n\n    }\n\n\n    \/* ======================================================\n       BACKGROUND MIRRORED DIGITAL WAVE\n       ====================================================== *\/\n\n    const BG_COLUMN_COUNT =\n        72;\n\n\n    const BG_HALF_LED_COUNT =\n        18;\n\n\n    const bgColumns =\n        [];\n\n\n    bgLedDisplay.innerHTML =\n        '';\n\n\n    for (\n        let columnIndex = 0;\n        columnIndex < BG_COLUMN_COUNT;\n        columnIndex++\n    ) {\n\n\n        const column =\n            document.createElement(\n                'div'\n            );\n\n\n        column.className =\n            'rrr-bg-led-column';\n\n\n        const upper =\n            [];\n\n\n        const lower =\n            [];\n\n\n        for (\n            let ledIndex = BG_HALF_LED_COUNT - 1;\n            ledIndex >= 0;\n            ledIndex--\n        ) {\n\n\n            const led =\n                document.createElement(\n                    'span'\n                );\n\n\n            led.classList.add(\n                'rrr-bg-led'\n            );\n\n\n            if (\n                ledIndex < 9\n            ) {\n\n                led.classList.add(\n                    'low'\n                );\n\n            }\n\n            else if (\n                ledIndex < 14\n            ) {\n\n                led.classList.add(\n                    'mid'\n                );\n\n            }\n\n            else {\n\n                led.classList.add(\n                    'high'\n                );\n\n            }\n\n\n            column.appendChild(\n                led\n            );\n\n\n            upper.unshift(\n                led\n            );\n\n        }\n\n\n        for (\n            let ledIndex = 0;\n            ledIndex < BG_HALF_LED_COUNT;\n            ledIndex++\n        ) {\n\n\n            const led =\n                document.createElement(\n                    'span'\n                );\n\n\n            led.classList.add(\n                'rrr-bg-led'\n            );\n\n\n            if (\n                ledIndex < 9\n            ) {\n\n                led.classList.add(\n                    'low'\n                );\n\n            }\n\n            else if (\n                ledIndex < 14\n            ) {\n\n                led.classList.add(\n                    'mid'\n                );\n\n            }\n\n            else {\n\n                led.classList.add(\n                    'high'\n                );\n\n            }\n\n\n            column.appendChild(\n                led\n            );\n\n\n            lower.push(\n                led\n            );\n\n        }\n\n\n        bgLedDisplay.appendChild(\n            column\n        );\n\n\n        bgColumns.push({\n            upper:\n                upper,\n            lower:\n                lower\n        });\n\n    }\n\n\n    \/* ======================================================\n       FOREGROUND METER MOVEMENT\n       ====================================================== *\/\n\n    let meterTick =\n        0;\n\n\n    const levels =\n        Array.from(\n            {\n                length:\n                    COLUMN_COUNT\n            },\n            function (_, i) {\n\n                return (\n                    2 +\n                    ((i * 3) % 5)\n                );\n\n            }\n        );\n\n\n    const phases =\n        Array.from(\n            {\n                length:\n                    COLUMN_COUNT\n            },\n            function (_, i) {\n\n                return (\n                    i * .57 +\n                    Math.random() * 2\n                );\n\n            }\n        );\n\n\n    function illuminateColumn(\n        columnIndex,\n        level\n    ) {\n\n\n        const leds =\n            columns[\n                columnIndex\n            ];\n\n\n        leds.forEach(\n            function (\n                led,\n                ledIndex\n            ) {\n\n                led.classList.toggle(\n                    'active',\n                    ledIndex < level\n                );\n\n            }\n        );\n\n    }\n\n\n    function drawMeters() {\n\n\n        meterTick++;\n\n\n        for (\n            let i = 0;\n            i < COLUMN_COUNT;\n            i++\n        ) {\n\n\n            const waveA =\n                Math.sin(\n                    meterTick *\n                    .19 +\n                    phases[i]\n                );\n\n\n            const waveB =\n                Math.sin(\n                    meterTick *\n                    .11 +\n                    phases[i] *\n                    1.7\n                );\n\n\n            const waveC =\n                Math.cos(\n                    meterTick *\n                    .07 -\n                    phases[i] *\n                    1.1\n                );\n\n\n            let target =\n                5 +\n                waveA * 1.6 +\n                waveB * 1.1 +\n                waveC * .7 +\n                (\n                    Math.random() -\n                    .5\n                ) * 2.2;\n\n\n            if (\n                Math.random() <\n                .09\n            ) {\n\n                target +=\n                    1 +\n                    Math.random() *\n                    2;\n\n            }\n\n\n            target =\n                Math.max(\n                    2,\n                    Math.min(\n                        LED_COUNT,\n                        Math.round(\n                            target\n                        )\n                    )\n                );\n\n\n            if (\n                target >\n                levels[i]\n            ) {\n\n                levels[i] =\n                    Math.min(\n                        target,\n                        levels[i] + 2\n                    );\n\n            }\n\n            else if (\n                target <\n                levels[i]\n            ) {\n\n                levels[i] =\n                    Math.max(\n                        target,\n                        levels[i] - 1\n                    );\n\n            }\n\n\n            illuminateColumn(\n                i,\n                levels[i]\n            );\n\n        }\n\n    }\n\n\n    \/* ======================================================\n       BACKGROUND WAVE MOVEMENT\n       ====================================================== *\/\n\n    let bgTick =\n        0;\n\n\n    const bgPhases =\n        Array.from(\n            {\n                length:\n                    BG_COLUMN_COUNT\n            },\n            function (_, i) {\n\n                return (\n                    i * .28 +\n                    Math.random() *\n                    2\n                );\n\n            }\n        );\n\n\n    function illuminateBackground(\n        columnIndex,\n        level\n    ) {\n\n\n        const column =\n            bgColumns[\n                columnIndex\n            ];\n\n\n        column.upper.forEach(\n            function (\n                led,\n                ledIndex\n            ) {\n\n                led.classList.toggle(\n                    'active',\n                    ledIndex < level\n                );\n\n            }\n        );\n\n\n        column.lower.forEach(\n            function (\n                led,\n                ledIndex\n            ) {\n\n                led.classList.toggle(\n                    'active',\n                    ledIndex < level\n                );\n\n            }\n        );\n\n    }\n\n\n    function drawBackgroundWave() {\n\n\n        bgTick++;\n\n\n        for (\n            let i = 0;\n            i < BG_COLUMN_COUNT;\n            i++\n        ) {\n\n\n            const waveA =\n                Math.sin(\n                    bgTick *\n                    .075 +\n                    bgPhases[i]\n                );\n\n\n            const waveB =\n                Math.sin(\n                    bgTick *\n                    .041 +\n                    bgPhases[i] *\n                    1.6\n                );\n\n\n            const waveC =\n                Math.cos(\n                    bgTick *\n                    .028 -\n                    bgPhases[i] *\n                    .8\n                );\n\n\n            let level =\n                7 +\n                waveA * 4.5 +\n                waveB * 2.8 +\n                waveC * 1.6;\n\n\n            if (\n                Math.random() <\n                .025\n            ) {\n\n                level +=\n                    Math.random() *\n                    3;\n\n            }\n\n\n            level =\n                Math.max(\n                    1,\n                    Math.min(\n                        BG_HALF_LED_COUNT,\n                        Math.round(\n                            level\n                        )\n                    )\n                );\n\n\n            illuminateBackground(\n                i,\n                level\n            );\n\n        }\n\n    }\n\n\n    for (\n        let i = 0;\n        i < COLUMN_COUNT;\n        i++\n    ) {\n\n        illuminateColumn(\n            i,\n            levels[i]\n        );\n\n    }\n\n\n    drawBackgroundWave();\n\n\n    setInterval(\n        drawMeters,\n        105\n    );\n\n\n    setInterval(\n        drawBackgroundWave,\n        125\n    );\n\n\n    \/* ======================================================\n       ARTWORK\n       ====================================================== *\/\n\n    async function updateArtwork(\n        artist,\n        song\n    ) {\n\n\n        artEl.src =\n            FALLBACK_ART;\n\n\n        if (\n            !artist ||\n            !song ||\n            artist ===\n            'Real Rock Revival'\n        ) {\n\n            return;\n\n        }\n\n\n        try {\n\n\n            const term =\n                encodeURIComponent(\n                    artist +\n                    ' ' +\n                    song\n                );\n\n\n            const response =\n                await fetch(\n                    'https:\/\/itunes.apple.com\/search' +\n                    '?term=' +\n                    term +\n                    '&entity=song' +\n                    '&limit=1'\n                );\n\n\n            const data =\n                await response.json();\n\n\n            if (\n                data.results &&\n                data.results.length\n            ) {\n\n\n                let artwork =\n                    data.results[0]\n                        .artworkUrl100;\n\n\n                if (\n                    artwork\n                ) {\n\n\n                    artwork =\n                        artwork.replace(\n                            '100x100bb',\n                            '600x600bb'\n                        );\n\n\n                    artEl.src =\n                        artwork;\n\n                }\n\n            }\n\n        }\n\n        catch (error) {\n\n\n            artEl.src =\n                FALLBACK_ART;\n\n        }\n\n    }\n\n\n    \/* ======================================================\n       LIVE METADATA\n       ====================================================== *\/\n\n    let previousSong =\n        '';\n\n\n    async function updateMetadata() {\n\n\n        try {\n\n\n            const response =\n                await fetch(\n                    METADATA_URL +\n                    '?cache=' +\n                    Date.now(),\n                    {\n                        cache:\n                            'no-store'\n                    }\n                );\n\n\n            const data =\n                await response.json();\n\n\n            const artist =\n                data.artist ||\n                'Real Rock Revival';\n\n\n            const song =\n                data.song ||\n                'Live Radio';\n\n\n            artistEl.textContent =\n                artist;\n\n\n            songEl.textContent =\n                song;\n\n\n            statusEl.textContent =\n                data.online\n                    ?\n                    'LIVE \u2022 ' +\n                    (\n                        data.bitrate ||\n                        128\n                    ) +\n                    ' KBPS'\n                    :\n                    'STREAM OFFLINE';\n\n\n            const currentSong =\n                artist +\n                ' - ' +\n                song;\n\n\n            if (\n                currentSong !==\n                previousSong\n            ) {\n\n\n                previousSong =\n                    currentSong;\n\n\n                updateArtwork(\n                    artist,\n                    song\n                );\n\n            }\n\n        }\n\n        catch (error) {\n\n\n            statusEl.textContent =\n                'REAL ROCK REVIVAL \u2022 LIVE RADIO';\n\n        }\n\n    }\n\n\n    updateMetadata();\n\n\n    setInterval(\n        updateMetadata,\n        12000\n    );\n\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-45c4d49 elementor-widget elementor-widget-html\" data-id=\"45c4d49\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ==========================================================\n   REAL ROCK REVIVAL - HOME ON AIR \/ UP NEXT\n   ========================================================== *\/\n\n.rrr-home-status-section {\n    width: 100%;\n    max-width: 1400px;\n    margin: 0 auto;\n}\n\n\/* ==========================================================\n   SECTION HEADER\n   ========================================================== *\/\n\n.rrr-air-header {\n    text-align: center;\n    margin: 0 0 32px 0;\n}\n\n.rrr-air-eyebrow {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 14px;\n    color: #ef1b24;\n    font-size: 14px;\n    font-weight: 900;\n    letter-spacing: 3.5px;\n    text-transform: uppercase;\n    margin-bottom: 9px;\n}\n\n.rrr-air-eyebrow::before,\n.rrr-air-eyebrow::after {\n    content: \"\";\n    display: block;\n    width: 46px;\n    height: 2px;\n    background: linear-gradient(90deg, #ffd000, #ef1b24);\n}\n\n.rrr-air-eyebrow::after {\n    background: linear-gradient(90deg, #ef1b24, #ffd000);\n}\n\n.rrr-air-title {\n    color: #ffffff;\n    font-size: 44px;\n    font-weight: 900;\n    line-height: 1;\n    letter-spacing: 2px;\n    text-transform: uppercase;\n    margin: 0;\n}\n\n.rrr-air-underline {\n    width: 105px;\n    height: 3px;\n    background: linear-gradient(\n        90deg,\n        #ef1b24 0%,\n        #ff6a00 50%,\n        #ffd000 100%\n    );\n    border-radius: 10px;\n    margin: 13px auto 0;\n}\n\n\/* ==========================================================\n   STATUS CARDS\n   ========================================================== *\/\n\n.rrr-home-status {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 22px;\n    width: 100%;\n}\n\n.rrr-status-card {\n    position: relative;\n    display: flex;\n    align-items: center;\n    gap: 22px;\n    min-height: 190px;\n    padding: 24px;\n    background: #151515;\n    border: 1px solid #2c2c2c;\n    border-radius: 14px;\n    overflow: hidden;\n    box-shadow: 0 10px 28px rgba(0,0,0,.28);\n}\n\n.rrr-status-card.on-air {\n    border-left: 5px solid #ef1b24;\n}\n\n.rrr-status-card.up-next {\n    border-left: 5px solid #ffd000;\n}\n\n.rrr-status-image {\n    width: 145px;\n    height: 145px;\n    flex: 0 0 145px;\n    border-radius: 12px;\n    overflow: hidden;\n    background: #0b0b0b;\n}\n\n.rrr-status-image img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n}\n\n.rrr-status-info {\n    min-width: 0;\n}\n\n.rrr-status-label {\n    display: inline-block;\n    margin-bottom: 10px;\n    font-size: 13px;\n    font-weight: 900;\n    letter-spacing: 1.2px;\n    text-transform: uppercase;\n}\n\n.on-air .rrr-status-label {\n    color: #fff;\n    background: #ef1b24;\n    padding: 6px 11px;\n    border-radius: 999px;\n    box-shadow: 0 0 14px rgba(239,27,36,.45);\n}\n\n.up-next .rrr-status-label {\n    color: #ffd000;\n}\n\n.rrr-status-show {\n    color: #fff;\n    font-size: 28px;\n    font-weight: 900;\n    line-height: 1.1;\n    margin-bottom: 7px;\n}\n\n.rrr-status-dj {\n    color: #ddd;\n    font-size: 18px;\n    margin-bottom: 7px;\n}\n\n.rrr-status-time {\n    color: #ffd000;\n    font-size: 15px;\n    font-weight: 800;\n}\n\n.rrr-status-note {\n    color: #aaa;\n    font-size: 14px;\n    margin-top: 8px;\n}\n\n\/* ==========================================================\n   RESPONSIVE\n   ========================================================== *\/\n\n@media (max-width: 850px) {\n\n    .rrr-home-status {\n        grid-template-columns: 1fr;\n    }\n\n    .rrr-air-title {\n        font-size: 40px;\n    }\n}\n\n@media (max-width: 600px) {\n\n    .rrr-air-header {\n        margin-bottom: 24px;\n    }\n\n    .rrr-air-eyebrow {\n        font-size: 11px;\n        letter-spacing: 2px;\n        gap: 10px;\n    }\n\n    .rrr-air-eyebrow::before,\n    .rrr-air-eyebrow::after {\n        width: 35px;\n    }\n\n    .rrr-air-title {\n        font-size: 32px;\n    }\n\n    .rrr-air-underline {\n        width: 100px;\n        height: 3px;\n        margin-top: 13px;\n    }\n\n    .rrr-status-card {\n        align-items: flex-start;\n        gap: 16px;\n        padding: 18px;\n    }\n\n    .rrr-status-image {\n        width: 95px;\n        height: 95px;\n        flex-basis: 95px;\n    }\n\n    .rrr-status-show {\n        font-size: 21px;\n    }\n\n    .rrr-status-dj {\n        font-size: 16px;\n    }\n}\n<\/style>\n\n\n<div class=\"rrr-home-status-section\">\n\n    <!-- SECTION HEADER -->\n\n    <div class=\"rrr-air-header\">\n\n        <div class=\"rrr-air-eyebrow\">\n            LIVE ON TRIPLE R\n        <\/div>\n\n        <div class=\"rrr-air-title\">\n            ON AIR NOW\n        <\/div>\n\n        <div class=\"rrr-air-underline\"><\/div>\n\n    <\/div>\n\n\n    <!-- STATUS CARDS -->\n\n    <div class=\"rrr-home-status\">\n\n        <!-- CURRENTLY PLAYING -->\n\n        <div class=\"rrr-status-card on-air\">\n\n            <div class=\"rrr-status-image\">\n                <img decoding=\"async\" id=\"rrr-onair-image\" src=\"\" alt=\"\">\n            <\/div>\n\n            <div class=\"rrr-status-info\">\n\n                <div\n                    class=\"rrr-status-label\"\n                    id=\"rrr-onair-label\">\n                    \u25cf ON AIR NOW\n                <\/div>\n\n                <div\n                    class=\"rrr-status-show\"\n                    id=\"rrr-onair-show\">\n                    Loading...\n                <\/div>\n\n                <div\n                    class=\"rrr-status-dj\"\n                    id=\"rrr-onair-dj\">\n                <\/div>\n\n                <div\n                    class=\"rrr-status-time\"\n                    id=\"rrr-onair-time\">\n                <\/div>\n\n                <div\n                    class=\"rrr-status-note\"\n                    id=\"rrr-onair-note\">\n                <\/div>\n\n            <\/div>\n\n        <\/div>\n\n\n        <!-- UP NEXT -->\n\n        <div class=\"rrr-status-card up-next\">\n\n            <div class=\"rrr-status-image\">\n                <img decoding=\"async\" id=\"rrr-next-image\" src=\"\" alt=\"\">\n            <\/div>\n\n            <div class=\"rrr-status-info\">\n\n                <div class=\"rrr-status-label\">\n                    UP NEXT\n                <\/div>\n\n                <div\n                    class=\"rrr-status-show\"\n                    id=\"rrr-next-show\">\n                    Loading...\n                <\/div>\n\n                <div\n                    class=\"rrr-status-dj\"\n                    id=\"rrr-next-dj\">\n                <\/div>\n\n                <div\n                    class=\"rrr-status-time\"\n                    id=\"rrr-next-time\">\n                <\/div>\n\n                <div\n                    class=\"rrr-status-note\"\n                    id=\"rrr-next-note\">\n                <\/div>\n\n            <\/div>\n\n        <\/div>\n\n    <\/div>\n\n<\/div>\n\n\n<script>\n(function () {\n\n    const SHEET_URL =\n        'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vS41T_J8DZ368smfRp__6Qcn25x7AdwouY_YH8lnjJvShPdD3t9uSLL8SFaqcMNHgdYFiFpwzZGgTqo\/pub?output=csv';\n\n    const TRIPLE_R_LOGO =\n        'https:\/\/realrockrevival.com\/wp-content\/uploads\/2026\/08\/c8eb6030-cd3f-4b78-ac61-8a1c9b2f6da7.png';\n\n    const days = [\n        'Monday',\n        'Tuesday',\n        'Wednesday',\n        'Thursday',\n        'Friday',\n        'Saturday',\n        'Sunday'\n    ];\n\n\n    function parseCSV(text) {\n\n        const rows = [];\n\n        let row = [];\n        let field = '';\n        let quoted = false;\n\n        for (let i = 0; i < text.length; i++) {\n\n            const char = text[i];\n\n            if (char === '\"') {\n\n                if (quoted && text[i + 1] === '\"') {\n\n                    field += '\"';\n                    i++;\n\n                } else {\n\n                    quoted = !quoted;\n\n                }\n\n            } else if (char === ',' && !quoted) {\n\n                row.push(field);\n                field = '';\n\n            } else if (\n                (char === '\\n' || char === '\\r') &&\n                !quoted\n            ) {\n\n                if (\n                    char === '\\r' &&\n                    text[i + 1] === '\\n'\n                ) {\n                    i++;\n                }\n\n                row.push(field);\n                rows.push(row);\n\n                row = [];\n                field = '';\n\n            } else {\n\n                field += char;\n\n            }\n        }\n\n        if (field.length || row.length) {\n\n            row.push(field);\n            rows.push(row);\n\n        }\n\n        return rows;\n    }\n\n\n    function timeToMinutes(value) {\n\n        const match =\n            value\n                .trim()\n                .match(\n                    \/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$\/i\n                );\n\n        if (!match) {\n            return null;\n        }\n\n        let hour =\n            parseInt(match[1], 10);\n\n        const minute =\n            parseInt(match[2], 10);\n\n        const ap =\n            match[3].toUpperCase();\n\n        if (\n            ap === 'PM' &&\n            hour !== 12\n        ) {\n            hour += 12;\n        }\n\n        if (\n            ap === 'AM' &&\n            hour === 12\n        ) {\n            hour = 0;\n        }\n\n        return (\n            hour * 60 +\n            minute\n        );\n    }\n\n\n    function easternNow() {\n\n        const parts =\n            new Intl.DateTimeFormat(\n                'en-US',\n                {\n                    timeZone:\n                        'America\/New_York',\n\n                    weekday:\n                        'long',\n\n                    hour:\n                        'numeric',\n\n                    minute:\n                        '2-digit',\n\n                    hour12:\n                        false\n                }\n            ).formatToParts(\n                new Date()\n            );\n\n        const data = {};\n\n        parts.forEach(\n            p => data[p.type] = p.value\n        );\n\n        return {\n\n            day:\n                data.weekday,\n\n            dayIndex:\n                days.indexOf(\n                    data.weekday\n                ),\n\n            minute:\n                parseInt(\n                    data.hour,\n                    10\n                ) * 60 +\n\n                parseInt(\n                    data.minute,\n                    10\n                )\n        };\n    }\n\n\n    function setOnAir(show) {\n\n        const label =\n            document.getElementById(\n                'rrr-onair-label'\n            );\n\n        const image =\n            document.getElementById(\n                'rrr-onair-image'\n            );\n\n        const title =\n            document.getElementById(\n                'rrr-onair-show'\n            );\n\n        const dj =\n            document.getElementById(\n                'rrr-onair-dj'\n            );\n\n        const time =\n            document.getElementById(\n                'rrr-onair-time'\n            );\n\n        const note =\n            document.getElementById(\n                'rrr-onair-note'\n            );\n\n\n        if (show) {\n\n            label.textContent =\n                '\u25cf ON AIR NOW';\n\n            image.src =\n                show.image ||\n                TRIPLE_R_LOGO;\n\n            title.textContent =\n                show.show;\n\n            dj.textContent =\n                show.dj;\n\n            time.textContent =\n                show.start +\n                ' \u2013 ' +\n                show.end +\n                ' ET';\n\n            note.textContent =\n                '';\n\n        } else {\n\n            label.textContent =\n                '\u26a1 TRIPLE R ROCKS';\n\n            image.src =\n                TRIPLE_R_LOGO;\n\n            title.textContent =\n                'Triple R Rocks 24\/7';\n\n            dj.textContent =\n                'Real Rock Revival Music Mix';\n\n            time.textContent =\n                '';\n\n            note.textContent =\n                'Real Rock. All day. Every day.';\n        }\n    }\n\n\n    function setUpNext(show) {\n\n        const image =\n            document.getElementById(\n                'rrr-next-image'\n            );\n\n        const title =\n            document.getElementById(\n                'rrr-next-show'\n            );\n\n        const dj =\n            document.getElementById(\n                'rrr-next-dj'\n            );\n\n        const time =\n            document.getElementById(\n                'rrr-next-time'\n            );\n\n        const note =\n            document.getElementById(\n                'rrr-next-note'\n            );\n\n\n        if (!show) {\n\n            image.src =\n                TRIPLE_R_LOGO;\n\n            title.textContent =\n                'Triple R Rocks 24\/7';\n\n            dj.textContent =\n                '';\n\n            time.textContent =\n                '';\n\n            note.textContent =\n                'More live shows coming soon.';\n\n            return;\n        }\n\n\n        image.src =\n            show.image ||\n            TRIPLE_R_LOGO;\n\n        title.textContent =\n            show.show;\n\n        dj.textContent =\n            show.dj;\n\n        time.textContent =\n            show.day +\n            ' \u2022 ' +\n            show.start +\n            ' \u2013 ' +\n            show.end +\n            ' ET';\n\n        note.textContent =\n            '';\n    }\n\n\n    function processSchedule(rows) {\n\n        rows.shift();\n\n\n        const shows = rows\n\n            .filter(\n                row =>\n                    row.length >= 8\n            )\n\n            .map(\n                row => ({\n\n                    day:\n                        (row[0] || '')\n                            .trim(),\n\n                    start:\n                        (row[1] || '')\n                            .trim(),\n\n                    end:\n                        (row[2] || '')\n                            .trim(),\n\n                    show:\n                        (row[3] || '')\n                            .trim(),\n\n                    dj:\n                        (row[4] || '')\n                            .trim(),\n\n                    image:\n                        (row[5] || '')\n                            .trim(),\n\n                    description:\n                        (row[6] || '')\n                            .trim(),\n\n                    active:\n                        (row[7] || '')\n                            .trim()\n                            .toLowerCase()\n\n                })\n            )\n\n            .filter(\n                show =>\n                    show.active === 'yes' &&\n                    days.includes(\n                        show.day\n                    )\n            );\n\n\n        const now =\n            easternNow();\n\n\n        let currentShow =\n            null;\n\n\n        shows.forEach(\n            show => {\n\n                if (\n                    show.day !==\n                    now.day\n                ) {\n                    return;\n                }\n\n\n                const start =\n                    timeToMinutes(\n                        show.start\n                    );\n\n                const end =\n                    timeToMinutes(\n                        show.end\n                    );\n\n\n                if (\n                    start === null ||\n                    end === null\n                ) {\n                    return;\n                }\n\n\n                let live =\n                    false;\n\n\n                if (\n                    end > start\n                ) {\n\n                    live =\n                        now.minute >= start &&\n                        now.minute < end;\n\n                } else {\n\n                    live =\n                        now.minute >= start ||\n                        now.minute < end;\n\n                }\n\n\n                if (live) {\n\n                    currentShow =\n                        show;\n\n                }\n            }\n        );\n\n\n        setOnAir(\n            currentShow\n        );\n\n\n        let nextShow =\n            null;\n\n        let smallestDelta =\n            Infinity;\n\n\n        shows.forEach(\n            show => {\n\n                const start =\n                    timeToMinutes(\n                        show.start\n                    );\n\n\n                if (\n                    start === null\n                ) {\n                    return;\n                }\n\n\n                const showDay =\n                    days.indexOf(\n                        show.day\n                    );\n\n\n                let delta =\n\n                    (\n                        (\n                            showDay -\n                            now.dayIndex\n                        ) *\n                        1440\n                    ) +\n\n                    (\n                        start -\n                        now.minute\n                    );\n\n\n                if (\n                    delta <= 0\n                ) {\n\n                    delta +=\n                        7 * 1440;\n\n                }\n\n\n                if (\n                    delta <\n                    smallestDelta\n                ) {\n\n                    smallestDelta =\n                        delta;\n\n                    nextShow =\n                        show;\n\n                }\n            }\n        );\n\n\n        setUpNext(\n            nextShow\n        );\n    }\n\n\n    fetch(\n        SHEET_URL\n    )\n\n    .then(\n        response =>\n            response.text()\n    )\n\n    .then(\n        text =>\n            processSchedule(\n                parseCSV(text)\n            )\n    )\n\n    .catch(\n        function () {\n\n            setOnAir(null);\n            setUpNext(null);\n\n        }\n    );\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-29b6fe8 e-con-full e-flex e-con e-parent\" data-id=\"29b6fe8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e4ca81e elementor-widget elementor-widget-html\" data-id=\"e4ca81e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ==========================================================\n   REAL ROCK REVIVAL \u2014 RECENTLY PLAYED\n   ========================================================== *\/\n\n#rrr-recently-played {\n    width: 100%;\n    box-sizing: border-box;\n\n    padding: 54px 0 60px;\n\n    background:\n        linear-gradient(\n            180deg,\n            #0b0b0b 0%,\n            #111111 100%\n        );\n\n    color: #ffffff;\n\n    font-family:\n        Arial,\n        Helvetica,\n        sans-serif;\n}\n\n.rrr-recent-inner {\n    width: calc(100% - 56px);\n    max-width: 1400px;\n    margin: 0 auto;\n}\n\n\n\/* ==========================================================\n   HEADING \u2014 FRESH OFF THE AIR\n   ========================================================== *\/\n\n.rrr-recent-heading {\n    position: relative;\n    margin-bottom: 34px;\n    text-align: center;\n}\n\n\n\/* RECENTLY PLAYED + SIDE LINES *\/\n\n.rrr-recent-kicker {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 14px;\n\n    margin-bottom: 9px;\n\n    color: #ef2428;\n\n    font-size: 13px;\n    font-weight: 900;\n\n    letter-spacing: 3px;\n    text-transform: uppercase;\n\n    text-shadow:\n        0 0 10px rgba(239,36,40,.30);\n}\n\n.rrr-recent-kicker::before,\n.rrr-recent-kicker::after {\n    content: \"\";\n\n    width: 55px;\n    height: 2px;\n\n    background:\n        linear-gradient(\n            90deg,\n            transparent,\n            #ef2428,\n            #ff8a00\n        );\n\n    box-shadow:\n        0 0 8px rgba(239,36,40,.35);\n}\n\n.rrr-recent-kicker::after {\n    background:\n        linear-gradient(\n            90deg,\n            #ff8a00,\n            #ef2428,\n            transparent\n        );\n}\n\n\n\/* MAIN TITLE *\/\n\n.rrr-recent-title {\n    position: relative;\n\n    display: inline-block;\n\n    margin: 0;\n\n    color: #ffffff;\n\n    font-size: 42px;\n    line-height: 1;\n\n    font-weight: 900;\n\n    letter-spacing: 1px;\n\n    text-transform: uppercase;\n\n    text-shadow:\n        0 3px 0 rgba(0,0,0,.8),\n        0 0 18px rgba(255,255,255,.08);\n}\n\n\n\/* SMALL RED\/YELLOW ACCENT UNDER TITLE *\/\n\n.rrr-recent-title::after {\n    content: \"\";\n\n    display: block;\n\n    width: 115px;\n    height: 3px;\n\n    margin: 14px auto 0;\n\n    border-radius: 10px;\n\n    background:\n        linear-gradient(\n            90deg,\n            #ef2428 0%,\n            #ff4a00 48%,\n            #ffc20e 100%\n        );\n\n    box-shadow:\n        0 0 12px rgba(239,36,40,.28);\n}\n\n\n\/* MOBILE *\/\n\n@media (max-width: 700px) {\n\n    .rrr-recent-title {\n        font-size: 34px;\n    }\n\n    .rrr-recent-kicker::before,\n    .rrr-recent-kicker::after {\n        width: 30px;\n    }\n}\n\n\n\/* ==========================================================\n   SONG GRID\n   ========================================================== *\/\n\n.rrr-recent-grid {\n    display: grid;\n\n    grid-template-columns:\n        repeat(5, minmax(0, 1fr));\n\n    gap: 18px;\n}\n\n\n\/* ==========================================================\n   SONG CARD\n   ========================================================== *\/\n\n.rrr-recent-card {\n    min-width: 0;\n\n    padding: 12px;\n\n    box-sizing: border-box;\n\n    border-radius: 14px;\n\n    background:\n        linear-gradient(\n            145deg,\n            rgba(255,255,255,.05),\n            rgba(255,255,255,.015)\n        );\n\n    border:\n        1px solid\n        rgba(255,255,255,.07);\n\n    box-shadow:\n        0 14px 32px\n        rgba(0,0,0,.28);\n\n    transition:\n        transform .18s ease,\n        border-color .18s ease,\n        box-shadow .18s ease;\n}\n\n.rrr-recent-card:hover {\n    transform:\n        translateY(-3px);\n\n    border-color:\n        rgba(204,30,32,.34);\n\n    box-shadow:\n        0 18px 38px\n        rgba(0,0,0,.38),\n\n        0 0 14px\n        rgba(204,30,32,.08);\n}\n\n\n\/* ==========================================================\n   ALBUM ART\n   ========================================================== *\/\n\n.rrr-recent-art-wrap {\n    width: 100%;\n\n    aspect-ratio: 1 \/ 1;\n\n    padding: 3px;\n\n    box-sizing: border-box;\n\n    border-radius: 11px;\n\n    background:\n        linear-gradient(\n            135deg,\n            #cc1e20,\n            #ff7200 55%,\n            #ffc20e\n        );\n}\n\n.rrr-recent-art {\n    display: block;\n\n    width: 100%;\n    height: 100%;\n\n    object-fit: cover;\n\n    border-radius: 8px;\n\n    background: #080808;\n}\n\n\n\/* ==========================================================\n   SONG DETAILS\n   ========================================================== *\/\n\n.rrr-recent-info {\n    padding:\n        13px 3px 4px;\n}\n\n.rrr-recent-artist {\n    margin-bottom: 5px;\n\n    overflow: hidden;\n\n    color: #ffffff;\n\n    font-size: 16px;\n    line-height: 1.15;\n\n    font-weight: 900;\n\n    text-overflow: ellipsis;\n    white-space: nowrap;\n\n    text-transform: uppercase;\n}\n\n.rrr-recent-song {\n    min-height: 38px;\n\n    color: #bdbdbd;\n\n    font-size: 14px;\n    line-height: 1.35;\n\n    font-weight: 600;\n}\n\n.rrr-recent-time {\n    margin-top: 10px;\n\n    color: #777777;\n\n    font-size: 11px;\n    font-weight: 800;\n\n    letter-spacing: .7px;\n\n    text-transform: uppercase;\n}\n\n\n\/* ==========================================================\n   LOADING \/ ERROR\n   ========================================================== *\/\n\n.rrr-recent-loading,\n.rrr-recent-error {\n    grid-column: 1 \/ -1;\n\n    padding: 36px;\n\n    text-align: center;\n\n    color: #777777;\n\n    font-size: 14px;\n    font-weight: 700;\n\n    letter-spacing: 1px;\n\n    text-transform: uppercase;\n}\n\n\n\/* ==========================================================\n   RESPONSIVE\n   ========================================================== *\/\n\n@media (max-width: 1050px) {\n\n    .rrr-recent-grid {\n        grid-template-columns:\n            repeat(3, minmax(0,1fr));\n    }\n}\n\n@media (max-width: 700px) {\n\n    .rrr-recent-inner {\n        width:\n            calc(100% - 30px);\n    }\n\n    .rrr-recent-grid {\n        grid-template-columns:\n            repeat(2, minmax(0,1fr));\n    }\n\n    .rrr-recent-title {\n        font-size: 34px;\n    }\n}\n\n@media (max-width: 430px) {\n\n    .rrr-recent-grid {\n        grid-template-columns: 1fr;\n    }\n}\n<\/style>\n\n\n<section id=\"rrr-recently-played\">\n\n    <div class=\"rrr-recent-inner\">\n\n        <div class=\"rrr-recent-heading\">\n\n            <div class=\"rrr-recent-kicker\">\n                Recently Played\n            <\/div>\n\n            <h2 class=\"rrr-recent-title\">\n                Fresh Off The Air\n            <\/h2>\n\n        <\/div>\n\n\n        <div\n            id=\"rrr-recent-grid\"\n            class=\"rrr-recent-grid\"\n        >\n\n            <div class=\"rrr-recent-loading\">\n                Loading recent tracks...\n            <\/div>\n\n        <\/div>\n\n    <\/div>\n\n<\/section>\n\n\n<script>\n(function () {\n\n    const API_URL =\n        '\/wp-json\/real-rock-revival\/v1\/recently-played';\n\n    const FALLBACK_ART =\n        'http:\/\/realrockrevival.com\/wp-content\/uploads\/2026\/08\/6b17152f-c6fd-4654-811c-87c133876acd.png';\n\n    const grid =\n        document.getElementById(\n            'rrr-recent-grid'\n        );\n\n\n    if (!grid) {\n        return;\n    }\n\n\n    \/* ==================================\/* ======================================================\n   FORMAT PLAYED TIME\n   Stream history time is UTC.\n   Convert it to America\/New_York automatically,\n   including EST \/ EDT daylight-saving changes.\n   ====================================================== *\/\n\nfunction formatTime(timeString) {\n\n    if (!timeString) {\n        return '';\n    }\n\n    const parts = timeString.split(':');\n\n    if (parts.length < 2) {\n        return timeString;\n    }\n\n    const hour =\n        parseInt(parts[0], 10);\n\n    const minute =\n        parseInt(parts[1], 10);\n\n    const second =\n        parts.length > 2\n            ? parseInt(parts[2], 10)\n            : 0;\n\n    \/*\n     * Build a UTC date using today's UTC date\n     * and the played_at clock time.\n     *\/\n    const now = new Date();\n\n    const playedUTC =\n        new Date(\n            Date.UTC(\n                now.getUTCFullYear(),\n                now.getUTCMonth(),\n                now.getUTCDate(),\n                hour,\n                minute,\n                second\n            )\n        );\n\n    \/*\n     * Format the result in Eastern Time.\n     * America\/New_York automatically handles\n     * EST and EDT.\n     *\/\n    return new Intl.DateTimeFormat(\n        'en-US',\n        {\n            timeZone: 'America\/New_York',\n            hour: 'numeric',\n            minute: '2-digit',\n            hour12: true\n        }\n    ).format(playedUTC);\n}\n\n\n    \/* ======================================================\n       LOOK UP ALBUM ART\n       ====================================================== *\/\n\n    async function getArtwork(\n        artist,\n        song\n    ) {\n\n        try {\n\n            const term =\n                encodeURIComponent(\n                    artist +\n                    ' ' +\n                    song\n                );\n\n            const response =\n                await fetch(\n                    'https:\/\/itunes.apple.com\/search' +\n                    '?term=' +\n                    term +\n                    '&entity=song' +\n                    '&limit=1'\n                );\n\n            const data =\n                await response.json();\n\n            if (\n                data.results &&\n                data.results.length\n            ) {\n\n                let artwork =\n                    data.results[0]\n                        .artworkUrl100;\n\n                if (artwork) {\n\n                    artwork =\n                        artwork.replace(\n                            '100x100bb',\n                            '600x600bb'\n                        );\n\n                    return artwork;\n\n                }\n\n            }\n\n        } catch (error) {\n        }\n\n        return FALLBACK_ART;\n\n    }\n\n\n    \/* ======================================================\n       BUILD SONG CARD\n       ====================================================== *\/\n\n    function createCard(\n        track\n    ) {\n\n        const card =\n            document.createElement(\n                'article'\n            );\n\n        card.className =\n            'rrr-recent-card';\n\n\n        const artWrap =\n            document.createElement(\n                'div'\n            );\n\n        artWrap.className =\n            'rrr-recent-art-wrap';\n\n\n        const art =\n            document.createElement(\n                'img'\n            );\n\n        art.className =\n            'rrr-recent-art';\n\n        art.src =\n            FALLBACK_ART;\n\n        art.alt =\n            track.artist +\n            ' - ' +\n            track.song;\n\n\n        artWrap.appendChild(\n            art\n        );\n\n\n        const info =\n            document.createElement(\n                'div'\n            );\n\n        info.className =\n            'rrr-recent-info';\n\n\n        const artist =\n            document.createElement(\n                'div'\n            );\n\n        artist.className =\n            'rrr-recent-artist';\n\n        artist.textContent =\n            track.artist;\n\n\n        const song =\n            document.createElement(\n                'div'\n            );\n\n        song.className =\n            'rrr-recent-song';\n\n        song.textContent =\n            track.song;\n\n\n        const time =\n            document.createElement(\n                'div'\n            );\n\n        time.className =\n            'rrr-recent-time';\n\n        time.textContent =\n            'Played ' +\n            formatTime(\n                track.played_at\n            );\n\n\n        info.appendChild(\n            artist\n        );\n\n        info.appendChild(\n            song\n        );\n\n        info.appendChild(\n            time\n        );\n\n\n        card.appendChild(\n            artWrap\n        );\n\n        card.appendChild(\n            info\n        );\n\n\n        getArtwork(\n            track.artist,\n            track.song\n        ).then(\n            function (\n                artwork\n            ) {\n\n                art.src =\n                    artwork;\n\n            }\n        );\n\n\n        return card;\n\n    }\n\n\n    \/* ======================================================\n       LOAD RECENT TRACKS\n       ====================================================== *\/\n\n    async function loadRecentTracks() {\n\n        try {\n\n            const response =\n                await fetch(\n                    API_URL +\n                    '?cache=' +\n                    Date.now(),\n                    {\n                        cache:\n                            'no-store'\n                    }\n                );\n\n            const data =\n                await response.json();\n\n\n            if (\n                !data.success ||\n                !data.tracks ||\n                !data.tracks.length\n            ) {\n\n                throw new Error(\n                    'No tracks returned'\n                );\n\n            }\n\n\n            grid.innerHTML =\n                '';\n\n\n            data.tracks\n                .slice(\n                    0,\n                    5\n                )\n                .forEach(\n                    function (\n                        track\n                    ) {\n\n                        grid.appendChild(\n                            createCard(\n                                track\n                            )\n                        );\n\n                    }\n                );\n\n        } catch (error) {\n\n            grid.innerHTML =\n                '<div class=\"rrr-recent-error\">' +\n                'Unable to load recent tracks.' +\n                '<\/div>';\n\n        }\n\n    }\n\n\n    loadRecentTracks();\n\n\n    \/*\n     Refresh every 30 seconds.\n    *\/\n\n    setInterval(\n        loadRecentTracks,\n        30000\n    );\n\n})();\n<\/script>\n\n<style>\n\/* Pull Fresh Off The Air section closer to hero *\/\n#rrr-recently-played {\n    padding-top: 15px !important;\n}\n<\/style>\n\n<script>\n\/* ==========================================================\n   RRR \u2014 SMARTER RECENTLY PLAYED ARTWORK MATCHING\n   Paste at the VERY BOTTOM of the Recently Played HTML widget\n   ========================================================== *\/\n\n(function () {\n\n    function normalizeText(text) {\n\n        return String(text || '')\n            .toLowerCase()\n\n            \/* remove common punctuation *\/\n            .replace(\/[\u2019'\".,!?()[\\]{}:;\/\\\\]\/g, ' ')\n\n            \/* turn & into and *\/\n            .replace(\/\\s*&\\s*\/g, ' and ')\n\n            \/* remove extra spaces *\/\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n\n    function simplifySongTitle(text) {\n\n        return normalizeText(text)\n\n            \/* remove common radio metadata extras *\/\n            .replace(\/\\b(remaster(ed)?|remastered version)\\b\/g, '')\n            .replace(\/\\b(album version|single version|radio edit)\\b\/g, '')\n            .replace(\/\\b(explicit|clean)\\b\/g, '')\n            .replace(\/\\b\\d{4} remaster\\b\/g, '')\n\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n\n    function scoreResult(\n        result,\n        wantedArtist,\n        wantedSong\n    ) {\n\n        const resultArtist =\n            normalizeText(\n                result.artistName\n            );\n\n        const resultSong =\n            simplifySongTitle(\n                result.trackName\n            );\n\n        const artist =\n            normalizeText(\n                wantedArtist\n            );\n\n        const song =\n            simplifySongTitle(\n                wantedSong\n            );\n\n\n        let score = 0;\n\n\n        \/* ----------------------------------------------\n           ARTIST MATCH\n           ---------------------------------------------- *\/\n\n        if (\n            resultArtist === artist\n        ) {\n\n            score += 100;\n\n        }\n\n        else if (\n            resultArtist.includes(artist) ||\n            artist.includes(resultArtist)\n        ) {\n\n            score += 65;\n\n        }\n\n        else {\n\n            \/*\n             If the artist doesn't resemble\n             what we asked for, penalize heavily.\n            *\/\n\n            score -= 100;\n\n        }\n\n\n        \/* ----------------------------------------------\n           SONG MATCH\n           ---------------------------------------------- *\/\n\n        if (\n            resultSong === song\n        ) {\n\n            score += 100;\n\n        }\n\n        else if (\n            resultSong.includes(song) ||\n            song.includes(resultSong)\n        ) {\n\n            score += 70;\n\n        }\n\n\n        \/*\n         Small preference for results that\n         are actually marked as songs.\n        *\/\n\n        if (\n            result.wrapperType === 'track'\n        ) {\n\n            score += 5;\n\n        }\n\n\n        return score;\n    }\n\n\n    async function findBestArtwork(\n        artist,\n        song\n    ) {\n\n        try {\n\n            const searchTerm =\n                encodeURIComponent(\n                    artist + ' ' + song\n                );\n\n\n            \/*\n             Pull several results instead of blindly\n             accepting Apple's first answer.\n            *\/\n\n            const response =\n                await fetch(\n                    'https:\/\/itunes.apple.com\/search' +\n                    '?term=' + searchTerm +\n                    '&entity=song' +\n                    '&limit=25'\n                );\n\n\n            const data =\n                await response.json();\n\n\n            if (\n                !data.results ||\n                !data.results.length\n            ) {\n\n                return null;\n\n            }\n\n\n            let bestResult = null;\n            let bestScore = -9999;\n\n\n            data.results.forEach(\n                function (result) {\n\n                    const score =\n                        scoreResult(\n                            result,\n                            artist,\n                            song\n                        );\n\n\n                    if (\n                        score > bestScore\n                    ) {\n\n                        bestScore =\n                            score;\n\n                        bestResult =\n                            result;\n\n                    }\n\n                }\n            );\n\n\n            \/*\n             Require a reasonably strong match.\n             This prevents random tribute albums\n             from winning just because Apple\n             returned them first.\n            *\/\n\n            if (\n                !bestResult ||\n                bestScore < 120\n            ) {\n\n                return null;\n\n            }\n\n\n            let artwork =\n                bestResult.artworkUrl100;\n\n\n            if (!artwork) {\n\n                return null;\n\n            }\n\n\n            artwork =\n                artwork.replace(\n                    '100x100bb',\n                    '600x600bb'\n                );\n\n\n            return artwork;\n\n        }\n\n        catch (error) {\n\n            return null;\n\n        }\n\n    }\n\n\n    async function fixCardArtwork(\n        card\n    ) {\n\n        const artistElement =\n            card.querySelector(\n                '.rrr-recent-artist'\n            );\n\n\n        const songElement =\n            card.querySelector(\n                '.rrr-recent-song'\n            );\n\n\n        const imageElement =\n            card.querySelector(\n                '.rrr-recent-art'\n            );\n\n\n        if (\n            !artistElement ||\n            !songElement ||\n            !imageElement\n        ) {\n\n            return;\n\n        }\n\n\n        const artist =\n            artistElement.textContent.trim();\n\n\n        const song =\n            songElement.textContent.trim();\n\n\n        const lookupKey =\n            artist +\n            ' | ' +\n            song;\n\n\n        \/*\n         Don't keep searching for the same\n         song repeatedly.\n        *\/\n\n        if (\n            imageElement.dataset\n                .rrrSmartArtwork ===\n            lookupKey\n        ) {\n\n            return;\n\n        }\n\n\n        imageElement.dataset\n            .rrrSmartArtwork =\n            lookupKey;\n\n\n        const artwork =\n            await findBestArtwork(\n                artist,\n                song\n            );\n\n\n        if (artwork) {\n\n            imageElement.src =\n                artwork;\n\n        }\n\n    }\n\n\n    function fixAllArtwork() {\n\n        const cards =\n            document.querySelectorAll(\n                '#rrr-recent-grid .rrr-recent-card'\n            );\n\n\n        cards.forEach(\n            function (card) {\n\n                fixCardArtwork(\n                    card\n                );\n\n            }\n        );\n\n    }\n\n\n    \/* ======================================================\n       RUN AFTER THE CARDS LOAD\n       ====================================================== *\/\n\n    const grid =\n        document.getElementById(\n            'rrr-recent-grid'\n        );\n\n\n    if (!grid) {\n\n        return;\n\n    }\n\n\n    \/*\n     Run immediately in case the cards\n     are already on screen.\n    *\/\n\n    fixAllArtwork();\n\n\n    \/*\n     The Recently Played code refreshes the\n     cards periodically. This watches for that\n     refresh and fixes the artwork automatically.\n    *\/\n\n    const observer =\n        new MutationObserver(\n            function () {\n\n                setTimeout(\n                    fixAllArtwork,\n                    250\n                );\n\n            }\n        );\n\n\n    observer.observe(\n        grid,\n        {\n            childList: true,\n            subtree: true\n        }\n    );\n\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-85b6622 elementor-widget elementor-widget-html\" data-id=\"85b6622\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* =========================================\n   REAL ROCK REVIVAL - HOME ROCK NEWS\n   ========================================= *\/\n\n.rrr-home-news {\n    width: 100%;\n    max-width: 1400px;\n    margin: 0 auto;\n    padding: 1px 24px 60px;\n    font-family: Arial, sans-serif;\n    color: #ffffff;\n}\n\n.rrr-home-news-header {\n    position: relative;\n    text-align: center;\n    margin-bottom: 28px;\n}\n\n.rrr-home-news-title-wrap {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n}\n\n.rrr-home-news-kicker {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 14px;\n    color: #e11d2e;\n    font-size: 13px;\n    font-weight: 800;\n    letter-spacing: 3px;\n    text-transform: uppercase;\n    margin-bottom: 8px;\n}\n\n.rrr-home-news-kicker::before,\n.rrr-home-news-kicker::after {\n    content: \"\";\n    width: 42px;\n    height: 2px;\n    background: linear-gradient(90deg, #e11d2e, #f59e0b);\n}\n\n.rrr-home-news-kicker::before {\n    background: linear-gradient(90deg, #f59e0b, #e11d2e);\n}\n\n.rrr-home-news-title {\n    position: relative;\n    margin: 0;\n    padding-bottom: 17px;\n    font-size: clamp(32px, 4vw, 48px);\n    line-height: 1;\n    font-weight: 900;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n}\n\n.rrr-home-news-title::after {\n    content: \"\";\n    position: absolute;\n    width: 110px;\n    height: 4px;\n    border-radius: 10px;\n    left: 50%;\n    bottom: 0;\n    transform: translateX(-50%);\n    background: linear-gradient(90deg, #e11d2e, #f59e0b);\n}\n\n.rrr-home-news-link {\n    position: absolute;\n    right: 0;\n    bottom: 5px;\n    color: #ffffff;\n    text-decoration: none;\n    font-size: 13px;\n    font-weight: 800;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n    white-space: nowrap;\n}\n\n.rrr-home-news-link:hover {\n    color: #e11d2e;\n}\n\n.rrr-home-news-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 24px;\n}\n\n.rrr-home-news-card {\n    background: #111111;\n    border: 1px solid #292929;\n    border-radius: 16px;\n    overflow: hidden;\n    transition: transform .2s ease, border-color .2s ease;\n}\n\n.rrr-home-news-card:hover {\n    transform: translateY(-5px);\n    border-color: #e11d2e;\n}\n\n.rrr-home-news-image {\n    width: 100%;\n    aspect-ratio: 16 \/ 9;\n    object-fit: cover;\n    display: block;\n}\n\n.rrr-home-news-content {\n    padding: 22px;\n}\n\n.rrr-home-news-source {\n    color: #e11d2e;\n    font-size: 11px;\n    font-weight: 800;\n    letter-spacing: 2px;\n    text-transform: uppercase;\n    margin-bottom: 10px;\n}\n\n.rrr-home-news-content h3 {\n    margin: 0 0 14px;\n    font-size: 22px;\n    line-height: 1.15;\n    font-weight: 800;\n}\n\n.rrr-home-news-read {\n    color: #ffffff;\n    text-decoration: none;\n    font-size: 12px;\n    font-weight: 800;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n}\n\n.rrr-home-news-read:hover {\n    color: #e11d2e;\n}\n\n.rrr-home-news-status {\n    grid-column: 1 \/ -1;\n    text-align: center;\n    padding: 35px 20px;\n    color: #aaa;\n}\n\n@media (max-width: 900px) {\n    .rrr-home-news-grid {\n        grid-template-columns: repeat(2, 1fr);\n    }\n}\n\n@media (max-width: 620px) {\n    .rrr-home-news {\n        padding: 32px 16px 45px;\n    }\n\n    .rrr-home-news-header {\n        align-items: flex-start;\n        flex-direction: column;\n    }\n\n    .rrr-home-news-grid {\n        grid-template-columns: 1fr;\n    }\n}\n<\/style>\n\n<section class=\"rrr-home-news\">\n\n    <div class=\"rrr-home-news-header\">\n\n        <div class=\"rrr-home-news-title-wrap\">\n            <div class=\"rrr-home-news-kicker\">Real Rock Revival<\/div>\n            <h2 class=\"rrr-home-news-title\">Rock News<\/h2>\n        <\/div>\n\n        <a class=\"rrr-home-news-link\"\n           href=\"\/index.php\/news\/\">\n            View All Rock News \u2192\n        <\/a>\n\n    <\/div>\n\n    <div id=\"rrr-home-news-grid\" class=\"rrr-home-news-grid\">\n        <div class=\"rrr-home-news-status\">Loading the latest rock news...<\/div>\n    <\/div>\n\n<\/section>\n\n<script>\n(function () {\n\n    const grid = document.getElementById('rrr-home-news-grid');\n\n    function getOriginalStoryURL(html) {\n        const div = document.createElement('div');\n        div.innerHTML = html || '';\n\n        const links = div.querySelectorAll('a[href]');\n\n        for (const link of links) {\n            try {\n                const url = new URL(link.href);\n\n                if (\n                    url.hostname.includes('loudwire.com') ||\n                    url.hostname.includes('ultimateclassicrock.com') ||\n                    url.hostname.includes('loudersound.com')\n                ) {\n                    return url.href;\n                }\n            } catch(e) {}\n        }\n\n        return '#';\n    }\n\n    function getSourceName(url) {\n        if (url.includes('loudwire.com')) {\n            return 'Loudwire';\n        }\n\n        if (url.includes('ultimateclassicrock.com')) {\n            return 'Ultimate Classic Rock';\n        }\n\n        if (url.includes('loudersound.com')) {\n            return 'Louder';\n        }\n\n        return 'Rock News';\n    }\n\n    function getImage(post) {\n        try {\n            return post._embedded['wp:featuredmedia'][0].source_url;\n        } catch(e) {\n            return '';\n        }\n    }\n\n    fetch('\/wp-json\/wp\/v2\/posts?per_page=6&_embed=wp:featuredmedia')\n        .then(response => {\n            if (!response.ok) {\n                throw new Error('Unable to load posts.');\n            }\n\n            return response.json();\n        })\n        .then(posts => {\n\n            posts = posts.filter(post => {\n                const content =\n                    post.content && post.content.rendered\n                        ? post.content.rendered\n                        : '';\n\n                return (\n                    content.includes('loudwire.com') ||\n                    content.includes('ultimateclassicrock.com') ||\n                    content.includes('loudersound.com')\n                );\n            });\n\n            posts = posts.filter(post => getImage(post));\n\n            posts = posts.slice(0, 3);\n\n            if (!posts.length) {\n                grid.innerHTML =\n                    '<div class=\"rrr-home-news-status\">Rock news is coming soon.<\/div>';\n                return;\n            }\n\n            grid.innerHTML = '';\n\n            posts.forEach(post => {\n\n                const storyURL =\n                    getOriginalStoryURL(post.content.rendered);\n\n                const source =\n                    getSourceName(storyURL);\n\n                const image =\n                    getImage(post);\n\n                const card =\n                    document.createElement('article');\n\n                card.className = 'rrr-home-news-card';\n\n                card.innerHTML = `\n                    <img decoding=\"async\" class=\"rrr-home-news-image\"\n                         src=\"${image}\"\n                         alt=\"\">\n\n                    <div class=\"rrr-home-news-content\">\n\n                        <div class=\"rrr-home-news-source\">\n                            ${source}\n                        <\/div>\n\n                        <h3>${post.title.rendered}<\/h3>\n\n                        <a class=\"rrr-home-news-read\"\n                           href=\"${storyURL}\"\n                           target=\"_blank\"\n                           rel=\"noopener noreferrer\">\n                            Read Full Story \u2192\n                        <\/a>\n\n                    <\/div>\n                `;\n\n                grid.appendChild(card);\n            });\n\n        })\n        .catch(error => {\n\n            console.error('RRR Home Rock News:', error);\n\n            grid.innerHTML =\n                '<div class=\"rrr-home-news-status\">Unable to load rock news right now.<\/div>';\n        });\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cf6ef31 elementor-widget elementor-widget-html\" data-id=\"cf6ef31\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ==========================================================\n   REAL ROCK REVIVAL \u2014 MEET THE VOICES\n   ========================================================== *\/\n\n#rrr-voices {\n    width: 100%;\n    box-sizing: border-box;\n    padding: 1px 0 62px;\n    background: #0b0b0b;\n    color: #ffffff;\n}\n\n.rrr-voices-inner {\n    width: calc(100% - 56px);\n    max-width: 1400px;\n    margin: 0 auto;\n}\n\n\/* ==========================================================\n   HEADING\n   ========================================================== *\/\n\n.rrr-voices-heading {\n    text-align: center;\n    margin-bottom: 36px;\n}\n\n.rrr-voices-kicker {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 14px;\n    margin-bottom: 9px;\n    color: #ef2428;\n    font-size: 13px;\n    font-weight: 900;\n    letter-spacing: 3px;\n    text-transform: uppercase;\n}\n\n.rrr-voices-kicker::before,\n.rrr-voices-kicker::after {\n    content: \"\";\n    width: 55px;\n    height: 2px;\n    background:\n        linear-gradient(\n            90deg,\n            transparent,\n            #ef2428,\n            #ff8a00\n        );\n}\n\n.rrr-voices-kicker::after {\n    background:\n        linear-gradient(\n            90deg,\n            #ff8a00,\n            #ef2428,\n            transparent\n        );\n}\n\n.rrr-voices-title {\n    display: inline-block;\n    margin: 0;\n    color: #ffffff;\n    font-size: 42px;\n    line-height: 1;\n    font-weight: 900;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n}\n\n.rrr-voices-title::after {\n    content: \"\";\n    display: block;\n    width: 115px;\n    height: 3px;\n    margin: 14px auto 0;\n    border-radius: 10px;\n    background:\n        linear-gradient(\n            90deg,\n            #ef2428 0%,\n            #ff4a00 48%,\n            #ffc20e 100%\n        );\n}\n\n\/* ==========================================================\n   DJ GRID\n   ========================================================== *\/\n\n.rrr-voices-grid {\n    display: grid;\n    grid-template-columns:\n        repeat(2, minmax(0, 1fr));\n    gap: 22px;\n}\n\n\/* ==========================================================\n   DJ CARD\n   ========================================================== *\/\n\n.rrr-voice-card {\n    display: flex;\n    align-items: center;\n    gap: 22px;\n\n    min-width: 0;\n    min-height: 190px;\n\n    padding: 22px;\n\n    border-radius: 15px;\n\n    background:\n        linear-gradient(\n            145deg,\n            rgba(255,255,255,.055),\n            rgba(255,255,255,.018)\n        );\n\n    border:\n        1px solid rgba(255,255,255,.08);\n\n    border-left:\n        5px solid #ef2428;\n\n    box-shadow:\n        0 14px 34px rgba(0,0,0,.32);\n\n    transition:\n        transform .18s ease,\n        border-color .18s ease,\n        box-shadow .18s ease;\n}\n\n.rrr-voice-card:hover {\n    transform: translateY(-4px);\n\n    border-color:\n        rgba(239,36,40,.40);\n\n    box-shadow:\n        0 20px 42px rgba(0,0,0,.40),\n        0 0 18px rgba(239,36,40,.08);\n}\n\n\/* DJ PHOTO *\/\n\n.rrr-voice-art-wrap {\n    width: 150px;\n    height: 150px;\n    flex: 0 0 150px;\n\n    padding: 3px;\n\n    box-sizing: border-box;\n\n    border-radius: 12px;\n\n    background:\n        linear-gradient(\n            135deg,\n            #ef2428,\n            #ff7200 55%,\n            #ffc20e\n        );\n}\n\n.rrr-voice-art {\n    display: block;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    border-radius: 9px;\n    background: #080808;\n}\n\n\/* INFO *\/\n\n.rrr-voice-info {\n    min-width: 0;\n    flex: 1;\n}\n\n.rrr-voice-name {\n    color: #ffffff;\n    font-size: 24px;\n    line-height: 1.1;\n    font-weight: 900;\n    text-transform: uppercase;\n    margin-bottom: 8px;\n}\n\n.rrr-voice-show {\n    color: #ef2428;\n    font-size: 13px;\n    font-weight: 900;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n    margin-bottom: 7px;\n}\n\n.rrr-voice-time {\n    color: #ffc20e;\n    font-size: 14px;\n    font-weight: 800;\n    margin-bottom: 7px;\n}\n\n.rrr-voice-extra {\n    color: #9d9d9d;\n    font-size: 13px;\n    line-height: 1.4;\n}\n\n\/* ==========================================================\n   BUTTON\n   ========================================================== *\/\n\n.rrr-voices-more {\n    text-align: center;\n    margin-top: 34px;\n}\n\n.rrr-voices-more a {\n    display: inline-block;\n    padding: 13px 22px;\n    color: #ffffff;\n    background: #ef2428;\n    border-radius: 7px;\n    font-size: 13px;\n    font-weight: 900;\n    letter-spacing: 1px;\n    text-decoration: none;\n    text-transform: uppercase;\n    transition:\n        background .18s ease,\n        transform .18s ease;\n}\n\n.rrr-voices-more a:hover {\n    background: #ff3138;\n    transform: translateY(-2px);\n}\n\n\/* LOADING *\/\n\n.rrr-voices-loading {\n    grid-column: 1 \/ -1;\n    padding: 30px;\n    text-align: center;\n    color: #777;\n    font-size: 13px;\n    font-weight: 800;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n}\n\n\/* ==========================================================\n   RESPONSIVE\n   ========================================================== *\/\n\n@media (max-width: 900px) {\n    .rrr-voices-grid {\n        grid-template-columns: 1fr;\n    }\n}\n\n@media (max-width: 600px) {\n\n    #rrr-voices {\n        padding: 44px 0 48px;\n    }\n\n    .rrr-voices-inner {\n        width: calc(100% - 30px);\n    }\n\n    .rrr-voices-title {\n        font-size: 34px;\n    }\n\n    .rrr-voices-kicker::before,\n    .rrr-voices-kicker::after {\n        width: 30px;\n    }\n\n    .rrr-voice-card {\n        align-items: flex-start;\n        gap: 16px;\n        padding: 18px;\n    }\n\n    .rrr-voice-art-wrap {\n        width: 100px;\n        height: 100px;\n        flex-basis: 100px;\n    }\n\n    .rrr-voice-name {\n        font-size: 20px;\n    }\n}\n<\/style>\n\n\n<section id=\"rrr-voices\">\n\n    <div class=\"rrr-voices-inner\">\n\n        <div class=\"rrr-voices-heading\">\n\n            <div class=\"rrr-voices-kicker\">\n                Real Rock Revival\n            <\/div>\n\n            <h2 class=\"rrr-voices-title\">\n                Meet The Voices\n            <\/h2>\n\n        <\/div>\n\n\n        <div\n            id=\"rrr-voices-grid\"\n            class=\"rrr-voices-grid\"\n        >\n\n            <div class=\"rrr-voices-loading\">\n                Loading the voices of Triple R...\n            <\/div>\n\n        <\/div>\n\n\n        <div class=\"rrr-voices-more\">\n\n            <a href=\"\/index.php\/our-djs\/\">\n                Meet All Our DJs \u2192\n            <\/a>\n\n        <\/div>\n\n    <\/div>\n\n<\/section>\n\n\n<script>\n(function () {\n\n    const SHEET_URL =\n        'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vS41T_J8DZ368smfRp__6Qcn25x7AdwouY_YH8lnjJvShPdD3t9uSLL8SFaqcMNHgdYFiFpwzZGgTqo\/pub?output=csv';\n\n    const TRIPLE_R_LOGO =\n        'https:\/\/realrockrevival.com\/wp-content\/uploads\/2026\/08\/c8eb6030-cd3f-4b78-ac61-8a1c9b2f6da7.png';\n\n    const grid =\n        document.getElementById(\n            'rrr-voices-grid'\n        );\n\n    if (!grid) return;\n\n\n    function parseCSV(text) {\n\n        const rows = [];\n\n        let row = [];\n        let field = '';\n        let quoted = false;\n\n        for (let i = 0; i < text.length; i++) {\n\n            const char = text[i];\n\n            if (char === '\"') {\n\n                if (\n                    quoted &&\n                    text[i + 1] === '\"'\n                ) {\n\n                    field += '\"';\n                    i++;\n\n                } else {\n\n                    quoted = !quoted;\n\n                }\n\n            }\n\n            else if (\n                char === ',' &&\n                !quoted\n            ) {\n\n                row.push(field);\n                field = '';\n\n            }\n\n            else if (\n                (\n                    char === '\\n' ||\n                    char === '\\r'\n                ) &&\n                !quoted\n            ) {\n\n                if (\n                    char === '\\r' &&\n                    text[i + 1] === '\\n'\n                ) {\n                    i++;\n                }\n\n                row.push(field);\n                rows.push(row);\n\n                row = [];\n                field = '';\n\n            }\n\n            else {\n\n                field += char;\n\n            }\n        }\n\n        if (\n            field.length ||\n            row.length\n        ) {\n\n            row.push(field);\n            rows.push(row);\n\n        }\n\n        return rows;\n    }\n\n\n    function createDJCard(dj) {\n\n        const card =\n            document.createElement(\n                'article'\n            );\n\n        card.className =\n            'rrr-voice-card';\n\n\n        const artWrap =\n            document.createElement(\n                'div'\n            );\n\n        artWrap.className =\n            'rrr-voice-art-wrap';\n\n\n        const art =\n            document.createElement(\n                'img'\n            );\n\n        art.className =\n            'rrr-voice-art';\n\n        art.src =\n            dj.djImage ||\n            TRIPLE_R_LOGO;\n\n        art.alt =\n            dj.name;\n\n\n        artWrap.appendChild(\n            art\n        );\n\n\n        const info =\n            document.createElement(\n                'div'\n            );\n\n        info.className =\n            'rrr-voice-info';\n\n\n        const name =\n            document.createElement(\n                'div'\n            );\n\n        name.className =\n            'rrr-voice-name';\n\n        name.textContent =\n            dj.name;\n\n\n        const show =\n            document.createElement(\n                'div'\n            );\n\n        show.className =\n            'rrr-voice-show';\n\n        show.textContent =\n            dj.show;\n\n\n        const time =\n            document.createElement(\n                'div'\n            );\n\n        time.className =\n            'rrr-voice-time';\n\n        time.textContent =\n            dj.day +\n            ' \u2022 ' +\n            dj.start +\n            ' \u2013 ' +\n            dj.end +\n            ' ET';\n\n\n        info.appendChild(\n            name\n        );\n\n        info.appendChild(\n            show\n        );\n\n        info.appendChild(\n            time\n        );\n\n\n        if (dj.moreShows > 0) {\n\n            const more =\n                document.createElement(\n                    'div'\n                );\n\n            more.className =\n                'rrr-voice-extra';\n\n            more.textContent =\n                '+ ' +\n                dj.moreShows +\n                (\n                    dj.moreShows === 1\n                        ? ' more weekly show'\n                        : ' more weekly shows'\n                );\n\n            info.appendChild(\n                more\n            );\n        }\n\n\n        card.appendChild(\n            artWrap\n        );\n\n        card.appendChild(\n            info\n        );\n\n\n        return card;\n    }\n\n\n    function processSchedule(rows) {\n\n        if (!rows.length) return;\n\n        rows.shift();\n\n\n        const DJs =\n            new Map();\n\n\n        rows.forEach(function(row) {\n\n            if (row.length < 9) {\n                return;\n            }\n\n            const day =\n                (row[0] || '')\n                    .trim();\n\n            const start =\n                (row[1] || '')\n                    .trim();\n\n            const end =\n                (row[2] || '')\n                    .trim();\n\n            const show =\n                (row[3] || '')\n                    .trim();\n\n            const djName =\n                (row[4] || '')\n                    .trim();\n\n            const showImage =\n                (row[5] || '')\n                    .trim();\n\n            const djImage =\n                (row[6] || '')\n                    .trim();\n\n            const description =\n                (row[7] || '')\n                    .trim();\n\n            const active =\n                (row[8] || '')\n                    .trim()\n                    .toLowerCase();\n\n\n            if (\n                active !== 'yes' ||\n                !djName\n            ) {\n                return;\n            }\n\n\n            if (!DJs.has(djName)) {\n\n                DJs.set(\n                    djName,\n                    {\n                        name: djName,\n                        show: show,\n                        day: day,\n                        start: start,\n                        end: end,\n                        djImage: djImage,\n                        showCount: 1\n                    }\n                );\n\n            } else {\n\n                const existing =\n                    DJs.get(djName);\n\n                existing.showCount++;\n\n\n                \/*\n                 * If the first schedule row\n                 * had no DJ image but another\n                 * row for this DJ does, use it.\n                 *\/\n\n                if (\n                    !existing.djImage &&\n                    djImage\n                ) {\n\n                    existing.djImage =\n                        djImage;\n                }\n\n            }\n\n        });\n\n\n        const list =\n            Array.from(\n                DJs.values()\n            );\n\n\n        grid.innerHTML =\n            '';\n\n\n        if (!list.length) {\n\n            grid.innerHTML =\n                '<div class=\"rrr-voices-loading\">' +\n                'More voices are coming to Triple R.' +\n                '<\/div>';\n\n            return;\n        }\n\n\n        list\n            .slice(0, 4)\n            .forEach(\n                function(dj) {\n\n                    dj.moreShows =\n                        Math.max(\n                            0,\n                            dj.showCount - 1\n                        );\n\n                    grid.appendChild(\n                        createDJCard(dj)\n                    );\n\n                }\n            );\n    }\n\n\n    fetch(\n        SHEET_URL +\n        '&cache=' +\n        Date.now()\n    )\n\n    .then(\n        response =>\n            response.text()\n    )\n\n    .then(\n        text =>\n            processSchedule(\n                parseCSV(text)\n            )\n    )\n\n    .catch(\n        function () {\n\n            grid.innerHTML =\n                '<div class=\"rrr-voices-loading\">' +\n                'The voices of Triple R are coming soon.' +\n                '<\/div>';\n\n        }\n    );\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c9fda0d e-flex e-con-boxed e-con e-parent\" data-id=\"c9fda0d\" 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-5fb3f10 elementor-widget elementor-widget-html\" data-id=\"5fb3f10\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ==========================================================\n   REAL ROCK REVIVAL \u2014 FINAL LISTEN CTA\n   ========================================================== *\/\n\n#rrr-final-cta {\n    width: 100%;\n    padding: 1px 20px 78px;\n    box-sizing: border-box;\n\n    background:\n        radial-gradient(\n            circle at center,\n            rgba(239,36,40,.10) 0%,\n            rgba(11,11,11,0) 58%\n        ),\n        #0b0b0b;\n\n    text-align: center;\n    color: #ffffff;\n}\n\n.rrr-final-inner {\n    max-width: 1000px;\n    margin: 0 auto;\n}\n\n\/* KICKER *\/\n\n.rrr-final-kicker {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 14px;\n\n    margin-bottom: 10px;\n\n    color: #ef2428;\n\n    font-size: 13px;\n    font-weight: 900;\n\n    letter-spacing: 3px;\n    text-transform: uppercase;\n}\n\n.rrr-final-kicker::before,\n.rrr-final-kicker::after {\n    content: \"\";\n\n    width: 55px;\n    height: 2px;\n\n    background:\n        linear-gradient(\n            90deg,\n            transparent,\n            #ef2428,\n            #ff8a00\n        );\n}\n\n.rrr-final-kicker::after {\n    background:\n        linear-gradient(\n            90deg,\n            #ff8a00,\n            #ef2428,\n            transparent\n        );\n}\n\n\/* TITLE *\/\n\n.rrr-final-title {\n    margin: 0;\n\n    color: #ffffff;\n\n    font-size: 46px;\n    line-height: 1.05;\n\n    font-weight: 900;\n\n    letter-spacing: 1px;\n    text-transform: uppercase;\n}\n\n.rrr-final-title::after {\n    content: \"\";\n\n    display: block;\n\n    width: 120px;\n    height: 3px;\n\n    margin: 16px auto 0;\n\n    border-radius: 10px;\n\n    background:\n        linear-gradient(\n            90deg,\n            #ef2428 0%,\n            #ff4a00 48%,\n            #ffc20e 100%\n        );\n}\n\n\/* COPY *\/\n\n.rrr-final-copy {\n    max-width: 760px;\n\n    margin: 24px auto 0;\n\n    color: #bdbdbd;\n\n    font-size: 18px;\n    line-height: 1.55;\n}\n\n\/* BUTTON *\/\n\n.rrr-final-button-wrap {\n    margin-top: 30px;\n}\n\n.rrr-final-button {\n    display: inline-flex;\n\n    align-items: center;\n    justify-content: center;\n\n    gap: 12px;\n\n    padding: 14px 24px;\n\n    background: #df2027;\n\n    color: #ffffff;\n\n    border: 0;\n    border-radius: 7px;\n\n    font-family: inherit;\n    font-size: 15px;\n    font-weight: 900;\n\n    letter-spacing: 1px;\n\n    text-decoration: none;\n    text-transform: uppercase;\n\n    cursor: pointer;\n\n    box-shadow:\n        0 10px 24px rgba(239,36,40,.20);\n\n    transition:\n        transform .18s ease,\n        background .18s ease;\n}\n\n.rrr-final-button:hover {\n    background: #f1262e;\n    transform: translateY(-2px);\n}\n\n\/* BLACK CIRCLE *\/\n\n.rrr-final-play {\n    position: relative;\n\n    display: inline-flex;\n\n    align-items: center;\n    justify-content: center;\n\n    width: 34px;\n    height: 34px;\n\n    flex: 0 0 34px;\n\n    border-radius: 50%;\n\n    background: #111111;\n}\n\n\/* YELLOW PLAY TRIANGLE *\/\n\n.rrr-final-play::after {\n    content: \"\";\n\n    width: 0;\n    height: 0;\n\n    border-top: 6px solid transparent;\n    border-bottom: 6px solid transparent;\n    border-left: 9px solid #ffc20e;\n\n    margin-left: 3px;\n}\n\n\/* MOBILE *\/\n\n@media (max-width: 600px) {\n\n    #rrr-final-cta {\n        padding: 54px 18px 60px;\n    }\n\n    .rrr-final-title {\n        font-size: 34px;\n    }\n\n    .rrr-final-copy {\n        font-size: 16px;\n    }\n\n    .rrr-final-kicker::before,\n    .rrr-final-kicker::after {\n        width: 30px;\n    }\n\n    .rrr-final-button {\n        width: 100%;\n        max-width: 320px;\n    }\n}\n<\/style>\n\n\n<section id=\"rrr-final-cta\">\n\n    <div class=\"rrr-final-inner\">\n\n        <div class=\"rrr-final-kicker\">\n            Real Rock Revival\n        <\/div>\n\n        <h2 class=\"rrr-final-title\">\n            Real Rock. Real Radio. 24\/7.\n        <\/h2>\n\n        <div class=\"rrr-final-copy\">\n            Classic rock, new rock, and the personalities keeping real radio alive.\n            Triple R is always on.\n        <\/div>\n\n        <div class=\"rrr-final-button-wrap\">\n\n            <button\n                type=\"button\"\n                id=\"rrr-final-listen\"\n                class=\"rrr-final-button\">\n\n                <span class=\"rrr-final-play\"><\/span>\n\n                <span>\n                    Listen Live\n                <\/span>\n\n            <\/button>\n\n        <\/div>\n\n    <\/div>\n\n<\/section>\n\n\n<script>\n(function () {\n\n    const finalButton =\n        document.getElementById('rrr-final-listen');\n\n    if (!finalButton) {\n        return;\n    }\n\n    finalButton.addEventListener('click', function () {\n\n        const originalListenButton =\n            document.getElementById('rrr-home-open-player');\n\n        if (originalListenButton) {\n            originalListenButton.click();\n        }\n\n    });\n\n})();\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>Live On Air Connecting&#8230; Now Playing Real Rock Revival Loading live song information&#8230; REAL ROCK \u2022 REAL PEOPLE \u2022 REAL RADIO. Real Rock Radio. The Signal Lives On. The music, the personalities, and the attitude that made real rock radio matter \u2014 streaming 24\/7. \u25b6 Listen Live LIVE ON TRIPLE R ON AIR NOW \u25cf [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-61","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/realrockrevival.com\/index.php\/wp-json\/wp\/v2\/pages\/61","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/realrockrevival.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/realrockrevival.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/realrockrevival.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/realrockrevival.com\/index.php\/wp-json\/wp\/v2\/comments?post=61"}],"version-history":[{"count":136,"href":"https:\/\/realrockrevival.com\/index.php\/wp-json\/wp\/v2\/pages\/61\/revisions"}],"predecessor-version":[{"id":453,"href":"https:\/\/realrockrevival.com\/index.php\/wp-json\/wp\/v2\/pages\/61\/revisions\/453"}],"wp:attachment":[{"href":"https:\/\/realrockrevival.com\/index.php\/wp-json\/wp\/v2\/media?parent=61"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}