{"id":3291,"date":"2026-01-28T15:07:18","date_gmt":"2026-01-28T15:07:18","guid":{"rendered":"https:\/\/staging.notrevoute.com\/mercado\/"},"modified":"2026-02-23T13:20:58","modified_gmt":"2026-02-23T13:20:58","slug":"mercado","status":"publish","type":"page","link":"https:\/\/notrevoute.com\/es\/mercado\/","title":{"rendered":"Mercado"},"content":{"rendered":"        <div class=\"nv-metal-chart\" id=\"nv-metal-chart-d8d91e25-7a29-4d75-8381-7d769c190f40\"\n             data-rest=\"https:\/\/notrevoute.com\/es\/wp-json\/notrevoute\/v1\/metal\/timeframe\"\n             data-rest-latest=\"https:\/\/notrevoute.com\/es\/wp-json\/notrevoute\/v1\/metal\/latest\"\n             data-pair=\"XAU\/EUR\"\n             data-range=\"1y\" data-height=\"360\"\n             data-cfg=\"{&quot;unit&quot;:&quot;g&quot;,&quot;unitOptions&quot;:[&quot;oz&quot;,&quot;g&quot;,&quot;kg&quot;],&quot;showUnitSelector&quot;:true,&quot;rangeOptions&quot;:[&quot;1m&quot;,&quot;3m&quot;,&quot;6m&quot;,&quot;1y&quot;,&quot;5y&quot;,&quot;10y&quot;,&quot;max&quot;],&quot;showRangeSelector&quot;:true,&quot;theme&quot;:&quot;auto&quot;,&quot;colors&quot;:{&quot;lineColor&quot;:&quot;#d4af37&quot;,&quot;topColor&quot;:&quot;rgba(212,175,55,0.25)&quot;,&quot;bottomColor&quot;:&quot;rgba(212,175,55,0.00)&quot;,&quot;textColor&quot;:&quot;#111827&quot;,&quot;bgColor&quot;:&quot;#ffffff&quot;,&quot;gridColor&quot;:&quot;rgba(17,24,39,0.10)&quot;},&quot;disclaimer&quot;:&quot;&quot;,&quot;showUnitSuffix&quot;:false,&quot;showFullscreen&quot;:true}\">\n\n            \n            <div class=\"nv-metal-chart__card\">\n                <div class=\"nv-metal-chart__header\">\n                    <div class=\"nv-metal-chart__left\">\n                        <div class=\"nv-metal-chart__pair\"><\/div>\n                        <div class=\"nv-metal-chart__range\"><\/div>\n                    <\/div>\n                    <div class=\"nv-metal-chart__right\">\n                        <div class=\"nv-metal-chart__last\"><\/div>\n                        <div class=\"nv-metal-chart__unit-sep\">\/<\/div>\n                        <div class=\"nv-metal-chart__unit\"><\/div>\n                        <div class=\"nv-metal-chart__unit-text\"><\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"nv-metal-chart__chart\">\n                    <button type=\"button\" class=\"nv-metal-chart__fs\" aria-label=\"Fullscreen\" title=\"Fullscreen\">\u2922<\/button>\n                <\/div>\n            <\/div>\n\n            <div class=\"nv-metal-chart__meta\"><\/div>\n        <\/div>\n\n        <style>\n            .nv-metal-chart { width: 100%; }\n            .nv-metal-chart__title { font-weight: 600; margin: 0 0 10px 0; }\n\n            .nv-metal-chart__card {\n                border: 1px solid var(--nv-border, rgba(0,0,0,.08));\n                border-radius: 14px;\n                padding: 10px;\n                overflow: hidden;\n                background: transparent;\n            }\n\n            .nv-metal-chart__header {\n                display: flex;\n                justify-content: space-between;\n                align-items: flex-start;\n                gap: 12px;\n                margin: 0 0 6px 0;\n                flex-wrap: wrap;\n            }\n\n            .nv-metal-chart__left,\n            .nv-metal-chart__right {\n                display: flex;\n                align-items: center;\n                gap: 10px;\n                flex-wrap: wrap;\n            }\n\n            .nv-metal-chart__pair { font-weight: 600; font-size: 14px; color: var(--nv-text, inherit); }\n            .nv-metal-chart__last { font-size: 13px; opacity: .90; color: var(--nv-text, inherit); }\n            .nv-metal-chart__unit-sep { opacity: .70; color: var(--nv-text, inherit); }\n            .nv-metal-chart__unit-text { font-size: 13px; opacity: .90; color: var(--nv-text, inherit); }\n            .nv-metal-chart__unit-sep { margin: 0 6px; }\n            .nv-metal-chart__chart { position: relative; }\n            .nv-metal-chart__fs {\n                position: absolute;\n                top: 10px;\n                left: 10px;\n                z-index: 5;\n                border: 1px solid rgba(0,0,0,.15);\n                background: rgba(255,255,255,.75);\n                color: #111;\n                border-radius: 10px;\n                padding: 6px 9px;\n                font-size: 14px;\n                line-height: 1;\n                cursor: pointer;\n                opacity: .60;\n                backdrop-filter: blur(6px);\n            }\n            .nv-metal-chart__fs:hover { opacity: .95; }\n            body.color-switch-dark .nv-metal-chart__fs {\n                border-color: rgba(255,255,255,.18);\n                background: rgba(15,18,21,.65);\n                color: #fff;\n            }\n            \/* Fullscreen: fill available height *\/\n            .nv-metal-chart:fullscreen,\n            .nv-metal-chart:-webkit-full-screen {\n                width: 100% !important;\n                height: 100% !important;\n                background: var(--nv-bg, #fff);\n                padding: 16px;\n                box-sizing: border-box;\n                overflow: hidden;\n                border-radius: 0 !important;\n            }\n            .nv-metal-chart:fullscreen .nv-metal-chart__chart,\n            .nv-metal-chart:-webkit-full-screen .nv-metal-chart__chart {\n                height: calc(100% - 44px) !important;;\n            }\n\n\n            .nv-metal-chart__chart { width: 100%; }\n\n            .nv-metal-chart__range select,\n            .nv-metal-chart__unit select {\n                border: 1px solid var(--nv-border, rgba(0,0,0,.15));\n                background: transparent;\n                color: var(--nv-text, inherit);\n                padding: 6px 10px;\n                border-radius: 10px;\n                cursor: pointer;\n                line-height: 1.2;\n                position: relative;\n                z-index: 3;\n            }\n\n            .nv-metal-chart__range select:focus,\n            .nv-metal-chart__unit select:focus {\n                outline: none;\n                box-shadow: 0 0 0 2px rgba(0,0,0,.08);\n            }\n\n            .nv-metal-chart__meta { margin-top: 10px; opacity: .75; color: var(--nv-text, inherit); }\n\n            \/* Remove TradingView attribution link injected by lightweight-charts *\/\n            #tv-attr-logo,\n            a#tv-attr-logo {\n                display: none !important;\n                visibility: hidden !important;\n                opacity: 0 !important;\n                pointer-events: none !important;\n            }\n\n<\/style>\n\n        <script>\n            (function()\n            {\n                const root = document.getElementById(\"nv-metal-chart-d8d91e25-7a29-4d75-8381-7d769c190f40\");\n                if (!root) return;\n\n                const restUrl = root.getAttribute('data-rest');\n                const restLatestUrl = root.getAttribute('data-rest-latest');\n                const pair = root.getAttribute('data-pair');\n                let range = root.getAttribute('data-range') || '1y';\nconst height = parseInt(root.getAttribute('data-height') || '320', 10);\n\n                let cfg = {};\n                try { cfg = JSON.parse(root.getAttribute('data-cfg') || '{}'); } catch (e) { cfg = {}; }\n\n                \/\/ Normalize showUnitSuffix (can arrive as '1'\/'0' or boolean)\n                cfg.showUnitSuffix = (cfg.showUnitSuffix === true || cfg.showUnitSuffix === 1 || cfg.showUnitSuffix === '1');\n\n\n                const headerEl = root.querySelector('.nv-metal-chart__header');\n                const pairEl = root.querySelector('.nv-metal-chart__pair');\n                const lastEl = root.querySelector('.nv-metal-chart__last');\n                const chartEl = root.querySelector('.nv-metal-chart__chart');\n                const metaEl = root.querySelector('.nv-metal-chart__meta');\n                const rangeEl = root.querySelector('.nv-metal-chart__range');\n                const unitEl = root.querySelector('.nv-metal-chart__unit');\n                const unitSepEl = root.querySelector('.nv-metal-chart__unit-sep');\n                const unitTextEl = root.querySelector('.nv-metal-chart__unit-text');\n                const fsBtn = root.querySelector('.nv-metal-chart__fs');\n\n                chartEl.style.height = height + 'px';\n\n                const rangeOptions = Array.isArray(cfg.rangeOptions) ? cfg.rangeOptions : ['1m','3m','6m','1y','5y','10y','max'];\n                const showRangeSelector = cfg.showRangeSelector !== false;\n                const unitOptions = Array.isArray(cfg.unitOptions) ? cfg.unitOptions : ['oz','g','kg','t'];\n                const showUnitSelector = cfg.showUnitSelector !== false;\n\n                let unit = (cfg.unit || 'oz').toLowerCase();\n                if (!unitOptions.includes(unit)) unit = unitOptions[0] || 'oz';\n\n                const theme = (cfg.theme || 'auto').toLowerCase();\n                const userColors = (cfg.colors || {});\n                const disclaimer = (cfg.disclaimer || '').trim();\n\n                function isShowUnitSuffix()\n                {\n                    const v = cfg.showUnitSuffix;\n                    return v === true || v === 1 || v === '1' || v === 'true' || v === 'yes' || v === 'on';\n                }\n\n                function detectThemeByBody()\n                {\n                    const b = document.body;\n                    if (!b || !b.classList) return null;\n                    if (b.classList.contains('color-switch-dark')) return 'dark';\n                    if (b.classList.contains('color-switch-light')) return 'light';\n                    return null;\n                }\n\n                function isDark()\n                {\n                    if (theme === 'dark') return true;\n                    if (theme === 'light') return false;\n\n                    const bodyTheme = detectThemeByBody();\n                    if (bodyTheme === 'dark') return true;\n                    if (bodyTheme === 'light') return false;\n\n                    return false;\n                }\n\n                function resolveColors()\n                {\n                    const dark = isDark();\n\n                    const defaults = dark\n                        ? {\n                            bgColor: '#0f1215',\n                            textColor: '#e5e7eb',\n                            gridColor: 'rgba(229,231,235,0.10)',\n                            lineColor: '#16a34a',\n                            topColor: 'rgba(22,163,74,0.18)',\n                            bottomColor: 'rgba(22,163,74,0.00)'\n                          }\n                        : {\n                            bgColor: '#ffffff',\n                            textColor: '#111827',\n                            gridColor: 'rgba(17,24,39,0.10)',\n                            lineColor: '#16a34a',\n                            topColor: 'rgba(22,163,74,0.25)',\n                            bottomColor: 'rgba(22,163,74,0.00)'\n                          };\n\n                    function pick(key, fallback)\n                    {\n                        const v = (userColors[key] || '').trim();\n                        return v ? v : fallback;\n                    }\n\n                    return {\n                        bgColor: pick('bgColor', defaults.bgColor),\n                        textColor: pick('textColor', defaults.textColor),\n                        gridColor: pick('gridColor', defaults.gridColor),\n                        lineColor: pick('lineColor', defaults.lineColor),\n                        topColor: pick('topColor', defaults.topColor),\n                        bottomColor: pick('bottomColor', defaults.bottomColor)\n                    };\n                }\n\n                function applyUiTheme(colors)\n                {\n                    root.style.setProperty('--nv-text', colors.textColor);\n                    root.style.setProperty('--nv-border', colors.gridColor);\n\n                    root.querySelectorAll('.nv-metal-chart__range select, .nv-metal-chart__unit select').forEach(sel =>\n                    {\n                        sel.style.borderColor = colors.gridColor;\n                        sel.style.color = colors.textColor;\n                        sel.style.backgroundColor = 'transparent';\n                    });\n                }\n\n                const rangeLabels = {\n                    '1m':'1 month',\n                    '3m':'3 months',\n                    '6m':'6 months',\n                    '1y':'1 year',\n                    '5y':'5 years',\n                    '10y':'10 years',\n                    'max':'Max'\n                };\n\n                function buildRangeSelector()\n                {\n                    rangeEl.innerHTML = '';\n                    if (!showRangeSelector) return;\n\n                    const sel = document.createElement('select');\n                    sel.setAttribute('aria-label', 'Range');\n\n                    rangeOptions.forEach(r =>\n                    {\n                        const opt = document.createElement('option');\n                        opt.value = r;\n                        opt.textContent = rangeLabels[r] || r;\n                        sel.appendChild(opt);\n                    });\n\n                    if (rangeOptions.length > 0 && !rangeOptions.includes(range))\n                    {\n                        range = rangeOptions[0];\n                    }\n                    sel.value = range;\n\n                    sel.addEventListener('change', () =>\n                    {\n                        range = sel.value;\n                        refresh(true);\n                    });\n\n                    rangeEl.appendChild(sel);\n                }\n\n                const unitLabels = { 'oz':'oz', 'g':'g', 'kg':'kg', 't':'t' };\n\n                function buildUnitSelector()\n                {\n                    if (unitEl) unitEl.innerHTML = '';\n                    if (unitTextEl) unitTextEl.textContent = '';\n\n                    const wantSuffixText = (!showUnitSelector) && isShowUnitSuffix();\n\n                    \/\/ Separator visible when either selector or suffix text is visible\n                    if (unitSepEl)\n                    {\n                        unitSepEl.textContent = '\/';\n                        unitSepEl.style.display = (showUnitSelector || isShowUnitSuffix()) ? '' : 'none';\n                    }\n\n                    if (!showUnitSelector)\n                    {\n                        if (unitTextEl)\n                        {\n                            unitTextEl.style.display = wantSuffixText ? '' : 'none';\n                            unitTextEl.textContent = wantSuffixText ? (unitLabels[unit] || unit) : '';\n                        }\n                        return;\n                    }\n\n                    if (unitTextEl) unitTextEl.style.display = 'none';\n\n                    const sel = document.createElement('select');\n                    sel.setAttribute('aria-label', 'Unit');\n\n                    unitOptions.forEach(u =>\n                    {\n                        const opt = document.createElement('option');\n                        opt.value = u;\n                        opt.textContent = unitLabels[u] || u;\n                        sel.appendChild(opt);\n                    });\n                    sel.value = unit;\n\n                    sel.addEventListener('change', () =>\n                    {\n                        unit = sel.value;\n                        \/\/ Important: latestPayload is unit-specific.\n                        \/\/ We must re-fetch it when the unit changes, otherwise the chart will mix\n                        \/\/ converted timeframe points (g\/kg) with an old spot value (oz), creating\n                        \/\/ wrong header values and spikes at the end of the series.\n                        refresh(false);\n                    });\n\n                    unitEl.appendChild(sel);\n                }\n\n                if (disclaimer)\n                {\n                    metaEl.textContent = disclaimer;\n                }\n                else\n                {\n                    metaEl.textContent = '';\n                    metaEl.style.display = 'none';\n                }\n\n                const LWC_URL = 'https:\/\/unpkg.com\/lightweight-charts@4.2.0\/dist\/lightweight-charts.standalone.production.js';\n\n                function loadScriptOnce(src)\n                {\n                    return new Promise((resolve, reject) =>\n                    {\n                        if (window.LightweightCharts && window.LightweightCharts.createChart)\n                        {\n                            resolve();\n                            return;\n                        }\n\n                        const existing = document.querySelector('script[data-nv-lwc=\"1\"]');\n                        if (existing)\n                        {\n                            existing.addEventListener('load', () => resolve());\n                            existing.addEventListener('error', () => reject(new Error('Failed loading chart lib')));\n                            return;\n                        }\n\n                        const s = document.createElement('script');\n                        s.src = src;\n                        s.async = true;\n                        s.setAttribute('data-nv-lwc', '1');\n                        s.onload = () => resolve();\n                        s.onerror = () => reject(new Error('Failed loading chart lib'));\n                        document.head.appendChild(s);\n                    });\n                }\n\n                async function fetchData()\n                {\n                    const url = new URL(restUrl, window.location.origin);\n                    url.searchParams.set('pair', pair);\n                    url.searchParams.set('range', range);\nconst res = await fetch(url.toString(), { credentials: 'same-origin' });\n                    const json = await res.json();\n                    if (!res.ok)\n                    {\n                        throw new Error(json && json.error ? json.error : 'Failed fetching data');\n                    }\n                    return json;\n                }\n\n                async function fetchLatest()\n                {\n                    if (!restLatestUrl) return null;\n\n                    const url = new URL(restLatestUrl, window.location.origin);\n                    url.searchParams.set('pair', pair);\n                    url.searchParams.set('unit', unit);\nconst res = await fetch(url.toString(), { credentials: 'same-origin' });\n                    const json = await res.json();\n                    if (!res.ok)\n                    {\n                        return null;\n                    }\n                    return json;\n                }\n\n                function unitMultiplier(unit)\n                {\n                    const TROY_OZ_TO_G = 31.1034768;\n                    if (unit === 'g')  return 1.0 \/ TROY_OZ_TO_G;\n                    if (unit === 'kg') return 1000.0 \/ TROY_OZ_TO_G;\n                    return 1.0;\n                }\n\n                function unitSuffix(unit)\n                {\n                    if (unit === 'g')  return '\/g';\n                    if (unit === 'kg') return '\/kg';\n                    return '\/oz';\n                }\n\n                function formatPrice(v, currency, unit)\n                {\n                    try\n                    {\n                        const digits = (unit === 'g') ? 3 : 2;\n                        const formatted = new Intl.NumberFormat(undefined, {\n                            style: 'currency',\n                            currency: currency,\n                            maximumFractionDigits: digits\n                        }).format(v);\n\n                        return formatted;\n                    }\n                    catch (e)\n                    {\n                        return String(v);\n                    }\n                }\n\n                let chart = null;\n                let series = null;\n                let lastPayload = null;\n                let latestPayload = null;\n\n                function destroyChart()\n                {\n                    try\n                    {\n                        if (chart && typeof chart.remove === 'function')\n                        {\n                            chart.remove();\n                        }\n                    }\n                    catch (e) {}\n\n                    chart = null;\n                    series = null;\n\n                    \/\/ ensure canvas is fully cleared\n                    try { chartEl.innerHTML = ''; } catch (e) {}\n                }\n\n                function syncSize()\n                {\n                    if (!chart) return;\n\n                    const w = Math.max(10, chartEl.clientWidth || 0);\n                    let effectiveHeight = height;\n                    if (document.fullscreenElement === root)\n                    {\n                        const headerH = headerEl ? headerEl.offsetHeight : 44;\n                        effectiveHeight = Math.max(180, (root.clientHeight - headerH - 24));\n                    }\n                    const h = Math.max(180, effectiveHeight);\n\n                    chartEl.style.height = h + 'px';\n                    \/\/ lightweight-charts v4 supports resize()\n                    if (typeof chart.resize === 'function')\n                    {\n                        chart.resize(w, h);\n                    }\n                    else\n                    {\n                        chart.applyOptions({ width: w, height: h });\n                    }\n                }\n\n\n                function render(payload)\n                {\n                    lastPayload = payload;\n\n                    const points = payload.points || [];\n                    const currency = payload.currency || '';\n                    const mult = unitMultiplier(unit);\n                    const colors = resolveColors();\n\n                    applyUiTheme(colors);\n\n                    pairEl.textContent = (payload.pair || pair);\n\n                    if (!chart)\n                    {\n                        chart = window.LightweightCharts.createChart(chartEl, {\n                            width: chartEl.clientWidth,\n                            height: height,\n                            layout: {\n                                background: { type: 'solid', color: colors.bgColor },\n                                textColor: colors.textColor\n                            },\n                            rightPriceScale: { borderVisible: false },\n                            timeScale: {\n                                borderVisible: false,\n                                timeVisible: true,\n                                secondsVisible: false\n                            },\n                            grid: {\n                                vertLines: { color: colors.gridColor },\n                                horzLines: { color: colors.gridColor }\n                            },\n                            localization: {\n                                locale: (navigator.language || 'en-US')\n                            },\n                            crosshair: {\n                                mode: 1,\n                                vertLine: { labelBackgroundColor: colors.lineColor },\n                                horzLine: { labelBackgroundColor: colors.lineColor }\n                            }\n                        });\n\n                        series = chart.addAreaSeries({\n                            lineWidth: 2,\n                            lineColor: colors.lineColor,\n                            topColor: colors.topColor,\n                            bottomColor: colors.bottomColor\n                        });\n\n                        const attr = document.getElementById('tv-attr-logo');\n                        if (attr && attr.parentNode)\n                        {\n                            attr.parentNode.removeChild(attr);\n                        }\n\n                        document.addEventListener('fullscreenchange', () =>\n                {\n                    requestAnimationFrame(() => syncSize());\n                });\n\n                const ro = new ResizeObserver(() =>\n                        {\n                            \/\/ wait a tick to let layout settle (header wrap, etc.)\n                            requestAnimationFrame(() => syncSize());\n                        });\n                        ro.observe(root);\n                        ro.observe(chartEl);\n                    }\n                    else\n                    {\n                        chart.applyOptions({\n                            layout: {\n                                background: { type: 'solid', color: colors.bgColor },\n                                textColor: colors.textColor\n                            },\n                            grid: {\n                                vertLines: { color: colors.gridColor },\n                                horzLines: { color: colors.gridColor }\n                            },\n                            crosshair: {\n                                mode: 1,\n                                vertLine: { labelBackgroundColor: colors.lineColor },\n                                horzLine: { labelBackgroundColor: colors.lineColor }\n                            }\n                        });\n\n                        series.applyOptions({\n                            lineColor: colors.lineColor,\n                            topColor: colors.topColor,\n                            bottomColor: colors.bottomColor\n                        });\n                    }\n\n                    let data = points.map(p => ({ time: p.t, value: p.v * mult }));\n\n                    \/\/ If we have a cached\/latest payload (spot), use it for the header and optionally append a last point.\n                    if (latestPayload && typeof latestPayload.price === 'number' && typeof latestPayload.timestamp === 'number')\n                    {\n                        const spotTime = latestPayload.timestamp;\n                        const spotVal = latestPayload.price;\n\n                        if (data.length === 0 || spotTime > data[data.length - 1].time)\n                        {\n                            data = data.concat([{ time: spotTime, value: spotVal }]);\n                        }\n                    }\n\n                    series.setData(data);\n                    \/\/ Ensure sizing is correct before fitting\n                    requestAnimationFrame(() =>\n                    {\n                        syncSize();\n                        chart.timeScale().fitContent();\n                    });\n\n                    if (latestPayload && typeof latestPayload.price === 'number')\n                    {\n                        lastEl.textContent = formatPrice(latestPayload.price, currency, unit);\n                    }\n                    else if (data.length > 0)\n                    {\n                        lastEl.textContent = formatPrice(data[data.length - 1].value, currency, unit);\n                    }\n                    else\n                    {\n                        lastEl.textContent = '';\n                    }\n                }\n\n                async function refresh(shouldFetch)\n                {\n                    try\n                    {\n                        const [payload, latest] = await Promise.all([\n                            (shouldFetch ? fetchData() : (lastPayload ? Promise.resolve(lastPayload) : fetchData())),\n                            fetchLatest()\n                        ]);\n\n                        latestPayload = latest;\n                        render(payload);\n                    }\n                    catch (e)\n                    {\n                        pairEl.textContent = pair;\n                        lastEl.textContent = 'Error';\n                        console.error(e);\n                    }\n                }\n\n                \/\/ Build UI\n                buildRangeSelector();\n                buildUnitSelector();\n\n                \/\/ Fullscreen\n                if (fsBtn)\n                {\n                    fsBtn.style.display = cfg.showFullscreen ? '' : 'none';\n                    fsBtn.addEventListener('click', () =>\n                    {\n                        const el = root;\n                        try\n                        {\n                            if (document.fullscreenElement)\n                            {\n                                document.exitFullscreen();\n                                return;\n                            }\n                            if (el.requestFullscreen) el.requestFullscreen();\n                        }\n                        catch (e) {}\n                    });\n                }\n\n                requestAnimationFrame(() =>\n                {\n                    if (lastPayload) { syncSize(); }\n                });\n\n                loadScriptOnce(LWC_URL)\n                    .then(() => refresh(true))\n                    .catch(err =>\n                    {\n                        pairEl.textContent = pair;\n                        lastEl.textContent = 'No chart lib';\n                        console.error(err);\n                    });\n\n                \/\/ AUTO theme: observe body class changes (color-switch-dark\/light) \u2014 but only react when the theme actually changes.\n                if (theme === 'auto' && document.body)\n                {\n                    let lastTheme = detectThemeByBody();\n\n                    const obs = new MutationObserver(() =>\n                    {\n                        const nowTheme = detectThemeByBody();\n                        if (!nowTheme || nowTheme === lastTheme)\n                        {\n                            return;\n                        }\n\n                        lastTheme = nowTheme;\n\n                        if (lastPayload)\n                        {\n                            \/\/ Force a full redraw; some browsers won't repaint canvas until interaction.\n                            destroyChart();\n                            render(lastPayload);\n                        }\n                    });\n\n                    obs.observe(document.body, { attributes: true, attributeFilter: ['class'] });\n                }\n            })();\n        <\/script>\n        \n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_bst_post_transparent":"","_bst_post_title":"","_bst_post_layout":"","_bst_post_sidebar_id":"","_bst_post_content_style":"","_bst_post_vertical_padding":"","_bst_post_feature":"","_bst_post_feature_position":"","_bst_post_header":false,"_bst_post_footer":false,"footnotes":""},"class_list":["post-3291","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/notrevoute.com\/es\/wp-json\/wp\/v2\/pages\/3291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/notrevoute.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/notrevoute.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/notrevoute.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/notrevoute.com\/es\/wp-json\/wp\/v2\/comments?post=3291"}],"version-history":[{"count":1,"href":"https:\/\/notrevoute.com\/es\/wp-json\/wp\/v2\/pages\/3291\/revisions"}],"predecessor-version":[{"id":3292,"href":"https:\/\/notrevoute.com\/es\/wp-json\/wp\/v2\/pages\/3291\/revisions\/3292"}],"wp:attachment":[{"href":"https:\/\/notrevoute.com\/es\/wp-json\/wp\/v2\/media?parent=3291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}