{"id":7810,"date":"2025-08-20T00:50:30","date_gmt":"2025-08-19T22:50:30","guid":{"rendered":"https:\/\/toldoscerca.com\/?p=7810"},"modified":"2025-08-20T01:21:06","modified_gmt":"2025-08-19T23:21:06","slug":"limpieza-de-toldos","status":"publish","type":"post","link":"https:\/\/toldoscerca.com\/ca\/neteja-de-tendals\/","title":{"rendered":"neteja de tendals"},"content":{"rendered":"<!-- FAQ Widget Container 1 -->\n        <style>\n        \/* FAQ Widget Styles - Instance 1 *\/\n        .faq-widget-1 * {\n            margin: 0 !important;\n            padding: 0 !important;\n            box-sizing: border-box !important;\n        }\n\n        .faq-widget-1 {\n            font-family: 'Roboto', sans-serif !important;\n            color: #333 !important;\n            margin-top: 40px !important;\n            margin-bottom: 60px !important;\n        }\n\n        .faq-widget-1 .faq-container {\n            max-width: 1200px !important;\n            margin: 0 auto !important;\n            padding: 0 15px !important;\n        }\n\n        .faq-widget-1 .faq-widget-title {\n            text-align: center !important;\n            font-size: 28px !important;\n            font-weight: 700 !important;\n            color: #333 !important;\n            margin-bottom: 30px !important;\n            padding-bottom: 15px !important;\n            border-bottom: 3px solid #333 !important;\n            margin-top: 0 !important;\n        }\n\n        \/* Header placeholder para sticky *\/\n        .faq-widget-1 .header-placeholder {\n            display: none !important;\n            height: 80px !important;\n        }\n\n        .faq-widget-1 .header-placeholder.active {\n            display: block !important;\n        }\n\n        \/* Header sticky con tabs *\/\n        .faq-widget-1 .faq-header-sticky {\n            background: white !important;\n            z-index: 100 !important;\n            transition: all 0.3s ease !important;\n            margin-bottom: 20px !important;\n            position: relative !important;\n        }\n\n        .faq-widget-1 .faq-header-sticky.fixed {\n            position: fixed !important;\n            top: 0 !important;\n            left: 0 !important;\n            right: 0 !important;\n            box-shadow: 0 2px 10px rgba(0,0,0,0.1) !important;\n            margin-bottom: 0 !important;\n        }\n\n        \/* Wrapper para tabs con scroll *\/\n        .faq-widget-1 .faq-tabs-wrapper {\n            position: relative !important;\n            overflow: hidden !important;\n            background: white !important;\n            padding: 10px 0 !important;\n        }\n\n        \/* Container con scroll horizontal *\/\n        .faq-widget-1 .faq-tabs-container {\n            overflow-x: auto !important;\n            overflow-y: hidden !important;\n            scrollbar-width: none !important;\n            -ms-overflow-style: none !important;\n            scroll-behavior: smooth !important;\n        }\n\n        .faq-widget-1 .faq-tabs-container::-webkit-scrollbar {\n            display: none !important;\n        }\n\n        \/* Tabs en l\u00ednea horizontal - NO SON HEADINGS *\/\n        .faq-widget-1 .faq-tabs {\n            display: flex !important;\n            gap: 12px !important;\n            white-space: nowrap !important;\n            padding: 0 60px !important;\n            min-width: min-content !important;\n        }\n\n        \/* ANIMACIONES *\/\n        @keyframes shake {\n            0%, 100% { transform: translateX(0); }\n            10% { transform: translateX(-10px); }\n            20% { transform: translateX(10px); }\n            30% { transform: translateX(-10px); }\n            40% { transform: translateX(10px); }\n            50% { transform: translateX(-5px); }\n            60% { transform: translateX(5px); }\n            70% { transform: translateX(-2px); }\n            80% { transform: translateX(2px); }\n            90% { transform: translateX(0); }\n        }\n\n        .faq-widget-1 .faq-tabs.shake-animation {\n            animation: shake 1.5s ease-in-out !important;\n        }\n\n        @keyframes bounce {\n            0%, 20%, 50%, 80%, 100% {\n                transform: translateY(-50%);\n            }\n            40% {\n                transform: translateY(-50%) translateX(10px) scale(1.2);\n            }\n            60% {\n                transform: translateY(-50%) translateX(-5px) scale(1.1);\n            }\n        }\n\n        .faq-widget-1 .scroll-indicator.bounce-animation {\n            animation: bounce 2s ease-in-out infinite !important;\n            background: #ff6b6b !important;\n            box-shadow: 0 0 20px rgba(255, 107, 107, 0.6) !important;\n        }\n\n        @keyframes pulse {\n            0% {\n                transform: translateY(-50%) scale(1);\n                box-shadow: 0 0 0 0 rgba(51, 51, 51, 0.7);\n            }\n            50% {\n                transform: translateY(-50%) scale(1.15);\n                box-shadow: 0 0 0 10px rgba(51, 51, 51, 0);\n            }\n            100% {\n                transform: translateY(-50%) scale(1);\n                box-shadow: 0 0 0 0 rgba(51, 51, 51, 0);\n            }\n        }\n\n        @keyframes highlight {\n            0% { box-shadow: 0 0 0 rgba(255, 107, 107, 0); }\n            50% { box-shadow: 0 0 30px rgba(255, 107, 107, 0.8); }\n            100% { box-shadow: 0 0 0 rgba(255, 107, 107, 0); }\n        }\n\n        .faq-widget-1 .faq-item-accordion.highlighted {\n            animation: highlight 1s ease-in-out 3 !important;\n        }\n\n        \/* Estilo de cada tab - NO SON H2 *\/\n        .faq-widget-1 .faq-tab {\n            background: #f8f9fa !important;\n            border: 2px solid #e9ecef !important;\n            border-radius: 25px !important;\n            padding: 12px 20px !important;\n            cursor: pointer !important;\n            font-weight: 500 !important;\n            font-size: 14px !important;\n            color: #666 !important;\n            transition: all 0.3s ease !important;\n            flex-shrink: 0 !important;\n            min-width: fit-content !important;\n            user-select: none !important;\n            display: inline-block !important;\n        }\n\n        .faq-widget-1 .faq-tab:hover {\n            background: #e9ecef !important;\n            border-color: #dee2e6 !important;\n            transform: translateY(-2px) !important;\n            box-shadow: 0 4px 8px rgba(0,0,0,0.1) !important;\n        }\n\n        .faq-widget-1 .faq-tab.active {\n            background: #333 !important;\n            border-color: #333 !important;\n            color: white !important;\n        }\n\n        .faq-widget-1 .faq-tab .count {\n            background: rgba(255,255,255,0.2) !important;\n            padding: 2px 8px !important;\n            border-radius: 12px !important;\n            font-size: 12px !important;\n            margin-left: 8px !important;\n            display: inline-block !important;\n        }\n\n        \/* Indicadores de scroll (flechas) *\/\n        .faq-widget-1 .scroll-indicator {\n            position: absolute !important;\n            top: 50% !important;\n            transform: translateY(-50%) !important;\n            width: 40px !important;\n            height: 40px !important;\n            border-radius: 50% !important;\n            background: rgba(0,0,0,0.8) !important;\n            color: white !important;\n            display: flex !important;\n            align-items: center !important;\n            justify-content: center !important;\n            cursor: pointer !important;\n            z-index: 10 !important;\n            transition: all 0.3s ease !important;\n            opacity: 0 !important;\n            pointer-events: none !important;\n        }\n\n        .faq-widget-1 .scroll-indicator.visible {\n            opacity: 1 !important;\n            pointer-events: auto !important;\n            animation: pulse 2s ease-in-out infinite !important;\n        }\n\n        .faq-widget-1 .scroll-indicator:hover {\n            background: rgba(0,0,0,0.9) !important;\n            transform: translateY(-50%) scale(1.1) !important;\n        }\n\n        .faq-widget-1 .scroll-left {\n            left: 10px !important;\n        }\n\n        .faq-widget-1 .scroll-right {\n            right: 10px !important;\n        }\n\n        \/* Fade gradients *\/\n        .faq-widget-1 .fade-left,\n        .faq-widget-1 .fade-right {\n            position: absolute !important;\n            top: 0 !important;\n            bottom: 0 !important;\n            width: 30px !important;\n            pointer-events: none !important;\n            z-index: 5 !important;\n            opacity: 0 !important;\n            transition: opacity 0.3s ease !important;\n        }\n\n        .faq-widget-1 .fade-left {\n            left: 0 !important;\n            background: linear-gradient(to right, rgba(255,255,255,0.9), transparent) !important;\n        }\n\n        .faq-widget-1 .fade-right {\n            right: 0 !important;\n            background: linear-gradient(to left, rgba(255,255,255,0.9), transparent) !important;\n        }\n\n        .faq-widget-1 .fade-left.visible,\n        .faq-widget-1 .fade-right.visible {\n            opacity: 1 !important;\n        }\n\n        \/* Contenido *\/\n        .faq-widget-1 .faq-content {\n            padding-bottom: 40px !important;\n        }\n\n        .faq-widget-1 .faq-category-section {\n            margin-bottom: 40px !important;\n            scroll-margin-top: 100px !important;\n        }\n\n        \/* CATEGOR\u00cdAS - Ya NO son H2, solo elementos visuales *\/\n        .faq-widget-1 .faq-category-title {\n            font-size: 20px !important;\n            font-weight: 700 !important;\n            color: #999 !important;\n            margin-bottom: 25px !important;\n            padding: 10px 15px !important;\n            background: #f8f9fa !important;\n            border-left: 4px solid #333 !important;\n            border-radius: 4px !important;\n            margin-top: 0 !important;\n            display: block !important;\n            text-transform: uppercase !important;\n            letter-spacing: 1px !important;\n        }\n\n        \/* Items del acorde\u00f3n *\/\n        .faq-widget-1 .faq-item-accordion {\n            border: 1px solid #e9ecef !important;\n            border-radius: 8px !important;\n            margin-bottom: 15px !important;\n            overflow: hidden !important;\n            background: white !important;\n            transition: all 0.3s ease !important;\n        }\n\n        .faq-widget-1 .faq-item-accordion:hover {\n            box-shadow: 0 4px 12px rgba(0,0,0,0.08) !important;\n        }\n\n        .faq-widget-1 .faq-question-accordion {\n            display: flex !important;\n            justify-content: space-between !important;\n            align-items: center !important;\n            padding: 20px !important;\n            background: #f8f9fa !important;\n            cursor: pointer !important;\n            user-select: none !important;\n            transition: all 0.3s ease !important;\n        }\n\n        .faq-widget-1 .faq-question-accordion:hover {\n            background: #e9ecef !important;\n        }\n\n        \/* PREGUNTAS - Ahora son H2 pero con tama\u00f1o visual controlado *\/\n        .faq-widget-1 .faq-question-accordion h2 {\n            margin: 0 !important;\n            padding: 0 !important;\n            font-size: 16px !important;\n            font-weight: 600 !important;\n            color: #333 !important;\n            flex: 1 !important;\n            padding-right: 20px !important;\n            line-height: 1.4 !important;\n        }\n\n        .faq-widget-1 .faq-item-accordion.active .faq-question-accordion {\n            background: #333 !important;\n        }\n\n        .faq-widget-1 .faq-item-accordion.active .faq-question-accordion h2 {\n            color: white !important;\n        }\n\n        .faq-widget-1 .faq-answer-accordion {\n            display: none !important;\n            border-top: 1px solid #e9ecef !important;\n            padding: 20px !important;\n            background: white !important;\n        }\n\n        .faq-widget-1 .faq-answer-accordion.show {\n            display: block !important;\n        }\n\n        .faq-widget-1 .faq-answer-accordion p {\n            color: #555 !important;\n            line-height: 1.6 !important;\n            font-size: 15px !important;\n            margin: 0 !important;\n            padding: 0 !important;\n        }\n\n        .faq-widget-1 .faq-toggle-icon {\n            transition: transform 0.3s ease !important;\n            flex-shrink: 0 !important;\n            width: 20px !important;\n            height: 20px !important;\n            display: flex !important;\n            align-items: center !important;\n            justify-content: center !important;\n        }\n\n        .faq-widget-1 .faq-toggle-icon i {\n            color: #666 !important;\n            font-size: 14px !important;\n        }\n\n        .faq-widget-1 .faq-item-accordion.active .faq-toggle-icon {\n            transform: rotate(180deg) !important;\n        }\n\n        .faq-widget-1 .faq-item-accordion.active .faq-toggle-icon i {\n            color: white !important;\n        }\n\n        .faq-widget-1 .loading {\n            text-align: center !important;\n            padding: 40px !important;\n            color: #666 !important;\n        }\n\n        @media (max-width: 768px) {\n            .faq-widget-1 .faq-container {\n                padding: 0 10px !important;\n            }\n            \n            .faq-widget-1 .faq-tab {\n                font-size: 13px !important;\n                padding: 10px 16px !important;\n            }\n\n            .faq-widget-1 .faq-question-accordion h2 {\n                font-size: 15px !important;\n            }\n\n            .faq-widget-1 .faq-category-title {\n                font-size: 16px !important;\n            }\n\n            .faq-widget-1 .scroll-indicator {\n                width: 35px !important;\n                height: 35px !important;\n            }\n\n            .faq-widget-1 .faq-category-section {\n                scroll-margin-top: 80px !important;\n            }\n        }\n        <\/style>\n\n        <!-- Font Awesome CSS -->\n        <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/@fortawesome\/fontawesome-free@6.4.0\/css\/all.min.css\">\n        \n        <!-- Google Fonts Roboto -->\n        <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\">\n?>\n\n        <div class=\"faq-main-container faq-widget-1\" \n             data-sheet-id=\"1AgNSXjMeVeX1eFOqr32gxqvuf-kr-jV8vm9RaEjwXAI\"\n             data-sheet-name=\"Limpieza de toldos\"\n             data-title=\"Preguntas sobre Limpieza\"\n             data-mode=\"accordion\"\n             data-schema=\"yes\"\n             data-microdata=\"yes\">\n        <\/div>\n\n        <script>\n        (function() {\n            'use strict';\n            \n            class FAQWidget {\n                constructor(container) {\n                    this.container = container;\n                    this.sheetId = container.dataset.sheetId;\n                    this.sheetName = container.dataset.sheetName || 'Hoja1';\n                    this.title = container.dataset.title || '';\n                    this.mode = container.dataset.mode || 'expanded';\n                    this.generateSchemaOption = container.dataset.schema === 'yes';\n                    this.generateMicrodata = container.dataset.microdata === 'yes';\n                    \n                    this.widgetId = 'faq-' + Math.random().toString(36).substr(2, 9);\n                    \n                    this.data = {};\n                    this.currentCategory = null;\n                    this.categoryOffsets = [];\n                    this.isScrolling = false;\n                    this.stickyOffset = 0;\n                    \n                    this.elements = {};\n                    \n                    this.schemaId = 'faq-schema-' + this.widgetId;\n                    \n                    console.log('Inicializando FAQ Widget:', this.sheetName);\n                    console.log('Microdata habilitado:', this.generateMicrodata);\n                    \n                    this.init();\n                }\n\n                async init() {\n                    try {\n                        this.buildHTML();\n                        await this.loadDataFromSheets();\n                        this.renderTabs();\n                        this.renderContent();\n                        this.setupScrollHandlers();\n                        \n                        if (this.generateSchemaOption) {\n                            this.generateSchema();\n                        }\n                        \n                        \/\/ Setup sticky header y scroll spy\n                        setTimeout(() => {\n                            this.setupStickyHeader();\n                            this.setupScrollSpy();\n                            this.showInitialAnimation();\n                            \n                            \/\/ Deep linking\n                            this.handleDeepLink();\n                        }, 200);\n                        \n                        \/\/ Escuchar cambios en el hash\n                        window.addEventListener('hashchange', () => {\n                            this.handleDeepLink();\n                        });\n                        \n                    } catch (error) {\n                        console.error('Error inicializando FAQ Widget:', error);\n                        this.showError();\n                    }\n                }\n\n                handleDeepLink() {\n                    const hash = window.location.hash;\n                    \n                    if (hash && hash.length > 1) {\n                        const decodedHash = decodeURIComponent(hash.substring(1));\n                        console.log('Deep link detectado:', decodedHash);\n                        \n                        let foundQuestion = false;\n                        \n                        \/\/ Buscar la pregunta en todas las categor\u00edas\n                        Object.keys(this.data).forEach(category => {\n                            if (!foundQuestion) {\n                                this.data[category].forEach((item, index) => {\n                                    if (!foundQuestion) {\n                                        const questionId = this.createQuestionId(item.pregunta);\n                                        \n                                        if (questionId === decodedHash) {\n                                            console.log('Pregunta encontrada:', item.pregunta, 'en categor\u00eda:', category);\n                                            foundQuestion = true;\n                                            \n                                            setTimeout(() => {\n                                                \/\/ 1. Scroll a la categor\u00eda\n                                                this.scrollToCategory(category);\n                                                \n                                                \/\/ 2. Abrir la pregunta espec\u00edfica\n                                                setTimeout(() => {\n                                                    const questions = this.container.querySelectorAll('.faq-item-accordion');\n                                                    \n                                                    questions.forEach(q => {\n                                                        const questionText = q.querySelector('h2').textContent;\n                                                        const qId = this.createQuestionId(questionText);\n                                                        \n                                                        if (qId === decodedHash) {\n                                                            \/\/ Abrir esta pregunta\n                                                            if (q && !q.classList.contains('active')) {\n                                                                const answer = q.querySelector('.faq-answer-accordion');\n                                                                if (q) q.classList.add('active');\n                                                                if (answer) {\n                                                                    answer.classList.add('show');\n                                                                    answer.style.display = 'block';\n                                                                }\n                                                            }\n                                                            \n                                                            \/\/ Scroll hasta la pregunta\n                                                            if (q) {\n                                                                setTimeout(() => {\n                                                                    const rect = q.getBoundingClientRect();\n                                                                    const absoluteTop = rect.top + window.pageYOffset;\n                                                                    const headerHeight = this.elements.header ? this.elements.header.offsetHeight : 80;\n                                                                    const scrollPosition = absoluteTop - headerHeight - 20;\n                                                                    \n                                                                    window.scrollTo({\n                                                                        top: scrollPosition,\n                                                                        behavior: 'smooth'\n                                                                    });\n                                                                    \n                                                                    \/\/ Highlight temporal\n                                                                    q.classList.add('highlighted');\n                                                                    setTimeout(() => {\n                                                                        q.classList.remove('highlighted');\n                                                                    }, 3000);\n                                                                }, 300);\n                                                            }\n                                                        }\n                                                    });\n                                                }, 500);\n                                            }, 300);\n                                        }\n                                    }\n                                });\n                            }\n                        });\n                        \n                        if (!foundQuestion) {\n                            console.log('No se encontr\u00f3 la pregunta con ID:', decodedHash);\n                        }\n                    }\n                }\n\n                createQuestionId(text) {\n                    if (!text) return '';\n                    \n                    return text.toLowerCase()\n                        .replace(\/[\u00e1\u00e0\u00e4\u00e2\u00e3]\/g, 'a')\n                        .replace(\/[\u00e9\u00e8\u00eb\u00ea]\/g, 'e')\n                        .replace(\/[\u00ed\u00ec\u00ef\u00ee]\/g, 'i')\n                        .replace(\/[\u00f3\u00f2\u00f6\u00f4\u00f5]\/g, 'o')\n                        .replace(\/[\u00fa\u00f9\u00fc\u00fb]\/g, 'u')\n                        .replace(\/\u00f1\/g, 'n')\n                        .replace(\/\u00e7\/g, 'c')\n                        .replace(\/[\u00bf?\u00a1!]\/g, '')\n                        .replace(\/[^a-z0-9]\/g, '-')\n                        .replace(\/-+\/g, '-')\n                        .replace(\/^-|-$\/g, '')\n                        .substring(0, 60);\n                }\n\n                async loadDataFromSheets() {\n                    try {\n                        const url = 'https:\/\/docs.google.com\/spreadsheets\/d\/' + this.sheetId + '\/gviz\/tq?tqx=out:csv&sheet=' + encodeURIComponent(this.sheetName);\n                        \n                        console.log('Cargando desde:', url);\n                        \n                        const response = await fetch(url);\n                        \n                        if (!response.ok) {\n                            throw new Error('Error HTTP: ' + response.status);\n                        }\n                        \n                        const csvText = await response.text();\n                        console.log('CSV recibido (primeros 500 caracteres):', csvText.substring(0, 500));\n                        \n                        this.data = this.parseCSVtoFAQ(csvText);\n                        console.log('Datos parseados:', this.data);\n                        console.log('Total de preguntas cargadas:', Object.values(this.data).reduce((sum, cat) => sum + cat.length, 0));\n                        \n                    } catch (error) {\n                        console.error('Error cargando:', error);\n                        this.showError(error.message);\n                    }\n                }\n\n                processGoogleDriveURL(url) {\n                    if (!url) return '';\n                    \n                    \/\/ Si ya es una URL de thumbnail o directa, devolverla tal como est\u00e1\n                    if (url.includes('drive.google.com\/thumbnail?') || url.includes('googleusercontent.com')) {\n                        return url;\n                    }\n                    \n                    \/\/ Convertir URL de Google Drive compartida a formato de thumbnail\n                    \/\/ Formato: https:\/\/drive.google.com\/file\/d\/FILE_ID\/view?usp=sharing\n                    \/\/ A: https:\/\/drive.google.com\/thumbnail?id=FILE_ID&sz=w1000\n                    const driveMatch = url.match(\/\\\/file\\\/d\\\/([a-zA-Z0-9-_]+)\/);\n                    if (driveMatch) {\n                        const fileId = driveMatch[1];\n                        return `https:\/\/drive.google.com\/thumbnail?id=${fileId}&sz=w1000`;\n                    }\n                    \n                    \/\/ Si no es una URL de Google Drive reconocida, devolver tal como est\u00e1\n                    return url;\n                }\n\n                parseCSVtoFAQ(csvText) {\n                    const rows = this.parseCSVRows(csvText);\n                    const faqData = {};\n                    \n                    console.log('Total de filas parseadas:', rows.length);\n                    \n                    if (rows.length <= 1) {\n                        console.warn('La pesta\u00f1a parece estar vac\u00eda');\n                        return {};\n                    }\n\n                    for (let i = 1; i < rows.length; i++) {\n                        const row = rows[i];\n                        if (!row || row.length < 3) {\n                            console.log('Fila incompleta en \u00edndice', i, ':', row);\n                            continue;\n                        }\n                        \n                        const categoria = row[0] ? row[0].trim() : '';\n                        const pregunta = row[1] ? row[1].trim() : '';\n                        const respuesta = row[2] ? row[2].trim() : '';\n                        const imagen = row[3] ? row[3].trim() : ''; \/\/ Columna opcional de imagen\n                        \n                        if (!categoria || !pregunta) {\n                            console.log('Fila sin categor\u00eda o pregunta en \u00edndice', i);\n                            continue;\n                        }\n                        \n                        if (!faqData[categoria]) {\n                            faqData[categoria] = [];\n                        }\n                        \n                        const faqItem = {\n                            pregunta: pregunta,\n                            respuesta: this.formatAnswer(respuesta)\n                        };\n                        \n                        \/\/ A\u00f1adir imagen si est\u00e1 disponible\n                        if (imagen) {\n                            \/\/ Convertir URL de Google Drive a formato directo si es necesario\n                            const processedURL = this.processGoogleDriveURL(imagen);\n                            faqItem.imagen = processedURL;\n                            console.log(`Imagen procesada: ${imagen} -> ${processedURL}`);\n                        }\n                        \n                        faqData[categoria].push(faqItem);\n                        \n                        console.log('Pregunta a\u00f1adida:', pregunta.substring(0, 50) + '...');\n                    }\n                    \n                    Object.keys(faqData).forEach(cat => {\n                        console.log('Categor\u00eda \"' + cat + '\": ' + faqData[cat].length + ' preguntas');\n                    });\n                    \n                    return faqData;\n                }\n\n                parseCSVRows(csv) {\n                    const rows = [];\n                    let row = [];\n                    let field = '';\n                    let inQuotes = false;\n\n                    for (let i = 0; i < csv.length; i++) {\n                        const char = csv[i];\n                        const nextChar = csv[i + 1];\n\n                        if (inQuotes) {\n                            if (char === '\"') {\n                                if (nextChar === '\"') {\n                                    field += '\"';\n                                    i++;\n                                } else {\n                                    inQuotes = false;\n                                }\n                            } else {\n                                field += char;\n                            }\n                        } else {\n                            if (char === '\"') {\n                                inQuotes = true;\n                            } else if (char === ',') {\n                                row.push(field);\n                                field = '';\n                            } else if (char === '\\r') {\n                                continue;\n                            } else if (char === '\\n') {\n                                row.push(field);\n                                if (row.length > 0 && row.some(f => f.trim() !== '')) {\n                                    rows.push(row);\n                                }\n                                row = [];\n                                field = '';\n                            } else {\n                                field += char;\n                            }\n                        }\n                    }\n                    \n                    if (field || row.length) {\n                        row.push(field);\n                        if (row.length > 0 && row.some(f => f.trim() !== '')) {\n                            rows.push(row);\n                        }\n                    }\n                    \n                    console.log('Total de filas parseadas del CSV:', rows.length);\n                    return rows;\n                }\n\n                formatAnswer(text) {\n                    if (!text) return '';\n                    \n                    text = text.replace(\/\\*\\*(.*?)\\*\\*\/g, '<strong>$1<\/strong>');\n                    text = text.replace(\/^- (.+)$\/gm, '\u2022 $1');\n                    text = text.replace(\/^(\\d+)\\. (.+)$\/gm, '<strong>$1.<\/strong> $2');\n                    text = text.replace(\/\\n\/g, '<br>');\n                    \n                    return text;\n                }\n\n                buildHTML() {\n                    let html = '';\n                    \n                    if (this.title) {\n                        html += '<h1 class=\"faq-widget-title\">' + this.title + '<\/h1>';\n                    }\n                    \n                    html += `\n                        <div class=\"header-placeholder\" id=\"placeholder-${this.widgetId}\"><\/div>\n                        \n                        <nav class=\"faq-header-sticky\" id=\"header-${this.widgetId}\" aria-label=\"Navegaci\u00f3n de categor\u00edas FAQ\">\n                            <div class=\"faq-tabs-wrapper\">\n                                <div class=\"fade-left\"><\/div>\n                                <div class=\"fade-right\"><\/div>\n                                <div class=\"scroll-indicator scroll-left\" aria-label=\"Scroll izquierda\">\n                                    <i class=\"fas fa-chevron-left\"><\/i>\n                                <\/div>\n                                <div class=\"scroll-indicator scroll-right\" aria-label=\"Scroll derecha\">\n                                    <i class=\"fas fa-chevron-right\"><\/i>\n                                <\/div>\n                                <div class=\"faq-tabs-container\" id=\"tabs-container-${this.widgetId}\">\n                                    <div class=\"faq-tabs\" id=\"tabs-${this.widgetId}\" role=\"tablist\">\n                                        <div class=\"loading\">\n                                            <i class=\"fas fa-spinner fa-spin\"><\/i>\n                                            <p>Cargando preguntas...<\/p>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                        <\/nav>\n                        \n                        <div class=\"faq-container\">\n                            <div class=\"faq-content\" id=\"content-${this.widgetId}\">\n                                <!-- El contenido se carga din\u00e1micamente -->\n                            <\/div>\n                        <\/div>\n                    `;\n                    \n                    this.container.innerHTML = html;\n\n                    this.elements = {\n                        placeholder: document.getElementById('placeholder-' + this.widgetId),\n                        header: document.getElementById('header-' + this.widgetId),\n                        tabsContainer: document.getElementById('tabs-container-' + this.widgetId),\n                        tabs: document.getElementById('tabs-' + this.widgetId),\n                        content: document.getElementById('content-' + this.widgetId),\n                        scrollLeft: this.container.querySelector('.scroll-left'),\n                        scrollRight: this.container.querySelector('.scroll-right'),\n                        fadeLeft: this.container.querySelector('.fade-left'),\n                        fadeRight: this.container.querySelector('.fade-right')\n                    };\n                }\n\n                renderTabs() {\n                    const categories = Object.keys(this.data);\n                    \n                    if (categories.length === 0) {\n                        this.showError('No se encontraron categor\u00edas');\n                        return;\n                    }\n                    \n                    let tabsHTML = '';\n                    \n                    categories.forEach((category, index) => {\n                        const count = this.data[category].length;\n                        const isActive = index === 0 ? 'active' : '';\n                        \n                        \/\/ TABS NO SON HEADINGS - Solo elementos de navegaci\u00f3n\n                        tabsHTML += `<button class=\"faq-tab ${isActive}\" \n                                           data-category=\"${this.escapeHtml(category)}\"\n                                           role=\"tab\"\n                                           aria-selected=\"${index === 0 ? 'true' : 'false'}\"\n                                           aria-controls=\"panel-${this.escapeHtml(category)}\">\n                                        ${this.escapeHtml(category)}<span class=\"count\">${count}<\/span>\n                                    <\/button>`;\n                    });\n                    \n                    this.elements.tabs.innerHTML = tabsHTML;\n                    \n                    \/\/ Event listeners para los tabs\n                    const self = this;\n                    this.elements.tabs.querySelectorAll('.faq-tab').forEach(tab => {\n                        tab.addEventListener('click', function(e) {\n                            e.preventDefault();\n                            const category = this.dataset.category;\n                            console.log('Tab clicked:', category);\n                            self.scrollToCategory(category);\n                        });\n                    });\n                    \n                    this.currentCategory = categories[0];\n                }\n\n                renderContent() {\n                    const categories = Object.keys(this.data);\n                    \n                    if (categories.length === 0) {\n                        this.elements.content.innerHTML = '<p class=\"loading\">No hay contenido disponible<\/p>';\n                        return;\n                    }\n                    \n                    let contentHTML = '';\n                    \n                    \/\/ Contenedor principal con microdata si est\u00e1 habilitado\n                    if (this.generateMicrodata) {\n                        contentHTML = '<div itemscope itemtype=\"https:\/\/schema.org\/FAQPage\">';\n                    }\n                    \n                    categories.forEach((category, categoryIndex) => {\n                        const questions = this.data[category];\n                        \n                        contentHTML += `\n                            <section class=\"faq-category-section\" \n                                     data-category=\"${this.escapeHtml(category)}\"\n                                     id=\"panel-${this.escapeHtml(category)}\"\n                                     role=\"tabpanel\">\n                                <!-- CATEGOR\u00cdA NO ES H2, solo elemento visual -->\n                                <div class=\"faq-category-title\" aria-label=\"Categor\u00eda: ${this.escapeHtml(category)}\">\n                                    <span>\ud83d\udccb<\/span> ${this.escapeHtml(category)}\n                                <\/div>\n                                <div class=\"faq-questions-container\">\n                        `;\n                        \n                        questions.forEach((q, index) => {\n                            const questionId = this.createQuestionId(q.pregunta);\n                            const imageHTML = q.imagen ? `<div class=\"faq-image-container\"><img decoding=\"async\" src=\"${q.imagen}\" alt=\"${this.escapeHtml(q.pregunta)}\" class=\"faq-image\" loading=\"lazy\" onerror=\"this.style.display='none'\"><\/div>` : '';\n                            \n                            \/\/ Estructura con microdata si est\u00e1 habilitado\n                            if (this.generateMicrodata) {\n                                contentHTML += `\n                                    <article class=\"faq-item-accordion\" \n                                             data-index=\"${index}\" \n                                             data-question-id=\"${questionId}\"\n                                             itemscope \n                                             itemprop=\"mainEntity\" \n                                             itemtype=\"https:\/\/schema.org\/Question\">\n                                        <div class=\"faq-question-accordion\">\n                                            <!-- PREGUNTA AHORA ES H2 para m\u00e1ximo peso SEO -->\n                                            <h2 itemprop=\"name\">${this.escapeHtml(q.pregunta)}<\/h2>\n                                            <span class=\"faq-toggle-icon\" aria-hidden=\"true\">\n                                                <i class=\"fas fa-chevron-down\"><\/i>\n                                            <\/span>\n                                        <\/div>\n                                        <div class=\"faq-answer-accordion\" \n                                             itemscope \n                                             itemprop=\"acceptedAnswer\" \n                                             itemtype=\"https:\/\/schema.org\/Answer\">\n                                            <div class=\"faq-answer-content\" itemprop=\"text\">\n                                                <p>${q.respuesta}<\/p>\n                                                ${imageHTML}\n                                            <\/div>\n                                        <\/div>\n                                    <\/article>\n                                `;\n                            } else {\n                                \/\/ Sin microdata\n                                contentHTML += `\n                                    <article class=\"faq-item-accordion\" \n                                             data-index=\"${index}\" \n                                             data-question-id=\"${questionId}\">\n                                        <div class=\"faq-question-accordion\">\n                                            <!-- PREGUNTA AHORA ES H2 -->\n                                            <h2>${this.escapeHtml(q.pregunta)}<\/h2>\n                                            <span class=\"faq-toggle-icon\" aria-hidden=\"true\">\n                                                <i class=\"fas fa-chevron-down\"><\/i>\n                                            <\/span>\n                                        <\/div>\n                                        <div class=\"faq-answer-accordion\">\n                                            <div class=\"faq-answer-content\">\n                                                <p>${q.respuesta}<\/p>\n                                                ${imageHTML}\n                                            <\/div>\n                                        <\/div>\n                                    <\/article>\n                                `;\n                            }\n                        });\n                        \n                        contentHTML += `\n                                <\/div>\n                            <\/section>\n                        `;\n                    });\n                    \n                    if (this.generateMicrodata) {\n                        contentHTML += '<\/div>';\n                    }\n                    \n                    this.elements.content.innerHTML = contentHTML;\n                    \n                    \/\/ Setup accordion\n                    this.setupAccordion();\n                    \n                    \/\/ Calcular offsets\n                    setTimeout(() => {\n                        this.calculateOffsets();\n                    }, 100);\n                }\n\n                setupAccordion() {\n                    const self = this;\n                    \n                    this.elements.content.querySelectorAll('.faq-question-accordion').forEach(question => {\n                        question.addEventListener('click', function(e) {\n                            e.preventDefault();\n                            e.stopPropagation();\n                            \n                            const item = this.closest('.faq-item-accordion');\n                            const answer = item.querySelector('.faq-answer-accordion');\n                            const questionText = this.querySelector('h2').textContent;\n                            const questionId = self.createQuestionId(questionText);\n                            \n                            if (item && item.classList.contains('active')) {\n                                \/\/ Cerrar\n                                if (item) item.classList.remove('active');\n                                if (answer) answer.classList.remove('show');\n                                answer.style.display = 'none';\n                                \n                                \/\/ Quitar hash de la URL\n                                if (window.location.hash === '#' + questionId) {\n                                    history.pushState('', document.title, window.location.pathname + window.location.search);\n                                }\n                            } else {\n                                \/\/ Cerrar otras si el modo no es expanded\n                                if (self.mode !== 'expanded') {\n                                    self.elements.content.querySelectorAll('.faq-item-accordion.active').forEach(activeItem => {\n                                        if (activeItem !== item) {\n                                            if (activeItem) activeItem.classList.remove('active');\n                                            const activeAnswer = activeItem.querySelector('.faq-answer-accordion');\n                                            if (activeAnswer) activeAnswer.classList.remove('show');\n                                            activeAnswer.style.display = 'none';\n                                        }\n                                    });\n                                }\n                                \n                                \/\/ Abrir\n                                item.classList.add('active');\n                                answer.classList.add('show');\n                                answer.style.display = 'block';\n                                \n                                \/\/ A\u00f1adir hash a la URL\n                                history.pushState(null, null, '#' + questionId);\n                            }\n                        });\n                    });\n                }\n\n                scrollToCategory(category) {\n                    this.isScrolling = true;\n                    \n                    const sections = this.container.querySelectorAll('.faq-category-section');\n                    let targetSection = null;\n                    \n                    sections.forEach(section => {\n                        if (section.dataset.category === category) {\n                            targetSection = section;\n                        }\n                    });\n                    \n                    if (targetSection) {\n                        const headerHeight = this.elements.header.offsetHeight;\n                        const rect = targetSection.getBoundingClientRect();\n                        const absoluteTop = rect.top + window.pageYOffset;\n                        const scrollPosition = absoluteTop - headerHeight - 20;\n                        \n                        console.log('Scrolling to category:', category, 'Position:', scrollPosition);\n                        \n                        window.scrollTo({\n                            top: scrollPosition,\n                            behavior: 'smooth'\n                        });\n                        \n                        \/\/ Actualizar tab activo\n                        this.elements.tabs.querySelectorAll('.faq-tab').forEach(tab => {\n                            tab.classList.remove('active');\n                            tab.setAttribute('aria-selected', 'false');\n                            if (tab.dataset.category === category) {\n                                tab.classList.add('active');\n                                tab.setAttribute('aria-selected', 'true');\n                                this.scrollTabIntoView(tab);\n                            }\n                        });\n                        \n                        this.currentCategory = category;\n                        \n                        setTimeout(() => {\n                            this.isScrolling = false;\n                        }, 1000);\n                    } else {\n                        console.error('No se encontr\u00f3 la secci\u00f3n:', category);\n                    }\n                }\n\n                calculateOffsets() {\n                    const sections = this.container.querySelectorAll('.faq-category-section');\n                    this.categoryOffsets = [];\n                    \n                    sections.forEach(section => {\n                        const category = section.dataset.category;\n                        const rect = section.getBoundingClientRect();\n                        const offset = rect.top + window.pageYOffset - 100;\n                        \n                        this.categoryOffsets.push({\n                            category: category,\n                            offset: offset\n                        });\n                    });\n                }\n\n                setupStickyHeader() {\n                    const rect = this.elements.header.getBoundingClientRect();\n                    this.stickyOffset = rect.top + window.pageYOffset;\n                    \n                    const handleScroll = () => {\n                        const scrollPosition = window.pageYOffset;\n                        const adjustedOffset = this.stickyOffset - 50;\n                        \n                        if (scrollPosition >= adjustedOffset) {\n                            if (!this.elements.header.classList.contains('fixed')) {\n                                this.elements.header.classList.add('fixed');\n                                this.elements.placeholder.classList.add('active');\n                                this.elements.placeholder.style.height = this.elements.header.offsetHeight + 'px';\n                            }\n                        } else {\n                            if (this.elements.header.classList.contains('fixed')) {\n                                this.elements.header.classList.remove('fixed');\n                                this.elements.placeholder.classList.remove('active');\n                            }\n                        }\n                    };\n                    \n                    this.scrollHandler = handleScroll;\n                    window.addEventListener('scroll', this.scrollHandler);\n                    handleScroll();\n                }\n\n                setupScrollSpy() {\n                    let ticking = false;\n                    \n                    const updateActiveCategory = () => {\n                        if (this.isScrolling) {\n                            ticking = false;\n                            return;\n                        }\n                        \n                        const scrollPosition = window.pageYOffset;\n                        let activeCategory = this.categoryOffsets[0]?.category;\n                        \n                        for (let i = 0; i < this.categoryOffsets.length; i++) {\n                            const currentOffset = this.categoryOffsets[i].offset;\n                            const nextOffset = this.categoryOffsets[i + 1]?.offset || Infinity;\n                            \n                            if (scrollPosition >= currentOffset - 100 && scrollPosition < nextOffset - 100) {\n                                activeCategory = this.categoryOffsets[i].category;\n                                break;\n                            }\n                        }\n                        \n                        if (activeCategory && activeCategory !== this.currentCategory) {\n                            this.currentCategory = activeCategory;\n                            \n                            this.elements.tabs.querySelectorAll('.faq-tab').forEach(tab => {\n                                tab.classList.remove('active');\n                                tab.setAttribute('aria-selected', 'false');\n                                if (tab.dataset.category === activeCategory) {\n                                    tab.classList.add('active');\n                                    tab.setAttribute('aria-selected', 'true');\n                                    this.scrollTabIntoView(tab);\n                                }\n                            });\n                        }\n                        \n                        ticking = false;\n                    };\n                    \n                    this.spyHandler = () => {\n                        if (!ticking) {\n                            window.requestAnimationFrame(updateActiveCategory);\n                            ticking = true;\n                        }\n                    };\n                    \n                    window.addEventListener('scroll', this.spyHandler);\n                    \n                    this.resizeHandler = () => {\n                        this.calculateOffsets();\n                        const rect = this.elements.header.getBoundingClientRect();\n                        this.stickyOffset = rect.top + window.pageYOffset;\n                    };\n                    \n                    window.addEventListener('resize', this.resizeHandler);\n                }\n\n                scrollTabIntoView(tab) {\n                    const tabLeft = tab.offsetLeft;\n                    const tabWidth = tab.offsetWidth;\n                    const containerWidth = this.elements.tabsContainer.offsetWidth;\n                    const scrollLeft = this.elements.tabsContainer.scrollLeft;\n                    \n                    if (tabLeft < scrollLeft) {\n                        this.elements.tabsContainer.scrollTo({\n                            left: tabLeft - 20,\n                            behavior: 'smooth'\n                        });\n                    }\n                    else if (tabLeft + tabWidth > scrollLeft + containerWidth) {\n                        this.elements.tabsContainer.scrollTo({\n                            left: tabLeft + tabWidth - containerWidth + 20,\n                            behavior: 'smooth'\n                        });\n                    }\n                }\n\n                setupScrollHandlers() {\n                    const updateScrollIndicators = () => {\n                        const scrollLeft_pos = this.elements.tabsContainer.scrollLeft;\n                        const scrollWidth = this.elements.tabsContainer.scrollWidth;\n                        const clientWidth = this.elements.tabsContainer.clientWidth;\n                        const scrollRight_pos = scrollWidth - clientWidth - scrollLeft_pos;\n\n                        if (scrollLeft_pos > 10) {\n                            this.elements.scrollLeft.classList.add('visible');\n                            this.elements.fadeLeft.classList.add('visible');\n                        } else {\n                            this.elements.scrollLeft.classList.remove('visible');\n                            this.elements.fadeLeft.classList.remove('visible');\n                        }\n\n                        if (scrollRight_pos > 10) {\n                            this.elements.scrollRight.classList.add('visible');\n                            this.elements.fadeRight.classList.add('visible');\n                        } else {\n                            this.elements.scrollRight.classList.remove('visible');\n                            this.elements.fadeRight.classList.remove('visible');\n                        }\n                    };\n\n                    this.elements.tabsContainer.addEventListener('scroll', updateScrollIndicators);\n                    \n                    this.elements.scrollLeft.addEventListener('click', () => {\n                        this.elements.tabsContainer.scrollBy({ left: -200, behavior: 'smooth' });\n                    });\n\n                    this.elements.scrollRight.addEventListener('click', () => {\n                        this.elements.tabsContainer.scrollBy({ left: 200, behavior: 'smooth' });\n                    });\n\n                    setTimeout(updateScrollIndicators, 100);\n                    \n                    this.scrollResizeHandler = updateScrollIndicators;\n                    window.addEventListener('resize', this.scrollResizeHandler);\n                }\n\n                showInitialAnimation() {\n                    if (this.elements.tabsContainer.scrollWidth > this.elements.tabsContainer.clientWidth) {\n                        \n                        \/\/ 1. Shake animation\n                        setTimeout(() => {\n                            this.elements.tabs.classList.add('shake-animation');\n                            \n                            setTimeout(() => {\n                                this.elements.tabs.classList.remove('shake-animation');\n                            }, 1500);\n                        }, 300);\n                        \n                        \/\/ 2. Scroll animation\n                        setTimeout(() => {\n                            const maxScroll = this.elements.tabsContainer.scrollWidth - this.elements.tabsContainer.clientWidth;\n                            const scrollAmount = Math.min(maxScroll * 0.3, 200);\n                            \n                            console.log('Animating scroll:', scrollAmount);\n                            \n                            this.elements.tabsContainer.scrollTo({\n                                left: scrollAmount,\n                                behavior: 'smooth'\n                            });\n                            \n                            setTimeout(() => {\n                                this.elements.tabsContainer.scrollTo({\n                                    left: scrollAmount \/ 2,\n                                    behavior: 'smooth'\n                                });\n                                \n                                setTimeout(() => {\n                                    this.elements.tabsContainer.scrollTo({\n                                        left: 0,\n                                        behavior: 'smooth'\n                                    });\n                                }, 600);\n                            }, 800);\n                        }, 2000);\n                        \n                        \/\/ 3. Bounce animation en flechas\n                        setTimeout(() => {\n                            this.elements.scrollRight.classList.add('bounce-animation');\n                            \n                            setTimeout(() => {\n                                this.elements.scrollRight.classList.remove('bounce-animation');\n                            }, 4000);\n                        }, 500);\n                    }\n                }\n\n                escapeHtml(text) {\n                    const map = {\n                        '&': '&amp;',\n                        '<': '&lt;',\n                        '>': '&gt;',\n                        '\"': '&quot;',\n                        \"'\": '&#039;'\n                    };\n                    return text.replace(\/[&<>\"']\/g, m => map[m]);\n                }\n\n                generateSchema() {\n                    const faqItems = [];\n                    const baseUrl = window.location.href.split('#')[0];\n                    \n                    Object.keys(this.data).forEach(category => {\n                        this.data[category].forEach(item => {\n                            const cleanAnswer = this.stripHtml(item.respuesta);\n                            const cleanQuestion = this.stripHtml(item.pregunta);\n                            const questionId = this.createQuestionId(item.pregunta);\n                            \n                            faqItems.push({\n                                \"@type\": \"Question\",\n                                \"name\": cleanQuestion,\n                                \"acceptedAnswer\": {\n                                    \"@type\": \"Answer\",\n                                    \"text\": cleanAnswer\n                                },\n                                \"url\": baseUrl + \"#\" + questionId\n                            });\n                        });\n                    });\n\n                    const schema = {\n                        \"@context\": \"https:\/\/schema.org\",\n                        \"@type\": \"FAQPage\",\n                        \"mainEntity\": faqItems\n                    };\n\n                    const existingSchema = document.getElementById(this.schemaId);\n                    if (existingSchema) {\n                        existingSchema.remove();\n                    }\n\n                    const script = document.createElement('script');\n                    script.type = 'application\/ld+json';\n                    script.id = this.schemaId;\n                    script.textContent = JSON.stringify(schema, null, 2);\n                    document.head.appendChild(script);\n\n                    console.log('Schema JSON-LD generado con ' + faqItems.length + ' preguntas');\n                    console.log('Microdata HTML tambi\u00e9n incluido:', this.generateMicrodata);\n                }\n\n                stripHtml(html) {\n                    const tmp = document.createElement('div');\n                    tmp.innerHTML = html;\n                    tmp.innerHTML = tmp.innerHTML.replace(\/<br\\s*\\\/?>\/gi, '\\n');\n                    let text = tmp.textContent || tmp.innerText || '';\n                    text = text.replace(\/\\n\\s*\\n\/g, '\\n\\n');\n                    text = text.trim();\n                    return text;\n                }\n\n                showError(message) {\n                    if (!message) message = 'Error cargando las preguntas';\n                    \n                    if (this.elements.tabs) {\n                        this.elements.tabs.innerHTML = '<div class=\"loading\">' +\n                            '<i class=\"fas fa-exclamation-triangle\"><\/i>' +\n                            '<p>' + message + '<\/p>' +\n                            '<\/div>';\n                    }\n                }\n\n                destroy() {\n                    if (this.scrollHandler) {\n                        window.removeEventListener('scroll', this.scrollHandler);\n                    }\n                    if (this.spyHandler) {\n                        window.removeEventListener('scroll', this.spyHandler);\n                    }\n                    if (this.resizeHandler) {\n                        window.removeEventListener('resize', this.resizeHandler);\n                    }\n                    if (this.scrollResizeHandler) {\n                        window.removeEventListener('resize', this.scrollResizeHandler);\n                    }\n                    \n                    const schema = document.getElementById(this.schemaId);\n                    if (schema) {\n                        schema.remove();\n                    }\n                }\n            }\n\n            \/\/ Inicializar con prevenci\u00f3n de doble inicializaci\u00f3n\n            const widgetId = 'faq-widget-1';\n            \n            \/\/ Prevenir doble inicializaci\u00f3n\n            if (window.faqWidgetInstances && window.faqWidgetInstances[widgetId]) {\n                console.log('Widget FAQ ya inicializado para:', widgetId);\n                return;\n            }\n            \n            \/\/ Inicializar registro de instancias\n            if (!window.faqWidgetInstances) {\n                window.faqWidgetInstances = {};\n            }\n            \n            function initWidget() {\n                const container = document.querySelector('.faq-widget-1');\n                if (container && !window.faqWidgetInstances[widgetId]) {\n                    console.log('Inicializando widget FAQ:', widgetId);\n                    window.faqWidgetInstances[widgetId] = new FAQWidget(container);\n                }\n            }\n            \n            if (document.readyState === 'loading') {\n                document.addEventListener('DOMContentLoaded', initWidget);\n            } else {\n                initWidget();\n            }\n        })();\n        <\/script>\n        \n        <p><\/p>","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-7810","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"acf":[],"_links":{"self":[{"href":"https:\/\/toldoscerca.com\/ca\/wp-json\/wp\/v2\/posts\/7810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/toldoscerca.com\/ca\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/toldoscerca.com\/ca\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/toldoscerca.com\/ca\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/toldoscerca.com\/ca\/wp-json\/wp\/v2\/comments?post=7810"}],"version-history":[{"count":3,"href":"https:\/\/toldoscerca.com\/ca\/wp-json\/wp\/v2\/posts\/7810\/revisions"}],"predecessor-version":[{"id":7823,"href":"https:\/\/toldoscerca.com\/ca\/wp-json\/wp\/v2\/posts\/7810\/revisions\/7823"}],"wp:attachment":[{"href":"https:\/\/toldoscerca.com\/ca\/wp-json\/wp\/v2\/media?parent=7810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/toldoscerca.com\/ca\/wp-json\/wp\/v2\/categories?post=7810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/toldoscerca.com\/ca\/wp-json\/wp\/v2\/tags?post=7810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}