{"id":2161,"date":"2026-06-11T09:50:09","date_gmt":"2026-06-11T09:50:09","guid":{"rendered":"https:\/\/macarenatorralba.es\/?p=2161"},"modified":"2026-06-11T11:37:01","modified_gmt":"2026-06-11T11:37:01","slug":"ia-y-trazabilidad-para-movilidad-aeroportuaria","status":"publish","type":"post","link":"https:\/\/macarenatorralba.es\/es\/ia-y-trazabilidad-para-movilidad-aeroportuaria\/","title":{"rendered":"IA y trazabilidad para movilidad aeroportuaria"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"2161\" class=\"elementor elementor-2161\">\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::Blockchain e IA aplicadas a un veh\u00edculo aeroportuario aut\u00f3nomo.::\/sub::<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>::desc::Proyecto aborda el desarrollo de un veh\u00edculo aeroportuario aut\u00f3nomo con motor el\u00e9ctrico de rango extendido mediante hidr\u00f3geno, orientado a optimizar el traslado de aeronaves y reducir tiempos operativos en pista.::\/desc::<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>::tags::Movilidad aut\u00f3noma \u00b7 Aeropuerto \u00b7 Blockchain \u00b7 Inteligencia artificial \u00b7 Trazabilidad \u00b7 Delivery::\/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\">IA y trazabilidad para movilidad aeroportuaria<\/h1>\n\t\t\t\t\t<h1 data-interaction-id=\"66adf2c\" class=\"e-66adf2c-80e00d5 H2-W e-heading-base\">Proyecto I+D para apoyar el desarrollo de un veh\u00edculo aut\u00f3nomo de remolque de aeronaves mediante trazabilidad blockchain, optimizaci\u00f3n de producci\u00f3n y monitorizaci\u00f3n digital.<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"83286bb\">El proyecto abordaba el desarrollo de un veh\u00edculo aeroportuario aut\u00f3nomo con motor el\u00e9ctrico de rango extendido mediante hidr\u00f3geno, orientado a optimizar el traslado de aeronaves y reducir tiempos operativos en pista. Dentro del consorcio, mi participaci\u00f3n se centr\u00f3 en las capas digitales asumidas por Izertis: trazabilidad blockchain de piezas y ensamblajes, backend de auditabilidad, modelo de optimizaci\u00f3n de producci\u00f3n, QA funcional, documentaci\u00f3n, preparaci\u00f3n de demo y dise\u00f1o funcional de un panel de monitorizaci\u00f3n para la conducci\u00f3n aut\u00f3noma.<\/p>\n\t\t\t\t\t<p class=\"e-50e51e3-2348336 Enphasis1 e-paragraph-base\" data-interaction-id=\"50e51e3\"><strong>Movilidad aut\u00f3noma \u00b7 Aeropuerto \u00b7 Blockchain \u00b7 Inteligencia artificial \u00b7 Trazabilidad \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 desarrollar y validar una soluci\u00f3n de movilidad aut\u00f3noma para el entorno aeroportuario, combinando conducci\u00f3n aut\u00f3noma, innovaci\u00f3n energ\u00e9tica, trazabilidad de fabricaci\u00f3n y optimizaci\u00f3n de producci\u00f3n en un contexto altamente regulado, donde la seguridad, la auditabilidad y la coordinaci\u00f3n entre actores eran factores cr\u00edticos.<\/p>\n\t\t\t\t\t<p class=\"e-cd51d6d-4ffbb3d Body2 e-paragraph-base\" data-interaction-id=\"cd51d6d\">El proyecto abordaba un desaf\u00edo complejo: reducir tiempos operativos asociados al remolque de aeronaves mediante un veh\u00edculo aut\u00f3nomo, el\u00e9ctrico y con rango extendido por hidr\u00f3geno, capaz de operar en escenarios aeroportuarios controlados. Sin embargo, el reto no estaba solo en el veh\u00edculo f\u00edsico, sino en todo el ecosistema necesario para hacerlo viable: supervisi\u00f3n, validaci\u00f3n, trazabilidad de componentes, optimizaci\u00f3n de la producci\u00f3n y coordinaci\u00f3n entre distintos miembros del consorcio.<br><br>Al tratarse de un proyecto I+D, la soluci\u00f3n deb\u00eda avanzar entre incertidumbre t\u00e9cnica, restricciones de seguridad y validaciones progresivas. Esto implicaba diferenciar claramente entre lo probado en circuito cerrado, lo validado mediante simulaci\u00f3n y las capas digitales desarrolladas para aportar auditabilidad, control y soporte a 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=\"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=\"2d89378\" class=\"H3 e-heading-base\">Autonom\u00eda en un entorno cr\u00edtico<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"813b85f\">El entorno aeroportuario exige niveles muy altos de seguridad, coordinaci\u00f3n y control operativo. Automatizar parte del remolque de aeronaves supon\u00eda explorar c\u00f3mo un veh\u00edculo aut\u00f3nomo pod\u00eda reducir tiempos y desplazamientos innecesarios, manteniendo siempre la supervisi\u00f3n humana y reservando las maniobras finales para personal especializado.<\/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> <path class=\"st1\" d=\"M50.2,40.5c-0.9-0.9-2.2-0.9-4.5-0.9s-3.6,0-4.5,0.9c-0.8,0.8-0.9,1.9-0.9,3.8H35c-0.3-0.9-1.1-1.7-2.3-2.9 c-1.2-1.2-2-2-2.9-2.3v-5.3c1.9,0,3-0.1,3.8-0.9c0.9-0.9,0.9-2.2,0.9-4.5s0-3.6-0.9-4.5c-0.9-0.9-2.2-0.9-4.5-0.9s-3.6,0-4.5,0.9 c-0.9,0.9-0.9,2.2-0.9,4.5s0,3.6,0.9,4.5c0.8,0.8,1.9,0.9,3.8,0.9V39c-0.9,0.3-1.7,1.1-2.9,2.3l0,0c-1.6,1.6-2.4,2.4-2.4,3.7 s0.9,2.1,2.4,3.7c1.6,1.6,2.4,2.4,3.7,2.4s2.1-0.9,3.7-2.4c1.2-1.2,2-2,2.3-2.9h5.3c0,1.9,0.1,3,0.9,3.8c0.9,0.9,2.2,0.9,4.5,0.9 s3.6,0,4.5-0.9c0.9-0.9,0.9-2.2,0.9-4.5S51.1,41.4,50.2,40.5z M25.1,28.3c0-2.1,0-3,0.5-3.5c0.4-0.4,1.4-0.5,3.5-0.5s3,0,3.5,0.5 c0.4,0.4,0.5,1.4,0.5,3.5s0,3-0.5,3.5s-1.4,0.5-3.5,0.5s-3,0-3.5-0.5C25.1,31.3,25.1,30.4,25.1,28.3z M31.6,47.6c-1.4,1.4-2,2-2.6,2 c-0.6,0-1.2-0.6-2.6-2c-1.4-1.4-2-2-2-2.6s0.6-1.2,2-2.6l-0.5-0.5l0.5,0.5c1.4-1.4,2-2,2.6-2c0.6,0,1.2,0.6,2.6,2c1.4,1.4,2,2,2,2.6 S33,46.2,31.6,47.6z M49.1,48.5c-0.4,0.4-1.4,0.5-3.5,0.5c-2.1,0-3,0-3.5-0.5c-0.4-0.4-0.5-1.4-0.5-3.5c0-2.1,0-3,0.5-3.5 s1.4-0.5,3.5-0.5c2.1,0,3,0,3.5,0.5c0.4,0.4,0.5,1.4,0.5,3.5C49.6,47.1,49.6,48,49.1,48.5z\"><\/path> <\/svg><\/div>\t\t\t\t\t<h2 data-interaction-id=\"fac7c55\" class=\"H3 e-heading-base\">Trazabilidad de piezas y ensamblajes<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"18c4b77\">Ante un posible fallo, defecto o incidencia, era clave poder reconstruir qu\u00e9 componentes formaban parte de cada conjunto, c\u00f3mo se hab\u00edan ensamblado y qu\u00e9 relaciones exist\u00edan entre piezas. La trazabilidad blockchain permit\u00eda explorar una capa de registro m\u00e1s auditable y menos manipulable sobre la cadena de montaje.<\/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> <path class=\"st1\" d=\"M48.9,35.7c-0.8-0.8-1.9-0.8-3.9-0.8s-3.1,0-3.9,0.8c-0.7,0.7-0.8,1.6-0.8,3.2H37c-3.7,0-6.8-2.9-7.2-6.5 c1.5,0,2.5-0.1,3.2-0.8c0.8-0.8,0.8-1.9,0.8-3.9c0-2,0-3.1-0.8-3.9S31,22.9,29,22.9s-3.1,0-3.9,0.8c-0.8,0.8-0.8,1.9-0.8,3.9 c0,2,0,3.1,0.8,3.9c0.7,0.7,1.6,0.8,3.2,0.8v9.2c-1.6,0-2.5,0.1-3.2,0.8c-0.8,0.8-0.8,1.9-0.8,3.9c0,2,0,3.1,0.8,3.9 c0.8,0.8,1.9,0.8,3.9,0.8s3.1,0,3.9-0.8c0.8-0.8,0.8-1.9,0.8-3.9c0-2,0-3.1-0.8-3.9c-0.7-0.7-1.6-0.8-3.2-0.8v-5 c1.6,2.3,4.2,3.9,7.2,3.9h3.3c0,1.6,0.1,2.5,0.8,3.2c0.8,0.8,1.9,0.8,3.9,0.8s3.1,0,3.9-0.8s0.8-1.9,0.8-3.9 C49.8,37.6,49.8,36.5,48.9,35.7z M25.8,27.7c0-1.7,0-2.5,0.4-2.9c0.4-0.4,1.1-0.4,2.9-0.4s2.5,0,2.9,0.4c0.4,0.4,0.4,1.1,0.4,2.9 c0,1.7,0,2.5-0.4,2.9c-0.4,0.4-1.1,0.4-2.9,0.4s-2.5,0-2.9-0.4C25.8,30.2,25.8,29.4,25.8,27.7z M32.2,46.3c0,1.7,0,2.5-0.4,2.9 c-0.4,0.4-1.1,0.4-2.9,0.4s-2.5,0-2.9-0.4c-0.4-0.3-0.4-1.1-0.4-2.9s0-2.5,0.4-2.9c0.4-0.4,1.1-0.4,2.9-0.4s2.5,0,2.9,0.4 C32.2,43.8,32.2,44.6,32.2,46.3z M47.9,42.6c-0.4,0.4-1.1,0.4-2.9,0.4s-2.5,0-2.9-0.4s-0.4-1.1-0.4-2.9s0-2.5,0.4-2.9 s1.1-0.4,2.9-0.4s2.5,0,2.9,0.4s0.4,1.1,0.4,2.9S48.2,42.2,47.9,42.6z\"><\/path> <\/svg><\/div>\t\t\t\t\t<h2 data-interaction-id=\"ecda4ef\" class=\"H3 e-heading-base\">Optimizaci\u00f3n de la producci\u00f3n<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"4abcf7e\">La fabricaci\u00f3n de un veh\u00edculo innovador implica coordinar materiales, personas, tareas, puestos de trabajo y dependencias entre procesos. El reto estaba en apoyar la toma de decisiones sobre qu\u00e9 tareas priorizar, detectar cuellos de botella y anticipar si los plazos de producci\u00f3n eran alcanzables o si exist\u00eda riesgo de desviaci\u00f3n.<\/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\">Trazabilidad blockchain de componentes<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-8d949df-43a25f5 e-paragraph-base\" data-interaction-id=\"8d949df\">Se desarroll\u00f3 una infraestructura blockchain orientada a registrar informaci\u00f3n sobre piezas, componentes y ensamblajes utilizados durante la fabricaci\u00f3n del veh\u00edculo. Esta capa permit\u00eda mantener un historial auditable de las relaciones entre elementos, facilitando la trazabilidad de la cadena de montaje y proporcionando una base m\u00e1s robusta para el an\u00e1lisis de incidencias, mantenimientos o posibles defectos detectados durante el ciclo de vida del producto.<\/p>\n\t\t\t\t\t<h2 data-interaction-id=\"9eae461\" class=\"H3 e-heading-base\">Optimizaci\u00f3n inteligente de la producci\u00f3n<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-fe74cc7-2f50d5b e-paragraph-base\" data-interaction-id=\"fe74cc7\">La soluci\u00f3n incorpor\u00f3 un modelo de inteligencia artificial cl\u00e1sica dise\u00f1ado para apoyar la planificaci\u00f3n y priorizaci\u00f3n de tareas dentro del proceso de fabricaci\u00f3n. A partir de informaci\u00f3n sobre materiales disponibles, recursos humanos, dependencias entre actividades y estado de la producci\u00f3n, el sistema pod\u00eda recomendar secuencias de trabajo m\u00e1s eficientes, ayudando a anticipar cuellos de botella y evaluar la viabilidad de los plazos previstos.<\/p>\n\t\t\t\t\t<h2 data-interaction-id=\"b117fac\" class=\"H3 e-heading-base\">Monitorizaci\u00f3n de conducci\u00f3n aut\u00f3noma<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-57b6dcb-e380a7d e-paragraph-base\" data-interaction-id=\"57b6dcb\">Se dise\u00f1\u00f3 un panel de monitorizaci\u00f3n orientado a visualizar informaci\u00f3n relevante sobre el funcionamiento del veh\u00edculo aut\u00f3nomo durante pruebas y validaciones. La interfaz permit\u00eda concentrar informaci\u00f3n operativa en un \u00fanico punto de consulta, facilitando el seguimiento del comportamiento del sistema y apoyando la supervisi\u00f3n de las pruebas realizadas en simulaci\u00f3n y circuito cerrado.<\/p>\n\t\t\t\t\t<h2 data-interaction-id=\"d1c4640\" class=\"H3 e-heading-base\">Ecosistema digital para validaci\u00f3n<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-3323dc2-b40229a e-paragraph-base\" data-interaction-id=\"3323dc2\">Las distintas capas desarrolladas permit\u00edan complementar el trabajo realizado por el resto de miembros del consorcio, aportando capacidades de auditabilidad, optimizaci\u00f3n y supervisi\u00f3n sobre un proyecto que combinaba conducci\u00f3n aut\u00f3noma, electrificaci\u00f3n mediante hidr\u00f3geno y operaci\u00f3n en un entorno aeroportuario altamente exigente. El resultado fue un ecosistema digital preparado para apoyar la validaci\u00f3n tecnol\u00f3gica de una soluci\u00f3n innovadora antes de su posible despliegue en escenarios reales.<\/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=\"2173\" src=\"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/06\/Group-205-scaled.png\" width=\"2560\" height=\"1628\" srcset=\"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/06\/Group-205-scaled.png 2560w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/06\/Group-205-300x191.png 300w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/06\/Group-205-1024x651.png 1024w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/06\/Group-205-768x488.png 768w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/06\/Group-205-1536x977.png 1536w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/06\/Group-205-2048x1302.png 2048w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/06\/Group-205-18x12.png 18w\" alt=\"Panel digital de monitorizaci\u00f3n para supervisar la conducci\u00f3n aut\u00f3noma de un veh\u00edculo aeroportuario.\"\/>\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\">Auditabilidad de fabricaci\u00f3n<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"7027a56\">La capa blockchain aportaba una forma de registrar informaci\u00f3n cr\u00edtica del proceso de fabricaci\u00f3n con mayor resistencia a la manipulaci\u00f3n. M\u00e1s all\u00e1 de almacenar datos, el valor estaba en poder reconstruir relaciones entre componentes y ensamblajes cuando fuera necesario analizar una incidencia, revisar una pieza concreta o justificar decisiones dentro de un proceso industrial complejo.<\/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=\"M30.3,37.6c-0.4,0-0.8,0.3-0.8,0.8v5.3c0,0.4,0.3,0.8,0.8,0.8s0.8-0.3,0.8-0.8v-5.3 C31.1,37.9,30.7,37.6,30.3,37.6z\"><\/path> <path class=\"st3\" d=\"M37,29.6c-0.4,0-0.8,0.3-0.8,0.8v13.3c0,0.4,0.3,0.8,0.8,0.8s0.8-0.3,0.8-0.8V30.3 C37.8,29.9,37.4,29.6,37,29.6z\"><\/path> <path class=\"st3\" d=\"M43.7,34.9c-0.4,0-0.8,0.3-0.8,0.8v8c0,0.4,0.3,0.8,0.8,0.8s0.8-0.3,0.8-0.8v-8C44.4,35.3,44.1,34.9,43.7,34.9 z\"><\/path> <path class=\"st3\" d=\"M48.3,25.7c-2.1-2.1-5.2-2.1-11.3-2.1c-6.2,0-9.3,0-11.3,2.1s-2.1,5.2-2.1,11.3c0,6.2,0,9.3,2.1,11.3 c2.1,2.1,5.2,2.1,11.3,2.1c6.2,0,9.3,0,11.3-2.1c2.1-2.1,2.1-5.2,2.1-11.3S50.4,27.7,48.3,25.7z M47.3,47.3 c-1.6,1.6-4.5,1.6-10.3,1.6c-5.8,0-8.6,0-10.3-1.6c-1.6-1.6-1.6-4.5-1.6-10.3s0-8.6,1.6-10.3s4.5-1.6,10.3-1.6 c5.8,0,8.6,0,10.3,1.6c1.6,1.6,1.6,4.5,1.6,10.3S48.9,45.6,47.3,47.3z\"><\/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\">IA para optimizaci\u00f3n de producci\u00f3n<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"0225d64\">El modelo de optimizaci\u00f3n ayudaba a priorizar tareas de fabricaci\u00f3n teniendo en cuenta disponibilidad de materiales, recursos humanos, puestos de trabajo, dependencias y fechas objetivo. M\u00e1s que automatizar una decisi\u00f3n aislada, la soluci\u00f3n buscaba apoyar la planificaci\u00f3n de producci\u00f3n y anticipar cuellos de botella, retrasos o escenarios inviables antes de que impactaran en el desarrollo del veh\u00edculo.<\/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> <g> <path class=\"st3\" d=\"M42.3,49.6h-4.8L35,42.1c-0.1-0.3-0.4-0.5-0.7-0.5H23.7c-0.2,0-0.5,0.1-0.6,0.3s-0.2,0.4-0.1,0.7l2.7,8 c0.1,0.3,0.4,0.5,0.7,0.5h16c0.4,0,0.8-0.3,0.8-0.8S42.7,49.6,42.3,49.6z M26.9,49.6l-2.2-6.5h9.1l2.2,6.5H26.9z\"><\/path> <path class=\"st3\" d=\"M26.3,39.1c0.4,0,0.8-0.3,0.8-0.8v-0.7c0-2.5,0-3.5,0.6-4c0.5-0.5,1.6-0.6,4-0.6c2.5,0,3.5,0,4,0.6 c0.5,0.5,0.6,1.6,0.6,4v0.7c0,0.4,0.3,0.8,0.8,0.8s0.8-0.3,0.8-0.8v-0.7c0-2.6,0-4.1-1-5.1c-1-1-2.5-1-5.1-1c-2.6,0-4.1,0-5.1,1 c-1,1-1,2.5-1,5.1v0.7C25.6,38.7,25.9,39.1,26.3,39.1z\"><\/path> <path class=\"st3\" d=\"M43.7,41.8c1.9,0,3.4-1.5,3.4-3.4s-1.5-3.4-3.4-3.4s-3.4,1.5-3.4,3.4S41.8,41.8,43.7,41.8z M43.7,36.4 c1.1,0,1.9,0.9,1.9,1.9s-0.9,1.9-1.9,1.9s-1.9-0.9-1.9-1.9S42.6,36.4,43.7,36.4z\"><\/path> <path class=\"st3\" d=\"M31.7,29.8c1.9,0,3.4-1.5,3.4-3.4c0-1.9-1.5-3.4-3.4-3.4c-1.9,0-3.4,1.5-3.4,3.4 C28.2,28.2,29.8,29.8,31.7,29.8z M31.7,24.4c1.1,0,1.9,0.9,1.9,1.9c0,1.1-0.9,1.9-1.9,1.9c-1.1,0-1.9-0.9-1.9-1.9 C29.8,25.3,30.6,24.4,31.7,24.4z\"><\/path> <path class=\"st3\" d=\"M47.7,43.6h-8c-0.4,0-0.8,0.3-0.8,0.8s0.3,0.8,0.8,0.8h8c1.1,0,1.9,0.9,1.9,1.9v0.7c0,1.1-0.9,1.9-1.9,1.9 h-1.3c-0.4,0-0.8,0.3-0.8,0.8s0.3,0.8,0.8,0.8h1.3c1.9,0,3.4-1.5,3.4-3.4V47C51.1,45.1,49.5,43.6,47.7,43.6z\"><\/path> <\/g> <\/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\">Monitorizaci\u00f3n aut\u00f3noma<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"4047e1f\">El panel de monitorizaci\u00f3n permit\u00eda visualizar informaci\u00f3n relevante durante las pruebas de conducci\u00f3n aut\u00f3noma, facilitando el seguimiento funcional del veh\u00edculo en entornos de simulaci\u00f3n y circuito cerrado. Al tratarse de un MVP, la prioridad estaba en representar datos operativos de forma clara y \u00fatil para la validaci\u00f3n, m\u00e1s que en construir una interfaz visualmente definitiva.<\/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\" 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=\"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=\"st3\" 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<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\">Validaci\u00f3n experimental<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"d0066f3\">El proyecto combin\u00f3 desarrollo real, simulaci\u00f3n y pruebas en entorno controlado para avanzar en la validaci\u00f3n de una soluci\u00f3n altamente innovadora. El veh\u00edculo f\u00edsico lleg\u00f3 a probarse en circuito cerrado, mientras que otras capacidades se evaluaron mediante simulador y datos reales procedentes del contexto aeroportuario, manteniendo una separaci\u00f3n clara entre lo demostrado, lo simulado y lo a\u00fan pendiente de validaci\u00f3n operativa.<\/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\">Delivery, an\u00e1lisis funcional y dise\u00f1o de monitorizaci\u00f3n MVP<\/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 y seguimiento del delivery de las capas digitales asumidas por Izertis dentro del consorcio, conectando necesidades funcionales, avances t\u00e9cnicos y dependencias con otros miembros del proyecto. Trabaj\u00e9 en el an\u00e1lisis funcional, la documentaci\u00f3n, el roadmap, la preparaci\u00f3n de demos y el QA funcional de los desarrollos, adem\u00e1s del dise\u00f1o funcional de un panel MVP para la monitorizaci\u00f3n de la conducci\u00f3n aut\u00f3noma. Mi rol combin\u00f3 gesti\u00f3n, visi\u00f3n de producto y validaci\u00f3n funcional en un contexto de I+D con alta incertidumbre t\u00e9cnica y m\u00faltiples actores implicados.<\/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 proyecto dio lugar a un desarrollo real dentro de un piloto I+D, combinando un veh\u00edculo f\u00edsico probado en circuito cerrado, validaciones mediante simulador, uso de datos reales del entorno aeroportuario y varias capas digitales orientadas a trazabilidad, optimizaci\u00f3n y monitorizaci\u00f3n. Desde la parte asumida por Izertis, se trabaj\u00f3 en un backend de trazabilidad blockchain para piezas y ensamblajes, un modelo de optimizaci\u00f3n de producci\u00f3n, la integraci\u00f3n funcional de estas capacidades y un panel MVP de monitorizaci\u00f3n. Aunque la soluci\u00f3n no lleg\u00f3 a probarse en operaci\u00f3n real dentro de un aeropuerto, permiti\u00f3 avanzar en la validaci\u00f3n t\u00e9cnica del concepto y diferenciar qu\u00e9 partes estaban desarrolladas, simuladas o pendientes de validaci\u00f3n en entorno operativo.<\/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 reforz\u00f3 mi aprendizaje sobre c\u00f3mo gestionar productos y desarrollos digitales dentro de proyectos I+D complejos, especialmente cuando intervienen varios miembros de un consorcio con responsabilidades, ritmos e intereses diferentes. Me ayud\u00f3 a trabajar mejor con incertidumbre, a coordinar dependencias entre capas f\u00edsicas, software, IA y blockchain, y a mantener una comunicaci\u00f3n clara entre lo que estaba desarrollado, lo que estaba validado y lo que a\u00fan formaba parte de la exploraci\u00f3n. Tambi\u00e9n fue un aprendizaje importante sobre paciencia, coordinaci\u00f3n y realismo a la hora de llevar innovaci\u00f3n tecnol\u00f3gica hacia un caso de uso viable.<\/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\">Hablemos de innovaci\u00f3n aplicada<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"92d8dde\">Acompa\u00f1o proyectos digitales en contextos de alta incertidumbre, ayudando a ordenar requisitos, coordinar equipos, validar soluciones y convertir tecnolog\u00edas emergentes en experiencias m\u00e1s claras, \u00fatiles y demostrables.<\/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::Blockchain e IA aplicadas a un veh\u00edculo aeroportuario aut\u00f3nomo.::\/sub:: ::desc::Proyecto aborda el desarrollo de un veh\u00edculo aeroportuario aut\u00f3nomo con motor el\u00e9ctrico de rango extendido mediante hidr\u00f3geno, orientado a optimizar el traslado de aeronaves y reducir tiempos operativos en pista.::\/desc:: ::tags::Movilidad aut\u00f3noma \u00b7 Aeropuerto \u00b7 Blockchain \u00b7 Inteligencia artificial \u00b7 Trazabilidad \u00b7 Delivery::\/tags:: IA y trazabilidad [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2163,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_canvas","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[72,71,23,73,70,15,74,69,29,28,25,68],"class_list":["post-2161","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyecto","tag-aeroportuario","tag-bayesiano","tag-blockchain","tag-conduccion-autonoma","tag-hidrogeno","tag-ia","tag-industria","tag-motor-electrico-con-rango-extendido","tag-token","tag-tokenizacion","tag-trazabilidad","tag-vehiculo-tractor-autonomo"],"_links":{"self":[{"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/posts\/2161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/comments?post=2161"}],"version-history":[{"count":26,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/posts\/2161\/revisions"}],"predecessor-version":[{"id":2200,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/posts\/2161\/revisions\/2200"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/media\/2163"}],"wp:attachment":[{"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/media?parent=2161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/categories?post=2161"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/tags?post=2161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}