{"id":262,"date":"2026-06-01T12:39:01","date_gmt":"2026-06-01T12:39:01","guid":{"rendered":"https:\/\/macarenatorralba.es\/es\/?p=262"},"modified":"2026-06-09T09:57:17","modified_gmt":"2026-06-09T09:57:17","slug":"solucion-clinica-de-telemonitorizacion","status":"publish","type":"post","link":"https:\/\/macarenatorralba.es\/es\/solucion-clinica-de-telemonitorizacion\/","title":{"rendered":"Soluci\u00f3n cl\u00ednica de telemonitorizaci\u00f3n"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"262\" class=\"elementor elementor-262\">\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::Monitorizaci\u00f3n remota de pacientes con IA predictiva y seguimiento cl\u00ednico digital::\/sub::<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>::desc::Plataforma healthtech orientada a monitorizaci\u00f3n remota de pacientes con insuficiencia card\u00edaca mediante wearables, dashboards cl\u00ednicos y modelos predictivos basados en IA. Particip\u00e9 en el dise\u00f1o de una UX estrat\u00e9gica, definici\u00f3n funcional, dise\u00f1o end-to-end y soporte a delivery en un entorno cl\u00ednico multi-hospital y altamente complejo.::\/desc::<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>::tags::HealthTech \u00b7 IA \u00b7 UX Strategy \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\">Soluci\u00f3n cl\u00ednica de telemonitorizaci\u00f3n<\/h1>\n\t\t\t\t\t<h1 data-interaction-id=\"66adf2c\" class=\"e-66adf2c-80e00d5 H2-W e-heading-base\">Monitorizaci\u00f3n remota de pacientes con insuficiencia card\u00edaca mediante IA predictiva y seguimiento cl\u00ednico digital<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"83286bb\">Este fue un proyecto europeo de innovaci\u00f3n impulsado desde el \u00e1mbito p\u00fablico para desarrollar y validar soluciones tecnol\u00f3gicas avanzadas en un entorno cl\u00ednico real. Su objetivo era mejorar la calidad de vida de pacientes con insuficiencia card\u00edaca cr\u00f3nica mediante monitorizaci\u00f3n remota, seguimiento cl\u00ednico continuo y modelos predictivos basados en inteligencia artificial. La iniciativa se desarroll\u00f3 en el marco de un consorcio internacional y permiti\u00f3 probar la soluci\u00f3n en tres pilotos hospitalarios, acercando la prevenci\u00f3n, el acompa\u00f1amiento cl\u00ednico y la toma de decisiones basada en datos a la pr\u00e1ctica asistencial.<\/p>\n\t\t\t\t\t<p class=\"e-50e51e3-2348336 Enphasis1 e-paragraph-base\" data-interaction-id=\"50e51e3\">HealthTech \u00b7 IA Predictiva \u00b7 UX Estrat\u00e9gica \u00b7 Producto Digital \u00b7 Delivery \u00b7 I+D Europeo<\/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-a67a221 e-heading-base\">El problema<\/h2>\n\t\t\t\t\t<p class=\"Enphasis2 e-paragraph-base\" data-interaction-id=\"09dcd9a\">El reto era transformar la atenci\u00f3n a personas mayores en una experiencia  continua, coordinada y remota, sin a\u00f1adir complejidad a quienes m\u00e1s necesitan claridad.<\/p>\n\t\t\t\t\t<p class=\"e-cd51d6d-4ffbb3d Body2 e-paragraph-base\" data-interaction-id=\"cd51d6d\">Un proyecto donde la clave no era solo crear una plataforma, sino dise\u00f1ar una soluci\u00f3n capaz de mejorar el seguimiento de personas con enfermedades cr\u00f3nicas, facilitar la coordinaci\u00f3n asistencial y reducir fricci\u00f3n en perfiles con baja autonom\u00eda digital. El reto estaba en hacer que la tecnolog\u00eda encajara en procesos reales de salud y cuidados sin a\u00f1adir m\u00e1s complejidad.<\/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=\"M51.1,32.6c-0.1-3-1.5-5.6-3.7-7c-3.2-2-6.7-1.9-9.4,0.1c-0.4,0.3-0.7,0.5-0.9,0.7c-0.2-0.1-0.6-0.4-0.9-0.7 c-2.7-2-6.2-2.1-9.4-0.1c-2.2,1.4-3.6,4-3.7,7c-0.2,5,3,10.4,8.7,14.7c2.1,1.6,3.3,2.4,5.3,2.4c2,0,3.2-0.9,5.3-2.4 C48.1,43,51.3,37.7,51.1,32.6z M41.4,46.1c-2,1.5-2.9,2.1-4.4,2.1c-1.5,0-2.4-0.7-4.4-2.1c-5.4-4-8.3-8.9-8.1-13.4 c0.1-2.5,1.2-4.7,3-5.7c1.5-0.9,2.8-1.2,3.9-1.2c1.8,0,3.1,0.8,3.8,1.3c1,0.7,1.3,1,1.8,1s0.9-0.3,1.8-1c1.1-0.8,3.9-2.4,7.7-0.1 c1.8,1.1,2.9,3.2,3,5.7C49.8,37.3,46.8,42.1,41.4,46.1z\"><\/path> <path class=\"st1\" d=\"M41,36.3h-3.2V33c0-0.4-0.3-0.8-0.8-0.8s-0.8,0.3-0.8,0.8v3.2H33c-0.4,0-0.8,0.3-0.8,0.8s0.3,0.8,0.8,0.8h3.2 V41c0,0.4,0.3,0.8,0.8,0.8s0.8-0.3,0.8-0.8v-3.2H41c0.4,0,0.8-0.3,0.8-0.8S41.4,36.3,41,36.3z\"><\/path> <\/g> <\/svg><\/div>\t\t\t\t\t<h2 data-interaction-id=\"2d89378\" class=\"H3 e-heading-base\">Seguimiento continuo en pacientes vulnerables<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"813b85f\">Las personas mayores o con necesidades de cuidado continuado requieren una atenci\u00f3n que no se limite a momentos puntuales. El reto estaba en facilitar un seguimiento m\u00e1s constante, preventivo y conectado con la realidad diaria del paciente, permitiendo detectar cambios relevantes sin depender \u00fanicamente de visitas presenciales o contactos aislados.<\/p>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3981375 e-con-full e-flex e-con e-child\" data-id=\"3981375\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-svg-base\" data-interaction-id=\"1fc12ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" fill=\"currentColor\" id=\"Capa_1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 74 74\" style=\"enable-background:new 0 0 74 74; width: 100%; height: 100%; overflow: unset;\" xml:space=\"preserve\"> <style type=\"text\/css\"> .st0{fill:#F0E6D9;} .st1{fill:#A07C6B;} <\/style> <path class=\"st0\" d=\"M37,0L37,0c20.4,0,37,16.6,37,37l0,0c0,20.4-16.6,37-37,37l0,0C16.6,74,0,57.4,0,37l0,0C0,16.6,16.6,0,37,0z\"><\/path> <g> <path class=\"st1\" d=\"M50.1,33.3c-0.9-0.9-2.2-1-4.3-1c0-3.5-0.1-5.3-1.4-6.6C43,24.3,41,24.3,37,24.3c-4,0-6,0-7.4,1.4 c-1.3,1.3-1.4,3.1-1.4,6.6c-2.2,0-3.4,0.1-4.3,1c-1,1-1,2.5-1,5.1v5.3c0,2.6,0,4.1,1,5.1s2.5,1,5.1,1h5.3h5.3H45c2.6,0,4.1,0,5.1-1 c1-1,1-2.5,1-5.1v-5.3C51.1,35.7,51.1,34.3,50.1,33.3z M24.4,43.7v-5.3c0-2.5,0-3.5,0.6-4c0.5-0.5,1.3-0.6,3.3-0.6v14.5 c-1.9,0-2.8-0.1-3.3-0.6C24.4,47.1,24.4,46.1,24.4,43.7z M29.8,33c0-3.6,0-5.3,1-6.3c1-1,2.7-1,6.3-1s5.3,0,6.3,1c1,1,1,2.7,1,6.3 v15.2h-3.8V45c0-1.9-1.5-3.4-3.4-3.4s-3.4,1.5-3.4,3.4v3.2h-3.8V33z M35.1,48.3V45c0-1.1,0.9-1.9,1.9-1.9s1.9,0.9,1.9,1.9v3.2H35.1 z M49.6,43.7c0,2.5,0,3.5-0.6,4c-0.5,0.5-1.3,0.6-3.3,0.6V33.8c1.9,0,2.8,0.1,3.3,0.6c0.5,0.5,0.6,1.6,0.6,4V43.7z\"><\/path> <path class=\"st1\" d=\"M34.3,33.7h1.9v1.9c0,0.4,0.3,0.8,0.8,0.8s0.8-0.3,0.8-0.8v-1.9h1.9c0.4,0,0.8-0.3,0.8-0.8s-0.3-0.8-0.8-0.8 h-1.9v-1.9c0-0.4-0.3-0.8-0.8-0.8s-0.8,0.3-0.8,0.8v1.9h-1.9c-0.4,0-0.8,0.3-0.8,0.8S33.9,33.7,34.3,33.7z\"><\/path> <\/g> <\/svg><\/div>\t\t\t\t\t<h2 data-interaction-id=\"fac7c55\" class=\"H3 e-heading-base\">Coordinaci\u00f3n entre salud, cuidados y tecnolog\u00eda<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"18c4b77\">El contexto exig\u00eda coordinar necesidades cl\u00ednicas, operativas y tecnol\u00f3gicas entre el consorcio, varias empresas y tres hospitales piloto. M\u00e1s all\u00e1 de dise\u00f1ar una herramienta, la soluci\u00f3n deb\u00eda facilitar el trabajo conjunto entre equipos sanitarios, t\u00e9cnicos y de gesti\u00f3n, ayudando a ordenar informaci\u00f3n y mantener la claridad en un entorno asistencial ya fragmentado.<\/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=\"M49.7,33.6c-1.3-1.3-3.2-1.4-6.6-1.4c-0.4-5.2-4.7-9.3-10-9.3c-5.6,0-10.1,4.5-10.1,10.1c0,5.3,4.1,9.7,9.3,10 c0,3.5,0.1,5.3,1.4,6.6c1.4,1.4,3.4,1.4,7.4,1.4h1.3c4,0,6,0,7.4-1.4c1.4-1.4,1.4-3.4,1.4-7.4V41C51.1,37,51.1,35,49.7,33.6z M32.2,41v0.5c-4.4-0.4-7.8-4.1-7.8-8.5c0-4.7,3.9-8.6,8.6-8.6c4.5,0,8.2,3.5,8.5,7.8H41c-4,0-6,0-7.4,1.4C32.2,35,32.2,37,32.2,41z M49.6,42.3c0,3.6,0,5.3-1,6.3c-1,1-2.7,1-6.3,1H41c-3.6,0-5.3,0-6.3-1c-1-1-1-2.7-1-6.3V41c0-3.6,0-5.3,1-6.3c1-1,2.7-1,6.3-1h1.3 c3.6,0,5.3,0,6.3,1c1,1,1,2.7,1,6.3V42.3z\"><\/path> <\/svg><\/div>\t\t\t\t\t<h2 data-interaction-id=\"ecda4ef\" class=\"H3 e-heading-base\">Usabilidad para perfiles con baja autonom\u00eda digital<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"4abcf7e\">Uno de los principales desaf\u00edos era dise\u00f1ar una experiencia accesible, clara y f\u00e1cil de usar para personas mayores y cuidadores, sin perder utilidad para los profesionales. La interfaz deb\u00eda reducir fricci\u00f3n, simplificar tareas y transmitir confianza, teniendo en cuenta barreras reales de edad, contexto, comprensi\u00f3n y familiaridad tecnol\u00f3gica.<\/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-ccb305a 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\">Patient App<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-8d949df-43a25f5 e-paragraph-base\" data-interaction-id=\"8d949df\">App m\u00f3vil que permite al paciente registrar informaci\u00f3n relevante sobre su estado de salud, consultar tareas diarias y mantener una conexi\u00f3n m\u00e1s continua con el equipo cl\u00ednico. La experiencia de usuario se simplifica para hacerla accesible, recopilando datos autom\u00e1ticamente gracias a la conexi\u00f3n con  dispositivos IoT de monitorizaci\u00f3n. <\/p>\n\t\t\t\t\t<h2 data-interaction-id=\"9eae461\" class=\"H3 e-heading-base\">Clinical Tool<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-fe74cc7-2f50d5b e-paragraph-base\" data-interaction-id=\"fe74cc7\">Herramienta web para el personal cl\u00ednico que recopila y procesa la informaci\u00f3n del paciente. A trav\u00e9s de esta app se puede ver la evoluci\u00f3n del paciente y detectar se\u00f1ales precoces de descompensaciones. El foco estaba en facilitar una lectura r\u00e1pida del estado cl\u00ednico y apoyar decisiones asistenciales en un entorno de trabajo real.<\/p>\n\t\t\t\t\t<h2 data-interaction-id=\"b117fac\" class=\"H3 e-heading-base\">Dashboards asistenciales<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-57b6dcb-e380a7d e-paragraph-base\" data-interaction-id=\"57b6dcb\">Paneles de controles dise\u00f1ados para los case managers, que ofrecen una visi\u00f3n agregada de indicadores, evoluci\u00f3n y patrones relevantes, ayudando a interpretar la informaci\u00f3n generada por el sistema. Su objetivo es convertir datos cl\u00ednicos en informaci\u00f3n accionable para el seguimiento, el an\u00e1lisis y la mejora continua de la atenci\u00f3n.<\/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=\"471\" src=\"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Frame-1000004227.png\" width=\"2276\" height=\"1368\" srcset=\"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Frame-1000004227.png 2276w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Frame-1000004227-300x180.png 300w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Frame-1000004227-1024x615.png 1024w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Frame-1000004227-768x462.png 768w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Frame-1000004227-1536x923.png 1536w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Frame-1000004227-2048x1231.png 2048w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/Frame-1000004227-18x12.png 18w\" alt=\"Captura de una plataforma cl\u00ednica con datos de monitorizaci\u00f3n remota, indicadores de salud y seguimiento de pacientes.\"\/>\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-93fdeb6 e-heading-base\">Modelos de an\u00e1lisis predictivo <\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"7027a56\">La soluci\u00f3n incorporaba modelos de inteligencia artificial orientados a la detecci\u00f3n temprana de anomal\u00edas en la evoluci\u00f3n del paciente. A partir de datos procedentes la patient app, el sistema analizaba patrones individuales de comportamiento fisiol\u00f3gico  para identificar desviaciones relevantes respecto a la normalidad de cada paciente. El objetivo es apoyar una atenci\u00f3n m\u00e1s preventiva, facilitando la detecci\u00f3n de cambios bruscos o sostenidos que pudieran anticipar una posible situaci\u00f3n de riesgo cl\u00ednico.<\/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> <path class=\"st3\" d=\"M51.1,37c0-7.8-6.3-14.1-14.1-14.1S22.9,29.2,22.9,37c0,4.5,2.2,8.6,5.5,11.2c0.1,0.1,0.2,0.2,0.3,0.2 c2.3,1.7,5.2,2.7,8.3,2.7c3.1,0,6-1,8.3-2.7c0.1,0,0.2-0.1,0.3-0.2C48.9,45.6,51.1,41.5,51.1,37z M29.8,47.3 c0.2-3.8,3.4-6.9,7.2-6.9c3.9,0,7,3,7.2,6.9c-2,1.4-4.5,2.3-7.2,2.3C34.3,49.6,31.8,48.7,29.8,47.3z M37,38.9 c-2.2,0-3.9-1.8-3.9-3.9s1.8-3.9,3.9-3.9c2.2,0,3.9,1.8,3.9,3.9S39.2,38.9,37,38.9z M45.6,46.2c-0.5-3.1-2.7-5.6-5.6-6.7 c1.4-1,2.4-2.6,2.4-4.5c0-3-2.4-5.4-5.4-5.4c-3,0-5.4,2.4-5.4,5.4c0,1.9,0.9,3.5,2.4,4.5c-2.9,1.1-5,3.6-5.6,6.7 c-2.4-2.3-4-5.5-4-9.2c0-6.9,5.6-12.6,12.6-12.6S49.6,30.1,49.6,37C49.6,40.6,48,43.9,45.6,46.2z\"><\/path> <\/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-4cfa9c9 e-heading-base\">El gran reto de la adherencia<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"0225d64\">Uno de los puntos clave de este proyecto ha sido lograr que la soluci\u00f3n se integre de forma natural en la rutina del paciente, sin generar rechazo, abandono o sensaci\u00f3n de sobrecarga. Para ello, el dise\u00f1o debe ser claro, guiado y \u00fatil desde el primer uso, especialmente en perfiles con menor familiaridad tecnol\u00f3gica. El reto ha sido simplificar la interacci\u00f3n sin perder valor cl\u00ednico, facilitando que el seguimiento remoto se perciba como un apoyo real y no como una tarea adicional dif\u00edcil de mantener.<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f110657 e-con-full e-flex e-con e-child\" data-id=\"f110657\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-svg-base\" data-interaction-id=\"33a0f40\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" fill=\"currentColor\" id=\"Capa_1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 74 74\" style=\"enable-background:new 0 0 74 74; width: 100%; height: 100%; overflow: unset;\" xml:space=\"preserve\"> <style type=\"text\/css\"> .st2{fill:#4E9288;} .st3{fill:#FFFFFF;} <\/style> <rect y=\"0\" class=\"st2\" width=\"74\" height=\"74\"><\/rect> <path class=\"st3\" d=\"M49.8,37C49.8,37,49.7,37,49.8,37c0-3.1-0.2-4.8-1.4-6c-0.7-0.7-1.5-1-2.6-1.2c0-0.9,0-1.5-0.2-2 c-0.4-1.6-1.7-2.9-3.4-3.4c-0.6-0.2-1.3-0.2-2.6-0.2h-12c-1.9,0-3.4,1.5-3.4,3.4V41c0,4,0,6,1.4,7.4c1.4,1.4,3.4,1.4,7.4,1.4h8 c4,0,6,0,7.4-1.4c1.2-1.2,1.4-2.9,1.4-6c0,0,0,0,0,0c0,0,0,0,0,0c0-0.4,0-0.9,0-1.3v-2.7C49.8,37.9,49.7,37.4,49.8,37 C49.7,37,49.8,37,49.8,37z M48.2,38.3V41c0,0.2,0,0.4,0,0.6h-1.9c-0.5,0-0.8,0-1,0c-0.4-0.1-0.8-0.5-0.9-0.9c0-0.2,0-0.5,0-1 c0-0.5,0-0.8,0-1c0.1-0.4,0.5-0.8,0.9-0.9c0.2,0,0.5,0,1,0h1.9C48.2,37.9,48.2,38.1,48.2,38.3z M27.7,25.8h12c1.2,0,1.8,0,2.2,0.1 c1.1,0.3,2,1.2,2.3,2.3c0.1,0.3,0.1,0.7,0.1,1.4H41H30.3h-2.7c-1.1,0-1.9-0.9-1.9-1.9S26.6,25.8,27.7,25.8z M41,48.3h-8 c-3.6,0-5.3,0-6.3-1c-1-1-1-2.7-1-6.3V30.5c0.5,0.4,1.2,0.6,1.9,0.6h2.7H41c3.6,0,5.3,0,6.3,1c0.7,0.7,0.9,2,0.9,4.2h-1.9 c-0.7,0-1,0-1.4,0.1c-0.9,0.3-1.7,1-1.9,1.9c-0.1,0.3-0.1,0.7-0.1,1.4c0,0.7,0,1,0.1,1.4c0.3,0.9,1,1.7,1.9,1.9 c0.4,0.1,0.7,0.1,1.4,0.1h1.9c0,2.2-0.2,3.5-0.9,4.2C46.3,48.3,44.6,48.3,41,48.3z\"><\/path> <\/svg><\/div>\t\t<div class=\"elementor-element elementor-element-7dedf47 e-con-full e-flex e-con e-child\" data-id=\"7dedf47\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"be24a11\" class=\"H3 e-be24a11-7b9ad1c e-heading-base\">Identidad digital en entorno sanitario<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"4047e1f\">La soluci\u00f3n tambi\u00e9n explora el uso de identidad digital autosoberana aplicada al entorno sanitario, investigando c\u00f3mo las credenciales verificables pod\u00edan facilitar un acceso m\u00e1s seguro, trazable y controlado a informaci\u00f3n cl\u00ednica relevante del paciente. En un contexto tan sensible, es clave analizar mecanismos criptogr\u00e1ficos que refuercen la confianza entre entidades autorizadas, protejan la privacidad y abran escenarios de portabilidad e interoperabilidad sanitaria.<\/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=\"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-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-95693ab e-heading-base\">Telemonitorizaci\u00f3n remota<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"d0066f3\">El sistema permite recoger y consultar informaci\u00f3n del paciente fuera del entorno hospitalario, favoreciendo un seguimiento m\u00e1s continuo y conectado con su d\u00eda a d\u00eda. Esta monitorizaci\u00f3n remota ayuda a reducir la dependencia de contactos puntuales, aporta una visi\u00f3n m\u00e1s completa de la evoluci\u00f3n del paciente y facilita que el equipo cl\u00ednico pueda detectar cambios relevantes con mayor contexto, antes de que deriven en situaciones m\u00e1s complejas.<\/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-2ee3d5b 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\">Definici\u00f3n funcional, UX estrat\u00e9gica y delivery en entorno cl\u00ednico complejo<\/h2>\n\t\t\t\t\t<p class=\"e-paragraph-base\" data-interaction-id=\"79fe016\">Mi participaci\u00f3n evolucion\u00f3 desde UX\/UI y definici\u00f3n funcional hasta soporte funcional y coordinaci\u00f3n en fases finales de delivery. Trabaj\u00e9 en el aterrizaje funcional de la soluci\u00f3n, definici\u00f3n de flujos, UX end-to-end, wireframes, dise\u00f1o UI, journeys cl\u00ednicos, dashboards y backlog funcional, adem\u00e1s de workshops, validaci\u00f3n funcional, QA, soporte a desarrollo y demos cl\u00ednicas. Aunque hered\u00e9 una fase inicial de discovery, durante el proceso fue necesario redefinir gran parte de la l\u00f3gica funcional para adaptarla a necesidades cl\u00ednicas reales y a distintos contextos hospitalarios. Tambi\u00e9n particip\u00e9 en validaci\u00f3n end-to-end con hospitales, soporte durante pilotos, revisi\u00f3n funcional de implementaci\u00f3n y coordinaci\u00f3n final del proyecto tras varios cambios internos en el equipo.<\/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 permiti\u00f3 validar una soluci\u00f3n funcional de monitorizaci\u00f3n remota con pacientes reales, combinando dashboards cl\u00ednicos operativos, integraci\u00f3n de wearables, alertas predictivas y workflows asistenciales digitales orientados a seguimiento continuo y detecci\u00f3n temprana. La plataforma fue pilotada en distintos entornos hospitalarios europeos y consigui\u00f3 demostrar la viabilidad de aplicar IA predictiva en salud dentro de procesos cl\u00ednicos reales, incorporando adem\u00e1s patient journey compartido y validaci\u00f3n cl\u00ednica internacional. El proyecto evolucion\u00f3 posteriormente hacia marcado CE y dej\u00f3 aprendizajes clave relacionados con adherencia, onboarding asistido, continuidad de uso, calidad de datos y sostenibilidad de experiencias digitales para pacientes vulnerables.<\/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 fue uno de los proyectos donde m\u00e1s profundic\u00e9 en healthtech, producto complejo, UX cl\u00ednica, dise\u00f1o para pacientes vulnerables, sistemas orientados a IA y coordinaci\u00f3n multidisciplinar en entornos europeos de innovaci\u00f3n. Adem\u00e1s de participar en definici\u00f3n funcional y delivery de una soluci\u00f3n altamente compleja, el proyecto me permiti\u00f3 entender de primera mano c\u00f3mo la calidad de la experiencia de usuario condiciona directamente el valor cl\u00ednico y tecnol\u00f3gico del producto. Sobre todo, me ense\u00f1\u00f3 que la IA solo aporta valor real cuando la experiencia, los procesos y la calidad de los datos est\u00e1n suficientemente bien dise\u00f1ados como para sostenerla en el tiempo.<\/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-f427063 e-heading-base\">Llevemos un reto complejo a terreno<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"92d8dde\">Podemos conversar sobre producto, UX, salud digital, IA aplicada o soluciones complejas que necesiten pasar de la idea a una propuesta clara, accionable y orientada a uso real.<\/p>\n\t\t<div class=\"elementor-element elementor-element-4819d94 e-con-full e-flex e-con e-child\" data-id=\"4819d94\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b187f00 elementor-widget elementor-widget-button\" data-id=\"b187f00\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"mailto:emacarenatorralba@gmail.com\" id=\"contacto\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Contacto<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ac8f521 e-flex e-con-boxed e-con e-parent\" data-id=\"ac8f521\" 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-2ef1950 e-con-full e-flex e-con e-child\" data-id=\"2ef1950\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1cfa050 e-con-full e-flex e-con e-child\" data-id=\"1cfa050\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h1 data-interaction-id=\"7f5a5a6\" class=\"Enphasis1 e-heading-base\">Macarena Torralba<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"aaa3e37\">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-96b8744 e-con-full e-flex e-con e-child\" data-id=\"96b8744\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<p class=\"Body1 e-3c6822a-bc6f7d9 e-paragraph-base\" data-interaction-id=\"3c6822a\"><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=\"d120fc4\"><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-994efc4 e-con-full e-flex e-con e-child\" data-id=\"994efc4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h1 data-interaction-id=\"04cb628\" class=\"e-04cb628-08795c3 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-78f2bbe elementor-widget elementor-widget-html\" data-id=\"78f2bbe\" 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-2a6ea27 e-con-full e-flex e-con e-child\" data-id=\"2a6ea27\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<p class=\"Body1 e-b75736d-9fc5581 e-paragraph-base\" data-interaction-id=\"b75736d\"><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::Monitorizaci\u00f3n remota de pacientes con IA predictiva y seguimiento cl\u00ednico digital::\/sub:: ::desc::Plataforma healthtech orientada a monitorizaci\u00f3n remota de pacientes con insuficiencia card\u00edaca mediante wearables, dashboards cl\u00ednicos y modelos predictivos basados en IA. Particip\u00e9 en el dise\u00f1o de una UX estrat\u00e9gica, definici\u00f3n funcional, dise\u00f1o end-to-end y soporte a delivery en un entorno cl\u00ednico multi-hospital y altamente [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":288,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_canvas","format":"standard","meta":{"footnotes":""},"categories":[3,4],"tags":[10,14,6,11,12,15,7,17,9,13,16,8],"class_list":["post-262","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyecto","category-proyecto-destacado","tag-delivery","tag-health","tag-healthtech","tag-id-europeo","tag-idi","tag-ia","tag-ia-predictiva","tag-product","tag-producto-digital","tag-rd","tag-ux","tag-ux-estrategica"],"_links":{"self":[{"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/posts\/262","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=262"}],"version-history":[{"count":158,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/posts\/262\/revisions"}],"predecessor-version":[{"id":2042,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/posts\/262\/revisions\/2042"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/media\/288"}],"wp:attachment":[{"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/media?parent=262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/categories?post=262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/tags?post=262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}