{"id":977,"date":"2026-05-30T07:46:13","date_gmt":"2026-05-30T07:46:13","guid":{"rendered":"https:\/\/macarenatorralba.es\/?p=977"},"modified":"2026-06-09T10:08:45","modified_gmt":"2026-06-09T10:08:45","slug":"servicio-de-trazabilidad","status":"publish","type":"post","link":"https:\/\/macarenatorralba.es\/en\/servicio-de-trazabilidad\/","title":{"rendered":"Traceability Service"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"977\" class=\"elementor elementor-977\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0ebe218 e-flex e-con-boxed e-con e-parent\" data-id=\"0ebe218\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2bc6427 elementor-widget elementor-widget-text-editor\" data-id=\"2bc6427\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>::sub::Plataforma de trazabilidad industrial para el sector vitivin\u00edcola::\/sub::<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>::desc::Sistema de trazabilidad end-to-end para bodegas basado en integraci\u00f3n de datos, blockchain y reconocimiento visual mediante IA. Coordin\u00e9 delivery, aterrizaje funcional y definici\u00f3n de workflows en un entorno industrial con m\u00faltiples integraciones y fuentes heterog\u00e9neas.::\/desc::<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>::tags::Trazabilidad \u00b7 Integraci\u00f3n \u00b7 IA \u00b7 AgroTech::\/tags::<\/p>\n<p><!-- \/wp:paragraph --><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ab6df4d e-flex e-con-boxed e-con e-parent\" data-id=\"ab6df4d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<h1 data-interaction-id=\"4e926dd\" class=\"H1 e-4e926dd-865ae4b e-heading-base\">Servicio de trazabilidad<\/h1>\n\t\t\t\t\t<h1 data-interaction-id=\"66adf2c\" class=\"e-66adf2c-80e00d5 H2-W e-heading-base\">Servicio de trazabilidad end-to-end para el sector vitivin\u00edcola basada en  blockchain e inteligencia artificial<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"83286bb\">Proyecto de innovaci\u00f3n orientado a mejorar la trazabilidad de procesos agro-alimentarios en el sector vitivin\u00edcola, conectando informaci\u00f3n procedente de distintas fuentes, sistemas y etapas de la cadena de valor. La soluci\u00f3n combina la integraci\u00f3n de datos, tokenizaci\u00f3n basada en blockchain y el uso de visi\u00f3n artificial para el reconocimiento de la etiqueta del producto f\u00edsico. Mi participaci\u00f3n se centra en la coordinaci\u00f3n de delivery, el aterrizaje funcional y la definici\u00f3n de workflows, ayudando a ordenar procesos complejos con m\u00faltiples integraciones, actores y fuentes de informaci\u00f3n heterog\u00e9neas.<\/p>\n\t\t\t\t\t<p class=\"e-50e51e3-2348336 Enphasis1 e-paragraph-base\" data-interaction-id=\"50e51e3\"><strong id=\"e-mpnv83k9-gzt24dx\">Trazabilidad Industrial \u00b7 AgroTech \u00b7 Blockchain \u00b7 Tokenizaci\u00f3n \u00b7 IA Visual  \u00b7 Delivery<\/strong><\/p>\n\t\t\t\t<div class=\"elementor-element elementor-element-ffb8149 elementor-widget elementor-widget-html\" data-id=\"ffb8149\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"hero-end\"><\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b5d2794 e-flex e-con-boxed e-con e-parent\" data-id=\"b5d2794\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<h2 data-interaction-id=\"e5ee11e\" class=\"H2 e-e5ee11e-b4e6501 e-heading-base\">El problema<\/h2>\n\t\t\t\t\t<p class=\"Enphasis2 e-paragraph-base\" data-interaction-id=\"09dcd9a\">El reto de digitalizar una cadena de valor fragmentada, transform\u00e1ndola en un sistema de trazabilidad claro, inmutable y conectado con la realidad operativa de las bodegas.<\/p>\n\t\t\t\t\t<p class=\"e-cd51d6d-4ffbb3d Body2 e-paragraph-base\" data-interaction-id=\"cd51d6d\">El proyecto parte de un entorno  donde la informaci\u00f3n sobre producci\u00f3n, transformaci\u00f3n y seguimiento del producto se encuentra distribuida entre procesos, sistemas y fuentes de datos heterog\u00e9neas. La dificultad radica en conectar esas evidencias de forma coherente, garantizar su fiabilidad y convertir la trazabilidad en una herramienta \u00fatil para la operaci\u00f3n, la calidad y la toma de decisiones.<\/p>\n\t\t<div class=\"elementor-element elementor-element-1f73964 e-con-full e-flex e-con e-child\" data-id=\"1f73964\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-9648f77 e-con-full e-flex e-con e-child\" data-id=\"9648f77\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-svg-base\" data-interaction-id=\"b87f4f6\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" fill=\"currentColor\" id=\"Capa_1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 74 74\" style=\"enable-background:new 0 0 74 74; width: 100%; height: 100%; overflow: unset;\" xml:space=\"preserve\"> <style type=\"text\/css\"> .st0{fill:#F0E6D9;} .st1{fill:#A07C6B;} <\/style> <path class=\"st0\" d=\"M37,0L37,0c20.4,0,37,16.6,37,37l0,0c0,20.4-16.6,37-37,37l0,0C16.6,74,0,57.4,0,37l0,0C0,16.6,16.6,0,37,0z\"><\/path> <g> <path class=\"st1\" d=\"M37.7,36.4c0.8,0,1.4-0.6,1.4-1.4s-0.6-1.4-1.4-1.4c-0.8,0-1.4,0.6-1.4,1.4S36.9,36.4,37.7,36.4z\"><\/path> <path class=\"st1\" d=\"M40.3,28.4c0.8,0,1.4-0.6,1.4-1.4s-0.6-1.4-1.4-1.4s-1.4,0.6-1.4,1.4S39.6,28.4,40.3,28.4z\"><\/path> <path class=\"st1\" d=\"M45.7,37.8c0.8,0,1.4-0.6,1.4-1.4s-0.6-1.4-1.4-1.4s-1.4,0.6-1.4,1.4S44.9,37.8,45.7,37.8z\"><\/path> <path class=\"st1\" d=\"M33.7,44.4c0.8,0,1.4-0.6,1.4-1.4s-0.6-1.4-1.4-1.4s-1.4,0.6-1.4,1.4S32.9,44.4,33.7,44.4z\"><\/path> <path class=\"st1\" d=\"M31,33.8c0.8,0,1.4-0.6,1.4-1.4s-0.6-1.4-1.4-1.4s-1.4,0.6-1.4,1.4S30.2,33.8,31,33.8z\"><\/path> <path class=\"st1\" d=\"M49,48.3H34.3c-4.2,0-6.3,0-7.4-1.1c-1.1-1.1-1.1-3.2-1.1-7.4V25c0-0.4-0.3-0.8-0.8-0.8s-0.8,0.3-0.8,0.8v14.7 c0,4.6,0,6.9,1.6,8.5c1.6,1.6,3.9,1.6,8.5,1.6H49c0.4,0,0.8-0.3,0.8-0.8S49.4,48.3,49,48.3z\"><\/path> <\/g> <\/svg><\/div>\t\t\t\t\t<h2 data-interaction-id=\"2d89378\" class=\"H3 e-heading-base\">Procesos con informaci\u00f3n dispersa<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"813b85f\">La trazabilidad vitivin\u00edcola implica m\u00faltiples etapas, actores y puntos de registro a lo largo de la cadena de valor. El reto est\u00e1 en ordenar dicha informaci\u00f3n procedente de procesos productivos, sistemas internos y fuentes externas para construir una visi\u00f3n m\u00e1s completa, fiable y consultable del recorrido del producto.<\/p>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3981375 e-con-full e-flex e-con e-child\" data-id=\"3981375\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-svg-base\" data-interaction-id=\"1fc12ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" fill=\"currentColor\" id=\"Capa_1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 74 74\" style=\"enable-background:new 0 0 74 74; width: 100%; height: 100%; overflow: unset;\" xml:space=\"preserve\"> <style type=\"text\/css\"> .st0{fill:#F0E6D9;} .st1{fill:#A07C6B;} <\/style> <path class=\"st0\" d=\"M37,0L37,0c20.4,0,37,16.6,37,37l0,0c0,20.4-16.6,37-37,37l0,0C16.6,74,0,57.4,0,37l0,0C0,16.6,16.6,0,37,0z\"><\/path> <g> <path class=\"st1\" d=\"M51.1,37c0-1.2-0.8-2-2.4-3.5c-0.8-0.8-1-1.3-1-2.4c0-0.2,0-0.3,0-0.5c0-1.1,0.1-2.5-0.9-3.4 c-0.9-0.9-2.3-0.9-3.4-0.8c-1.3,0-2-0.2-2.9-1c-1.5-1.5-2.3-2.3-3.5-2.3c-1.2,0-2,0.8-3.5,2.4c-0.9,0.9-1.6,1.1-2.9,1 c-1.1,0-2.5-0.1-3.4,0.9c-0.9,0.9-0.9,2.3-0.8,3.4c0,0.2,0,0.4,0,0.5c0,1-0.3,1.6-1,2.4c-1.5,1.5-2.4,2.4-2.4,3.5 c0,1.2,0.8,2,2.4,3.5c0.8,0.8,1,1.3,1,2.4c0,0.2,0,0.3,0,0.5c0,1.1-0.1,2.5,0.9,3.4c0.9,0.9,2.3,0.9,3.4,0.8c0.2,0,0.4,0,0.5,0 c1.1,0,1.5,0.2,2.3,1c0.1,0.1,0.3,0.3,0.4,0.4c0.8,0.8,1.8,2,3.2,2c1.4,0,2.4-1.1,3.2-2c0.1-0.2,0.3-0.3,0.4-0.4 c0.8-0.8,1.2-1,2.3-1c0.2,0,0.3,0,0.5,0c1.1,0,2.5,0.1,3.4-0.8c0.9-0.9,0.9-2.4,0.9-3.4c0-0.2,0-0.4,0-0.5c0-1.1,0.2-1.5,1-2.4 C50.2,39,51.1,38.2,51.1,37z M47.7,39.5c-1.1,1.1-1.5,1.9-1.5,3.4c0,0.2,0,0.4,0,0.6c0,0.9,0.1,1.8-0.4,2.3 c-0.5,0.5-1.4,0.4-2.3,0.4c-1.9-0.1-2.7,0.2-3.9,1.4c-0.1,0.1-0.3,0.3-0.5,0.5c-0.6,0.7-1.4,1.5-2.1,1.5s-1.5-0.8-2.1-1.5 c-0.2-0.2-0.3-0.3-0.5-0.5c-1.1-1.1-1.9-1.4-3.4-1.4c-0.2,0-0.4,0-0.6,0c-0.9,0-1.8,0.1-2.3-0.4c-0.5-0.5-0.4-1.4-0.4-2.3 c0-0.2,0-0.4,0-0.6c0-1.5-0.3-2.3-1.5-3.4c-1.3-1.3-1.9-1.9-1.9-2.5c0-0.5,0.6-1.2,1.9-2.5c1-1,1.5-2.1,1.5-3.4c0-0.2,0-0.4,0-0.6 c0-0.9-0.1-1.8,0.4-2.3c0.5-0.5,1.4-0.4,2.3-0.4c0.2,0,0.4,0,0.6,0c1.4,0,2.4-0.4,3.4-1.5c1.3-1.3,1.9-1.9,2.5-1.9 c0.5,0,1.2,0.6,2.5,1.9c1,1,2.1,1.5,3.4,1.5c0.2,0,0.4,0,0.6,0c0.9,0,1.8-0.1,2.3,0.4c0.5,0.5,0.4,1.4,0.4,2.3c0,0.2,0,0.4,0,0.6 c0,1.5,0.3,2.3,1.5,3.4c1.3,1.3,1.9,1.9,1.9,2.5C49.6,37.5,49,38.2,47.7,39.5z\"><\/path> <path class=\"st1\" d=\"M40.7,33c-2.5,1.3-4.5,4.4-5.4,6c-0.9-0.9-1.9-1.4-1.9-1.5c-0.4-0.2-0.8-0.1-1,0.3c-0.2,0.4-0.1,0.8,0.3,1 c0,0,1.4,0.8,2.1,1.9c0.1,0.2,0.4,0.4,0.6,0.4c0,0,0,0,0,0c0.3,0,0.5-0.2,0.6-0.4c0,0,2.3-4.8,5.3-6.3c0.4-0.2,0.5-0.6,0.3-1 C41.5,33,41,32.8,40.7,33z\"><\/path> <\/g> <\/svg><\/div>\t\t\t\t\t<h2 data-interaction-id=\"fac7c55\" class=\"H3 e-heading-base\">Evidencias dif\u00edciles de verificar<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"18c4b77\">En un entorno industrial, no basta con registrar datos: tambi\u00e9n es necesario poder confiar en su origen, integridad y evoluci\u00f3n. La soluci\u00f3n debe facilitar el registro de evidencias verificables, reduciendo la dependencia de controles manuales o informaci\u00f3n aislada y aportando mayor confianza sobre lo que ocurre en cada fase del proceso.<\/p>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3275712 e-con-full e-flex e-con e-child\" data-id=\"3275712\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-svg-base\" data-interaction-id=\"a4a451f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" fill=\"currentColor\" id=\"Capa_1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 74 74\" style=\"enable-background:new 0 0 74 74; width: 100%; height: 100%; overflow: unset;\" xml:space=\"preserve\"> <style type=\"text\/css\"> .st0{fill:#F0E6D9;} .st1{fill:#A07C6B;} <\/style> <path class=\"st0\" d=\"M37,0L37,0c20.4,0,37,16.6,37,37l0,0c0,20.4-16.6,37-37,37l0,0C16.6,74,0,57.4,0,37l0,0C0,16.6,16.6,0,37,0z\"><\/path> <g> <path class=\"st1\" d=\"M44,36.1c0.3-0.5,0.5-0.9,0.3-1.4c-0.2-0.5-0.6-0.7-1.1-1l-0.8-0.4c-0.1,0-0.1-0.1-0.1-0.1c0,0,0-0.1,0-0.1 l-0.1-0.8c-0.1-0.6-0.2-1-0.6-1.3c-0.4-0.3-0.9-0.2-1.5-0.2L39.2,31c-0.1,0-0.1,0-0.2,0c0,0-0.1-0.1-0.1-0.1l-0.6-0.6 c-0.4-0.4-0.8-0.7-1.3-0.7c-0.5,0-0.9,0.3-1.3,0.7l-0.6,0.6C35,30.9,35,30.9,35,31c0,0-0.1,0-0.2,0l-0.9-0.1 c-0.6-0.1-1-0.1-1.5,0.2c-0.4,0.3-0.5,0.8-0.6,1.3l-0.1,0.8c0,0.1,0,0.1,0,0.1c0,0-0.1,0-0.1,0.1l-0.8,0.4c-0.5,0.3-0.9,0.5-1.1,1 c-0.2,0.5,0,0.9,0.3,1.4l0.4,0.7c0,0,0,0.1,0.1,0.1c0,0,0,0.1-0.1,0.1L30,37.9c-0.3,0.5-0.5,0.9-0.3,1.4c0.2,0.5,0.6,0.7,1.1,1 l0.8,0.4c0.1,0,0.1,0.1,0.1,0.1c0,0,0,0.1,0,0.1l0.1,0.8c0.1,0.6,0.2,1,0.6,1.3c0.4,0.3,0.9,0.2,1.5,0.1l0.9-0.1c0.1,0,0.1,0,0.2,0 c0,0,0.1,0.1,0.1,0.1l0.6,0.6c0.4,0.4,0.8,0.7,1.3,0.7c0.5,0,0.9-0.3,1.3-0.7l0.6-0.6c0.1,0,0.1-0.1,0.1-0.1c0,0,0.1,0,0.2,0 l0.9,0.1c0.6,0.1,1,0.1,1.5-0.2c0.4-0.3,0.5-0.8,0.6-1.3l0.2-0.8c0-0.1,0-0.1,0-0.1c0,0,0.1,0,0.1-0.1l0.8-0.4 c0.5-0.3,0.9-0.5,1.1-1c0.2-0.5,0-0.9-0.3-1.4l-0.4-0.7c0,0,0-0.1-0.1-0.1c0,0,0-0.1,0.1-0.1L44,36.1z M42.3,37.8l0.4,0.7 c0,0.1,0.1,0.2,0.1,0.2c-0.1,0-0.2,0.1-0.3,0.1l-0.8,0.4c-0.3,0.1-0.5,0.3-0.7,0.5c-0.2,0.2-0.2,0.5-0.3,0.8l-0.1,0.8 c0,0.1,0,0.2-0.1,0.3c-0.1,0-0.2,0-0.4,0l-0.9-0.1c-0.3,0-0.5-0.1-0.8,0c-0.3,0.1-0.5,0.3-0.7,0.5l-0.6,0.6 c-0.1,0.1-0.2,0.2-0.3,0.2c-0.1-0.1-0.2-0.2-0.3-0.2L36.1,42c-0.2-0.2-0.4-0.4-0.7-0.5c-0.1,0-0.2-0.1-0.4-0.1c-0.1,0-0.3,0-0.5,0 l-0.9,0.1c-0.1,0-0.2,0-0.4,0c0-0.1,0-0.2-0.1-0.3l-0.1-0.8c-0.1-0.3-0.1-0.5-0.3-0.8c-0.2-0.2-0.4-0.4-0.7-0.5l-0.8-0.4 c-0.1,0-0.2-0.1-0.3-0.1c0-0.1,0.1-0.2,0.1-0.2l0.4-0.7c0.1-0.3,0.3-0.5,0.3-0.8c0-0.3-0.1-0.5-0.3-0.8l-0.4-0.7 c0-0.1-0.1-0.2-0.1-0.2c0.1,0,0.2-0.1,0.3-0.1l0.8-0.4c0.3-0.1,0.5-0.3,0.7-0.5c0.2-0.2,0.2-0.5,0.3-0.8l0.1-0.8 c0-0.1,0-0.2,0.1-0.3c0.1,0,0.2,0,0.4,0l0.9,0.1c0.3,0,0.6,0.1,0.8,0c0.3-0.1,0.5-0.3,0.7-0.5l0.6-0.6v0c0.1-0.1,0.2-0.2,0.3-0.2 c0.1,0.1,0.2,0.2,0.3,0.2l0.6,0.6c0.2,0.2,0.4,0.4,0.7,0.5c0.3,0.1,0.5,0.1,0.8,0l0.9-0.1c0.1,0,0.2,0,0.3,0c0,0.1,0,0.2,0.1,0.3 l0.2,0.8c0.1,0.3,0.1,0.5,0.3,0.8c0.2,0.2,0.4,0.3,0.7,0.5l0.8,0.4c0.1,0,0.2,0.1,0.3,0.1c0,0.1-0.1,0.2-0.1,0.2l-0.4,0.7 c-0.1,0.3-0.3,0.5-0.3,0.8C42.1,37.3,42.2,37.5,42.3,37.8z\"><\/path> <path class=\"st1\" d=\"M51.1,37c0-7.8-6.3-14.1-14.1-14.1c-2.6,0-5.1,0.7-7.3,2c-0.6-0.4-1.3-0.7-2.1-0.7c-1.9,0-3.4,1.5-3.4,3.4 c0,0.7,0.2,1.5,0.7,2.1c-1.3,2.2-2,4.7-2,7.3c0,7.8,6.3,14.1,14.1,14.1c2.6,0,5.1-0.7,7.3-2c0.6,0.4,1.3,0.7,2.1,0.7 c1.9,0,3.4-1.5,3.4-3.4c0-0.8-0.3-1.5-0.7-2.1C50.4,42.1,51.1,39.6,51.1,37z M27.7,25.8c0.5,0,1.1,0.2,1.4,0.6c0,0,0,0,0,0 c0.3,0.4,0.5,0.8,0.5,1.3c0,1.1-0.9,1.9-1.9,1.9c-0.5,0-0.9-0.2-1.3-0.5c0,0,0,0,0,0c-0.4-0.4-0.6-0.9-0.6-1.4 C25.8,26.6,26.6,25.8,27.7,25.8z M46.3,48.3c-0.5,0-1.1-0.2-1.4-0.6c0,0,0,0,0,0c-0.3-0.4-0.5-0.8-0.5-1.3c0-1.1,0.9-1.9,1.9-1.9 s1.9,0.9,1.9,1.9S47.4,48.3,46.3,48.3z M47.9,43.3c-0.5-0.2-1-0.4-1.6-0.4c-1.9,0-3.4,1.5-3.4,3.4c0,0.5,0.1,1.1,0.4,1.6 c-1.9,1.1-4.1,1.7-6.3,1.7c-6.9,0-12.6-5.6-12.6-12.6c0-2.2,0.6-4.4,1.7-6.3c0.5,0.2,1,0.4,1.6,0.4c1.9,0,3.4-1.5,3.4-3.4 c0-0.5-0.1-1.1-0.4-1.6c1.9-1.1,4.1-1.7,6.3-1.7c6.9,0,12.6,5.6,12.6,12.6C49.6,39.2,49,41.4,47.9,43.3z\"><\/path> <\/g> <\/svg><\/div>\t\t\t\t\t<h2 data-interaction-id=\"ecda4ef\" class=\"H3 e-heading-base\">Complejidad operativa y tecnol\u00f3gica<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"4abcf7e\">Los datos no se generan en un \u00fanico punto, sino en distintos momentos, con herramientas y procesos diferentes. El desaf\u00edo radica en conectar esa realidad operativa con un sistema capaz de ordenar los datos, interpretar evidencias y ofrecer una visi\u00f3n fiable del recorrido del producto sin depender de registros aislados.<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f872c5d e-flex e-con-boxed e-con e-parent\" data-id=\"f872c5d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<h2 data-interaction-id=\"3f9cab9\" class=\"H2 e-3f9cab9-61c1996 e-heading-base\">La soluci\u00f3n<\/h2>\n\t\t<div class=\"elementor-element elementor-element-dfe8ecc e-con-full e-flex e-con e-child\" data-id=\"dfe8ecc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-e11fec2 e-con-full e-flex e-con e-child\" data-id=\"e11fec2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"38970b9\" class=\"H3 e-heading-base\">App para consumidores<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-8d949df-43a25f5 e-paragraph-base\" data-interaction-id=\"8d949df\">Aplicaci\u00f3n m\u00f3vil que utiliza visi\u00f3n artificial para reconocer los datos clave de la etiqueta de un vino a partir de una imagen. A partir de esa identificaci\u00f3n, el consumidor puede consultar la trazabilidad de una botella concreta, con informaci\u00f3n sobre el origen de la uva, los procesos realizados y otros datos relevantes asociados al recorrido del producto.<\/p>\n\t\t\t\t\t<h2 data-interaction-id=\"9eae461\" class=\"H3 e-heading-base\">App para agricultores<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-fe74cc7-2f50d5b e-paragraph-base\" data-interaction-id=\"fe74cc7\">Aplicaci\u00f3n m\u00f3vil orientada a digitalizar el proceso de vendimia desde el origen. Facilita que los agricultores registren informaci\u00f3n y evidencias sobre la uva recolectada, su estado, el lote asociado y la entrega realizada a la bodega. De esta forma, la trazabilidad comienza desde las primeras fases de la cadena de valor, conectando la actividad en campo con el resto del proceso productivo.<\/p>\n\t\t\t\t\t<h2 data-interaction-id=\"b117fac\" class=\"H3 e-heading-base\">Servicio de trazabilidad<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-57b6dcb-e380a7d e-paragraph-base\" data-interaction-id=\"57b6dcb\">Servicio web integrado con la aplicaci\u00f3n de agricultores y con los distintos sistemas digitales ya existentes en las bodegas. Su funci\u00f3n es procesar datos procedentes de fuentes heterog\u00e9neas para generar evidencias de trazabilidad del vino, tanto en forma de credenciales verificables como mediante tokens registrados en blockchain, reforzando la confianza sobre el origen y evoluci\u00f3n del producto.<\/p>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b9cd191 e-con-full e-flex e-con e-child\" data-id=\"b9cd191\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" class=\"e-image-base \" data-interaction-id=\"b6cc438\" id=\"1180\" src=\"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Group-194-1.png\" width=\"1736\" height=\"1068\" srcset=\"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Group-194-1.png 1736w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Group-194-1-300x185.png 300w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Group-194-1-1024x630.png 1024w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Group-194-1-768x472.png 768w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Group-194-1-1536x945.png 1536w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Group-194-1-18x12.png 18w\" alt=\"Captura de una interfaz de trazabilidad vitivin\u00edcola con informaci\u00f3n sobre producto, evidencias y cadena de valor del vino.\"\/>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-275b451 e-flex e-con-boxed e-con e-parent\" data-id=\"275b451\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-425284a e-con-full e-flex e-con e-child\" data-id=\"425284a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-34a415c e-con-full e-flex e-con e-child\" data-id=\"34a415c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-svg-base\" data-interaction-id=\"87795a1\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" fill=\"currentColor\" id=\"Capa_1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 74 74\" style=\"enable-background:new 0 0 74 74; width: 100%; height: 100%; overflow: unset;\" xml:space=\"preserve\"> <style type=\"text\/css\"> .st2{fill:#4E9288;} .st3{fill:#FFFFFF;} <\/style> <rect y=\"0\" class=\"st2\" width=\"74\" height=\"74\"><\/rect> <g> <path class=\"st3\" d=\"M45.1,37.1L42,35.9c-1.8-0.7-3.2-2.1-3.9-3.9l-1.2-3.1c-0.3-0.8-1.1-1.3-1.9-1.3s-1.6,0.5-1.9,1.3L31.9,32 c-0.7,1.8-2.1,3.2-3.9,3.9l-3.1,1.2c-0.8,0.3-1.3,1.1-1.3,1.9s0.5,1.6,1.3,1.9l3.1,1.2c1.8,0.7,3.2,2.1,3.9,3.9l1.2,3.1 c0.3,0.8,1.1,1.3,1.9,1.3s1.6-0.5,1.9-1.3l1.2-3.1c0.7-1.8,2.1-3.2,3.9-3.9l3.1-1.2c0.8-0.3,1.3-1.1,1.3-1.9 C46.4,38.2,45.9,37.4,45.1,37.1z M44.6,39.5l-3.1,1.2c-2.2,0.9-3.9,2.6-4.8,4.8l-1.2,3.1c-0.1,0.3-0.4,0.3-0.5,0.3s-0.4,0-0.5-0.3 l-1.2-3.1c-0.9-2.2-2.6-3.9-4.8-4.8l-3.1-1.2c-0.3-0.1-0.3-0.4-0.3-0.5c0-0.1,0-0.4,0.3-0.5l3.1-1.2c2.2-0.9,3.9-2.6,4.8-4.8 l1.2-3.1v0c0.1-0.3,0.4-0.3,0.5-0.3s0.4,0,0.5,0.3l1.2,3.1c0.9,2.2,2.6,3.9,4.8,4.8l3.1,1.2c0.3,0.1,0.3,0.4,0.3,0.5 C44.9,39.1,44.9,39.4,44.6,39.5z\"><\/path> <path class=\"st3\" d=\"M49.6,27.2l-1.2-0.5c-0.6-0.2-1-0.7-1.2-1.2l-0.5-1.2c-0.2-0.5-0.6-0.8-1.1-0.8c-0.5,0-1,0.3-1.1,0.8l-0.5,1.2 c-0.2,0.6-0.7,1-1.2,1.2l-1.2,0.5c-0.5,0.2-0.8,0.6-0.8,1.1s0.3,1,0.8,1.1l1.2,0.5c0.6,0.2,1,0.7,1.2,1.2l0.5,1.2 c0.2,0.5,0.6,0.8,1.1,0.8c0.5,0,1-0.3,1.1-0.8l0.5-1.2c0.2-0.6,0.7-1,1.2-1.2l1.2-0.5c0.5-0.2,0.8-0.6,0.8-1.1S50.1,27.4,49.6,27.2 z M47.9,28.5c-0.9,0.4-1.7,1.1-2.1,2.1l-0.2,0.5l-0.2-0.5c-0.4-0.9-1.1-1.7-2.1-2.1l-0.5-0.2l0.5-0.2c0.9-0.4,1.7-1.1,2.1-2.1 l0.2-0.5l0.2,0.5c0.4,0.9,1.1,1.7,2.1,2.1l0.5,0.2L47.9,28.5z\"><\/path> <\/g> <\/svg><\/div>\t\t<div class=\"elementor-element elementor-element-c07c2d3 e-con-full e-flex e-con e-child\" data-id=\"c07c2d3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"ebfba03\" class=\"H3 e-ebfba03-4b3905a e-heading-base\">Visi\u00f3n artificial aplicada <\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"7027a56\">La soluci\u00f3n incorpora visi\u00f3n artificial para identificar datos clave de la etiqueta del vino a partir de una imagen tomada por el consumidor. Esta capa permite reconocer la botella concreta y vincularla con su informaci\u00f3n de trazabilidad, convirtiendo una interacci\u00f3n sencilla \u2014hacer una foto\u2014 en una puerta de acceso al recorrido del producto. El objetivo es acercar datos  complejos al usuario final de forma comprensible, r\u00e1pida y \u00fatil.<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ec38913 e-con-full e-flex e-con e-child\" data-id=\"ec38913\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-svg-base\" data-interaction-id=\"8c7b270\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" fill=\"currentColor\" id=\"Capa_1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 74 74\" style=\"enable-background:new 0 0 74 74; width: 100%; height: 100%; overflow: unset;\" xml:space=\"preserve\"> <style type=\"text\/css\"> .st2{fill:#4E9288;} .st3{fill:#FFFFFF;} <\/style> <rect y=\"0\" class=\"st2\" width=\"74\" height=\"74\"><\/rect> <g> <path class=\"st3\" d=\"M49.3,26.7c-1.8-1.8-4.4-1.8-9.6-1.8h-5.3c-5.2,0-7.9,0-9.6,1.8s-1.8,4.4-1.8,9.6v1.3c0,5.2,0,7.9,1.8,9.6 c1.8,1.8,4.4,1.8,9.6,1.8h5.3c5.2,0,7.9,0,9.6-1.8c1.8-1.8,1.8-4.4,1.8-9.6v-1.3C51.1,31.1,51.1,28.5,49.3,26.7z M49.6,37.7 c0,4.8,0,7.2-1.3,8.6c-1.3,1.3-3.8,1.3-8.6,1.3h-5.3c-4.8,0-7.2,0-8.6-1.3c-1.3-1.3-1.3-3.8-1.3-8.6v-1.3c0-4.8,0-7.2,1.3-8.6 s3.8-1.3,8.6-1.3h5.3c4.8,0,7.2,0,8.6,1.3c1.3,1.3,1.3,3.8,1.3,8.6V37.7z\"><\/path> <path class=\"st3\" d=\"M31.7,38.9c-2.1,0-4,1.2-4.7,3.1c-0.2,0.4,0,0.8,0.4,1c0.4,0.1,0.8,0,1-0.4c0.5-1.3,1.8-2.2,3.3-2.2 c1.5,0,2.7,0.8,3.3,2.2c0.1,0.3,0.4,0.5,0.7,0.5c0.1,0,0.2,0,0.3-0.1c0.4-0.2,0.6-0.6,0.4-1C35.6,40.1,33.8,38.9,31.7,38.9z\"><\/path> <path class=\"st3\" d=\"M31.7,37.1c1.7,0,3.1-1.4,3.1-3.1s-1.4-3.1-3.1-3.1s-3.1,1.4-3.1,3.1S30,37.1,31.7,37.1z M31.7,32.4 c0.9,0,1.6,0.7,1.6,1.6s-0.7,1.6-1.6,1.6s-1.6-0.7-1.6-1.6S30.8,32.4,31.7,32.4z\"><\/path> <path class=\"st3\" d=\"M46.3,36.2h-6.7c-0.4,0-0.8,0.3-0.8,0.8s0.3,0.8,0.8,0.8h6.7c0.4,0,0.8-0.3,0.8-0.8S46.7,36.2,46.3,36.2z\"><\/path> <path class=\"st3\" d=\"M43,40.9h-3.3c-0.4,0-0.8,0.3-0.8,0.8s0.3,0.8,0.8,0.8H43c0.4,0,0.8-0.3,0.8-0.8S43.4,40.9,43,40.9z\"><\/path> <path class=\"st3\" d=\"M46.3,31.6h-6.7c-0.4,0-0.8,0.3-0.8,0.8s0.3,0.8,0.8,0.8h6.7c0.4,0,0.8-0.3,0.8-0.8S46.7,31.6,46.3,31.6z\"><\/path> <\/g> <\/svg><\/div>\t\t<div class=\"elementor-element elementor-element-34733cc e-con-full e-flex e-con e-child\" data-id=\"34733cc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"749cb15\" class=\"H3 e-749cb15-70192cd e-heading-base\">Credenciales verificables <\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"0225d64\">La informaci\u00f3n bruta generada durante el proceso se estructura como credenciales verificables, permitiendo representar evidencias digitales sobre el origen, operaciones y evoluci\u00f3n del producto. Este enfoque facilita que determinados datos puedan ser emitidos, consultados y verificados con mayor confianza, aportando valor a\u00f1adido, preparada para escenarios donde distintas entidades necesitan compartir informaci\u00f3n fiable.<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f110657 e-con-full e-flex e-con e-child\" data-id=\"f110657\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-svg-base\" data-interaction-id=\"33a0f40\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" fill=\"currentColor\" id=\"Capa_1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 74 74\" style=\"enable-background:new 0 0 74 74; width: 100%; height: 100%; overflow: unset;\" xml:space=\"preserve\"> <style type=\"text\/css\"> .st2{fill:#4E9288;} .st3{fill:#FFFFFF;} <\/style> <rect y=\"0\" class=\"st2\" width=\"74\" height=\"74\"><\/rect> <path class=\"st3\" d=\"M48.3,34.3c-1.3,0-2.3,0.8-2.6,2h-5.3c0-0.9-0.1-1.6-0.6-2.1c-0.5-0.5-1.1-0.6-2-0.6c0.1-1.9,0.9-6,5.1-6.5 c0,0.9,0.1,1.5,0.6,2c0.6,0.6,1.4,0.6,2.8,0.6s2.2,0,2.8-0.6s0.6-1.4,0.6-2.8c0-1.4,0-2.2-0.6-2.8s-1.4-0.6-2.8-0.6s-2.2,0-2.8,0.6 c-0.5,0.5-0.6,1.1-0.6,2.1c-4.6,0.4-6.4,4.3-6.6,8c-0.9,0-1.6,0.1-2.1,0.6c-0.5,0.5-0.6,1.1-0.6,2.1h-5.3c-0.3-1.2-1.4-2-2.6-2 c-1.5,0-2.8,1.2-2.8,2.8s1.2,2.8,2.8,2.8c1.3,0,2.3-0.8,2.6-2h5.3c0,0.9,0.1,1.6,0.6,2.1c0.5,0.5,1.1,0.6,2,0.6 c-0.1,1.9-0.9,6-5.1,6.5c0-0.9-0.1-1.5-0.6-2c-0.6-0.6-1.4-0.6-2.8-0.6c-1.4,0-2.2,0-2.8,0.6s-0.6,1.4-0.6,2.8c0,1.4,0,2.2,0.6,2.8 s1.4,0.6,2.8,0.6c1.4,0,2.2,0,2.8-0.6c0.5-0.5,0.6-1.1,0.6-2.1c4.6-0.4,6.4-4.3,6.6-8c0.9,0,1.6-0.1,2.1-0.6 c0.5-0.5,0.6-1.1,0.6-2.1h5.3c0.3,1.2,1.4,2,2.6,2c1.5,0,2.8-1.2,2.8-2.8S49.9,34.3,48.3,34.3z M46.3,24.4c0.9,0,1.6,0,1.7,0.2 s0.2,0.8,0.2,1.7c0,0.9,0,1.6-0.2,1.7s-0.8,0.2-1.7,0.2s-1.6,0-1.7-0.2c-0.2-0.2-0.2-0.8-0.2-1.7c0,0,0,0,0,0s0,0,0,0 c0-0.9,0-1.6,0.2-1.7C44.8,24.4,45.4,24.4,46.3,24.4z M29.4,49.4c-0.2,0.2-0.8,0.2-1.7,0.2c-0.9,0-1.6,0-1.7-0.2s-0.2-0.8-0.2-1.7 s0-1.6,0.2-1.7s0.8-0.2,1.7-0.2c0.9,0,1.6,0,1.7,0.2s0.2,0.8,0.2,1.7S29.6,49.2,29.4,49.4z M25.7,38.3c-0.7,0-1.2-0.6-1.2-1.2 s0.6-1.2,1.2-1.2s1.2,0.6,1.2,1.2S26.4,38.3,25.7,38.3z M37,38.9c-0.9,0-1.6,0-1.7-0.2c-0.2-0.2-0.2-0.8-0.2-1.7 c0-0.9,0-1.6,0.2-1.7s0.8-0.2,1.7-0.2c0.9,0,1.6,0,1.7,0.2c0.2,0.2,0.2,0.8,0.2,1.7c0,0,0,0,0,0c0,0,0,0,0,0c0,0.9,0,1.6-0.2,1.7 C38.6,38.9,37.9,38.9,37,38.9z M48.3,38.3c-0.7,0-1.2-0.6-1.2-1.2s0.6-1.2,1.2-1.2s1.2,0.6,1.2,1.2S49,38.3,48.3,38.3z\"><\/path> <\/svg><\/div>\t\t<div class=\"elementor-element elementor-element-7dedf47 e-con-full e-flex e-con e-child\" data-id=\"7dedf47\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"be24a11\" class=\"H3 e-be24a11-b1e731a e-heading-base\">Tokenizaci\u00f3n de eventos en blockchain<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"4047e1f\">La soluci\u00f3n utiliza tokens registrados en blockchain para representar determinados hitos o evidencias relevantes dentro de la cadena de valor del vino. Esta capa permite asociar informaci\u00f3n del proceso productivo a registros trazables, resistentes a manipulaci\u00f3n y consultables posteriormente. El objetivo no es a\u00f1adir blockchain como elemento aislado, sino utilizarlo como soporte de confianza para reforzar la trazabilidad, la transparencia y la veracidad del recorrido del producto.<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-843bb9a e-con-full e-flex e-con e-child\" data-id=\"843bb9a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-svg-base\" data-interaction-id=\"b2dcb59\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"currentColor\" style=\"width: 100%; height: 100%; overflow: unset;\" viewBox=\"0 0 74 74\"><rect y=\"0\" fill=\"#4E9288\" width=\"74\" height=\"74\"><\/rect><path fill=\"#FFFFFF\" d=\"M33,43.1c-5.6,0-10.1-4.5-10.1-10.1c0-5.6,4.5-10.1,10.1-10.1c5.6,0,10.1,4.5,10.1,10.1h-1.5 c0-4.7-3.9-8.6-8.6-8.6s-8.6,3.9-8.6,8.6s3.9,8.6,8.6,8.6V43.1z\"><\/path><path fill=\"#FFFFFF\" d=\"M42.3,51.1H41c-4,0-6,0-7.4-1.4c-1.4-1.4-1.4-3.4-1.4-7.4V41c0-4,0-6,1.4-7.4c1.4-1.4,3.4-1.4,7.4-1.4h1.3 c4,0,6,0,7.4,1.4c1.4,1.4,1.4,3.4,1.4,7.4v1.3c0,4,0,6-1.4,7.4C48.3,51.1,46.3,51.1,42.3,51.1z M41,33.8c-3.6,0-5.3,0-6.3,1 c-1,1-1,2.7-1,6.3v1.3c0,3.6,0,5.3,1,6.3c1,1,2.7,1,6.3,1h1.3c3.6,0,5.3,0,6.3-1c1-1,1-2.7,1-6.3V41c0-3.6,0-5.3-1-6.3 c-1-1-2.7-1-6.3-1H41z\"><\/path><\/svg><\/div>\t\t<div class=\"elementor-element elementor-element-c11eaf2 e-con-full e-flex e-con e-child\" data-id=\"c11eaf2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"f26a523\" class=\"H3 e-f26a523-aaf2f5a e-heading-base\">Integraci\u00f3n con sistemas<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"d0066f3\">Una de las claves de la soluci\u00f3n es su conexi\u00f3n con sistemas ya digitalizados dentro de la bodega y con la informaci\u00f3n capturada desde campo. El servicio de trazabilidad procesa datos procedentes de fuentes heterog\u00e9neas para consolidarlos en una visi\u00f3n coherente del producto. Esto permite evitar procesos paralelos, reducir duplicidades y acercar la trazabilidad a la operativa real, haciendo que la tecnolog\u00eda se adapte al flujo de trabajo existente.<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-54f1df6 e-flex e-con-boxed e-con e-parent\" data-id=\"54f1df6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<h2 data-interaction-id=\"172b166\" class=\"H2 e-172b166-eba59b8 e-heading-base\">Mi rol<\/h2>\n\t\t<div class=\"elementor-element elementor-element-e47f404 e-con-full e-flex e-con e-child\" data-id=\"e47f404\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-19006b5 e-con-full e-flex e-con e-child\" data-id=\"19006b5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"bc7f129\" class=\"H3 e-heading-base\">Coordinaci\u00f3n de delivery, definici\u00f3n funcional y trazabilidad<\/h2>\n\t\t\t\t\t<p class=\"e-paragraph-base\" data-interaction-id=\"79fe016\">Mi participaci\u00f3n se centr\u00f3 en la coordinaci\u00f3n de delivery, el aterrizaje funcional y la definici\u00f3n de workflows de trazabilidad dentro de un entorno industrial con m\u00faltiples sistemas, fuentes de datos y actores implicados. Trabaj\u00e9 en la traducci\u00f3n de necesidades operativas y tecnol\u00f3gicas en flujos comprensibles, ayudando a conectar la app de agricultores, la experiencia de consulta para consumidores y el servicio web de trazabilidad integrado con los sistemas digitales de la bodega. El reto principal fue ordenar una soluci\u00f3n t\u00e9cnicamente compleja \u2014visi\u00f3n artificial, credenciales verificables, tokenizaci\u00f3n y blockchain\u2014 para que pudiera encajar en procesos reales de vendimia, producci\u00f3n y seguimiento del vino.<\/p>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-52e37af e-con-full e-flex e-con e-child\" data-id=\"52e37af\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-e8d7e0a e-con-full e-flex e-con e-child\" data-id=\"e8d7e0a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"997d69f\" class=\"Enphasis2 e-heading-base\">Resultados<\/h2>\n\t\t\t\t\t<p class=\"e-paragraph-base\" data-interaction-id=\"bcef002\">El trabajo permiti\u00f3 estructurar una soluci\u00f3n de trazabilidad m\u00e1s clara y conectada, capaz de integrar informaci\u00f3n procedente del campo, de la bodega y de fuentes heterog\u00e9neas dentro de una misma l\u00f3gica funcional. La definici\u00f3n de workflows ayud\u00f3 a ordenar c\u00f3mo se registraban, procesaban y consultaban las evidencias del producto, facilitando la relaci\u00f3n entre los distintos componentes de la soluci\u00f3n: app de agricultores, reconocimiento visual para consumidores, credenciales verificables, tokens en blockchain y servicio web de trazabilidad. Esto contribuy\u00f3 a transformar una propuesta tecnol\u00f3gica compleja en un sistema m\u00e1s accionable, comprensible y alineado con la operativa real del sector vitivin\u00edcola.<\/p>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ffcdf85 e-con-full e-flex e-con e-child\" data-id=\"ffcdf85\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"1348885\" class=\"Enphasis2 e-heading-base\">Aprendizaje<\/h2>\n\t\t\t\t\t<p class=\"e-paragraph-base\" data-interaction-id=\"55c27ca\">Este proyecto me permiti\u00f3 profundizar en c\u00f3mo aterrizar tecnolog\u00edas emergentes en contextos industriales donde la trazabilidad depende de procesos f\u00edsicos, datos distribuidos y necesidades operativas muy concretas. Uno de los principales aprendizajes fue la importancia de conectar la visi\u00f3n tecnol\u00f3gica con la realidad de uso: no basta con incorporar blockchain, IA o credenciales verificables si esos elementos no se integran de forma natural en los flujos de trabajo existentes. El proyecto reforz\u00f3 mi capacidad para coordinar delivery, ordenar requisitos funcionales y traducir soluciones t\u00e9cnicas complejas en experiencias y procesos m\u00e1s claros para distintos perfiles de usuario.<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-976881e elementor-widget elementor-widget-html\" data-id=\"976881e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- NAVEGACI\u00d3N PROYECTO ANTERIOR \/ SIGUIENTE -->\n<div class=\"mt-project-detail-nav is-loading\" id=\"mtProjectDetailNav\" aria-label=\"Navegaci\u00f3n entre proyectos\">\n  <a class=\"mt-project-detail-link mt-project-detail-prev\" id=\"mtProjectPrev\" href=\"#\">\n    <span class=\"mt-project-detail-arrow mt-project-detail-arrow-left\"><\/span>\n    <span class=\"mt-project-detail-title\">Proyecto anterior<\/span>\n  <\/a>\n\n  <a class=\"mt-project-detail-link mt-project-detail-next\" id=\"mtProjectNext\" href=\"#\">\n    <span class=\"mt-project-detail-title\">Proyecto siguiente<\/span>\n    <span class=\"mt-project-detail-arrow mt-project-detail-arrow-right\"><\/span>\n  <\/a>\n<\/div>\n\n<style>\n\/* ===== NAVEGACI\u00d3N DETALLE PROYECTO ===== *\/\n\n.mt-project-detail-nav {\n  width: 100% !important;\n  display: flex !important;\n  justify-content: space-between !important;\n  align-items: center !important;\n  gap: 32px !important;\n  margin: 0 !important;\n  padding: 0 !important;\n}\n\n.mt-project-detail-link {\n  display: inline-flex !important;\n  align-items: center !important;\n  gap: 12px !important;\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 15px !important;\n  font-weight: 500 !important;\n  line-height: 1.35 !important;\n  color: #4E9288 !important;\n  text-decoration: none !important;\n  transition: color 0.25s ease, transform 0.25s ease !important;\n}\n\n.mt-project-detail-link:hover {\n  color: #2B5E56 !important;\n}\n\n.mt-project-detail-prev:hover {\n  transform: translateX(-3px) !important;\n}\n\n.mt-project-detail-next:hover {\n  transform: translateX(3px) !important;\n}\n\n.mt-project-detail-next {\n  margin-left: auto !important;\n  text-align: right !important;\n}\n\n.mt-project-detail-arrow {\n  width: 8px !important;\n  height: 8px !important;\n  border-top: 1.6px solid currentColor !important;\n  border-right: 1.6px solid currentColor !important;\n  display: inline-block !important;\n  flex: 0 0 auto !important;\n}\n\n.mt-project-detail-arrow-left {\n  transform: rotate(-135deg) !important;\n}\n\n.mt-project-detail-arrow-right {\n  transform: rotate(45deg) !important;\n}\n\n.mt-project-detail-title {\n  display: inline-block !important;\n}\n\n.mt-project-detail-nav.is-loading {\n  opacity: 0 !important;\n  pointer-events: none !important;\n}\n\n.mt-project-detail-nav.is-empty {\n  display: none !important;\n}\n\n\/* Responsive *\/\n@media (max-width: 767px) {\n  .mt-project-detail-nav {\n    flex-direction: row !important;\n    align-items: center !important;\n    justify-content: space-between !important;\n    gap: 18px !important;\n    flex-wrap: nowrap !important;\n  }\n\n  .mt-project-detail-link {\n    font-size: 15px !important;\n    line-height: 1.6 !important;\n    color: #4E9288 !important;\n    white-space: nowrap !important;\n    max-width: 50% !important;\n    flex: 0 0 auto !important;\n  }\n\n  .mt-project-detail-title {\n    white-space: nowrap !important;\n  }\n\n  .mt-project-detail-prev {\n    justify-content: flex-start !important;\n  }\n\n  .mt-project-detail-next {\n    justify-content: flex-end !important;\n    margin-left: auto !important;\n    text-align: right !important;\n  }\n}\n<\/style>\n\n<script>\n(function () {\n  const CATEGORY_SLUG = \"proyecto-destacado\";\n  let resizeTimer = null;\n\n  function isEnglish() {\n    const path = window.location.pathname || \"\";\n    return path.startsWith(\"\/en\/\") || path === \"\/en\";\n  }\n\n  function isMobileViewport() {\n    return window.innerWidth <= 767;\n  }\n\n  function getPrevFallbackText() {\n    return isEnglish() ? \"Previous project\" : \"Proyecto anterior\";\n  }\n\n  function getNextFallbackText() {\n    return isEnglish() ? \"Next project\" : \"Proyecto siguiente\";\n  }\n\n  function getPrevMobileText() {\n    return isEnglish() ? \"Previous\" : \"Anterior\";\n  }\n\n  function getNextMobileText() {\n    return isEnglish() ? \"Next\" : \"Siguiente\";\n  }\n\n  function cleanText(value) {\n    const div = document.createElement(\"div\");\n    div.innerHTML = value || \"\";\n\n    return (div.textContent || div.innerText || \"\")\n      .replace(\/\\s+\/g, \" \")\n      .trim();\n  }\n\n  function normalizeSlugFromPath(pathname) {\n    let path = pathname || window.location.pathname || \"\";\n\n    path = path\n      .replace(\/^\\\/es\\\/\/, \"\/\")\n      .replace(\/^\\\/en\\\/\/, \"\/\")\n      .replace(\/^\\\/+|\\\/+$\/g, \"\");\n\n    const parts = path.split(\"\/\").filter(Boolean);\n\n    return parts.length ? parts[parts.length - 1] : \"\";\n  }\n\n  function localizeUrl(url) {\n    if (!url) return \"#\";\n\n    const currentPath = window.location.pathname || \"\";\n    let cleanUrl = url.replace(window.location.origin, \"\");\n\n    if (currentPath.startsWith(\"\/es\/\")) {\n      cleanUrl = cleanUrl.replace(\/^\\\/en\\\/\/, \"\/es\/\");\n    }\n\n    if (currentPath.startsWith(\"\/en\/\")) {\n      cleanUrl = cleanUrl.replace(\/^\\\/es\\\/\/, \"\/en\/\");\n    }\n\n    return cleanUrl;\n  }\n\n  async function fetchCategoryId() {\n    const response = await fetch(\"\/wp-json\/wp\/v2\/categories?slug=\" + encodeURIComponent(CATEGORY_SLUG));\n\n    if (!response.ok) {\n      throw new Error(\"No se pudo cargar la categor\u00eda\");\n    }\n\n    const categories = await response.json();\n\n    if (!categories || !categories.length) {\n      throw new Error(\"No existe la categor\u00eda \" + CATEGORY_SLUG);\n    }\n\n    return categories[0].id;\n  }\n\n  async function fetchProjectPosts(categoryId) {\n    const url =\n      \"\/wp-json\/wp\/v2\/posts\" +\n      \"?categories=\" + encodeURIComponent(categoryId) +\n      \"&per_page=100\" +\n      \"&orderby=date\" +\n      \"&order=desc\" +\n      \"&_fields=link,slug,title,date\";\n\n    const response = await fetch(url);\n\n    if (!response.ok) {\n      throw new Error(\"No se pudieron cargar los proyectos\");\n    }\n\n    return await response.json();\n  }\n\n  function updateProjectNavLabels() {\n    const prevLink = document.getElementById(\"mtProjectPrev\");\n    const nextLink = document.getElementById(\"mtProjectNext\");\n\n    if (!prevLink || !nextLink) return;\n\n    const prevTitleEl = prevLink.querySelector(\".mt-project-detail-title\");\n    const nextTitleEl = nextLink.querySelector(\".mt-project-detail-title\");\n\n    if (!prevTitleEl || !nextTitleEl) return;\n\n    const prevFullTitle = prevLink.dataset.fullTitle || getPrevFallbackText();\n    const nextFullTitle = nextLink.dataset.fullTitle || getNextFallbackText();\n\n    prevTitleEl.textContent = isMobileViewport() ? getPrevMobileText() : prevFullTitle;\n    nextTitleEl.textContent = isMobileViewport() ? getNextMobileText() : nextFullTitle;\n\n    prevLink.setAttribute(\"aria-label\", getPrevFallbackText() + \": \" + prevFullTitle);\n    nextLink.setAttribute(\"aria-label\", getNextFallbackText() + \": \" + nextFullTitle);\n  }\n\n  function renderNav(posts) {\n    const nav = document.getElementById(\"mtProjectDetailNav\");\n    const prevLink = document.getElementById(\"mtProjectPrev\");\n    const nextLink = document.getElementById(\"mtProjectNext\");\n\n    if (!nav || !prevLink || !nextLink || !posts || posts.length < 2) {\n      if (nav) nav.classList.add(\"is-empty\");\n      return;\n    }\n\n    const currentSlug = normalizeSlugFromPath(window.location.pathname);\n\n    const currentIndex = posts.findIndex(function (post) {\n      return post.slug === currentSlug;\n    });\n\n    if (currentIndex === -1) {\n      nav.classList.add(\"is-empty\");\n      return;\n    }\n\n    \/*\n      Orden por fecha descendente:\n      posts[0] = m\u00e1s reciente.\n\n      Proyecto anterior = el anterior en la lista.\n      Si estamos en el primero, vuelve al \u00faltimo.\n\n      Proyecto siguiente = el siguiente en la lista.\n      Si estamos en el \u00faltimo, vuelve al primero.\n    *\/\n    const prevIndex = currentIndex === 0 ? posts.length - 1 : currentIndex - 1;\n    const nextIndex = currentIndex === posts.length - 1 ? 0 : currentIndex + 1;\n\n    const prevPost = posts[prevIndex];\n    const nextPost = posts[nextIndex];\n\n    const prevTitle = cleanText(prevPost.title && prevPost.title.rendered) || getPrevFallbackText();\n    const nextTitle = cleanText(nextPost.title && nextPost.title.rendered) || getNextFallbackText();\n\n    prevLink.href = localizeUrl(prevPost.link);\n    nextLink.href = localizeUrl(nextPost.link);\n\n    prevLink.dataset.fullTitle = prevTitle;\n    nextLink.dataset.fullTitle = nextTitle;\n\n    updateProjectNavLabels();\n\n    nav.classList.remove(\"is-loading\");\n  }\n\n  async function initProjectDetailNav() {\n    const nav = document.getElementById(\"mtProjectDetailNav\");\n\n    if (!nav) return;\n    if (nav.dataset.initialized === \"true\") return;\n\n    nav.dataset.initialized = \"true\";\n    nav.classList.add(\"is-loading\");\n\n    try {\n      const categoryId = await fetchCategoryId();\n      const posts = await fetchProjectPosts(categoryId);\n      renderNav(posts);\n    } catch (error) {\n      nav.classList.add(\"is-empty\");\n      console.warn(\"No se pudo inicializar la navegaci\u00f3n de proyectos:\", error);\n    }\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", initProjectDetailNav);\n  } else {\n    initProjectDetailNav();\n  }\n\n  window.addEventListener(\"load\", initProjectDetailNav);\n\n  window.addEventListener(\"resize\", function () {\n    clearTimeout(resizeTimer);\n\n    resizeTimer = setTimeout(function () {\n      updateProjectNavLabels();\n    }, 150);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3844b08 e-flex e-con-boxed e-con e-parent\" data-id=\"3844b08\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<h1 data-interaction-id=\"d31df4d\" class=\"H2-W e-d31df4d-ff26771 e-heading-base\">Aterricemos trazabilidad en procesos reales<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"92d8dde\">Podemos conversar sobre trazabilidad, integraci\u00f3n de datos, IA aplicada o soluciones  que necesiten pasar de una idea tecnol\u00f3gica a una experiencia clara, \u00fatil y conectada con la operaci\u00f3n real.<\/p>\n\t\t<div class=\"elementor-element elementor-element-4819d94 e-con-full e-flex e-con e-child\" data-id=\"4819d94\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b187f00 elementor-widget elementor-widget-button\" data-id=\"b187f00\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"mailto:emacarenatorralba@gmail.com\" id=\"contacto\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Contacto<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-acd4dd0 e-flex e-con-boxed e-con e-parent\" data-id=\"acd4dd0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-1a412bf e-con-full e-flex e-con e-child\" data-id=\"1a412bf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-c06a22f e-con-full e-flex e-con e-child\" data-id=\"c06a22f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h1 data-interaction-id=\"48bb35b\" class=\"Enphasis1 e-heading-base\">Macarena Torralba<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"98cd301\">Product Innovacion \u00b7 UX Strategy \u00b7 IA &amp; Emerging Tech<\/p>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2c6fc4b e-con-full e-flex e-con e-child\" data-id=\"2c6fc4b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<p class=\"Body1 e-d1fc318-e19c763 e-paragraph-base\" data-interaction-id=\"d1fc318\"><a href=\"mailto:emacarenatorralba@gmail.com\" target=\"_self\" class=\"e-paragraph-link-base\">\n\t\tMail\n\t<\/a><\/p>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"878954b\"><a href=\"https:\/\/www.linkedin.com\/in\/macarenatorralbagarcia\/\" target=\"_blank\" class=\"e-paragraph-link-base\">\n\t\tLinkedin\n\t<\/a><\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d427851 e-con-full e-flex e-con e-child\" data-id=\"d427851\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h1 data-interaction-id=\"993a0c9\" class=\"e-993a0c9-6bc6b27 Body1 e-heading-base\">Definiendo y aterrizando productos digitales complejos desde la intersecci\u00f3n entre experiencia, tecnolog\u00eda e innovaci\u00f3n.<\/h1>\n\t\t<div class=\"elementor-element elementor-element-12e8c5d e-con-full e-flex e-con e-child\" data-id=\"12e8c5d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c681915 elementor-widget elementor-widget-html\" data-id=\"c681915\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<header class=\"mt-header\" id=\"mtHeader\">\n  <div class=\"mt-header-inner\">\n    <a class=\"mt-brand\" href=\"\/es\/\">\n      <span class=\"mt-brand-name\">Macarena Torralba<\/span>\n      <span class=\"mt-brand-role\">Product Innovation \u00b7 UX Strategy \u00b7 IA & Emerging Tech<\/span>\n    <\/a>\n\n    <button class=\"mt-burger\" id=\"mtBurger\" type=\"button\" aria-label=\"Abrir men\u00fa\" aria-expanded=\"false\">\n      <span><\/span>\n      <span><\/span>\n    <\/button>\n  <\/div>\n\n  <nav class=\"mt-menu-overlay\" id=\"mtNav\" aria-label=\"Men\u00fa principal\">\n    <div class=\"mt-menu-inner\">\n\n      <div class=\"mt-menu-top\">\n        <a class=\"mt-menu-brand\" href=\"\/es\/\">\n          <span class=\"mt-menu-brand-name\">Macarena Torralba<\/span>\n          <span class=\"mt-menu-brand-role\">Product Innovation \u00b7 UX Strategy \u00b7 IA & Emerging Tech<\/span>\n        <\/a>\n\n        <button class=\"mt-menu-close\" id=\"mtMenuClose\" type=\"button\" aria-label=\"Cerrar men\u00fa\">\n          <span><\/span>\n          <span><\/span>\n        <\/button>\n      <\/div>\n\n      <div class=\"mt-menu-content\">\n        <div class=\"mt-menu-left\">\n          <a href=\"\/es\/\" class=\"mt-menu-link\" data-menu=\"home\">Sobre m\u00ed<\/a>\n          <a href=\"\/es\/proyectos\/\" class=\"mt-menu-link\" data-menu=\"proyectos\">Mis proyectos<\/a>\n          <a href=\"\/es\/reflexiones\/\" class=\"mt-menu-link\" data-menu=\"reflexiones\">Reflexiones<\/a>\n          <a href=\"\/es\/contacto\/\" class=\"mt-menu-link\" data-menu=\"contacto\">Contacto<\/a>\n          <a href=\"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Macarena_Torralba_CV.pdf\" class=\"mt-menu-cv\" target=\"_blank\" rel=\"noopener\">Descargar CV<\/a>\n        <\/div>\n\n        <div class=\"mt-menu-right\">\n          <div class=\"mt-contact-block\">\n            <span class=\"mt-contact-title\">Contacto<\/span>\n            <a href=\"mailto:emacarenatorralba@gmail.com\">emacarenatorralba@gmail.com<\/a>\n            <a href=\"https:\/\/www.linkedin.com\/in\/macarenatorralbagarcia\/\" target=\"_blank\" rel=\"noopener\">Linkedin<\/a>\n          <\/div>\n\n          <div class=\"mt-lang-switch\" aria-label=\"Cambiar idioma\">\n            <a href=\"#\" class=\"mt-lang-option\" id=\"mtLangEN\">EN<\/a>\n            <a href=\"#\" class=\"mt-lang-option\" id=\"mtLangES\">ES<\/a>\n          <\/div>\n        <\/div>\n      <\/div>\n\n    <\/div>\n  <\/nav>\n<\/header>\n\n<style>\n\/* ===== HEADER BASE ===== *\/\n\n.mt-header {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  z-index: 9999;\n  background: transparent !important;\n  box-shadow: none !important;\n  transition: background-color 0.28s ease, box-shadow 0.28s ease, backdrop-filter 0.28s ease;\n}\n\nbody.admin-bar .mt-header {\n  top: 32px;\n}\n\n@media (max-width: 782px) {\n  body.admin-bar .mt-header {\n    top: 46px;\n  }\n}\n\n.mt-header-inner,\n.mt-menu-inner {\n  width: min(calc(100% - 160px), 1320px);\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.mt-header-inner {\n  padding: 22px 0;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.mt-brand {\n  display: flex;\n  flex-direction: column;\n  text-decoration: none;\n  gap: 2px;\n}\n\n.mt-brand-name {\n  font-family: \"Poppins\", sans-serif;\n  font-size: 16px;\n  font-weight: 600;\n  line-height: 1.2;\n  color: #ffffff;\n  transition: color 0.28s ease;\n}\n\n.mt-brand-role {\n  font-family: \"Poppins\", sans-serif;\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 1.25;\n  color: rgba(255,255,255,0.72);\n  transition: color 0.28s ease;\n}\n\n\/* Burger *\/\n.mt-burger {\n  width: 44px;\n  height: 44px;\n  border: 1px solid rgba(255,255,255,0.9);\n  border-radius: 999px;\n  background: #ffffff;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  gap: 6px;\n  cursor: pointer;\n  padding: 0;\n  appearance: none;\n  -webkit-appearance: none;\n  transition: border-color 0.28s ease, background-color 0.28s ease, box-shadow 0.28s ease;\n}\n\n.mt-burger span {\n  width: 18px;\n  height: 1.5px;\n  border-radius: 999px;\n  background: #2B5E56;\n  transition: transform 0.28s ease, background-color 0.28s ease;\n}\n\n.mt-burger:hover,\n.mt-burger:focus,\n.mt-burger:active {\n  border-color: #2B5E56 !important;\n  background: #2B5E56 !important;\n  box-shadow: 0 8px 20px rgba(43,94,86,0.22) !important;\n}\n\n.mt-burger:hover span,\n.mt-burger:focus span,\n.mt-burger:active span {\n  background: #ffffff !important;\n}\n\n\/* Estado oscuro sobre hero *\/\n.mt-header.is-dark {\n  background: rgba(16, 42, 36, 0.94) !important;\n  backdrop-filter: blur(10px);\n  box-shadow: 0 8px 24px rgba(0,0,0,0.08) !important;\n}\n\n.mt-header.is-dark .mt-burger {\n  border-color: rgba(255,255,255,0.9);\n  background: #ffffff;\n}\n\n.mt-header.is-dark .mt-burger span {\n  background: #2B5E56;\n}\n\n\/* Estado blanco despu\u00e9s del hero *\/\n.mt-header.is-cream {\n  background: rgba(255, 255, 255, 0.96) !important;\n  backdrop-filter: blur(10px);\n  box-shadow: 0 8px 24px rgba(172,140,125,0.12) !important;\n}\n\n.mt-header.is-cream .mt-brand-name {\n  color: #111111;\n}\n\n.mt-header.is-cream .mt-brand-role {\n  color: #A07C6B;\n}\n\n.mt-header.is-cream .mt-burger {\n  border-color: rgba(43,94,86,0.28);\n  background: rgba(43,94,86,0.06);\n}\n\n.mt-header.is-cream .mt-burger span {\n  background: #2B5E56;\n}\n\n.mt-header.is-cream .mt-burger:hover,\n.mt-header.is-cream .mt-burger:focus,\n.mt-header.is-cream .mt-burger:active {\n  border-color: #2B5E56 !important;\n  background: #2B5E56 !important;\n}\n\n.mt-header.is-cream .mt-burger:hover span,\n.mt-header.is-cream .mt-burger:focus span,\n.mt-header.is-cream .mt-burger:active span {\n  background: #ffffff !important;\n}\n\n\/* ===== OVERLAY MENU ===== *\/\n\n.mt-menu-overlay {\n  position: fixed;\n  left: 0;\n  right: 0;\n  top: 0;\n  background: #F7F1E8;\n  z-index: 10000;\n  opacity: 0;\n  visibility: hidden;\n  pointer-events: none;\n  transform: translateY(-28px);\n  transition: opacity 0.32s ease, transform 0.32s ease, visibility 0.32s ease;\n  overflow-y: auto;\n  max-height: 100vh;\n}\n\nbody.admin-bar .mt-menu-overlay {\n  top: 32px;\n  max-height: calc(100vh - 32px);\n}\n\n@media (max-width: 782px) {\n  body.admin-bar .mt-menu-overlay {\n    top: 46px;\n    max-height: calc(100vh - 46px);\n  }\n}\n\n.mt-menu-overlay.is-open {\n  opacity: 1;\n  visibility: visible;\n  pointer-events: auto;\n  transform: translateY(0);\n}\n\n.mt-menu-inner {\n  padding-top: 48px;\n  padding-bottom: 72px;\n  display: flex;\n  flex-direction: column;\n}\n\n.mt-menu-top {\n  display: flex;\n  align-items: flex-start;\n  justify-content: space-between;\n  margin-bottom: 96px;\n}\n\n.mt-menu-brand {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  text-decoration: none;\n}\n\n.mt-menu-brand-name {\n  font-family: \"Poppins\", sans-serif;\n  font-size: 18px;\n  font-weight: 600;\n  color: #111111;\n  line-height: 1.2;\n}\n\n.mt-menu-brand-role {\n  font-family: \"Poppins\", sans-serif;\n  font-size: 14px;\n  font-weight: 400;\n  color: #A07C6B;\n  line-height: 1.3;\n}\n\n\/* Bot\u00f3n cerrar *\/\n.mt-menu-close {\n  width: 44px;\n  height: 44px;\n  min-width: 44px;\n  min-height: 44px;\n  border-radius: 999px;\n  border: 1px solid #111111;\n  background: transparent;\n  cursor: pointer;\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0;\n  appearance: none;\n  -webkit-appearance: none;\n  font-size: 0;\n  line-height: 0;\n  transition: background-color 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease;\n}\n\n.mt-menu-close span {\n  position: absolute;\n  width: 16px;\n  height: 1.4px;\n  background: #111111;\n  border-radius: 999px;\n  transition: background-color 0.25s ease;\n}\n\n.mt-menu-close span:first-child {\n  transform: rotate(45deg);\n}\n\n.mt-menu-close span:last-child {\n  transform: rotate(-45deg);\n}\n\n.mt-menu-close:hover,\n.mt-menu-close:focus,\n.mt-menu-close:active {\n  background: #2B5E56 !important;\n  border-color: #2B5E56 !important;\n  box-shadow: 0 8px 20px rgba(43,94,86,0.22) !important;\n}\n\n.mt-menu-close:hover span,\n.mt-menu-close:focus span,\n.mt-menu-close:active span {\n  background: #ffffff !important;\n}\n\n\/* Contenido *\/\n.mt-menu-content {\n  display: grid;\n  grid-template-columns: 1.2fr 1fr;\n  gap: 120px;\n  align-items: start;\n}\n\n.mt-menu-left {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 34px;\n}\n\n.mt-menu-left a {\n  font-family: \"Poppins\", sans-serif;\n  font-size: 30px;\n  line-height: 1.15;\n  font-weight: 500;\n  color: #2B5E56;\n  text-decoration: none;\n  transition: color 0.25s ease, transform 0.25s ease, background-color 0.25s ease;\n}\n\n.mt-menu-left .mt-menu-link {\n  width: 100%;\n  padding: 18px 18px;\n  border-radius: 0;\n}\n\n.mt-menu-left .mt-menu-link:hover,\n.mt-menu-left .mt-menu-link.is-selected {\n  background: #F0E6D9;\n  color: #2B5E56;\n  transform: translateX(4px);\n}\n\n.mt-menu-left .mt-menu-cv {\n  width: fit-content;\n  margin-top: 8px;\n  font-size: 15px;\n  line-height: 1;\n  font-weight: 600;\n  color: #F7F7F5;\n  background: #2B5E56;\n  padding: 16px 24px;\n  border-radius: 999px;\n}\n\n.mt-menu-left .mt-menu-cv:hover {\n  color: #F7F7F5;\n  background: #4E9288;\n  transform: translateY(-2px);\n}\n\n.mt-menu-right {\n  display: flex;\n  flex-direction: column;\n  gap: 36px;\n}\n\n.mt-contact-block {\n  display: flex;\n  flex-direction: column;\n  gap: 22px;\n}\n\n.mt-contact-title {\n  font-family: \"Poppins\", sans-serif;\n  font-size: 20px;\n  font-weight: 600;\n  color: #A07C6B;\n  line-height: 1.2;\n}\n\n.mt-contact-block a {\n  font-family: \"Poppins\", sans-serif;\n  font-size: 15px;\n  font-weight: 400;\n  color: #444444;\n  text-decoration: underline;\n  text-underline-offset: 3px;\n}\n\n.mt-contact-block a:hover {\n  color: #2B5E56;\n}\n\n.mt-lang-switch {\n  display: inline-flex;\n  width: fit-content;\n  border: 1px solid #2B5E56;\n  border-radius: 999px;\n  overflow: hidden;\n  margin-top: 8px;\n}\n\n.mt-lang-option {\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 14px !important;\n  font-weight: 500;\n  text-decoration: none;\n  color: #2B5E56;\n  padding: 10px 16px;\n  line-height: 1;\n  min-width: 52px;\n  text-align: center;\n  transition: background-color 0.25s ease, color 0.25s ease;\n}\n\n.mt-lang-option:hover {\n  background: #F0E6D9;\n  color: #2B5E56;\n}\n\n.mt-lang-option.is-active {\n  background: #2B5E56;\n  color: #F7F7F5;\n}\n\n\/* Animaci\u00f3n interna *\/\n.mt-menu-overlay .mt-menu-brand,\n.mt-menu-overlay .mt-menu-left,\n.mt-menu-overlay .mt-menu-right,\n.mt-menu-overlay .mt-menu-close {\n  opacity: 0;\n  transform: translateY(-18px);\n  transition: opacity 0.34s ease, transform 0.34s ease;\n}\n\n.mt-menu-overlay.is-open .mt-menu-brand,\n.mt-menu-overlay.is-open .mt-menu-left,\n.mt-menu-overlay.is-open .mt-menu-right,\n.mt-menu-overlay.is-open .mt-menu-close {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n.mt-menu-overlay.is-open .mt-menu-brand {\n  transition-delay: 0.04s;\n}\n\n.mt-menu-overlay.is-open .mt-menu-close {\n  transition-delay: 0.06s;\n}\n\n.mt-menu-overlay.is-open .mt-menu-left {\n  transition-delay: 0.12s;\n}\n\n.mt-menu-overlay.is-open .mt-menu-right {\n  transition-delay: 0.18s;\n}\n\nbody.mt-menu-open {\n  overflow: hidden;\n}\n\n\/* Responsive *\/\n@media (max-width: 1200px) {\n  .mt-header-inner,\n  .mt-menu-inner {\n    width: calc(100% - 64px);\n  }\n}\n\n@media (max-width: 767px) {\n  .mt-header-inner,\n  .mt-menu-inner {\n    width: calc(100% - 40px);\n  }\n\n  .mt-header-inner {\n    padding: 18px 0;\n  }\n\n  .mt-brand-name {\n    font-size: 15px;\n  }\n\n  .mt-brand-role {\n    font-size: 12px;\n  }\n\n  .mt-menu-inner {\n    padding-top: 32px;\n    padding-bottom: 56px;\n  }\n\n  .mt-menu-top {\n    margin-bottom: 64px;\n  }\n\n  .mt-menu-content {\n    grid-template-columns: 1fr;\n    gap: 64px;\n  }\n\n  .mt-menu-left {\n    gap: 24px;\n  }\n\n  .mt-menu-left a {\n    font-size: 28px;\n  }\n\n  .mt-menu-left .mt-menu-link {\n    padding: 16px 14px;\n  }\n\n  .mt-menu-left .mt-menu-cv {\n    font-size: 15px;\n  }\n\n  .mt-menu-right {\n    gap: 32px;\n  }\n\n  .mt-menu-close {\n    width: 42px;\n    height: 42px;\n    min-width: 42px;\n    min-height: 42px;\n  }\n\n  .mt-menu-close span {\n    width: 15px;\n  }\n\n  .mt-lang-option {\n    font-size: 14px !important;\n    padding: 10px 15px;\n  }\n}\n<\/style>\n\n<script>\n(function () {\n  function initMacarenaHeader() {\n    const header = document.getElementById(\"mtHeader\");\n    const burger = document.getElementById(\"mtBurger\");\n    const closeBtn = document.getElementById(\"mtMenuClose\");\n    const nav = document.getElementById(\"mtNav\");\n    const heroEnd = document.getElementById(\"hero-end\");\n    const langEN = document.getElementById(\"mtLangEN\");\n    const langES = document.getElementById(\"mtLangES\");\n\n    if (!header || !burger || !nav) return;\n\n    if (header.dataset.initialized === \"true\") return;\n    header.dataset.initialized = \"true\";\n\n    function updateHeaderState() {\n      const scrollY = window.scrollY || window.pageYOffset;\n\n      header.classList.remove(\"is-dark\", \"is-cream\");\n\n      if (!heroEnd) {\n        header.classList.add(\"is-cream\");\n        return;\n      }\n\n      const heroBottom = heroEnd.getBoundingClientRect().top + scrollY;\n\n      if (scrollY < 80) {\n        return;\n      }\n\n      if (scrollY < heroBottom - 90) {\n        header.classList.add(\"is-dark\");\n      } else {\n        header.classList.add(\"is-cream\");\n      }\n    }\n\n    function openMenu() {\n      nav.classList.add(\"is-open\");\n      document.body.classList.add(\"mt-menu-open\");\n      burger.setAttribute(\"aria-expanded\", \"true\");\n    }\n\n    function closeMenu() {\n      nav.classList.remove(\"is-open\");\n      document.body.classList.remove(\"mt-menu-open\");\n      burger.setAttribute(\"aria-expanded\", \"false\");\n    }\n\n    function toggleMenu(event) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (nav.classList.contains(\"is-open\")) {\n        closeMenu();\n      } else {\n        openMenu();\n      }\n    }\n\n    function updateSelectedMenuItem() {\n      const path = window.location.pathname;\n      const menuLinks = nav.querySelectorAll(\".mt-menu-link\");\n\n      menuLinks.forEach(function (link) {\n        link.classList.remove(\"is-selected\");\n      });\n\n      let active = \"home\";\n\n      if (path.includes(\"\/proyectos\")) {\n        active = \"proyectos\";\n      } else if (path.includes(\"\/reflexiones\")) {\n        active = \"reflexiones\";\n      } else if (path.includes(\"\/contacto\")) {\n        active = \"contacto\";\n      } else {\n        active = \"home\";\n      }\n\n      const activeLink = nav.querySelector('[data-menu=\"' + active + '\"]');\n\n      if (activeLink) {\n        activeLink.classList.add(\"is-selected\");\n      }\n    }\n\n    function updateLanguageLinks() {\n      if (!langEN || !langES) return;\n\n      const currentPath = window.location.pathname;\n      const search = window.location.search || \"\";\n      const hash = window.location.hash || \"\";\n\n      let pathWithoutLang = currentPath;\n\n      if (currentPath.startsWith(\"\/es\/\")) {\n        pathWithoutLang = currentPath.replace(\/^\\\/es\/, \"\");\n        langES.classList.add(\"is-active\");\n        langEN.classList.remove(\"is-active\");\n      } else if (currentPath.startsWith(\"\/en\/\")) {\n        pathWithoutLang = currentPath.replace(\/^\\\/en\/, \"\");\n        langEN.classList.add(\"is-active\");\n        langES.classList.remove(\"is-active\");\n      } else {\n        langES.classList.add(\"is-active\");\n        langEN.classList.remove(\"is-active\");\n      }\n\n      if (pathWithoutLang === \"\") {\n        pathWithoutLang = \"\/\";\n      }\n\n      langES.href = \"\/es\" + pathWithoutLang + search + hash;\n      langEN.href = \"\/en\" + pathWithoutLang + search + hash;\n    }\n\n    burger.addEventListener(\"click\", toggleMenu);\n\n    if (closeBtn) {\n      closeBtn.addEventListener(\"click\", function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        closeMenu();\n      });\n    }\n\n    nav.querySelectorAll(\"a\").forEach(function (link) {\n      link.addEventListener(\"click\", function () {\n        closeMenu();\n      });\n    });\n\n    document.addEventListener(\"keydown\", function (event) {\n      if (event.key === \"Escape\") {\n        closeMenu();\n      }\n    });\n\n    window.addEventListener(\"scroll\", updateHeaderState);\n    window.addEventListener(\"resize\", updateHeaderState);\n\n    updateHeaderState();\n    updateSelectedMenuItem();\n    updateLanguageLinks();\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", initMacarenaHeader);\n  } else {\n    initMacarenaHeader();\n  }\n\n  window.addEventListener(\"load\", initMacarenaHeader);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-caba3ad elementor-widget elementor-widget-html\" data-id=\"caba3ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n.etiqueta {\n  display: inline-flex !important;\n  width: fit-content !important;\n  max-width: max-content !important;\n  white-space: nowrap !important;\n  align-items: center !important;\n  justify-content: center !important;\n  padding: 4px 10px !important;\n  border-radius: 999px !important;\n  border: 1px solid #4E9288 !important;\n  background: #4E92880D !important;\n  color: #4E9288 !important;\n  font-size: 12px !important;\n  font-weight: 500 !important;\n  line-height: 1 !important;\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1c07bce elementor-widget elementor-widget-html\" data-id=\"1c07bce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* Contenedor del paso detectado autom\u00e1ticamente *\/\n.work-step {\n  transition: box-shadow 0.3s ease, transform 0.3s ease;\n}\n\n\/* Estilos base del n\u00famero *\/\n.work-step .step-number {\n  color: #DCCFC0 !important;\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 60px !important;\n  font-weight: 300 !important;\n  line-height: 1 !important;\n  transition: color 0.3s ease, opacity 0.3s ease;\n}\n\n\/* Estilos base del t\u00edtulo *\/\n.work-step .step-title {\n  color: #A07C6B !important;\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 32px !important;\n  font-weight: 400 !important;\n  line-height: 1.2 !important;\n  transition: color 0.3s ease, opacity 0.3s ease;\n}\n\n\/* Hover sobre todo el contenedor del paso *\/\n.work-step:hover {\n  box-shadow: 10px 10px 10px 0 #AC8C7D33;\n}\n\n\/* Cambio de color al hacer hover *\/\n.work-step:hover .step-number {\n  color: #BFE1DB !important;\n}\n\n.work-step:hover .step-title {\n  color: #4E9288 !important;\n}\n\n\/* Estado activo al hacer scroll *\/\n.work-step.is-active {\n  box-shadow: 10px 10px 10px 0 #AC8C7D33;\n}\n\n.work-step.is-active .step-number {\n  color: #BFE1DB !important;\n}\n\n.work-step.is-active .step-title {\n  color: #4E9288 !important;\n}\n<\/style>\n\n<script>\n(function () {\n  function findStepContainer(element) {\n    let parent = element.parentElement;\n\n    while (parent && parent !== document.body) {\n      if (parent.querySelector(\".step-number\") && parent.querySelector(\".step-title\")) {\n        return parent;\n      }\n      parent = parent.parentElement;\n    }\n\n    return null;\n  }\n\n  function initWorkSteps() {\n    const numbers = document.querySelectorAll(\".step-number\");\n    const steps = [];\n\n    numbers.forEach((number) => {\n      const step = findStepContainer(number);\n\n      if (step && !step.classList.contains(\"work-step\")) {\n        step.classList.add(\"work-step\");\n        steps.push(step);\n      } else if (step && step.classList.contains(\"work-step\") && !steps.includes(step)) {\n        steps.push(step);\n      }\n    });\n\n    if (!steps.length) return;\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        const visibleSteps = entries\n          .filter((entry) => entry.isIntersecting)\n          .sort((a, b) => b.intersectionRatio - a.intersectionRatio);\n\n        if (visibleSteps.length > 0) {\n          steps.forEach((step) => step.classList.remove(\"is-active\"));\n          visibleSteps[0].target.classList.add(\"is-active\");\n        }\n      },\n      {\n        threshold: [0.25, 0.45, 0.65],\n        rootMargin: \"-20% 0px -40% 0px\"\n      }\n    );\n\n    steps.forEach((step) => observer.observe(step));\n  }\n\n  window.addEventListener(\"load\", initWorkSteps);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fb00974 elementor-widget elementor-widget-html\" data-id=\"fb00974\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ===== PROYECTOS DESTACADOS HOME - LAYOUT ===== *\/\n\n.proyectos-destacados-home {\n  display: flex !important;\n  flex-direction: column !important;\n  gap: 26px !important;\n  width: 100% !important;\n  margin: 0 !important;\n  padding: 0 !important;\n}\n\n\/* Card horizontal *\/\n.proyectos-destacados-home article,\n.proyectos-destacados-home li,\n.proyectos-destacados-home .lps-post,\n.proyectos-destacados-home .lps-item,\n.proyectos-destacados-home .listing-item,\n.proyectos-destacados-home > * {\n  display: grid !important;\n  grid-template-columns: 300px 1fr !important;\n  align-items: stretch !important;\n  background: #ffffff !important;\n  border-radius: 22px !important;\n  overflow: hidden !important;\n  border: none !important;\n  box-shadow: none !important;\n  min-height: 300px !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  cursor: pointer !important;\n  transition: background-color 0.28s ease, box-shadow 0.28s ease, transform 0.28s ease !important;\n}\n\n\/* Hover card *\/\n.proyectos-destacados-home article:hover,\n.proyectos-destacados-home li:hover,\n.proyectos-destacados-home .lps-post:hover,\n.proyectos-destacados-home .lps-item:hover,\n.proyectos-destacados-home .listing-item:hover,\n.proyectos-destacados-home > *:hover {\n  background: #EFE4D6 !important;\n  box-shadow: 10px 10px 10px 0 #AC8C7D33 !important;\n  transform: translateY(-2px) !important;\n}\n\n\/* Imagen izquierda *\/\n.proyectos-destacados-home a:has(img),\n.proyectos-destacados-home figure,\n.proyectos-destacados-home .lps-image,\n.proyectos-destacados-home .lps-thumbnail,\n.proyectos-destacados-home .post-thumbnail,\n.proyectos-destacados-home .featured-image {\n  width: 300px !important;\n  min-width: 300px !important;\n  max-width: 300px !important;\n  height: 100% !important;\n  min-height: 100% !important;\n  align-self: stretch !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  overflow: hidden !important;\n  display: block !important;\n  border-radius: 0 !important;\n}\n\n\/* Imagen interna *\/\n.proyectos-destacados-home img {\n  width: 100% !important;\n  height: 100% !important;\n  min-height: 100% !important;\n  object-fit: cover !important;\n  object-position: center center !important;\n  display: block !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  border-radius: 0 !important;\n}\n\n\/* Contenido derecho *\/\n.proyectos-destacados-home article > div,\n.proyectos-destacados-home li > div,\n.proyectos-destacados-home .lps-content,\n.proyectos-destacados-home .content,\n.proyectos-destacados-home .entry-content,\n.proyectos-destacados-home .listing-item-content {\n  padding: 44px 44px !important;\n  margin: 0 !important;\n  min-width: 0 !important;\n  display: flex !important;\n  flex-direction: column !important;\n  justify-content: center !important;\n}\n\n\/* T\u00edtulo *\/\n.proyectos-destacados-home h3,\n.proyectos-destacados-home h3 a {\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 28px !important;\n  line-height: 1.2 !important;\n  font-weight: 500 !important;\n  color: #111111 !important;\n  text-decoration: none !important;\n  margin: 0 0 18px 0 !important;\n  padding: 0 !important;\n  transition: color 0.28s ease !important;\n}\n\n\/* Hover t\u00edtulo *\/\n.proyectos-destacados-home article:hover h3,\n.proyectos-destacados-home article:hover h3 a,\n.proyectos-destacados-home li:hover h3,\n.proyectos-destacados-home li:hover h3 a,\n.proyectos-destacados-home .lps-post:hover h3,\n.proyectos-destacados-home .lps-post:hover h3 a,\n.proyectos-destacados-home .lps-item:hover h3,\n.proyectos-destacados-home .lps-item:hover h3 a,\n.proyectos-destacados-home .listing-item:hover h3,\n.proyectos-destacados-home .listing-item:hover h3 a,\n.proyectos-destacados-home > *:hover h3,\n.proyectos-destacados-home > *:hover h3 a {\n  color: #2B5E56 !important;\n}\n\n\/* Texto formateado *\/\n.proyectos-destacados-home .project-subtitle {\n  display: block !important;\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 17px !important;\n  line-height: 1.45 !important;\n  font-weight: 500 !important;\n  color: #A07C6B !important;\n  margin: 0 0 18px 0 !important;\n}\n\n.proyectos-destacados-home .project-desc {\n  display: block !important;\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 15px !important;\n  line-height: 1.6 !important;\n  font-weight: 400 !important;\n  color: #444444 !important;\n  margin: 0 0 20px 0 !important;\n}\n\n.proyectos-destacados-home .project-tags {\n  display: block !important;\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 13px !important;\n  line-height: 1.4 !important;\n  font-weight: 600 !important;\n  color: #2B5E56 !important;\n  margin: 0 !important;\n}\n\n\/* Ver m\u00e1s *\/\n.proyectos-destacados-home a.project-read-more,\n.proyectos-destacados-home a:not(:has(img)):not(h3 a) {\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 14px !important;\n  font-weight: 500 !important;\n  color: #4E9288 !important;\n  text-decoration: none !important;\n  margin-top: 22px !important;\n  align-self: flex-end !important;\n  display: inline-flex !important;\n  align-items: center !important;\n  gap: 8px !important;\n}\n\n\/* Flecha angular dibujada con CSS *\/\n.proyectos-destacados-home a.project-read-more::after,\n.proyectos-destacados-home a:not(:has(img)):not(h3 a)::after {\n  content: \"\" !important;\n  width: 8px !important;\n  height: 8px !important;\n  border-top: 1.5px solid currentColor !important;\n  border-right: 1.5px solid currentColor !important;\n  transform: rotate(45deg) !important;\n  display: inline-block !important;\n  margin-left: 2px !important;\n}\n\n.proyectos-destacados-home a.project-read-more:hover,\n.proyectos-destacados-home a:not(:has(img)):not(h3 a):hover {\n  color: #2B5E56 !important;\n}\n\n\/* Tablet *\/\n@media (max-width: 1024px) {\n  .proyectos-destacados-home article,\n  .proyectos-destacados-home li,\n  .proyectos-destacados-home .lps-post,\n  .proyectos-destacados-home .lps-item,\n  .proyectos-destacados-home .listing-item,\n  .proyectos-destacados-home > * {\n    grid-template-columns: 260px 1fr !important;\n    min-height: 260px !important;\n  }\n\n  .proyectos-destacados-home a:has(img),\n  .proyectos-destacados-home figure,\n  .proyectos-destacados-home .lps-image,\n  .proyectos-destacados-home .lps-thumbnail,\n  .proyectos-destacados-home .post-thumbnail,\n  .proyectos-destacados-home .featured-image {\n    width: 260px !important;\n    min-width: 260px !important;\n    max-width: 260px !important;\n    height: 100% !important;\n    min-height: 100% !important;\n    align-self: stretch !important;\n  }\n\n  .proyectos-destacados-home img {\n    width: 100% !important;\n    height: 100% !important;\n    min-height: 100% !important;\n    object-fit: cover !important;\n    object-position: center center !important;\n  }\n\n  .proyectos-destacados-home article > div,\n  .proyectos-destacados-home li > div,\n  .proyectos-destacados-home .lps-content,\n  .proyectos-destacados-home .content,\n  .proyectos-destacados-home .entry-content,\n  .proyectos-destacados-home .listing-item-content {\n    padding: 36px 34px !important;\n  }\n}\n\n\/* M\u00f3vil *\/\n@media (max-width: 767px) {\n  .proyectos-destacados-home article,\n  .proyectos-destacados-home li,\n  .proyectos-destacados-home .lps-post,\n  .proyectos-destacados-home .lps-item,\n  .proyectos-destacados-home .listing-item,\n  .proyectos-destacados-home > * {\n    grid-template-columns: 1fr !important;\n    min-height: auto !important;\n  }\n\n  .proyectos-destacados-home a:has(img),\n  .proyectos-destacados-home figure,\n  .proyectos-destacados-home .lps-image,\n  .proyectos-destacados-home .lps-thumbnail,\n  .proyectos-destacados-home .post-thumbnail,\n  .proyectos-destacados-home .featured-image {\n    width: 100% !important;\n    min-width: 100% !important;\n    max-width: 100% !important;\n    height: 220px !important;\n    min-height: 220px !important;\n    max-height: 220px !important;\n    overflow: hidden !important;\n  }\n\n  .proyectos-destacados-home img {\n    width: 100% !important;\n    height: 220px !important;\n    min-height: 220px !important;\n    max-height: 220px !important;\n    object-fit: cover !important;\n    object-position: center center !important;\n  }\n\n  .proyectos-destacados-home article > div,\n  .proyectos-destacados-home li > div,\n  .proyectos-destacados-home .lps-content,\n  .proyectos-destacados-home .content,\n  .proyectos-destacados-home .entry-content,\n  .proyectos-destacados-home .listing-item-content {\n    padding: 30px 26px !important;\n  }\n\n  .proyectos-destacados-home h3,\n  .proyectos-destacados-home h3 a {\n    font-size: 24px !important;\n  }\n\n  .proyectos-destacados-home a.project-read-more,\n  .proyectos-destacados-home a:not(:has(img)):not(h3 a) {\n    align-self: flex-start !important;\n  }\n}\n<\/style>\n\n<script>\n(function () {\n  function cleanProjectText(text) {\n    return (text || \"\")\n      .replace(\/\\u00a0\/g, \" \")\n      .replace(\/\\s+\/g, \" \")\n      .trim();\n  }\n\n  function extractMarker(text, marker) {\n    const regex = new RegExp(\"::\" + marker + \"::([\\\\s\\\\S]*?)::\\\\\/\" + marker + \"::\", \"i\");\n    const match = text.match(regex);\n    return match ? cleanProjectText(match[1]) : \"\";\n  }\n\n  function slugify(text) {\n    return (text || \"\")\n      .toString()\n      .normalize(\"NFD\")\n      .replace(\/[\\u0300-\\u036f]\/g, \"\")\n      .toLowerCase()\n      .trim()\n      .replace(\/&\/g, \"y\")\n      .replace(\/[^a-z0-9]+\/g, \"-\")\n      .replace(\/^-+|-+$\/g, \"\");\n  }\n\n  function getCurrentLangPrefix() {\n    const path = window.location.pathname || \"\";\n\n    if (path.startsWith(\"\/en\/\") || path === \"\/en\") {\n      return \"\/en\/\";\n    }\n\n    return \"\/es\/\";\n  }\n\n  function getProjectUrlFromTitle(title) {\n    const titleText = title ? title.textContent : \"\";\n    const slug = slugify(titleText);\n    const langPrefix = getCurrentLangPrefix();\n\n    if (!slug) return \"#\";\n\n    return langPrefix + slug + \"\/\";\n  }\n\n  function getDirectContentContainer(card, heading) {\n    const preferred = card.querySelector(\n      \".lps-content, .content, .entry-content, .listing-item-content\"\n    );\n\n    if (preferred && !preferred.querySelector(\"img\")) {\n      return preferred;\n    }\n\n    let current = heading ? heading.parentElement : null;\n\n    while (current && current !== card) {\n      if (current.parentElement === card) {\n        return current;\n      }\n\n      current = current.parentElement;\n    }\n\n    return heading ? heading.parentElement : null;\n  }\n\n  function makeCardClickable(card, detailUrl) {\n    if (!detailUrl || detailUrl === \"#\") return;\n\n    card.style.cursor = \"pointer\";\n    card.setAttribute(\"role\", \"link\");\n    card.setAttribute(\"tabindex\", \"0\");\n    card.setAttribute(\"aria-label\", \"Ver detalle del proyecto\");\n\n    if (card.dataset.clickableReady === \"true\") return;\n\n    card.addEventListener(\"click\", function (event) {\n      const clickedLink = event.target.closest(\"a\");\n\n      if (clickedLink) {\n        return;\n      }\n\n      window.location.href = detailUrl;\n    });\n\n    card.addEventListener(\"keydown\", function (event) {\n      if (event.key === \"Enter\") {\n        window.location.href = detailUrl;\n      }\n    });\n\n    card.dataset.clickableReady = \"true\";\n  }\n\n  function formatProjectCards() {\n    const cards = document.querySelectorAll(\n      \".proyectos-destacados-home article, \" +\n      \".proyectos-destacados-home li, \" +\n      \".proyectos-destacados-home .lps-post, \" +\n      \".proyectos-destacados-home .lps-item, \" +\n      \".proyectos-destacados-home .listing-item, \" +\n      \".proyectos-destacados-home > *\"\n    );\n\n    cards.forEach(function (card) {\n      if (card.dataset.projectFormatted === \"true\") {\n        return;\n      }\n\n      const fullText = card.textContent || \"\";\n\n      if (\n        !fullText.includes(\"::sub::\") &&\n        !fullText.includes(\"::desc::\") &&\n        !fullText.includes(\"::tags::\")\n      ) {\n        return;\n      }\n\n      const title = card.querySelector(\"h3\");\n      const contentContainer = getDirectContentContainer(card, title);\n\n      if (!title || !contentContainer) return;\n\n      const subtitle = extractMarker(fullText, \"sub\");\n      const desc = extractMarker(fullText, \"desc\");\n      const tags = extractMarker(fullText, \"tags\");\n\n      const detailUrl = getProjectUrlFromTitle(title);\n      const titleText = cleanProjectText(title.textContent);\n\n      const titleHTML =\n        '<h3><a href=\"' + detailUrl + '\">' + titleText + \"<\/a><\/h3>\";\n\n      const readMoreHTML =\n        '<a class=\"project-read-more\" href=\"' + detailUrl + '\">Ver m\u00e1s<\/a>';\n\n      contentContainer.innerHTML =\n        titleHTML +\n        (subtitle ? '<span class=\"project-subtitle\">' + subtitle + \"<\/span>\" : \"\") +\n        (desc ? '<span class=\"project-desc\">' + desc + \"<\/span>\" : \"\") +\n        (tags ? '<span class=\"project-tags\">' + tags + \"<\/span>\" : \"\") +\n        readMoreHTML;\n\n      const imageLinks = card.querySelectorAll(\"a:has(img)\");\n      imageLinks.forEach(function (link) {\n        link.setAttribute(\"href\", detailUrl);\n      });\n\n      makeCardClickable(card, detailUrl);\n\n      card.dataset.projectFormatted = \"true\";\n    });\n  }\n\n  function runProjectFormatting() {\n    formatProjectCards();\n\n    setTimeout(formatProjectCards, 300);\n    setTimeout(formatProjectCards, 900);\n    setTimeout(formatProjectCards, 1800);\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", runProjectFormatting);\n  } else {\n    runProjectFormatting();\n  }\n\n  window.addEventListener(\"load\", runProjectFormatting);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-394c60a elementor-widget elementor-widget-html\" data-id=\"394c60a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ===== OCULTAR BLOQUE T\u00c9CNICO DE PROYECTOS EN DETALLE ===== *\/\n\n\/* Oculta en p\u00e1ginas de detalle cualquier bloque que contenga los marcadores t\u00e9cnicos *\/\nbody.single-post .elementor-widget-text-editor:has(.elementor-widget-container),\nbody.single-post .elementor-widget-text-editor:has(p) {\n}\n\n\/* Bloques t\u00e9cnicos escritos como texto *\/\nbody.single-post .project-technical-meta {\n  display: none !important;\n}\n<\/style>\n\n<script>\n(function () {\n  function hideProjectTechnicalMeta() {\n    if (!document.body.classList.contains(\"single-post\")) return;\n\n    const candidates = document.querySelectorAll(\n      \".elementor-widget-text-editor, .elementor-widget-container, p, div\"\n    );\n\n    candidates.forEach(function (el) {\n      const text = el.textContent || \"\";\n\n      const isTechnicalBlock =\n        text.includes(\"::sub::\") &&\n        text.includes(\"::desc::\") &&\n        text.includes(\"::tags::\");\n\n      if (!isTechnicalBlock) return;\n\n      \/* Evita ocultar media p\u00e1gina: solo oculta bloques peque\u00f1os\/t\u00e9cnicos *\/\n      if (text.length < 2500) {\n        el.style.setProperty(\"display\", \"none\", \"important\");\n        el.classList.add(\"project-technical-meta\");\n      }\n    });\n  }\n\n  document.addEventListener(\"DOMContentLoaded\", function () {\n    setTimeout(hideProjectTechnicalMeta, 200);\n  });\n\n  window.addEventListener(\"load\", function () {\n    setTimeout(hideProjectTechnicalMeta, 300);\n    setTimeout(hideProjectTechnicalMeta, 1000);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79458f6 elementor-widget elementor-widget-html\" data-id=\"79458f6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ===== INSIGHTS HOME CARDS ===== *\/\n\n\/* Card base *\/\n.insights-home article,\n.insights-home li,\n.insights-home .lps-post,\n.insights-home .lps-item,\n.insights-home .listing-item,\n.insights-home > * {\n  background: #ffffff !important;\n  border-radius: 22px !important;\n  overflow: hidden !important;\n  border: none !important;\n  box-shadow: none !important;\n  transition: box-shadow 0.28s ease, transform 0.28s ease !important;\n}\n\n\/* Imagen rectangular *\/\n.insights-home img {\n  width: 100% !important;\n  height: 190px !important;\n  max-height: 190px !important;\n  object-fit: cover !important;\n  object-position: center center !important;\n  display: block !important;\n  border-radius: 0 !important;\n  margin: 0 !important;\n  padding: 0 !important;\n}\n\n\/* Enlace o contenedor que envuelve la imagen *\/\n.insights-home a:has(img),\n.insights-home figure,\n.insights-home .lps-image,\n.insights-home .lps-thumbnail,\n.insights-home .post-thumbnail,\n.insights-home .featured-image {\n  width: 100% !important;\n  height: 190px !important;\n  max-height: 190px !important;\n  overflow: hidden !important;\n  display: block !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  border-radius: 0 !important;\n}\n\n\/* T\u00edtulo *\/\n.insights-home h3,\n.insights-home h3 a {\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 22px !important;\n  line-height: 1.25 !important;\n  font-weight: 500 !important;\n  color: #111111 !important;\n  text-decoration: none !important;\n  transition: color 0.28s ease !important;\n}\n\n\/* Hover de card *\/\n.insights-home article:hover,\n.insights-home li:hover,\n.insights-home .lps-post:hover,\n.insights-home .lps-item:hover,\n.insights-home .listing-item:hover,\n.insights-home > *:hover {\n  box-shadow: 10px 10px 10px 0 #AC8C7D33 !important;\n  transform: translateY(-2px) !important;\n}\n\n\/* Hover del t\u00edtulo cuando haces hover en la card *\/\n.insights-home article:hover h3,\n.insights-home article:hover h3 a,\n.insights-home li:hover h3,\n.insights-home li:hover h3 a,\n.insights-home .lps-post:hover h3,\n.insights-home .lps-post:hover h3 a,\n.insights-home .lps-item:hover h3,\n.insights-home .lps-item:hover h3 a,\n.insights-home .listing-item:hover h3,\n.insights-home .listing-item:hover h3 a,\n.insights-home > *:hover h3,\n.insights-home > *:hover h3 a {\n  color: #2B5E56 !important;\n}\n\n\/* Leer m\u00e1s *\/\n.insights-home a:not(:has(img)):not(h3 a) {\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 14px !important;\n  font-weight: 500 !important;\n  color: #4E9288 !important;\n  text-decoration: none !important;\n  display: inline-flex !important;\n  align-items: center !important;\n  gap: 8px !important;\n  transition: color 0.28s ease !important;\n}\n\n\/* Flecha angular dibujada con CSS *\/\n.insights-home a:not(:has(img)):not(h3 a)::after {\n  content: \"\" !important;\n  width: 8px !important;\n  height: 8px !important;\n  border-top: 1.5px solid currentColor !important;\n  border-right: 1.5px solid currentColor !important;\n  transform: rotate(45deg) !important;\n  display: inline-block !important;\n  margin-left: 2px !important;\n}\n\n.insights-home a:not(:has(img)):not(h3 a):hover {\n  color: #2B5E56 !important;\n}\n\n\/* Tablet *\/\n@media (max-width: 1024px) {\n  .insights-home img,\n  .insights-home a:has(img),\n  .insights-home figure,\n  .insights-home .lps-image,\n  .insights-home .lps-thumbnail,\n  .insights-home .post-thumbnail,\n  .insights-home .featured-image {\n    height: 180px !important;\n    max-height: 180px !important;\n  }\n}\n\n\/* M\u00f3vil *\/\n@media (max-width: 767px) {\n  .insights-home img,\n  .insights-home a:has(img),\n  .insights-home figure,\n  .insights-home .lps-image,\n  .insights-home .lps-thumbnail,\n  .insights-home .post-thumbnail,\n  .insights-home .featured-image {\n    height: 190px !important;\n    max-height: 190px !important;\n  }\n\n  .insights-home h3,\n  .insights-home h3 a {\n    font-size: 21px !important;\n  }\n\n  .insights-home a:not(:has(img)):not(h3 a) {\n    font-size: 14px !important;\n  }\n}\n<\/style>\n\n<script>\n(function () {\n  function cleanInsightsReadMoreArrows() {\n    const links = document.querySelectorAll(\".insights-home a:not(:has(img)):not(h3 a)\");\n\n    links.forEach(function(link) {\n      link.childNodes.forEach(function(node) {\n        if (node.nodeType === Node.TEXT_NODE) {\n          node.textContent = node.textContent\n            .replace(\/[\u2192\u2197\u279c\u279d\u279e\u2794]\/g, \"\")\n            .replace(\/\\s+\/g, \" \")\n            .trim();\n        }\n      });\n    });\n  }\n\n  document.addEventListener(\"DOMContentLoaded\", function () {\n    setTimeout(cleanInsightsReadMoreArrows, 300);\n  });\n\n  window.addEventListener(\"load\", function () {\n    setTimeout(cleanInsightsReadMoreArrows, 300);\n    setTimeout(cleanInsightsReadMoreArrows, 1000);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7724a29 elementor-widget elementor-widget-html\" data-id=\"7724a29\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n  function adjustFooterContactMobile() {\n    const footerContact = document.querySelector(\".footer-contact-links\");\n    if (!footerContact) return;\n\n    const links = footerContact.querySelectorAll(\"a\");\n    if (!links.length) return;\n\n    if (window.innerWidth > 767) {\n      footerContact.style.removeProperty(\"width\");\n      footerContact.style.removeProperty(\"display\");\n      footerContact.style.removeProperty(\"flex-direction\");\n      footerContact.style.removeProperty(\"align-items\");\n      footerContact.style.removeProperty(\"text-align\");\n      footerContact.style.removeProperty(\"gap\");\n\n      links.forEach(function (link) {\n        link.style.removeProperty(\"display\");\n        link.style.removeProperty(\"width\");\n        link.style.removeProperty(\"text-align\");\n        link.style.removeProperty(\"align-self\");\n      });\n\n      return;\n    }\n\n    footerContact.style.setProperty(\"width\", \"100%\", \"important\");\n    footerContact.style.setProperty(\"display\", \"flex\", \"important\");\n    footerContact.style.setProperty(\"flex-direction\", \"column\", \"important\");\n    footerContact.style.setProperty(\"align-items\", \"flex-end\", \"important\");\n    footerContact.style.setProperty(\"text-align\", \"right\", \"important\");\n    footerContact.style.setProperty(\"gap\", \"8px\", \"important\");\n\n    links.forEach(function (link) {\n      link.style.setProperty(\"display\", \"inline-block\", \"important\");\n      link.style.setProperty(\"width\", \"auto\", \"important\");\n      link.style.setProperty(\"text-align\", \"right\", \"important\");\n      link.style.setProperty(\"align-self\", \"flex-end\", \"important\");\n    });\n  }\n\n  function runFooterContactAdjustment() {\n    adjustFooterContactMobile();\n\n    setTimeout(adjustFooterContactMobile, 300);\n    setTimeout(adjustFooterContactMobile, 1000);\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", runFooterContactAdjustment);\n  } else {\n    runFooterContactAdjustment();\n  }\n\n  window.addEventListener(\"load\", runFooterContactAdjustment);\n\n  window.addEventListener(\"resize\", function () {\n    setTimeout(adjustFooterContactMobile, 150);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1db80b5 elementor-widget elementor-widget-html\" data-id=\"1db80b5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n\n(function () {\n\n  function updateCvDownloadLink() {\n\n    const cvSpanishUrl = \"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Macarena_Torralba_CV.pdf\";\n\n    const cvEnglishUrl = \"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/06\/Macarena_Torralba_CV_EN.pdf\";\n\n\n\n    const path = window.location.pathname || \"\";\n\n    const isEnglish = path.startsWith(\"\/en\/\") || path === \"\/en\";\n\n\n\n    const cvUrl = isEnglish ? cvEnglishUrl : cvSpanishUrl;\n\n    const cvText = isEnglish ? \"Download CV\" : \"Descargar CV\";\n\n\n\n    const buttons = document.querySelectorAll(\n\n      \"#cv-download, a[href*='.pdf'], .mt-cv-link, .mt-menu-cv\"\n\n    );\n\n\n\n    buttons.forEach(function (button) {\n\n      const text = (button.textContent || \"\").trim().toLowerCase();\n\n\n\n      const looksLikeCvButton =\n\n        button.id === \"cv-download\" ||\n\n        button.classList.contains(\"mt-cv-link\") ||\n\n        button.classList.contains(\"mt-menu-cv\") ||\n\n        text.includes(\"cv\") ||\n\n        text.includes(\"descargar\") ||\n\n        text.includes(\"download\");\n\n\n\n      if (!looksLikeCvButton) return;\n\n\n\n      button.setAttribute(\"href\", cvUrl);\n\n      button.setAttribute(\"target\", \"_blank\");\n\n      button.setAttribute(\"rel\", \"noopener\");\n\n\n\n      if (text.includes(\"descargar\") || text.includes(\"download\")) {\n\n        button.textContent = cvText;\n\n      }\n\n    });\n\n  }\n\n\n\n  if (document.readyState === \"loading\") {\n\n    document.addEventListener(\"DOMContentLoaded\", updateCvDownloadLink);\n\n  } else {\n\n    updateCvDownloadLink();\n\n  }\n\n\n\n  window.addEventListener(\"load\", updateCvDownloadLink);\n\n})();\n\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a7d6a9b e-con-full e-flex e-con e-child\" data-id=\"a7d6a9b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<p class=\"Body1 e-fd665a2-9c89e97 e-paragraph-base\" data-interaction-id=\"fd665a2\"><a href=\"https:\/\/macarenatorralba.es\/es\/politica-de-privacidad\/\" target=\"_self\" class=\"e-paragraph-link-base\">\n\t\tPol\u00edtica de Privacidad\n\t<\/a><\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>::sub::Plataforma de trazabilidad industrial para el sector vitivin\u00edcola::\/sub:: ::desc::Sistema de trazabilidad end-to-end para bodegas basado en integraci\u00f3n de datos, blockchain y reconocimiento visual mediante IA. Coordin\u00e9 delivery, aterrizaje funcional y definici\u00f3n de workflows en un entorno industrial con m\u00faltiples integraciones y fuentes heterog\u00e9neas.::\/desc:: ::tags::Trazabilidad \u00b7 Integraci\u00f3n \u00b7 IA \u00b7 AgroTech::\/tags:: Servicio de trazabilidad Servicio de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":286,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_canvas","format":"standard","meta":{"footnotes":""},"categories":[3,4],"tags":[27,26,23,10,39,12,30,17,13,40,21,29,28,25,24,16,31],"class_list":["post-977","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyecto","category-proyecto-destacado","tag-agro","tag-agrotech","tag-blockchain","tag-delivery","tag-id","tag-idi","tag-ia-visual","tag-product","tag-rd","tag-research","tag-ssi","tag-token","tag-tokenizacion","tag-trazabilidad","tag-trazabilidad-industrial","tag-ux","tag-vision-artificial"],"_links":{"self":[{"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/posts\/977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/comments?post=977"}],"version-history":[{"count":90,"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/posts\/977\/revisions"}],"predecessor-version":[{"id":2048,"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/posts\/977\/revisions\/2048"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/media\/286"}],"wp:attachment":[{"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/media?parent=977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/categories?post=977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/macarenatorralba.es\/en\/wp-json\/wp\/v2\/tags?post=977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}