{"id":53,"date":"2026-08-01T19:53:28","date_gmt":"2026-08-01T19:53:28","guid":{"rendered":"https:\/\/jok.gus.mybluehost.me\/website_48f14392\/?page_id=53"},"modified":"2026-08-03T15:19:15","modified_gmt":"2026-08-03T15:19:15","slug":"meet-lucy","status":"publish","type":"page","link":"https:\/\/roofroadie.com\/es\/meet-lucy\/","title":{"rendered":"Conoce a Lucy"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"53\" class=\"elementor elementor-53\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cd447c3 e-con e-atomic-element e-flexbox-base e-5cf4358 \" data-id=\"cd447c3\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"cd447c3\" data-e-type=\"e-flexbox\" data-id=\"cd447c3\">\n    \t\t\t<h2 data-interaction-id=\"463a9c4\" class=\"e-463a9c4-ad653fa e-heading-base\" data-e-type=\"widget\" data-id=\"463a9c4\">Meet Lucy...<\/h2>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-ac3a236 e-con e-atomic-element e-flexbox-base e-26159f3 \" data-id=\"ac3a236\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"ac3a236\" data-e-type=\"e-flexbox\" data-id=\"ac3a236\">\n    \t\t<div class=\"elementor-element elementor-element-201246c elementor-widget elementor-widget-shortcode\" data-id=\"201246c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">        <style>\n            .rr-lucy-gallery,\n            .rr-lucy-gallery * {\n                box-sizing: border-box;\n            }\n\n            .rr-lucy-gallery {\n                --lucy-blue: #075c79;\n                --lucy-dark-blue: #063f59;\n                --lucy-green: #168047;\n                --lucy-border: #084f69;\n                width: 100%;\n                max-width: 1180px;\n                margin: 0 auto;\n                font-family: Arial, Helvetica, sans-serif;\n            }\n\n            .rr-lucy-story-tabs {\n                display: grid;\n                grid-template-columns: repeat(6, minmax(0, 1fr));\n                gap: 8px;\n                margin: 0 0 18px;\n            }\n\n            .rr-lucy-story-tab {\n                min-height: 54px;\n                padding: 8px 10px;\n                border: 2px solid var(--lucy-blue);\n                border-radius: 8px;\n                background: #fff;\n                color: var(--lucy-dark-blue);\n                font-size: 14px;\n                font-weight: 700;\n                line-height: 1.2;\n                cursor: pointer;\n            }\n\n            .rr-lucy-story-tab:hover:not(:disabled),\n            .rr-lucy-story-tab:focus-visible:not(:disabled) {\n                background: #eef7fa !important;\n                color: var(--lucy-dark-blue) !important;\n                outline: none;\n            }\n\n            .rr-lucy-story-tab.is-active,\n            .rr-lucy-story-tab.is-active:hover,\n            .rr-lucy-story-tab.is-active:focus-visible {\n                background: var(--lucy-blue) !important;\n                color: #fff !important;\n                border-color: var(--lucy-blue) !important;\n            }\n\n            .rr-lucy-story-tab:disabled {\n                opacity: .45;\n                cursor: default;\n            }\n\n            .rr-lucy-layout {\n                display: grid;\n                grid-template-columns: minmax(250px, 32%) minmax(0, 68%);\n                gap: 20px;\n                align-items: start;\n            }\n\n            .rr-lucy-image-panel {\n                width: 100%;\n            }\n\n            .rr-lucy-story-image {\n                display: block;\n                width: 100%;\n                height: auto;\n                border-radius: 12px;\n                box-shadow: 0 4px 12px rgba(0, 40, 60, .12);\n                cursor: pointer;\n            }\n\n            .rr-lucy-image-button {\n                display: block;\n                width: 100%;\n                padding: 0;\n                border: 3px solid transparent;\n                border-radius: 14px;\n                background: transparent;\n                cursor: pointer;\n            }\n\n            .rr-lucy-image-button:hover,\n            .rr-lucy-image-button:focus-visible {\n                border-color: var(--lucy-green);\n                outline: none;\n            }\n\n            .rr-lucy-video-column {\n                min-width: 0;\n            }\n\n            .rr-lucy-stage {\n                position: relative;\n                width: 100%;\n                aspect-ratio: 16 \/ 10;\n                overflow: hidden;\n                background: radial-gradient(circle at center, #fff 0%, #f7fbfc 55%, #e8f3f7 100%);\n                border: 10px solid var(--lucy-border);\n            }\n\n            .rr-lucy-placeholder {\n                position: absolute;\n                inset: 0;\n                z-index: 1;\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                justify-content: center;\n                padding: 30px;\n                text-align: center;\n                transition: opacity .25s ease;\n                cursor: pointer;\n            }\n\n            .rr-lucy-placeholder.is-hidden {\n                opacity: 0;\n                pointer-events: none;\n            }\n\n            .rr-lucy-placeholder-logo {\n                width: 76px;\n                height: 76px;\n                margin-bottom: 18px;\n                border-radius: 50%;\n                background: var(--lucy-blue);\n                color: #fff;\n                font-family: Georgia, serif;\n                font-size: 45px;\n                font-style: italic;\n                line-height: 76px;\n                box-shadow: 0 5px 16px rgba(0, 70, 100, .2);\n            }\n\n            .rr-lucy-placeholder-title {\n                margin: 0;\n                color: var(--lucy-dark-blue);\n                font-size: clamp(32px, 5vw, 62px);\n                font-weight: 800;\n                line-height: 1.05;\n            }\n\n            .rr-lucy-placeholder-instruction {\n                max-width: 500px;\n                margin: 22px 0 0;\n                color: #42545c;\n                font-size: clamp(15px, 1.7vw, 19px);\n                line-height: 1.45;\n            }\n\n            .rr-lucy-frame-wrap {\n                position: absolute;\n                inset: 0;\n                z-index: 2;\n                background: #000;\n                opacity: 0;\n                pointer-events: none;\n                transition: opacity .25s ease;\n            }\n\n            .rr-lucy-frame-wrap.is-visible {\n                opacity: 1;\n                pointer-events: auto;\n            }\n\n            .rr-lucy-frame-wrap,\n            .rr-lucy-frame-wrap > div,\n            .rr-lucy-frame-wrap iframe {\n                width: 100% !important;\n                height: 100% !important;\n            }\n\n            .rr-lucy-frame-wrap > div {\n                position: absolute !important;\n                inset: 0 !important;\n                padding: 0 !important;\n            }\n\n            .rr-lucy-frame-wrap iframe {\n                display: block;\n                position: absolute;\n                inset: 0;\n                border: 0;\n            }\n\n            .rr-lucy-audio-prompt {\n                position: absolute;\n                inset: 0;\n                z-index: 4;\n                display: none;\n                align-items: center;\n                justify-content: center;\n                background: rgba(0, 0, 0, .38);\n            }\n\n            .rr-lucy-audio-prompt.is-visible {\n                display: flex;\n            }\n\n            .rr-lucy-audio-button {\n                padding: 14px 24px;\n                border: 3px solid #fff;\n                border-radius: 999px;\n                background: var(--lucy-blue);\n                color: #fff;\n                font-size: 18px;\n                font-weight: 800;\n                cursor: pointer;\n            }\n\n            .rr-lucy-controls {\n                display: flex;\n                align-items: center;\n                gap: 9px;\n                width: 100%;\n                margin-top: 10px;\n            }\n\n            .rr-lucy-control {\n                display: inline-flex;\n                align-items: center;\n                justify-content: center;\n                flex: 0 0 auto;\n                min-width: 47px;\n                height: 47px;\n                padding: 0 12px;\n                color: #323232;\n                background: #fff;\n                border: 3px solid #77716a;\n                border-radius: 7px;\n                font-size: 22px;\n                font-weight: 700;\n                line-height: 1;\n                cursor: pointer;\n            }\n\n            .rr-lucy-control:hover:not(:disabled),\n            .rr-lucy-control:focus-visible:not(:disabled) {\n                background: #eef7fa;\n                outline: none;\n            }\n\n            .rr-lucy-control:disabled {\n                opacity: .38;\n                cursor: default;\n            }\n\n            .rr-lucy-control-next {\n                min-width: 132px;\n                margin-left: auto;\n                color: #fff;\n                background: linear-gradient(180deg, #779bdc 0%, #426ebc 100%);\n                border-color: #b7c9eb;\n                border-radius: 24px;\n                font-size: 17px;\n            }\n\n            .rr-lucy-status {\n                position: absolute;\n                width: 1px;\n                height: 1px;\n                padding: 0;\n                overflow: hidden;\n                clip: rect(0, 0, 0, 0);\n                white-space: nowrap;\n                border: 0;\n            }\n\n            @media (max-width: 900px) {\n                .rr-lucy-story-tabs {\n                    grid-template-columns: repeat(3, minmax(0, 1fr));\n                }\n            }\n\n            @media (max-width: 767px) {\n                .rr-lucy-layout {\n                    grid-template-columns: 1fr;\n                }\n\n                .rr-lucy-story-tabs {\n                    grid-template-columns: repeat(2, minmax(0, 1fr));\n                }\n\n                .rr-lucy-stage {\n                    border-width: 7px;\n                }\n            }\n        <\/style>\n        \n    <section\n        id=\"lucy-player-187871\"\n        class=\"rr-lucy-gallery\" data-no-dynamic-translation\n        data-stories=\"[{&quot;en&quot;:{&quot;title&quot;:&quot;Meet Lucy&quot;,&quot;image&quot;:&quot;https:\\\/\\\/roofroadie.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/MeetLucy-English.webp&quot;,&quot;vimeo_id&quot;:&quot;1215170110&quot;,&quot;vimeo_hash&quot;:&quot;95ea3b5936&quot;},&quot;es&quot;:{&quot;title&quot;:&quot;Conoce a Lucy&quot;,&quot;image&quot;:&quot;https:\\\/\\\/roofroadie.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/ConoceLucy-Espanol.webp&quot;,&quot;vimeo_id&quot;:&quot;1215170111&quot;,&quot;vimeo_hash&quot;:&quot;bd03845278&quot;}},{&quot;en&quot;:{&quot;title&quot;:&quot;What Lucy Does for You&quot;,&quot;image&quot;:&quot;&quot;,&quot;vimeo_id&quot;:&quot;&quot;,&quot;vimeo_hash&quot;:&quot;&quot;},&quot;es&quot;:{&quot;title&quot;:&quot;Lo que Lucy hace por ti&quot;,&quot;image&quot;:&quot;&quot;,&quot;vimeo_id&quot;:&quot;&quot;,&quot;vimeo_hash&quot;:&quot;&quot;}},{&quot;en&quot;:{&quot;title&quot;:&quot;Business as a Pro&quot;,&quot;image&quot;:&quot;&quot;,&quot;vimeo_id&quot;:&quot;&quot;,&quot;vimeo_hash&quot;:&quot;&quot;},&quot;es&quot;:{&quot;title&quot;:&quot;Tu negocio como profesional&quot;,&quot;image&quot;:&quot;&quot;,&quot;vimeo_id&quot;:&quot;&quot;,&quot;vimeo_hash&quot;:&quot;&quot;}},{&quot;en&quot;:{&quot;title&quot;:&quot;The Lucy Dashboard&quot;,&quot;image&quot;:&quot;&quot;,&quot;vimeo_id&quot;:&quot;&quot;,&quot;vimeo_hash&quot;:&quot;&quot;},&quot;es&quot;:{&quot;title&quot;:&quot;El panel de Lucy&quot;,&quot;image&quot;:&quot;&quot;,&quot;vimeo_id&quot;:&quot;&quot;,&quot;vimeo_hash&quot;:&quot;&quot;}},{&quot;en&quot;:{&quot;title&quot;:&quot;The Lucy Difference&quot;,&quot;image&quot;:&quot;&quot;,&quot;vimeo_id&quot;:&quot;&quot;,&quot;vimeo_hash&quot;:&quot;&quot;},&quot;es&quot;:{&quot;title&quot;:&quot;La diferencia de Lucy&quot;,&quot;image&quot;:&quot;&quot;,&quot;vimeo_id&quot;:&quot;&quot;,&quot;vimeo_hash&quot;:&quot;&quot;}},{&quot;en&quot;:{&quot;title&quot;:&quot;Lucy Services&quot;,&quot;image&quot;:&quot;&quot;,&quot;vimeo_id&quot;:&quot;&quot;,&quot;vimeo_hash&quot;:&quot;&quot;},&quot;es&quot;:{&quot;title&quot;:&quot;Servicios de Lucy&quot;,&quot;image&quot;:&quot;&quot;,&quot;vimeo_id&quot;:&quot;&quot;,&quot;vimeo_hash&quot;:&quot;&quot;}}]\"\n        aria-label=\"Lucy Academy video stories\"\n    >\n        <div class=\"rr-lucy-story-tabs\" data-no-dynamic-translation role=\"tablist\" aria-label=\"Lucy stories\"><\/div>\n\n        <div class=\"rr-lucy-layout\">\n            <div class=\"rr-lucy-image-panel\">\n                <button type=\"button\" class=\"rr-lucy-image-button\" aria-label=\"Play video\">\n                    <img decoding=\"async\" loading=\"lazy\" class=\"rr-lucy-story-image\" src=\"\" alt=\"\">\n                <\/button>\n            <\/div>\n\n            <div class=\"rr-lucy-video-column\">\n                <div class=\"rr-lucy-stage\">\n                    <div class=\"rr-lucy-placeholder\" role=\"button\" tabindex=\"0\">\n                        <div class=\"rr-lucy-placeholder-logo\" aria-hidden=\"true\">L<\/div>\n                        <h2 class=\"rr-lucy-placeholder-title\" data-no-dynamic-translation><\/h2>\n                        <p class=\"rr-lucy-placeholder-instruction\" data-no-dynamic-translation><\/p>\n                    <\/div>\n\n                    <div class=\"rr-lucy-frame-wrap\"><\/div>\n\n                    <div class=\"rr-lucy-audio-prompt\">\n                        <button type=\"button\" class=\"rr-lucy-audio-button\"><\/button>\n                    <\/div>\n                <\/div>\n\n                <div class=\"rr-lucy-controls\">\n                    <button type=\"button\" class=\"rr-lucy-control rr-lucy-play\" disabled aria-label=\"Play\" title=\"Play\">\u25b6<\/button>\n                    <button type=\"button\" class=\"rr-lucy-control rr-lucy-pause\" disabled aria-label=\"Pause\" title=\"Pause\">\u2161<\/button>\n                    <button type=\"button\" class=\"rr-lucy-control rr-lucy-restart\" disabled aria-label=\"Restart\" title=\"Restart\">\u25a0<\/button>\n                    <button type=\"button\" class=\"rr-lucy-control rr-lucy-sound\" disabled aria-label=\"Sound\" title=\"Sound\">\ud83d\udd0a<\/button>\n                    <button type=\"button\" class=\"rr-lucy-control rr-lucy-control-next rr-lucy-next\" data-no-dynamic-translation disabled><\/button>\n                <\/div>\n\n                <div class=\"rr-lucy-status\" aria-live=\"polite\"><\/div>\n            <\/div>\n        <\/div>\n    <\/section>\n\n    <script>\n    (function() {\n        const gallery = document.getElementById(\n            \"lucy-player-187871\"        );\n\n        if (!gallery) {\n            return;\n        }\n\n        const stories = JSON.parse(gallery.dataset.stories || '[]');\n\n        const tabs = gallery.querySelector('.rr-lucy-story-tabs');\n        const imageButton = gallery.querySelector('.rr-lucy-image-button');\n        const image = gallery.querySelector('.rr-lucy-story-image');\n        const frameWrap = gallery.querySelector('.rr-lucy-frame-wrap');\n        const placeholder = gallery.querySelector('.rr-lucy-placeholder');\n        const placeholderTitle = gallery.querySelector('.rr-lucy-placeholder-title');\n        const placeholderInstruction = gallery.querySelector('.rr-lucy-placeholder-instruction');\n        const audioPrompt = gallery.querySelector('.rr-lucy-audio-prompt');\n        const audioButton = gallery.querySelector('.rr-lucy-audio-button');\n        const status = gallery.querySelector('.rr-lucy-status');\n\n        const playButton = gallery.querySelector('.rr-lucy-play');\n        const pauseButton = gallery.querySelector('.rr-lucy-pause');\n        const restartButton = gallery.querySelector('.rr-lucy-restart');\n        const soundButton = gallery.querySelector('.rr-lucy-sound');\n        const nextButton = gallery.querySelector('.rr-lucy-next');\n\n        const controls = [\n            playButton,\n            pauseButton,\n            restartButton,\n            soundButton,\n            nextButton\n        ];\n\n        let player = null;\n        let activeIndex = 0;\n        let muted = false;\n        let intentionallyStopped = false;\n\n        function detectLanguage() {\n            const pathParts = window.location.pathname\n                .split('\/')\n                .filter(Boolean);\n\n            if (pathParts[0] === 'es') {\n                return 'es';\n            }\n\n            const htmlLanguage =\n                (document.documentElement.lang || '').toLowerCase();\n\n            if (htmlLanguage.startsWith('es')) {\n                return 'es';\n            }\n\n            return 'en';\n        }\n\n        const language = detectLanguage();\n\n        const words = language === 'es'\n            ? {\n                instruction: 'Haga clic para comenzar esta lecci\u00f3n.',\n                play: 'Reproducir',\n                pause: 'Pausar',\n                restart: 'Reiniciar',\n                sound: 'Sonido',\n                next: 'SIGUIENTE',\n                startAgain: 'VOLVER AL INICIO',\n                tapForSound: 'Toque para escuchar a Lucy',\n                unavailable: 'Esta historia estar\u00e1 disponible pr\u00f3ximamente.',\n                playing: 'El video est\u00e1 reproduci\u00e9ndose.',\n                paused: 'El video est\u00e1 en pausa.',\n                restarted: 'El video volvi\u00f3 al principio.',\n                muted: 'El sonido est\u00e1 apagado.',\n                unmuted: 'El sonido est\u00e1 encendido.'\n            }\n            : {\n                instruction: 'Click to begin this lesson.',\n                play: 'Play',\n                pause: 'Pause',\n                restart: 'Restart',\n                sound: 'Sound',\n                next: 'NEXT',\n                startAgain: 'START AGAIN',\n                tapForSound: 'Tap to hear Lucy',\n                unavailable: 'This story will be available soon.',\n                playing: 'Video playing.',\n                paused: 'Video paused.',\n                restarted: 'Video returned to the beginning.',\n                muted: 'Sound muted.',\n                unmuted: 'Sound on.'\n            };\n\n        function storyData(index) {\n            return stories[index] && stories[index][language]\n                ? stories[index][language]\n                : null;\n        }\n\n        function storyAvailable(index) {\n            const story = storyData(index);\n\n            return Boolean(\n                story &&\n                story.image &&\n                story.vimeo_id\n            );\n        }\n\n        function setIdleControls() {\n            playButton.disabled = !storyAvailable(activeIndex);\n            pauseButton.disabled = true;\n            restartButton.disabled = true;\n            soundButton.disabled = true;\n            nextButton.disabled = false;\n        }\n\n        function setPlayingControls() {\n            playButton.disabled = false;\n            pauseButton.disabled = false;\n            restartButton.disabled = false;\n            soundButton.disabled = false;\n            nextButton.disabled = false;\n        }\n\n        function destroyPlayer() {\n            audioPrompt.classList.remove('is-visible');\n\n            if (player) {\n                try {\n                    player.destroy();\n                } catch (error) {}\n\n                player = null;\n            }\n\n            frameWrap.innerHTML = '';\n            frameWrap.classList.remove('is-visible');\n            placeholder.classList.remove('is-hidden');\n            setIdleControls();\n        }\n\n        function updateNextLabel() {\n            const lastIndex = stories.length - 1;\n            nextButton.textContent =\n                activeIndex >= lastIndex\n                    ? words.startAgain + '  \u276f\u276f'\n                    : words.next + '  \u276f\u276f';\n        }\n\n        function selectStory(index) {\n            activeIndex = index;\n            intentionallyStopped = false;\n            destroyPlayer();\n\n            const story = storyData(index);\n\n            Array.from(tabs.children).forEach(function(tab, tabIndex) {\n                const active = tabIndex === index;\n                tab.classList.toggle('is-active', active);\n                tab.setAttribute('aria-selected', active ? 'true' : 'false');\n            });\n\n            placeholderTitle.textContent = story ? story.title : '';\n            placeholderInstruction.textContent =\n                storyAvailable(index)\n                    ? words.instruction\n                    : words.unavailable;\n\n            if (story && story.image) {\n                image.src = story.image;\n                image.alt = story.title;\n                imageButton.disabled = false;\n                imageButton.setAttribute(\n                    'aria-label',\n                    words.play + ': ' + story.title\n                );\n            } else {\n                image.removeAttribute('src');\n                image.alt = '';\n                imageButton.disabled = true;\n            }\n\n            updateNextLabel();\n        }\n\n        function renderTabs() {\n            tabs.innerHTML = '';\n\n            stories.forEach(function(story, index) {\n                const localized = story[language];\n                const button = document.createElement('button');\n\n                button.type = 'button';\n                button.className = 'rr-lucy-story-tab';\n                button.textContent = localized.title;\n                button.setAttribute('role', 'tab');\n                button.setAttribute('aria-selected', 'false');\n\n                if (!storyAvailable(index)) {\n                    button.disabled = true;\n                    button.title = words.unavailable;\n                }\n\n                button.addEventListener('click', function(event) {\n                    event.preventDefault();\n                    event.stopPropagation();\n\n                    if (index === activeIndex) {\n                        startOrResumeActiveStory();\n                        return;\n                    }\n\n                    selectStory(index);\n                    startOrResumeActiveStory();\n                });\n\n                tabs.appendChild(button);\n            });\n        }\n\n        function enforceLocalizedLabels() {\n            const tabButtons = Array.from(\n                tabs.querySelectorAll('.rr-lucy-story-tab')\n            );\n\n            tabButtons.forEach(function(button, index) {\n                const localized = stories[index] && stories[index][language];\n\n                if (localized && button.textContent !== localized.title) {\n                    button.textContent = localized.title;\n                }\n            });\n\n            const activeStory = storyData(activeIndex);\n\n            if (\n                activeStory &&\n                placeholderTitle.textContent !== activeStory.title\n            ) {\n                placeholderTitle.textContent = activeStory.title;\n            }\n\n            const expectedInstruction = storyAvailable(activeIndex)\n                ? words.instruction\n                : words.unavailable;\n\n            if (\n                placeholderInstruction.textContent !== expectedInstruction\n            ) {\n                placeholderInstruction.textContent = expectedInstruction;\n            }\n\n            updateNextLabel();\n        }\n\n        function protectLocalizedLabels() {\n            let restoring = false;\n\n            const observer = new MutationObserver(function() {\n                if (restoring) {\n                    return;\n                }\n\n                restoring = true;\n\n                window.requestAnimationFrame(function() {\n                    enforceLocalizedLabels();\n                    restoring = false;\n                });\n            });\n\n            observer.observe(gallery, {\n                childList: true,\n                subtree: true,\n                characterData: true\n            });\n\n            \/*\n             * TranslatePress can perform a delayed client-side replacement\n             * after our player has rendered. Re-assert the selected language\n             * after those initial replacement passes as well.\n             *\/\n            [100, 300, 700, 1500].forEach(function(delay) {\n                window.setTimeout(enforceLocalizedLabels, delay);\n            });\n        }\n\n        function buildVimeoUrl(story) {\n            let url =\n                'https:\/\/player.vimeo.com\/video\/' +\n                encodeURIComponent(story.vimeo_id) +\n                '?autoplay=0' +\n                '&muted=0' +\n                '&controls=0' +\n                '&title=0' +\n                '&byline=0' +\n                '&portrait=0' +\n                '&playsinline=1' +\n                '&autopause=0' +\n                '&dnt=1';\n\n            if (story.vimeo_hash) {\n                url += '&h=' + encodeURIComponent(story.vimeo_hash);\n            }\n\n            return url;\n        }\n\n        function waitForVimeo(callback, attempts) {\n            attempts = attempts || 0;\n\n            if (window.Vimeo && window.Vimeo.Player) {\n                callback();\n                return;\n            }\n\n            if (attempts > 100) {\n                status.textContent = words.unavailable;\n                return;\n            }\n\n            window.setTimeout(function() {\n                waitForVimeo(callback, attempts + 1);\n            }, 50);\n        }\n\n        function forceSoundAndPlay() {\n            if (!player) {\n                return Promise.reject(new Error('Player unavailable'));\n            }\n\n            return player.setVolume(1)\n                .then(function() {\n                    return player.setMuted(false);\n                })\n                .then(function() {\n                    muted = false;\n                    soundButton.textContent = '\ud83d\udd0a';\n\n                    return player.getPaused().then(function(paused) {\n                        if (paused) {\n                            return player.play();\n                        }\n\n                        return true;\n                    });\n                });\n        }\n\n        function startOrResumeActiveStory() {\n            if (!storyAvailable(activeIndex)) {\n                status.textContent = words.unavailable;\n                return;\n            }\n\n            if (!player) {\n                loadActiveStory();\n                return;\n            }\n\n            forceSoundAndPlay()\n                .then(function() {\n                    audioPrompt.classList.remove('is-visible');\n                    status.textContent = words.playing;\n                })\n                .catch(function() {\n                    audioButton.textContent = words.tapForSound;\n                    audioPrompt.classList.add('is-visible');\n                    status.textContent = words.tapForSound;\n                });\n        }\n\n        function loadActiveStory() {\n            intentionallyStopped = false;\n            const story = storyData(activeIndex);\n\n            if (!storyAvailable(activeIndex)) {\n                status.textContent = words.unavailable;\n                return;\n            }\n\n            destroyPlayer();\n            frameWrap.classList.add('is-visible');\n            placeholder.classList.add('is-hidden');\n\n            waitForVimeo(function() {\n                player = new Vimeo.Player(frameWrap, {\n                    url: buildVimeoUrl(story),\n                    autoplay: false,\n                    muted: false,\n                    controls: false,\n                    responsive: true,\n                    title: false,\n                    byline: false,\n                    portrait: false,\n                    playsinline: true,\n                    autopause: false,\n                    dnt: true\n                });\n\n                player.ready()\n                    .then(function() {\n                        setPlayingControls();\n                        updateNextLabel();\n\n                        \/*\n                         * The video load was initiated by the visitor clicking\n                         * the story image. We explicitly request full volume,\n                         * unmute, and then play.\n                         *\/\n                        return forceSoundAndPlay();\n                    })\n                    .then(function() {\n                        audioPrompt.classList.remove('is-visible');\n                        status.textContent = words.playing;\n                    })\n                    .catch(function() {\n                        \/*\n                         * Some mobile browsers still require a second direct\n                         * tap on the player before allowing audio.\n                         *\/\n                        audioButton.textContent = words.tapForSound;\n                        audioPrompt.classList.add('is-visible');\n                        status.textContent = words.tapForSound;\n                    });\n\n                player.on('ended', function() {\n                    window.setTimeout(function() {\n                        destroyPlayer();\n\n                        const story = storyData(activeIndex);\n\n                        placeholderTitle.textContent = story ? story.title : '';\n                        placeholderInstruction.textContent = words.instruction;\n                        status.textContent = '';\n                    }, 0);\n                });\n            });\n        }\n\n        imageButton.addEventListener('click', function(event) {\n            event.preventDefault();\n            event.stopPropagation();\n            startOrResumeActiveStory();\n        });\n\n        placeholder.addEventListener('click', startOrResumeActiveStory);\n\n        gallery.querySelector('.rr-lucy-stage').addEventListener('click', function(event) {\n            const clickedPlaceholder =\n                event.target.closest('.rr-lucy-placeholder');\n\n            if (\n                clickedPlaceholder &&\n                !player &&\n                !event.target.closest('.rr-lucy-audio-prompt')\n            ) {\n                startOrResumeActiveStory();\n            }\n        });\n\n        placeholder.addEventListener('keydown', function(event) {\n            if (event.key === 'Enter' || event.key === ' ') {\n                event.preventDefault();\n                startOrResumeActiveStory();\n            }\n        });\n\n        audioButton.addEventListener('click', function(event) {\n            event.preventDefault();\n            event.stopPropagation();\n\n            forceSoundAndPlay()\n                .then(function() {\n                    audioPrompt.classList.remove('is-visible');\n                    status.textContent = words.playing;\n                })\n                .catch(function() {\n                    status.textContent = words.tapForSound;\n                });\n        });\n\n        playButton.addEventListener('click', function() {\n            startOrResumeActiveStory();\n        });\n\n        pauseButton.addEventListener('click', function() {\n            if (!player) {\n                return;\n            }\n\n            player.pause();\n            status.textContent = words.paused;\n        });\n\n        restartButton.addEventListener('click', function(event) {\n            event.preventDefault();\n            event.stopPropagation();\n\n            if (!player) {\n                return;\n            }\n\n            intentionallyStopped = true;\n\n            player.pause()\n                .catch(function() {})\n                .then(function() {\n                    return player.setCurrentTime(0).catch(function() {});\n                })\n                .then(function() {\n                    destroyPlayer();\n                    placeholderTitle.textContent = storyData(activeIndex).title;\n                    placeholderInstruction.textContent = words.instruction;\n                    status.textContent = words.restarted;\n                });\n        });\n\n        controls.forEach(function(button) {\n            button.addEventListener('click', function(event) {\n                event.stopPropagation();\n            });\n        });\n\n        soundButton.addEventListener('click', function() {\n            if (!player) {\n                return;\n            }\n\n            muted = !muted;\n\n            player.setMuted(muted).then(function() {\n                if (!muted) {\n                    return player.setVolume(1);\n                }\n            }).then(function() {\n                soundButton.textContent = muted ? '\ud83d\udd07' : '\ud83d\udd0a';\n                status.textContent = muted ? words.muted : words.unmuted;\n            });\n        });\n\n        nextButton.addEventListener('click', function() {\n            let nextIndex = activeIndex + 1;\n\n            if (nextIndex >= stories.length) {\n                nextIndex = 0;\n            }\n\n            while (\n                nextIndex !== activeIndex &&\n                !storyAvailable(nextIndex)\n            ) {\n                nextIndex++;\n\n                if (nextIndex >= stories.length) {\n                    nextIndex = 0;\n                }\n            }\n\n            selectStory(nextIndex);\n        });\n\n        playButton.setAttribute('aria-label', words.play);\n        playButton.title = words.play;\n        pauseButton.setAttribute('aria-label', words.pause);\n        pauseButton.title = words.pause;\n        restartButton.setAttribute('aria-label', words.restart);\n        restartButton.title = words.restart;\n        soundButton.setAttribute('aria-label', words.sound);\n        soundButton.title = words.sound;\n\n        renderTabs();\n        selectStory(0);\n        setIdleControls();\n        protectLocalizedLabels();\n    })();\n    <\/script>\n\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Meet Lucy&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nf_dc_page":"","site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-53","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/roofroadie.com\/es\/wp-json\/wp\/v2\/pages\/53","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/roofroadie.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/roofroadie.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/roofroadie.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/roofroadie.com\/es\/wp-json\/wp\/v2\/comments?post=53"}],"version-history":[{"count":20,"href":"https:\/\/roofroadie.com\/es\/wp-json\/wp\/v2\/pages\/53\/revisions"}],"predecessor-version":[{"id":301,"href":"https:\/\/roofroadie.com\/es\/wp-json\/wp\/v2\/pages\/53\/revisions\/301"}],"wp:attachment":[{"href":"https:\/\/roofroadie.com\/es\/wp-json\/wp\/v2\/media?parent=53"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}