{"id":8478,"date":"2025-09-15T09:56:50","date_gmt":"2025-09-15T07:56:50","guid":{"rendered":"https:\/\/www.argentaceramica.com\/proyectos\/"},"modified":"2025-09-15T10:21:36","modified_gmt":"2025-09-15T08:21:36","slug":"projects","status":"publish","type":"page","link":"https:\/\/www.argentaceramica.com\/en\/projects\/","title":{"rendered":"Projects"},"content":{"rendered":"<p>[vc_row full_width=&#8221;stretch_row_content&#8221; el_class=&#8221;breadcrumb-page breadcrumb-nobanner&#8221;][vc_column]<span class=\"breadcrumb-2024 \"><a class=\"home-link\" href=\"https:\/\/www.argentaceramica.com\/en\/\"><img decoding=\"async\" class=\"default-image\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images\/iconos\/casita.svg\"\/><img decoding=\"async\" class=\"hover-image\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images\/iconos\/casita-black.svg\"\/><\/a>><span class=\"current-page\">Projects<\/span><\/span>[\/vc_column][\/vc_row][vc_row full_width=&#8221;stretch_row_content_no_spaces&#8221; el_class=&#8221;header-catalogos&#8221; css=&#8221;.vc_custom_1753968951245{margin-bottom: 30px !important;}&#8221;][vc_column][vc_column_text el_class=&#8221;header-catalogos__title&#8221;]<\/p>\n<h1 style=\"text-align: center;\">Projects<\/h1>\n<p>[\/vc_column_text][vc_column_text el_class=&#8221;header-catalogos__subtitle&#8221;]<\/p>\n<h6 style=\"text-align: center;\">We showcase the most outstanding projects that have chosen our ceramics to cover floors, walls or fa\u00e7ades of spaces, both indoors and outdoors, in the most diverse locations around the world.<\/h6>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row full_width=&#8221;stretch_row_content_no_spaces&#8221;][vc_column][vc_column_text]<div id=\"serie_filtro_acabados_decorados_v3\" class=\"no_click\">\n\t\t<div class=\"producto-informacion__ficha-serie-color filtro_colores active\">\n\t\t\t<h6 class=\"producto-informacion__ficha-serie-color__filtro-colores \">\n\t\t\t\t<div class=\"li_pestanyaN2\">PROJECTS <span class=\"producto-informacion__ficha-serie-color__filtro-colores_contador\">(11)<\/span><\/div>\n\t\t\t<\/h6>\n\t\t<\/div>\n\t<\/div><div class=\"carousel__proyectos bloque_proyectos\">\n        <div class=\"item_proyecto proyecto_PROY0003\" data-id=\"PROY0003\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/Portada_PROY0003.jpg\" alt=\"El Bancal Hotel &amp; Spa\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">El Bancal Hotel &amp; Spa<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    La Gomera | Islas Canarias, Spain\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        \n        <div class=\"item_proyecto proyecto_PROY0001\" data-id=\"PROY0001\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/Portada_PROY0001.jpg\" alt=\"Casa Bergera\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">Casa Bergera<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    Burgos, Spain\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        \n        <div class=\"item_proyecto proyecto_PROY0005\" data-id=\"PROY0005\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/Portada_PROY0005.jpg\" alt=\"Cortizo - Campus Tecnol\u00f3gico\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">Cortizo - Campus Tecnol\u00f3gico<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    Padr\u00f3n | A Coru\u00f1a, Spain\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        \n        <div class=\"item_proyecto proyecto_PROY0004\" data-id=\"PROY0004\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/Portada_PROY0004.jpg\" alt=\"Cortizo - Showroom\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">Cortizo - Showroom<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    Padr\u00f3n | A Coru\u00f1a, Spain\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        \n        <div class=\"item_proyecto proyecto_PROY0012\" data-id=\"PROY0012\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/Portada_PROY00012.jpg\" alt=\"Oficinas de NUPPEC Log\u00edstica\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">Oficinas de NUPPEC Log\u00edstica<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    Onda | Castell\u00f3n, Spain\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        \n        <div class=\"item_proyecto proyecto_PROY0013\" data-id=\"PROY0013\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/Momp_Arquitectura_Casa_Aguadulce_42.jpg\" alt=\"Els Pins, Aguadulce\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">Els Pins, Aguadulce<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    Roquetas de Mar, Almeria, Spain\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        \n        <div class=\"item_proyecto proyecto_PROY0014\" data-id=\"PROY0014\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/10_castanyer.jpg\" alt=\"Casa Casta\u00f1er\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">Casa Casta\u00f1er<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    Barcelona, Spain\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        \n        <div class=\"item_proyecto proyecto_PROY0006\" data-id=\"PROY0006\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/Portada_PROY0006.jpg\" alt=\"R\u00e9sidence Waterfront\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">R\u00e9sidence Waterfront<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    Sousse, T\u00fanez\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        \n        <div class=\"item_proyecto proyecto_PROY0009\" data-id=\"PROY0009\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/Portada_PROY0009.jpg\" alt=\"Oficinas de Frutinter\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">Oficinas de Frutinter<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    Onda | Castell\u00f3n, Spain\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        \n        <div class=\"item_proyecto proyecto_PROY0011\" data-id=\"PROY0011\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/Portada_PROY00011.jpg\" alt=\"Edificio SUNSET SAILORS by TM\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">Edificio SUNSET SAILORS by TM<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    Benidorm | Alicante, Spain\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        \n        <div class=\"item_proyecto proyecto_PROY0010\" data-id=\"PROY0010\">\n            <div class=\"imagen\">\n                <img decoding=\"async\" src=\"https:\/\/d7rh5s3nxmpy4.cloudfront.net\/CMP7091\/Portada_PROY00010.jpg\" alt=\"Edificio Ruiz Picasso 11\">\n            <\/div>\n            <div class=\"info\">\n                <h3 class=\"nombre\">Edificio Ruiz Picasso 11<\/h3>\n                <p class=\"lugar\">\n                    <img decoding=\"async\" class=\"icono-ubicacion\" src=\"https:\/\/www.argentaceramica.com\/wp-content\/themes\/argenta\/images-newmenu\/normal\/ico_normal_30_Ubicacion.svg\" alt=\"Ubicaci\u00f3n\" class=\"icono-ubicacion\" style=\"width:22px; height:22px; margin-right:8px; vertical-align:middle;\">\n                    Madrid, Spain\n                <\/p>\n            <\/div>\n            <div class=\"item-selector-arrow\"><\/div>\n        <\/div>\n        <\/div><div class=\"carousel__proyectos-arrows\"><\/div><div id=\"ficha-proyecto-container\"><\/div>\t\t<script>\n\t\tjQuery(document).ready(function(){\n        \n\t\tjQuery(\".carousel__proyectos\").slick({\n\t\t\tonDestroy: function() {\n\t\t\t\tconsole.log('Slider destruido');\n\t\t\t},\n            dots: false,\n            arrows: true,\n\t\t\tappendArrows: \".carousel__proyectos-arrows\",\n            slidesToShow: 3, \n            slidesToScroll: 1,\n            infinite: false,\n            centerMode: false,\n            focusOnSelect: false,\n            responsive: [\n                {\n                    breakpoint: 1200,\n                    settings: { \n                        slidesToShow: 2, \n                        slidesToScroll: 1, \n                        infinite: false,\n                        centerMode: false,\n                        focusOnSelect: false\n                    }\n                },\n                {\n                    breakpoint: 800,\n                    settings: { \n                        slidesToShow: 1, \n                        slidesToScroll: 1, \n                        infinite: false,\n                        centerMode: false,\n                        focusOnSelect: false\n                    }\n                }\n            ]\n        });\n\n\t\t\/\/ Funci\u00f3n para actualizar el estado de los botones de navegaci\u00f3n\n\t\tfunction updateNavigationButtons() {\n\t\t\tvar $carousel = $(\".carousel__proyectos\");\n\t\t\tvar currentSlide = $carousel.slick('slickCurrentSlide');\n\t\t\tvar totalSlides = $carousel.slick('getSlick').slideCount;\n\t\t\tvar slidesToShow = $carousel.slick('getSlick').options.slidesToShow;\n\t\t\t\n\t\t\t\/\/ Calcular si estamos en la primera o \u00faltima p\u00e1gina\n\t\t\tvar isFirstPage = currentSlide === 0;\n\t\t\t\n\t\t\t\/\/ CORRECCI\u00d3N: Para carruseles que muestran 3.5 slides pero est\u00e1n configurados como 3\n\t\t\t\/\/ Necesitamos calcular la \u00faltima p\u00e1gina bas\u00e1ndonos en que el \u00faltimo slide debe estar completamente visible\n\t\t\tvar isLastPage;\n\t\t\t\n\t\t\t\/\/ Si el \u00faltimo slide visible ser\u00eda el pen\u00faltimo o \u00faltimo del total, estamos en la \u00faltima p\u00e1gina\n\t\t\tvar lastVisibleSlide = currentSlide + slidesToShow - 1;\n\t\t\tvar secondLastSlide = totalSlides - 2;\n\t\t\tvar lastSlide = totalSlides - 1;\n\t\t\t\n\t\t\t\/\/ Estamos en la \u00faltima p\u00e1gina si el \u00faltimo slide visible es el pen\u00faltimo o \u00faltimo\n\t\t\tisLastPage = (lastVisibleSlide >= secondLastSlide);\n\t\t\t\n\t\t\tconsole.log(\"=== NAVEGACI\u00d3N DEBUG ===\");\n\t\t\tconsole.log(\"Current slide:\", currentSlide);\n\t\t\tconsole.log(\"Total slides:\", totalSlides);\n\t\t\tconsole.log(\"Slides to show:\", slidesToShow);\n\t\t\tconsole.log(\"Last visible slide:\", lastVisibleSlide);\n\t\t\tconsole.log(\"Second last slide:\", secondLastSlide);\n\t\t\tconsole.log(\"Last slide:\", lastSlide);\n\t\t\tconsole.log(\"Is first page:\", isFirstPage);\n\t\t\tconsole.log(\"Is last page:\", isLastPage);\n\t\t\tconsole.log(\"Calculation: lastVisibleSlide (\", lastVisibleSlide, \") >= secondLastSlide (\", secondLastSlide, \") =\", lastVisibleSlide >= secondLastSlide);\n\t\t\t\n\t\t\t\/\/ Obtener los botones de navegaci\u00f3n\n\t\t\tvar $prevBtn = $carousel.slick('getSlick').$prevArrow;\n\t\t\tvar $nextBtn = $carousel.slick('getSlick').$nextArrow;\n\t\t\t\n\t\t\t\/\/ Deshabilitar\/habilitar bot\u00f3n anterior\n\t\t\tif (isFirstPage) {\n\t\t\t\t$prevBtn.addClass('slick-disabled').prop('disabled', true).css('opacity', '0.3').css('cursor', 'not-allowed');\n\t\t\t\tconsole.log(\"\u2713 Bot\u00f3n anterior DESHABILITADO\");\n\t\t\t} else {\n\t\t\t\t$prevBtn.removeClass('slick-disabled').prop('disabled', false).css('opacity', '1').css('cursor', 'pointer');\n\t\t\t\tconsole.log(\"\u2713 Bot\u00f3n anterior HABILITADO\");\n\t\t\t}\n\t\t\t\n\t\t\t\/\/ Deshabilitar\/habilitar bot\u00f3n siguiente\n\t\t\tif (isLastPage) {\n\t\t\t\t$nextBtn.addClass('slick-disabled').prop('disabled', true).css('opacity', '0.3').css('cursor', 'not-allowed');\n\t\t\t\tconsole.log(\"\u2713 Bot\u00f3n siguiente DESHABILITADO\");\n\t\t\t} else {\n\t\t\t\t$nextBtn.removeClass('slick-disabled').prop('disabled', false).css('opacity', '1').css('cursor', 'pointer');\n\t\t\t\tconsole.log(\"\u2713 Bot\u00f3n siguiente HABILITADO\");\n\t\t\t}\n\t\t\t\n\t\t\tconsole.log(\"=== FIN DEBUG ===\");\n\t\t}\n\n\t\t\/\/ Actualizar botones al inicializar\n\t\tsetTimeout(updateNavigationButtons, 100);\n\n\t\t\/\/ Actualizar botones cuando cambie el slide\n\t\t$(\".carousel__proyectos\").on('afterChange', function(event, slick, currentSlide, nextSlide) {\n\t\t\tupdateNavigationButtons();\n\t\t});\n\n\t\t\/\/ Actualizar botones cuando cambie el tama\u00f1o de ventana\n\t\t$(window).on('resize', function() {\n\t\t\tsetTimeout(updateNavigationButtons, 250);\n\t\t});\n\n\t\t\/\/ PRECARGA BASADA EN HOVER para mejorar la experiencia\n\t\t$(\".carousel__proyectos\").on(\"mouseenter\", \".item_proyecto\", function(){\n\t\t\tvar id = $(this).data(\"id\");\n\t\t\t\n\t\t\t\/\/ Solo precargar si no est\u00e1 en cache y no se est\u00e1 cargando\n\t\t\tif (!window.projectCache || !window.projectCache[id]) {\n\t\t\t\tif (!window.hoverPreloadTimeout) window.hoverPreloadTimeout = {};\n\t\t\t\t\n\t\t\t\t\/\/ Retrasar la precarga para evitar cargas innecesarias\n\t\t\t\twindow.hoverPreloadTimeout[id] = setTimeout(function() {\n\t\t\t\t\tconsole.log(\"\ud83d\udd04 HOVER DETECTADO - Precargando proyecto:\", id);\n\t\t\t\t\t\n\t\t\t\t\t$.ajax({\n\t\t\t\t\t\turl: MyAjax.url,\n\t\t\t\t\t\ttype: \"POST\",\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: \"mostrar_ficha_proyecto\",\n\t\t\t\t\t\t\tid: id\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(response) {\n\t\t\t\t\t\t\tif (!window.projectCache) window.projectCache = {};\n\t\t\t\t\t\t\twindow.projectCache[id] = response;\n\t\t\t\t\t\t\tconsole.log(\"\u2705 Proyecto precargado por hover:\", id);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}, 300); \/\/ 300ms de delay para evitar precargas innecesarias\n\t\t\t}\n\t\t});\n\t\t\n\t\t\/\/ Cancelar precarga si el usuario sale del elemento\n\t\t$(\".carousel__proyectos\").on(\"mouseleave\", \".item_proyecto\", function(){\n\t\t\tvar id = $(this).data(\"id\");\n\t\t\tif (window.hoverPreloadTimeout && window.hoverPreloadTimeout[id]) {\n\t\t\t\tclearTimeout(window.hoverPreloadTimeout[id]);\n\t\t\t\tdelete window.hoverPreloadTimeout[id];\n\t\t\t}\n\t\t});\n\n\t\t\/\/ NO usar centerMode - causa huecos y movimientos m\u00faltiples\n\n\t\t\/\/ Funci\u00f3n para centrar visualmente un elemento\n\t\tfunction centerElementVisually(clickedIndex) {\n\t\t\tif (typeof clickedIndex !== 'undefined' && clickedIndex >= 0) {\n\t\t\t\tvar $carousel = $(\".carousel__proyectos\");\n\t\t\t\tvar totalSlides = $carousel.slick('getSlick').slideCount;\n\t\t\t\tvar slidesToShow = $carousel.slick('getSlick').options.slidesToShow;\n\t\t\t\t\n\t\t\t\tconsole.log(\"=== RECALCULANDO CENTRADO VISUAL ===\");\n\t\t\t\tconsole.log(\"Elemento a centrar:\", clickedIndex);\n\t\t\t\tconsole.log(\"Total slides:\", totalSlides);\n\t\t\t\tconsole.log(\"Slides to show:\", slidesToShow);\n\t\t\t\t\n\t\t\t\t\/\/ CASO ESPECIAL: Si es el primer elemento (\u00edndice 0), solo asegurar que est\u00e9 completamente visible\n\t\t\t\tif (clickedIndex === 0) {\n\t\t\t\t\tconsole.log(\"\u2713 Primer elemento detectado - Solo asegurar visibilidad completa\");\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconsole.log(\"PASO 1: Moviendo primer elemento a posici\u00f3n inicial...\");\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Obtener dimensiones reales\n\t\t\t\t\t\tvar carouselWidth = $carousel.width();\n\t\t\t\t\t\tvar $firstSlide = $carousel.find('.slick-slide').eq(0);\n\t\t\t\t\t\tvar realSlideWidth = $firstSlide.outerWidth(true);\n\t\t\t\t\t\t\n\t\t\t\t\t\tconsole.log(\"- Ancho carrusel:\", carouselWidth);\n\t\t\t\t\t\tconsole.log(\"- Ancho slide real:\", realSlideWidth);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Calcular el transform necesario para que el primer slide est\u00e9 completamente visible\n\t\t\t\t\t\tvar targetTransform = 0; \/\/ El primer slide debe estar en la posici\u00f3n 0\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Aplicar el transform\n\t\t\t\t\t\t$carousel.find('.slick-track').css('transform', 'translateX(-' + targetTransform + 'px)');\n\t\t\t\t\t\t\n\t\t\t\t\t\tconsole.log(\"\u2713 Primer elemento movido a posici\u00f3n inicial\");\n\t\t\t\t\t\t\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\"Error en centrado del primer elemento:\", error);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn; \/\/ Salir de la funci\u00f3n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\/\/ CASO ESPECIAL: Si es el \u00faltimo elemento, solo asegurar que est\u00e9 completamente visible\n\t\t\t\tvar lastSlideIndex = totalSlides - 1;\n\t\t\t\tif (clickedIndex === lastSlideIndex) {\n\t\t\t\t\tconsole.log(\"\u2713 \u00daltimo elemento detectado - Solo asegurar visibilidad completa\");\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconsole.log(\"PASO 1: Moviendo \u00faltimo elemento a posici\u00f3n final...\");\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Obtener dimensiones reales\n\t\t\t\t\t\tvar carouselWidth = $carousel.width();\n\t\t\t\t\t\tvar $lastSlide = $carousel.find('.slick-slide').eq(lastSlideIndex);\n\t\t\t\t\t\tvar realSlideWidth = $lastSlide.outerWidth(true); \/\/ Incluye m\u00e1rgenes\n\t\t\t\t\t\t\n\t\t\t\t\t\tconsole.log(\"- Ancho carrusel:\", carouselWidth);\n\t\t\t\t\t\tconsole.log(\"- Ancho slide real:\", realSlideWidth);\n\t\t\t\t\t\tconsole.log(\"- Total slides:\", totalSlides);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Calcular la posici\u00f3n del \u00faltimo slide\n\t\t\t\t\t\tvar lastSlidePosition = realSlideWidth * lastSlideIndex;\n\t\t\t\t\t\tvar lastSlideOffset = lastSlidePosition + realSlideWidth;\n\t\t\t\t\t\t\n\t\t\t\t\t\tconsole.log(\"- Last slide position:\", lastSlidePosition);\n\t\t\t\t\t\tconsole.log(\"- Last slide offset:\", lastSlideOffset);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Calcular el transform necesario para que el \u00faltimo slide est\u00e9 completamente visible\n\t\t\t\t\t\tvar targetTransform = lastSlideOffset - carouselWidth;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Ajuste adicional para compensar m\u00e1rgenes\/padding\n\t\t\t\t\t\tvar extraMargin = 100; \/\/ Valor ajustado\n\t\t\t\t\t\ttargetTransform = targetTransform + extraMargin;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Asegurar que no sea negativo\n\t\t\t\t\t\ttargetTransform = Math.max(0, targetTransform);\n\t\t\t\t\t\t\n\t\t\t\t\t\tconsole.log(\"- Target transform inicial:\", targetTransform - extraMargin);\n\t\t\t\t\t\tconsole.log(\"- Extra margin:\", extraMargin);\n\t\t\t\t\t\tconsole.log(\"- Target transform final:\", targetTransform);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Aplicar el transform\n\t\t\t\t\t\t$carousel.find('.slick-track').css('transform', 'translateX(-' + targetTransform + 'px)');\n\t\t\t\t\t\t\n\t\t\t\t\t\tconsole.log(\"\u2713 \u00daltimo elemento movido a posici\u00f3n final\");\n\t\t\t\t\t\t\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\"Error en centrado del \u00faltimo elemento:\", error);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn; \/\/ Salir de la funci\u00f3n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\/\/ L\u00d3GICA NORMAL DE CENTRADO para elementos intermedios\n\t\t\t\tconsole.log(\"PASO 1: Recalculando posici\u00f3n para centrar...\");\n\t\t\t\t\n\t\t\t\t\/\/ Buscar el slide del elemento\n\t\t\t\tvar $targetSlide = $carousel.find('.slick-slide[data-slick-index=\"' + clickedIndex + '\"]');\n\t\t\t\t\n\t\t\t\tif ($targetSlide.length) {\n\t\t\t\t\t\/\/ Obtener dimensiones actualizadas del carrusel y slide\n\t\t\t\t\tvar carouselWidth = $carousel.width();\n\t\t\t\t\tvar slideWidth = $targetSlide.outerWidth(true);\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Calcular la posici\u00f3n absoluta del slide en el track\n\t\t\t\t\tvar slideOffset = clickedIndex * slideWidth;\n\t\t\t\t\t\n\t\t\t\t\t\/\/ COMPENSACI\u00d3N PARA MANTENER CONSISTENCIA VISUAL\n\t\t\t\t\tvar leftMarginCompensation = 48;\n\t\t\t\t\tconsole.log(\"- Compensaci\u00f3n margen izquierdo:\", leftMarginCompensation, \"px\");\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Calcular cu\u00e1nto mover para centrar visualmente\n\t\t\t\t\tvar centerOffset = (carouselWidth - slideWidth) \/ 2;\n\t\t\t\t\tvar targetTransform = slideOffset - centerOffset + leftMarginCompensation;\n\t\t\t\t\t\n\t\t\t\t\tconsole.log(\"Recalculando centrado para elemento:\", clickedIndex);\n\t\t\t\t\tconsole.log(\"- Ancho carrusel actualizado:\", carouselWidth);\n\t\t\t\t\tconsole.log(\"- Ancho slide actualizado:\", slideWidth);\n\t\t\t\t\tconsole.log(\"- Transform objetivo actualizado:\", targetTransform);\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Aplicar transici\u00f3n CSS para animaci\u00f3n suave\n\t\t\t\t\tvar $track = $carousel.find('.slick-track');\n\t\t\t\t\t$track.css('transition', 'transform 0.6s ease-in-out');\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Aplicar transformaci\u00f3n actualizada al track\n\t\t\t\t\t$track.css('transform', 'translateX(' + (-targetTransform) + 'px)');\n\t\t\t\t\t\n\t\t\t\t\tconsole.log(\"\u2713 Centrado visual recalculado completado\");\n\t\t\t\t\tconsole.log(\"=== RECALCULADO COMPLETADO ===\");\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Remover la transici\u00f3n despu\u00e9s de la animaci\u00f3n para evitar interferencias\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t$track.css('transition', 'none');\n\t\t\t\t\t\tconsole.log(\"\u2713 Transici\u00f3n CSS removida\");\n\t\t\t\t\t}, 600); \/\/ 600ms = duraci\u00f3n de la transici\u00f3n\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"No se encontr\u00f3 el slide con \u00edndice:\", clickedIndex);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\n\t\t\/\/ Funci\u00f3n para precargar proyectos adyacentes\n\t\tfunction preloadAdjacentProjects(currentId) {\n\t\t\tconsole.log(\"\ud83d\udd04 PRECARGANDO PROYECTOS ADYACENTES...\");\n\t\t\t\n\t\t\t\/\/ Obtener todos los proyectos del carrusel\n\t\t\tvar allProjects = [];\n\t\t\t$(\".carousel__proyectos .item_proyecto\").each(function() {\n\t\t\t\tallProjects.push($(this).data(\"id\"));\n\t\t\t});\n\t\t\t\n\t\t\t\/\/ Encontrar el \u00edndice del proyecto actual\n\t\t\tvar currentIndex = allProjects.indexOf(currentId);\n\t\t\tif (currentIndex === -1) return;\n\t\t\t\n\t\t\t\/\/ Proyectos adyacentes a precargar (anterior y siguiente)\n\t\t\tvar adjacentProjects = [];\n\t\t\tif (currentIndex > 0) {\n\t\t\t\tadjacentProjects.push(allProjects[currentIndex - 1]);\n\t\t\t}\n\t\t\tif (currentIndex < allProjects.length - 1) {\n\t\t\t\tadjacentProjects.push(allProjects[currentIndex + 1]);\n\t\t\t}\n\t\t\t\n\t\t\t\/\/ Precargar en background\n\t\t\tadjacentProjects.forEach(function(projectId) {\n\t\t\t\tif (!window.preloadedProjects) window.preloadedProjects = {};\n\t\t\t\tif (!window.preloadedProjects[projectId]) {\n\t\t\t\t\tconsole.log(\"\ud83d\udce5 Precargando proyecto:\", projectId);\n\t\t\t\t\t\n\t\t\t\t\t$.ajax({\n\t\t\t\t\t\turl: MyAjax.url,\n\t\t\t\t\t\ttype: \"POST\",\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: \"mostrar_ficha_proyecto\",\n\t\t\t\t\t\t\tid: projectId\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(response) {\n\t\t\t\t\t\t\tif (!window.projectCache) window.projectCache = {};\n\t\t\t\t\t\t\twindow.projectCache[projectId] = response; \/\/ Guardar en cache\n\t\t\t\t\t\t\twindow.preloadedProjects[projectId] = response;\n\t\t\t\t\t\t\tconsole.log(\"\u2705 Proyecto precargado:\", projectId);\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: function() {\n\t\t\t\t\t\t\tconsole.log(\"\u274c Error precargando proyecto:\", projectId);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t\/\/ Event listener para resize que mantiene el centrado\n\t\t$(window).on('resize', function() {\n\t\t\t\/\/ Solo recalcular si hay un elemento activo\n\t\t\tvar $activeItem = $(\".carousel__proyectos .item_proyecto.active\");\n\t\t\tif ($activeItem.length) {\n\t\t\t\tvar activeId = $activeItem.data(\"id\");\n\t\t\t\tvar activeIndex = $activeItem.closest('.slick-slide').data('slick-index');\n\t\t\t\t\n\t\t\t\t\/\/ Si no se puede obtener el \u00edndice del slide, usar el \u00edndice del item\n\t\t\t\tif (typeof activeIndex === 'undefined') {\n\t\t\t\t\tactiveIndex = $activeItem.index();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconsole.log(\"\ud83d\udd04 RESIZE DETECTADO - Recalculando centrado para elemento activo:\", activeId, \"\u00edndice:\", activeIndex);\n\t\t\t\t\n\t\t\t\t\/\/ Usar debounce para evitar m\u00faltiples rec\u00e1lculos durante el resize\n\t\t\t\tclearTimeout(window.resizeTimeout);\n\t\t\t\twindow.resizeTimeout = setTimeout(function() {\n\t\t\t\t\tcenterElementVisually(activeIndex);\n\t\t\t\t}, 250); \/\/ 250ms de delay para estabilizar el resize\n\t\t\t}\n\t\t});\n\n\t\t$(\".carousel__proyectos\").on(\"click\", \".item_proyecto\", function(){\n\t\t\tvar id = $(this).data(\"id\");\n\t\t\tvar $clickedItem = $(this);\n\t\t\t\n\t\t\t\/\/ Cancelar solicitud AJAX anterior si existe\n\t\t\tif (window.currentAjaxRequest) {\n\t\t\t\twindow.currentAjaxRequest.abort();\n\t\t\t}\n\t\t\t\n\t\t\t\/\/ Remover clase activa de todos los elementos\n\t\t\t$(\".carousel__proyectos .item_proyecto\").removeClass(\"active\");\n\t\t\t$(\".carousel__proyectos .item-selector-arrow\").removeClass(\"active\");\n\t\t\t\n\t\t\t\/\/ Agregar clase activa al elemento clickeado\n\t\t\t$clickedItem.addClass(\"active\");\n\t\t\t\n\t\t\t\/\/ Activar la flecha correspondiente\n\t\t\t$(\".carousel__proyectos .item-selector-arrow[data-project-id='\" + id + \"']\").addClass(\"active\");\n\n\t\t\t\/\/ Obtener el \u00edndice del slide clickeado\n\t\t\tvar clickedIndex = $(this).closest('.slick-slide').data('slick-index');\n\t\t\t\n\t\t\t\/\/ Si no se puede obtener el \u00edndice del slide, usar el \u00edndice del item\n\t\t\tif (typeof clickedIndex === 'undefined') {\n\t\t\t\tclickedIndex = $(this).index();\n\t\t\t}\n\t\t\t\n\t\t\tconsole.log(\"CLICKED INDEX:\", clickedIndex);\n\t\t\t\n\t\t\t\/\/ Centrar el elemento clickeado visualmente en la pantalla\n\t\t\tif (typeof clickedIndex !== 'undefined' && clickedIndex >= 0) {\n\t\t\t\tcenterElementVisually(clickedIndex);\n\t\t\t}\n\n\t\t\t\/\/ Llama a AJAX para obtener el contenido del shortcode\n\t\t\tvar startTime = performance.now();\n\t\t\tconsole.log(\"\ud83d\ude80 INICIANDO CARGA DE PROYECTO:\", id);\n\t\t\t\n\t\t\t\/\/ Verificar cache local primero\n\t\t\tif (window.projectCache && window.projectCache[id]) {\n\t\t\t\tconsole.log(\"\u26a1 PROYECTO EN CACHE LOCAL - Cargando instant\u00e1neamente\");\n\t\t\t\tvar cachedResponse = window.projectCache[id];\n\t\t\t\t$(\"#ficha-proyecto-container\").html(cachedResponse);\n\t\t\t\t\n\t\t\t\t\/\/ Ejecutar funciones de inicializaci\u00f3n\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar galleryStartTime = performance.now();\n\t\t\t\t\t\n\t\t\t\t\tif (typeof window.adjustGalleryGrid === 'function') {\n\t\t\t\t\t\twindow.adjustGalleryGrid();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Inicializar la modal de la galer\u00eda si existe\n\t\t\t\t\tif (typeof GalleryModal !== 'undefined') {\n\t\t\t\t\t\tconst projectGalleryModal = new GalleryModal().init();\n\t\t\t\t\t\tif (projectGalleryModal) {\n\t\t\t\t\t\t\t\/\/ Funci\u00f3n para obtener la galer\u00eda visible\n\t\t\t\t\t\t\tfunction getVisibleGallery() {\n\t\t\t\t\t\t\t\tconst desktop = document.querySelector('#ficha-proyecto-container .ficha-proyecto-galeria-desktop');\n\t\t\t\t\t\t\t\tconst mobile = document.querySelector('#ficha-proyecto-container .ficha-proyecto-galeria-mobile');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (!desktop || !mobile) return desktop || mobile;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tconst desktopVisible = window.getComputedStyle(desktop).display !== 'none';\n\t\t\t\t\t\t\t\tconst mobileVisible = window.getComputedStyle(mobile).display !== 'none';\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (desktopVisible && !mobileVisible) return desktop;\n\t\t\t\t\t\t\t\tif (mobileVisible && !desktopVisible) return mobile;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\/\/ Fallback: usar ancho de ventana\n\t\t\t\t\t\t\t\tconst isMobile = window.innerWidth <= 768;\n\t\t\t\t\t\t\t\treturn isMobile ? mobile : desktop;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst visibleGallery = getVisibleGallery();\n\t\t\t\t\t\t\tif (visibleGallery) {\n\t\t\t\t\t\t\t\tconst gridItems = visibleGallery.querySelectorAll('.ficha-proyecto-galeria-item-wrapper');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tconst imageData = Array.from(gridItems).map(item => {\n\t\t\t\t\t\t\t\t\tconst img = item.querySelector('img');\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tsrc: img.src,\n\t\t\t\t\t\t\t\t\t\ttitle: item.dataset.title || '',\n\t\t\t\t\t\t\t\t\t\thotspots: JSON.parse(item.dataset.hotspots || '[]')\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tgridItems.forEach((item, index) => {\n\t\t\t\t\t\t\t\t\titem.addEventListener('click', () => {\n\t\t\t\t\t\t\t\t\t\tprojectGalleryModal.open(imageData, index);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar galleryEndTime = performance.now();\n\t\t\t\t\tvar galleryTime = galleryEndTime - galleryStartTime;\n\t\t\t\t\tconsole.log(\"\ud83d\uddbc\ufe0f GALER\u00cdA INICIALIZADA en\", galleryTime.toFixed(2), \"ms\");\n\t\t\t\t\t\n\t\t\t\t\tvar totalTime = galleryEndTime - startTime;\n\t\t\t\t\tconsole.log(\"\ud83c\udfaf TIEMPO TOTAL COMPLETADO:\", totalTime.toFixed(2), \"ms\");\n\t\t\t\t\t\n\t\t\t\t\t\/\/ PRECARGAR PROYECTOS ADYACENTES para navegaci\u00f3n m\u00e1s r\u00e1pida\n\t\t\t\t\tpreloadAdjacentProjects(id);\n\t\t\t\t}, 50);\n\t\t\t\t\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t\/\/ Mostrar indicador de carga\n\t\t\t$(\"#ficha-proyecto-container\").html('<div class=\"loading-indicator\" style=\"text-align: center; padding: 40px 20px; background: #f8f9fa; border-radius: 8px; margin: 20px 0;\"><div class=\"spinner\" style=\"width: 40px; height: 40px; border: 4px solid #e3e3e3; border-top: 4px solid #007cba; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto 20px;\"><\/div><p style=\"color: #666; font-size: 16px; margin: 0;\">Cargando proyecto...<\/p><\/div><style>@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }<\/style>');\n\t\t\t\n\t\t\twindow.currentAjaxRequest = $.ajax({\n\t\t\t\turl: MyAjax.url, \n\t\t\t\ttype: \"POST\",\n\t\t\t\tdata: {\n\t\t\t\t\taction: \"mostrar_ficha_proyecto\",\n\t\t\t\t\tid: id\n\t\t\t\t},\n\t\t\t\tsuccess: function(response){\n\t\t\t\t\tvar endTime = performance.now();\n\t\t\t\t\tvar loadTime = endTime - startTime;\n\t\t\t\t\tconsole.log(\"\u2705 PROYECTO CARGADO en\", loadTime.toFixed(2), \"ms\");\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Guardar en cache local para futuras cargas\n\t\t\t\t\tif (!window.projectCache) window.projectCache = {};\n\t\t\t\t\twindow.projectCache[id] = response;\n\t\t\t\t\tconsole.log(\"\ud83d\udcbe PROYECTO GUARDADO EN CACHE LOCAL\");\n\t\t\t\t\t\n\t\t\t\t\tvar renderStartTime = performance.now();\n\t\t\t\t\t$(\"#ficha-proyecto-container\").html(response);\n\t\t\t\t\tvar renderEndTime = performance.now();\n\t\t\t\t\tvar renderTime = renderEndTime - renderStartTime;\n\t\t\t\t\tconsole.log(\"\ud83c\udfa8 HTML RENDERIZADO en\", renderTime.toFixed(2), \"ms\");\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Ejecutar el ajuste de la galer\u00eda despu\u00e9s de cargar el contenido\n\t\t\t\t\tvar galleryStartTime = performance.now();\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tif (typeof window.adjustGalleryGrid === 'function') {\n\t\t\t\t\t\t\twindow.adjustGalleryGrid();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Inicializar la modal de la galer\u00eda si existe\n\t\t\t\t\t\tif (typeof GalleryModal !== 'undefined') {\n\t\t\t\t\t\t\tconst projectGalleryModal = new GalleryModal().init();\n\t\t\t\t\t\t\tif (projectGalleryModal) {\n\t\t\t\t\t\t\t\t\/\/ Funci\u00f3n para obtener la galer\u00eda visible\n\t\t\t\t\t\t\t\tfunction getVisibleGallery() {\n\t\t\t\t\t\t\t\t\tconst desktop = document.querySelector('#ficha-proyecto-container .ficha-proyecto-galeria-desktop');\n\t\t\t\t\t\t\t\t\tconst mobile = document.querySelector('#ficha-proyecto-container .ficha-proyecto-galeria-mobile');\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (!desktop || !mobile) return desktop || mobile;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tconst desktopVisible = window.getComputedStyle(desktop).display !== 'none';\n\t\t\t\t\t\t\t\t\tconst mobileVisible = window.getComputedStyle(mobile).display !== 'none';\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (desktopVisible && !mobileVisible) return desktop;\n\t\t\t\t\t\t\t\t\tif (mobileVisible && !desktopVisible) return mobile;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\/\/ Fallback: usar ancho de ventana\n\t\t\t\t\t\t\t\t\tconst isMobile = window.innerWidth <= 768;\n\t\t\t\t\t\t\t\t\treturn isMobile ? mobile : desktop;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst visibleGallery = getVisibleGallery();\n\t\t\t\t\t\t\t\tif (visibleGallery) {\n\t\t\t\t\t\t\t\t\tconst gridItems = visibleGallery.querySelectorAll('.ficha-proyecto-galeria-item-wrapper');\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tconst imageData = Array.from(gridItems).map(item => {\n\t\t\t\t\t\t\t\t\t\tconst img = item.querySelector('img');\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\tsrc: img.src,\n\t\t\t\t\t\t\t\t\t\t\ttitle: item.dataset.title || '',\n\t\t\t\t\t\t\t\t\t\t\thotspots: JSON.parse(item.dataset.hotspots || '[]')\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tgridItems.forEach((item, index) => {\n\t\t\t\t\t\t\t\t\t\titem.addEventListener('click', () => {\n\t\t\t\t\t\t\t\t\t\t\tprojectGalleryModal.open(imageData, index);\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar galleryEndTime = performance.now();\n\t\t\t\t\t\tvar galleryTime = galleryEndTime - galleryStartTime;\n\t\t\t\t\t\tconsole.log(\"\ud83d\uddbc\ufe0f GALER\u00cdA INICIALIZADA en\", galleryTime.toFixed(2), \"ms\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar totalTime = galleryEndTime - startTime;\n\t\t\t\t\t\tconsole.log(\"\ud83c\udfaf TIEMPO TOTAL COMPLETADO:\", totalTime.toFixed(2), \"ms\");\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ PRECARGAR PROYECTOS ADYACENTES para navegaci\u00f3n m\u00e1s r\u00e1pida\n\t\t\t\t\t\tpreloadAdjacentProjects(id);\n\t\t\t\t\t}, 100);\n\n\t\t\t\t\t\/\/ Copiar enlace a proyecto:\n\t\t\t\t\tvar btn = document.getElementById(\"btn-copiar-enlace-proyecto\");\t\t\n\t\t\t\t\tvar textoBoton = btn.querySelector(\".texto-boton\");\n\t\t\t\t\tvar mensajeCopiado = btn.querySelector(\".mensaje-copiado\");\n\t\t\t\t\tvar url = btn.getAttribute(\"data-link\");\n\n\t\t\t\t\tbtn.addEventListener(\"click\", function(e) {\n\t\t\t\t\t\t\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ API moderna\n\t\t\t\t\t\tif (navigator.clipboard && window.isSecureContext) {\n\t\t\t\t\t\t\tnavigator.clipboard.writeText(url).then(function() {\n\t\t\t\t\t\t\t\tmostrarMensaje();\n\t\t\t\t\t\t\t}, function() {\n\t\t\t\t\t\t\t\tfallbackCopy();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfallbackCopy();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfunction fallbackCopy() {\n\t\t\t\t\t\t\tvar dummy = document.createElement(\"input\");\n\t\t\t\t\t\t\tdocument.body.appendChild(dummy);\n\t\t\t\t\t\t\tdummy.value = url;\n\t\t\t\t\t\t\tdummy.select();\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tdocument.execCommand(\"copy\");\n\t\t\t\t\t\t\t\tmostrarMensaje();\n\t\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\t\talert(\"No se pudo copiar el enlace\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdocument.body.removeChild(dummy);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfunction mostrarMensaje() {\n\t\t\t\t\t\t\ttextoBoton.style.display = \"none\";\n\t\t\t\t\t\t\tmensajeCopiado.style.display = \"inline\";\n\t\t\t\t\t\t\tbtn.classList.add(\"copiado\");\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\ttextoBoton.style.display = \"inline\";\n\t\t\t\t\t\t\t\tmensajeCopiado.style.display = \"none\";\n\t\t\t\t\t\t\t\tbtn.classList.remove(\"copiado\");\n\t\t\t\t\t\t\t}, 2000);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Scroll suave si quieres\n\t\t\t\t\t$(\"html, body\").animate({\n\t\t\t\t\t\tscrollTop: $(\"#ficha-proyecto-container\").offset().top - 100\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\n    });\n    <\/script>\n\t[\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[vc_row full_width=&#8221;stretch_row_content&#8221; el_class=&#8221;breadcrumb-page breadcrumb-nobanner&#8221;][vc_column][\/vc_column][\/vc_row][vc_row full_width=&#8221;stretch_row_content_no_spaces&#8221; el_class=&#8221;header-catalogos&#8221; css=&#8221;.vc_custom_1753968951245{margin-bottom: 30px !important;}&#8221;][vc_column][vc_column_text el_class=&#8221;header-catalogos__title&#8221;] Projects [\/vc_column_text][vc_column_text el_class=&#8221;header-catalogos__subtitle&#8221;] We showcase the most outstanding projects that have chosen our ceramics to cover floors, walls or fa\u00e7ades of spaces, both indoors and outdoors, in the most diverse locations around the world. [\/vc_column_text][\/vc_column][\/vc_row][vc_row full_width=&#8221;stretch_row_content_no_spaces&#8221;][vc_column][vc_column_text][\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"plantilla_proyectos.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-8478","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Projects - Argenta Cer\u00e1mica<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.argentaceramica.com\/en\/projects\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Projects - Argenta Cer\u00e1mica\" \/>\n<meta property=\"og:description\" content=\"[vc_row full_width=&#8221;stretch_row_content&#8221; el_class=&#8221;breadcrumb-page breadcrumb-nobanner&#8221;][vc_column][\/vc_column][\/vc_row][vc_row full_width=&#8221;stretch_row_content_no_spaces&#8221; el_class=&#8221;header-catalogos&#8221; css=&#8221;.vc_custom_1753968951245{margin-bottom: 30px !important;}&#8221;][vc_column][vc_column_text el_class=&#8221;header-catalogos__title&#8221;] Projects [\/vc_column_text][vc_column_text el_class=&#8221;header-catalogos__subtitle&#8221;] We showcase the most outstanding projects that have chosen our ceramics to cover floors, walls or fa\u00e7ades of spaces, both indoors and outdoors, in the most diverse locations around the world. [\/vc_column_text][\/vc_column][\/vc_row][vc_row full_width=&#8221;stretch_row_content_no_spaces&#8221;][vc_column][vc_column_text][\/vc_column_text][\/vc_column][\/vc_row]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.argentaceramica.com\/en\/projects\/\" \/>\n<meta property=\"og:site_name\" content=\"Argenta Cer\u00e1mica\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ArgentaCeramica\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-15T08:21:36+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ArgentaCeramica\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.argentaceramica.com\\\/en\\\/projects\\\/\",\"url\":\"https:\\\/\\\/www.argentaceramica.com\\\/en\\\/projects\\\/\",\"name\":\"Projects - Argenta Cer\u00e1mica\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.argentaceramica.com\\\/#website\"},\"datePublished\":\"2025-09-15T07:56:50+00:00\",\"dateModified\":\"2025-09-15T08:21:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.argentaceramica.com\\\/en\\\/projects\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.argentaceramica.com\\\/en\\\/projects\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.argentaceramica.com\\\/en\\\/projects\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/www.argentaceramica.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Projects\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.argentaceramica.com\\\/#website\",\"url\":\"https:\\\/\\\/www.argentaceramica.com\\\/\",\"name\":\"Argenta Cer\u00e1mica\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.argentaceramica.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Projects - Argenta Cer\u00e1mica","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.argentaceramica.com\/en\/projects\/","og_locale":"en_US","og_type":"article","og_title":"Projects - Argenta Cer\u00e1mica","og_description":"[vc_row full_width=&#8221;stretch_row_content&#8221; el_class=&#8221;breadcrumb-page breadcrumb-nobanner&#8221;][vc_column][\/vc_column][\/vc_row][vc_row full_width=&#8221;stretch_row_content_no_spaces&#8221; el_class=&#8221;header-catalogos&#8221; css=&#8221;.vc_custom_1753968951245{margin-bottom: 30px !important;}&#8221;][vc_column][vc_column_text el_class=&#8221;header-catalogos__title&#8221;] Projects [\/vc_column_text][vc_column_text el_class=&#8221;header-catalogos__subtitle&#8221;] We showcase the most outstanding projects that have chosen our ceramics to cover floors, walls or fa\u00e7ades of spaces, both indoors and outdoors, in the most diverse locations around the world. [\/vc_column_text][\/vc_column][\/vc_row][vc_row full_width=&#8221;stretch_row_content_no_spaces&#8221;][vc_column][vc_column_text][\/vc_column_text][\/vc_column][\/vc_row]","og_url":"https:\/\/www.argentaceramica.com\/en\/projects\/","og_site_name":"Argenta Cer\u00e1mica","article_publisher":"https:\/\/www.facebook.com\/ArgentaCeramica","article_modified_time":"2025-09-15T08:21:36+00:00","twitter_card":"summary_large_image","twitter_site":"@ArgentaCeramica","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.argentaceramica.com\/en\/projects\/","url":"https:\/\/www.argentaceramica.com\/en\/projects\/","name":"Projects - Argenta Cer\u00e1mica","isPartOf":{"@id":"https:\/\/www.argentaceramica.com\/#website"},"datePublished":"2025-09-15T07:56:50+00:00","dateModified":"2025-09-15T08:21:36+00:00","breadcrumb":{"@id":"https:\/\/www.argentaceramica.com\/en\/projects\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.argentaceramica.com\/en\/projects\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.argentaceramica.com\/en\/projects\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.argentaceramica.com\/en\/"},{"@type":"ListItem","position":2,"name":"Projects"}]},{"@type":"WebSite","@id":"https:\/\/www.argentaceramica.com\/#website","url":"https:\/\/www.argentaceramica.com\/","name":"Argenta Cer\u00e1mica","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.argentaceramica.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/www.argentaceramica.com\/en\/wp-json\/wp\/v2\/pages\/8478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.argentaceramica.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.argentaceramica.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.argentaceramica.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.argentaceramica.com\/en\/wp-json\/wp\/v2\/comments?post=8478"}],"version-history":[{"count":0,"href":"https:\/\/www.argentaceramica.com\/en\/wp-json\/wp\/v2\/pages\/8478\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.argentaceramica.com\/en\/wp-json\/wp\/v2\/media?parent=8478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}