{"id":29836,"date":"2026-07-27T11:22:23","date_gmt":"2026-07-27T14:22:23","guid":{"rendered":"https:\/\/www.pleca.org.ar\/pleca2\/?page_id=29836"},"modified":"2026-08-04T19:07:34","modified_gmt":"2026-08-04T22:07:34","slug":"buscador-pleca","status":"publish","type":"page","link":"https:\/\/www.pleca.org.ar\/pleca2\/buscador-pleca\/","title":{"rendered":"Buscador de profesionales para correcciones"},"content":{"rendered":"\t<div class=\"anh-slider\" data-autoplay=\"5000\">\n\t\t<div class=\"anh-slider-track\">\n\t\t\t\t\t\t\t<div class=\"anh-slide active\" data-index=\"0\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"anh-slide-bg\" style=\"background-image: url('https:\/\/www.pleca.org.ar\/pleca2\/wp-content\/uploads\/2026\/07\/pleca.bg-2.png');\"><\/div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"anh-slide-overlay\"><\/div>\n\n\t\t\t\t\t<div class=\"anh-slide-banner\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h1 class=\"anh-slide-banner-title\">Servicios de correcci\u00f3n<\/h1>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"anh-slide-banner-sub\">Hac\u00e9 que tus ideas brillen con claridad, precisi\u00f3n y elegancia.<\/h2>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"anh-slide-banner-line\" aria-hidden=\"true\"><\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t<\/div>\n\t\n\n\n<div class=\"pleca-search-wrap\">\n\n    <form id=\"pleca-search-form\" class=\"pleca-search-form\" method=\"post\">\n        <input type=\"hidden\" id=\"nonce\" name=\"nonce\" value=\"14973a68f3\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/pleca2\/wp-json\/wp\/v2\/pages\/29836\" \/>\n        \n        <div class=\"pleca-search-head\">\n            \n            <div class=\"pleca-search-hint\">Indic\u00e1 qu\u00e9 ten\u00e9s que corregir. Hacelo de la manera m\u00e1s breve pero informativa que puedas. Ejemplos: <em>\"p\u00e1gina web de turismo\"<\/em>,<em>\"colecci\u00f3n de cuentos para ni\u00f1os\"<\/em>, <em>\"traducci\u00f3n de novela hist\u00f3rica\"<\/em>,<em>\"tesis sobre uso de tecnolog\u00edas en educaci\u00f3n\"<\/em>.<\/div>\n        <\/div>\n\n        <div class=\"pleca-search-main\">\n            <div class=\"pleca-search-field\">\n                <svg class=\"pleca-search-icon\" viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\"\n                     stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                    <circle cx=\"11\" cy=\"11\" r=\"7\"><\/circle>\n                    <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"><\/line>\n                <\/svg>\n                <input type=\"text\" id=\"pleca-search-query\" name=\"query\" class=\"pleca-search-input\"\n                       placeholder=\"\" autocomplete=\"off\" \/>\n            <\/div>\n            <button type=\"button\" id=\"pleca-search-btn\" class=\"pleca-search-button\">\n                <span class=\"pleca-search-btn-text\">Buscar<\/span>\n                <span class=\"pleca-search-btn-loading\" style=\"display:none;\">Buscando...<\/span>\n            <\/button>\n        <\/div>\n\n        <div class=\"pleca-search-modalidad\">\n            <span class=\"pleca-search-modalidad-label\">Si consider\u00e1s importante que el profesional tenga experiencia en alguna de las siguientes modalidades laborales, tild\u00e1 la opci\u00f3n adecuada:\n<\/span>\n            <div class=\"pleca-modalidad-options\">\n               \n                <label class=\"pleca-modalidad-option\">\n                    <input type=\"radio\" name=\"modalidad\" value=\"independiente\" \/>\n                    <span class=\"pleca-modalidad-chip\">Independiente<\/span>\n                <\/label>\n                <label class=\"pleca-modalidad-option\">\n                    <input type=\"radio\" name=\"modalidad\" value=\"editorial\" \/>\n                    <span class=\"pleca-modalidad-chip\">En editoriales comerciales o institucionales<\/span>\n                <\/label>\n                <label class=\"pleca-modalidad-option\">\n                    <input type=\"radio\" name=\"modalidad\" value=\"organismo\" \/>\n                    <span class=\"pleca-modalidad-chip\">En organismos p\u00fablicos o privados<\/span>\n                <\/label>\n                 <label class=\"pleca-modalidad-option\">\n                    <input type=\"radio\" name=\"modalidad\" value=\"\" checked \/>\n                    <span class=\"pleca-modalidad-chip\">Sin preferencia<\/span>\n                <\/label>\n            <\/div>\n        <\/div>\n\n        \n    <\/form>\n\n    <div id=\"pleca-search-notice\"><\/div>\n\n     <div id=\"pleca-debug-panel\" class=\"pleca-debug-panel\" style=\"display:none;\">\n        <h3>Debug \u2014 B\u00fasqueda sem\u00e1ntica<\/h3>\n        <div id=\"pleca-debug-query\" class=\"pleca-debug-section\"><\/div>\n        <div id=\"pleca-debug-table-wrap\">\n            <table class=\"wp-list-table widefat fixed striped pleca-debug-table\" id=\"pleca-debug-table\">\n                <thead>\n                    <tr>\n                        <th style=\"width:50px;\">ID<\/th>\n                        <th style=\"width:150px;\">Nombre<\/th>\n                        <th style=\"width:70px;\">Score<\/th>\n                        <th style=\"width:60px;\">Pasa<\/th>\n                        <th>Scores por tipo<\/th>\n                        <th style=\"width:250px;\">Keyword Match<\/th>\n                    <\/tr>\n                <\/thead>\n                <tbody id=\"pleca-debug-tbody\"><\/tbody>\n            <\/table>\n        <\/div>\n    <\/div>\n\n    <div id=\"pleca-search-results\" class=\"pleca-search-results\"><\/div>\n\n    <div id=\"pleca-contact-overlay\" class=\"pleca-modal-overlay\" style=\"display:none;\">\n        <div class=\"pleca-modal pleca-contact-modal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Contactar profesional\">\n            <div class=\"pleca-modal-header\">\n                <h2 id=\"pleca-contact-title\">Contactar profesional<\/h2>\n                <button type=\"button\" class=\"pleca-modal-close\" id=\"pleca-contact-close\" aria-label=\"Cerrar\">&times;<\/button>\n            <\/div>\n            <div class=\"pleca-modal-body\" id=\"pleca-contact-body\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n(function($) {\n    'use strict';\n\n    var turnstileEnabled = false;\n    var turnstileResolved = false;\n\n    function setTurnstileStatus(msg, cls) {\n        var $s = $('#pleca-turnstile-status');\n        if ($s.length) {\n            $s.text(msg || '').attr('class', 'pleca-turnstile-status ' + (cls || ''));\n        }\n    }\n\n    \/\/ Definir callbacks globales que Cloudflare Turnstile invoca.\n    window.onTurnstileSuccess = function(token) {\n        turnstileResolved = true;\n        $('#pleca-turnstile-token').val(token);\n        setTurnstileStatus('', '');\n        $('#pleca-turnstile-status').removeClass('pleca-turnstile-error');\n    };\n    window.onTurnstileExpired = function() {\n        turnstileResolved = false;\n        $('#pleca-turnstile-token').val('');\n        setTurnstileStatus('La verificaci\u00f3n venci\u00f3. Volv\u00e9 a resolver el desaf\u00edo para buscar.', 'pleca-turnstile-error');\n    };\n    window.onTurnstileError = function() {\n        turnstileResolved = false;\n        $('#pleca-turnstile-token').val('');\n        setTurnstileStatus('Hubo un problema con la verificaci\u00f3n. Recarg\u00e1 la p\u00e1gina e intent\u00e1 de nuevo.', 'pleca-turnstile-error');\n    };\n\n    $('#pleca-search-btn').on('click', function() {\n        doSearch();\n    });\n\n    $('#pleca-search-query').on('keypress', function(e) {\n        if (e.which === 13) {\n            e.preventDefault();\n            doSearch();\n        }\n    });\n\n    function doSearch() {\n        var query = $('#pleca-search-query').val().trim();\n        if (!query) {\n            showNotice('Ingres\u00e1 un texto para buscar.', 'error');\n            return;\n        }\n\n        if (turnstileEnabled && !turnstileResolved) {\n            showNotice('Resolv\u00e9 el desaf\u00edo de verificaci\u00f3n antes de buscar.', 'error');\n            setTurnstileStatus('Por favor, complet\u00e1 la verificaci\u00f3n de seguridad.', 'pleca-turnstile-error');\n            return;\n        }\n\n        var $btn = $('#pleca-search-btn');\n        $btn.find('.pleca-search-btn-text').hide();\n        $btn.find('.pleca-search-btn-loading').show();\n        $btn.prop('disabled', true);\n\n        $('#pleca-search-results').empty();\n        $('#pleca-search-notice').empty();\n        $('#pleca-debug-panel').hide();\n\n        $.post('https:\/\/www.pleca.org.ar\/pleca2\/wp-admin\/admin-ajax.php', {\n            action: 'pleca_semantic_search',\n            nonce: $('#pleca-search-form input[name=nonce]').val(),\n            query: query,\n            modalidad: $('#pleca-search-form input[name=modalidad]:checked').val() || '',\n            turnstile_token: $('#pleca-turnstile-token').val() || ''\n        }, function(response) {\n            $btn.find('.pleca-search-btn-text').show();\n            $btn.find('.pleca-search-btn-loading').hide();\n            $btn.prop('disabled', false);\n\n            if (response.success) {\n                if (response.data.debug) {\n                    renderDebug(query, response.data.debug, response.data.total, response.data.stats, response.data.query_roots, response.data.query_phrases);\n                }\n                renderResults(response.data);\n            } else {\n                showNotice(response.data, 'error');\n                turnstileResolved = false;\n            }\n        }).fail(function() {\n            $btn.find('.pleca-search-btn-text').show();\n            $btn.find('.pleca-search-btn-loading').hide();\n            $btn.prop('disabled', false);\n            showNotice('Error de conexi\\u00f3n.', 'error');\n        });\n    }\n\n    function showNotice(msg, type) {\n        var cls = type === 'success' ? 'pleca-notice-success' : 'pleca-notice-error';\n        var notice = $('<div class=\"pleca-notice ' + cls + '\">' + msg + '<\/div>');\n        $('#pleca-search-notice').html(notice);\n    }\n\n    \/\/ ------------------------------------------------------------------\n    \/\/ Debug panel\n    \/\/ ------------------------------------------------------------------\n\n    function renderDebug(query, debug, total, stats, query_roots, query_phrases) {\n        var statsHtml = stats\n            ? ' &mdash; <strong>Sem\u00e1ntica:<\/strong> ' + stats.semantic + ' &mdash; <strong>Keyword:<\/strong> ' + stats.keyword\n            : '';\n        var rootsHtml = query_roots && query_roots.length\n            ? ' &mdash; <strong>Ra\u00edces:<\/strong> ' + query_roots.map(function(r){ return '<code>' + escapeHtml(r) + '<\/code>'; }).join(', ')\n            : '';\n        var phrasesHtml = query_phrases && query_phrases.length\n            ? ' &mdash; <strong>Frases:<\/strong> ' + query_phrases.map(function(p){ return '<code>' + escapeHtml(p) + '<\/code>'; }).join(', ')\n            : '';\n        $('#pleca-debug-query').html(\n            '<p><strong>B\u00fasqueda:<\/strong> \"' + escapeHtml(query) + '\" &mdash; ' +\n            '<strong>Total embeddings en BD:<\/strong> ' + total +\n            statsHtml + rootsHtml + phrasesHtml + ' &mdash; ' +\n            '<strong>Umbral:<\/strong> \u2265 55% (multi-embedding ponderado)<\/p>'\n        );\n\n        var $tbody = $('#pleca-debug-tbody');\n        $tbody.empty();\n\n        for (var i = 0; i < debug.length; i++) {\n            var d = debug[i];\n            var passClass = d.cross_discarded ? 'pleca-debug-fail' : (d.pass ? 'pleca-debug-pass' : 'pleca-debug-fail');\n            var passLabel = d.cross_discarded ? 'DESCARTADO' : (d.pass ? 'S\u00cd' : 'NO');\n            if (d.keyword) {\n                passLabel += ' (keyword)';\n            }\n\n            \/\/ Scores por tipo.\n            var typeLabels = {domain: 'Dom', knowledge: 'Conoc', details: 'Fondo'};\n            var typeHtml = '';\n            if (d.types) {\n                for (var type in d.types) {\n                    var t = d.types[type];\n                    var tClass = t.state === 'no_data' ? 'pleca-type-nodata' : (t.score >= 0.55 ? 'pleca-type-pass' : 'pleca-type-fail');\n                    typeHtml += '<span class=\"pleca-debug-type ' + tClass + '\">' + typeLabels[type] + ': ' + (t.state === 'no_data' ? '\u2014' : t.pct + '%') + '<\/span>';\n                }\n            } else {\n                typeHtml = '<span class=\"pleca-debug-type\">' + (d.pct > 0 ? d.pct + '%' : '\u2014') + '<\/span>';\n            }\n\n            \/\/ Keyword match details.\n            var matchHtml = '';\n            if (d.match_details && d.match_details.field_matches) {\n                var fm = d.match_details.field_matches;\n                var fieldLabels = {\n                    Informacion: 'Tipos de texto',\n                    Tipo_Textual: 'Especializaci\u00f3n',\n                    Tipo_Corrector: 'Modalidad',\n                    Obras_Corregidas: 'Obras',\n                    Guias_Estilo: 'Gu\u00edas',\n                    Capacitacion: 'Formaci\u00f3n'\n                };\n                for (var field in fm) {\n                    var roots = fm[field].map(function(r){ return '<code>' + escapeHtml(r) + '<\/code>'; }).join(', ');\n                    matchHtml += '<div class=\"pleca-match-row\"><span class=\"pleca-match-field\">' + (fieldLabels[field] || field) + ':<\/span> ' + roots + '<\/div>';\n                }\n            } else if (d.match_details && d.match_details.matched_roots && d.match_details.matched_roots.length) {\n                matchHtml = '<code>' + d.match_details.matched_roots.map(function(r){ return escapeHtml(r); }).join('<\/code>, <code>') + '<\/code>';\n            } else if (!d.pass) {\n                matchHtml = '<span class=\"pleca-type-fail\">sin match<\/span>';\n            }\n\n            $tbody.append(\n                '<tr class=\"' + passClass + '\">' +\n                    '<td><strong>' + d.id + '<\/strong><\/td>' +\n                    '<td>' + escapeHtml(d.nombre) + '<\/td>' +\n                    '<td><strong>' + (d.pct > 0 ? d.pct + '%' : '\u2014') + '<\/strong><\/td>' +\n                    '<td><span class=\"pleca-debug-badge ' + passClass + '\">' + passLabel + '<\/span><\/td>' +\n                    '<td class=\"pleca-debug-types\">' + typeHtml + '<\/td>' +\n                    '<td class=\"pleca-match-details\">' + matchHtml + '<\/td>' +\n                '<\/tr>'\n            );\n        }\n\n        $('#pleca-debug-panel').show();\n    }\n\n    \/\/ ------------------------------------------------------------------\n    \/\/ Results\n    \/\/ ------------------------------------------------------------------\n\n    function renderResults(data) {\n        currentResults = data.results || [];\n        var $container = $('#pleca-search-results');\n\n        if (!data.results || data.results.length === 0) {\n            $container.html('<div class=\"pleca-search-empty\">No se encontraron resultados para \"<strong>' + escapeHtml(data.query) + '<\/strong>\".<\/div>');\n            return;\n        }\n\n        var html = '<div class=\"pleca-results-header\">';\n        html += '<h3>Resultados para \"<em>' + escapeHtml(data.query) + '<\/em>\"<\/h3>';\n        html += '<span class=\"pleca-results-count\">' + data.results.length + ' profesional(es) encontrado(s)<\/span>';\n        html += '<\/div>';\n        if (data.partial) {\n            html += '<div class=\"pleca-search-partial\">No encontramos perfiles con alta afinidad para esta b\u00fasqueda. Mostramos coincidencias parciales (matchean al menos una palabra clave), ordenadas de la m\u00e1s a la menos relevante.<\/div>';\n        }\n        html += '<div class=\"pleca-results-grid\">';\n\n        for (var i = 0; i < data.results.length; i++) {\n            html += renderCard(data.results[i], i + 1);\n        }\n\n        html += '<\/div>';\n        $container.html(html);\n    }\n\n    function renderCard(p, idx) {\n        var html = '<div class=\"pleca-result-card\">';\n        html += '<div class=\"pleca-card-header\">';\n        html += '<span class=\"pleca-card-rank\">#' + idx + '<\/span>';\n        html += '<div class=\"pleca-card-title\">';\n        html += '<h4>' + escapeHtml(p.nombre) + '<\/h4>';\n        if (p.lugar) {\n            html += '<span class=\"pleca-card-lugar\">' + escapeHtml(p.lugar) + '<\/span>';\n        }\n        html += '<\/div>';\n        html += '<button type=\"button\" class=\"pleca-contact-btn\" data-id=\"' + p.id + '\">Contactar profesional<\/button>';\n        html += '<\/div>';\n\n        var tags = [];\n        if (p.servicios && p.servicios.length) {\n            tags = tags.concat(p.servicios.map(function(t) { return { text: t, cls: 'pleca-tag-servicio' }; }));\n        }\n        if (p.dominios && p.dominios.length) {\n            tags = tags.concat(p.dominios.map(function(t) { return { text: t, cls: 'pleca-tag-dominio' }; }));\n        }\n        if (p.especializaciones && p.especializaciones.length) {\n            tags = tags.concat(p.especializaciones.map(function(t) { return { text: t, cls: 'pleca-tag-especializacion' }; }));\n        }\n        if (p.tematicas && p.tematicas.length) {\n            tags = tags.concat(p.tematicas.map(function(t) { return { text: t, cls: 'pleca-tag-tematica' }; }));\n        }\n        if (p.tipos_texto && p.tipos_texto.length) {\n            tags = tags.concat(p.tipos_texto.map(function(t) { return { text: t, cls: 'pleca-tag-tipo-texto' }; }));\n        }\n\n        if (tags.length) {\n            html += '<div class=\"pleca-card-tags\">';\n            for (var j = 0; j < tags.length; j++) {\n                html += '<span class=\"pleca-tag ' + tags[j].cls + '\">' + escapeHtml(tags[j].text) + '<\/span>';\n            }\n            html += '<\/div>';\n        }\n\n        html += '<\/div>';\n        return html;\n    }\n\n    \/\/ ------------------------------------------------------------------\n    \/\/ Modal de contacto\n    \/\/ ------------------------------------------------------------------\n\n    var currentResults = [];\n\n    $('#pleca-search-results').on('click', '.pleca-contact-btn', function() {\n        var id = parseInt($(this).data('id'), 10);\n        for (var i = 0; i < currentResults.length; i++) {\n            if (currentResults[i].id === id) {\n                openContact(currentResults[i]);\n                break;\n            }\n        }\n    });\n\n    $('#pleca-contact-close').on('click', closeContact);\n\n    $('#pleca-contact-overlay').on('click', function(e) {\n        if (e.target === this) {\n            closeContact();\n        }\n    });\n\n    $('#pleca-contact-body').on('click', '.pleca-contact-bio-toggle', function() {\n        var $section = $(this).closest('.pleca-contact-section');\n        var $holder = $section.find('.pleca-contact-bio-holder');\n        var $bio = $section.find('.pleca-contact-bio');\n        var expanded = $bio.hasClass('expanded');\n        if (!expanded) {\n            $bio.addClass('expanded');\n            $holder.css('max-height', ($holder.data('full-height') || $holder[0].scrollHeight) + 'px');\n            $(this).attr('aria-expanded', 'true');\n        } else {\n            $bio.removeClass('expanded');\n            $holder.css('max-height', ($holder.data('clamped-height') || $holder[0].scrollHeight) + 'px');\n            $(this).attr('aria-expanded', 'false');\n        }\n    });\n\n    $(document).on('keydown', function(e) {\n        if (e.which === 27 && $('#pleca-contact-overlay').is(':visible')) {\n            closeContact();\n        }\n    });\n\n    function openContact(p) {\n        var SVG_WA = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 448 512\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"\/><\/svg>';\n        var SVG_TEL = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 512 512\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z\"\/><\/svg>';\n        var SVG_DOC = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><path d=\"M9 15h6M9 11h2\"\/><\/svg>';\n\n        var html = '<div class=\"pleca-contact-header\">';\n        html += '<div class=\"pleca-contact-name\">' + escapeHtml(p.nombre) + '<\/div>';\n        if (p.lugar) {\n            html += '<div class=\"pleca-contact-lugar\">' + escapeHtml(p.lugar) + '<\/div>';\n        }\n        html += '<\/div>';\n\n        if (p.informacion) {\n            html += '<div class=\"pleca-contact-section\">';\n            html += '<span class=\"pleca-contact-label\">Sobre su trabajo<\/span>';\n            html += '<div class=\"pleca-contact-bio-holder\"><div class=\"pleca-contact-bio\"><div class=\"pleca-contact-bio-inner\">' + escapeHtml(p.informacion).replace(\/\\n\/g, '<br>') + '<\/div><\/div><\/div>';\n            html += '<button type=\"button\" class=\"pleca-contact-bio-toggle\" aria-expanded=\"false\" aria-label=\"Ver m\u00e1s sobre su trabajo\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/button>';\n            html += '<\/div>';\n        }\n\n        html += '<div class=\"pleca-contact-fields\">';\n        if (p.lugar) {\n            html += '<div class=\"pleca-contact-field\"><span class=\"pleca-contact-label\">Ubicaci\u00f3n<\/span><span class=\"pleca-contact-value\">' + escapeHtml(p.lugar) + '<\/span><\/div>';\n        }\n        if (p.telefono) {\n            html += '<div class=\"pleca-contact-field\"><span class=\"pleca-contact-label\">Tel\u00e9fono<\/span><span class=\"pleca-contact-value\"><a href=\"tel:' + p.telefono.replace(\/[^0-9+]\/g, '') + '\">' + escapeHtml(p.telefono) + '<\/a><\/span><\/div>';\n        }\n        if (p.correo) {\n            html += '<div class=\"pleca-contact-field\"><span class=\"pleca-contact-label\">Correo<\/span><span class=\"pleca-contact-value\"><a href=\"mailto:' + encodeURIComponent(p.correo) + '\">' + escapeHtml(p.correo) + '<\/a><\/span><\/div>';\n        }\n        html += '<\/div>';\n\n        var waNum = waNumber(p.telefono);\n        var primary = '';\n        if (waNum) {\n            primary = '<a class=\"pleca-btn pleca-btn-primary\" href=\"https:\/\/wa.me\/' + waNum + '\" target=\"_blank\" rel=\"noopener\">' + SVG_WA + 'Contactar por WhatsApp<\/a>';\n        } else if (p.telefono) {\n            primary = '<a class=\"pleca-btn pleca-btn-primary\" href=\"tel:' + p.telefono.replace(\/[^0-9+]\/g, '') + '\">' + SVG_TEL + 'Llamar por tel\u00e9fono<\/a>';\n        }\n        var secondary = '';\n        if (p.cv_url) {\n            secondary = '<a class=\"pleca-btn pleca-btn-secondary\" href=\"' + escapeHtml(p.cv_url) + '\" target=\"_blank\" rel=\"noopener\" download>' + SVG_DOC + 'Ver Curr\u00edculum<\/a>';\n        }\n        if (primary || secondary) {\n            html += '<div class=\"pleca-contact-actions\">' + primary + secondary + '<\/div>';\n        }\n\n        $('#pleca-contact-body').html(html);\n        $('#pleca-contact-overlay').css('display', 'flex');\n\n        $('#pleca-contact-body .pleca-contact-bio').each(function() {\n            var $bio = $(this);\n            var $holder = $bio.closest('.pleca-contact-bio-holder');\n            var $section = $bio.closest('.pleca-contact-section');\n            var $inner = $bio.find('.pleca-contact-bio-inner');\n            if ($inner.length && $inner[0].scrollHeight > $bio[0].clientHeight + 1) {\n                $bio.addClass('is-collapsible');\n                $holder.addClass('is-collapsible');\n                $section.addClass('is-collapsible');\n                $holder.data('clamped-height', $bio[0].clientHeight);\n                $holder.data('full-height', $inner[0].scrollHeight);\n                $holder.css('max-height', $bio[0].clientHeight + 'px');\n            }\n        });\n    }\n\n    function closeContact() {\n        $('#pleca-contact-overlay').hide();\n    }\n\n    function escapeHtml(str) {\n        if (!str) return '';\n        return str.replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;').replace(\/\"\/g, '&quot;');\n    }\n\n    function waNumber(tel) {\n        if (!tel) return '';\n        var d = tel.replace(\/\\D\/g, '');\n        if (d.length < 8) return '';\n        if (d.substr(0, 2) === '15' && d.length > 2) d = '11' + d.substr(2);\n        if (d.substr(0, 2) === '54' && d.length > 8) d = d.substr(2);\n        if (d.charAt(0) === '0') d = d.substr(1);\n        if (d.charAt(0) !== '9') d = '9' + d;\n        if (d.charAt(1) === '0') d = d.charAt(0) + d.substr(2);\n        var wa = '54' + d;\n        if (wa.length < 12 || wa.length > 15) return '';\n        return wa;\n    }\n\n})(jQuery);\n<\/script>\n\n\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":{"footnotes":""},"class_list":["post-29836","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.pleca.org.ar\/pleca2\/wp-json\/wp\/v2\/pages\/29836","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pleca.org.ar\/pleca2\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pleca.org.ar\/pleca2\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pleca.org.ar\/pleca2\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pleca.org.ar\/pleca2\/wp-json\/wp\/v2\/comments?post=29836"}],"version-history":[{"count":2,"href":"https:\/\/www.pleca.org.ar\/pleca2\/wp-json\/wp\/v2\/pages\/29836\/revisions"}],"predecessor-version":[{"id":29894,"href":"https:\/\/www.pleca.org.ar\/pleca2\/wp-json\/wp\/v2\/pages\/29836\/revisions\/29894"}],"wp:attachment":[{"href":"https:\/\/www.pleca.org.ar\/pleca2\/wp-json\/wp\/v2\/media?parent=29836"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}