{"id":208,"date":"2026-03-29T08:35:11","date_gmt":"2026-03-29T08:35:11","guid":{"rendered":"https:\/\/macarenatorralba.es\/es\/?p=208"},"modified":"2026-06-09T10:11:27","modified_gmt":"2026-06-09T10:11:27","slug":"convertir-incertidumbre-en-direccion-de-producto","status":"publish","type":"post","link":"https:\/\/macarenatorralba.es\/es\/convertir-incertidumbre-en-direccion-de-producto\/","title":{"rendered":"Antes de construir, hay que convertir incertidumbre en direcci\u00f3n de producto"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"208\" class=\"elementor elementor-208\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9fafb15 e-flex e-con-boxed e-con e-parent\" data-id=\"9fafb15\" 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=\"98a365a\" class=\"H1 e-98a365a-a18d3d3 e-heading-base\">Antes de construir, hay que convertir incertidumbre en direcci\u00f3n de producto<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"805fbd0\">La interfaz es solo la parte visible de una decisi\u00f3n de producto. Antes de dise\u00f1ar, hace falta entender procesos, usuarios, negocio y tecnolog\u00eda para que cada pantalla responda a una direcci\u00f3n clara y no a una suma de suposiciones.<\/p>\n\t\t\t\t\t<p class=\"e-1dd29b9-777e70e Enphasis1 e-paragraph-base\" data-interaction-id=\"1dd29b9\">UX Strategy \u00b7 Product Design \u00b7 Definici\u00f3n  \u00b7 Roadmap  \u00b7 Delivery \u00b7 Business &amp; Tech Alignment<\/p>\n\t\t\t\t<div class=\"elementor-element elementor-element-27e2922 elementor-widget elementor-widget-html\" data-id=\"27e2922\" 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-5ae9d59 e-flex e-con-boxed e-con e-parent\" data-id=\"5ae9d59\" 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=\"00f2ba3\" class=\"H2 e-00f2ba3-326a9a4 e-heading-base\">El trabajo invisible antes del dise\u00f1o<\/h2>\n\t\t\t\t\t<p class=\"Enphasis2 e-paragraph-base\" data-interaction-id=\"f81d8b5\">La calidad de un producto no depende solo de c\u00f3mo se ve, sino de lo bien que entiende el sistema que intenta resolver.<\/p>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"97be46b\">En proyectos digitales complejos, el verdadero valor no est\u00e1 en empezar r\u00e1pido a dise\u00f1ar pantallas, sino en entender qu\u00e9 hay que construir, para qui\u00e9n, con qu\u00e9 restricciones y con qu\u00e9 impacto esperado. Antes de abrir Figma, antes de definir componentes, antes incluso de cerrar un backlog, hay una fase cr\u00edtica que muchas veces se infravalora: convertir una necesidad ambigua en una direcci\u00f3n de producto accionable.<br><br>Esa fase no siempre tiene un nombre evidente. A veces se llama discovery, otras conceptualizaci\u00f3n, definici\u00f3n funcional, fase cero o aterrizaje de producto. Para m\u00ed, m\u00e1s all\u00e1 del nombre, su funci\u00f3n es clara: reducir incertidumbre antes de comprometer decisiones de dise\u00f1o, desarrollo o inversi\u00f3n.<br><br>En contextos sencillos, puede bastar con entender un flujo, validar una hip\u00f3tesis y dise\u00f1ar una soluci\u00f3n directa. Pero en productos donde conviven m\u00faltiples usuarios, procesos, sistemas, equipos, objetivos de negocio y restricciones t\u00e9cnicas, empezar por la interfaz suele ser una forma elegante de construir en falso. Una pantalla puede parecer correcta y, aun as\u00ed, responder a un proceso mal entendido. Un flujo puede resultar limpio en prototipo y, aun as\u00ed, no encajar con la operaci\u00f3n real. Una funcionalidad puede sonar l\u00f3gica en una reuni\u00f3n y, aun as\u00ed, no resolver el problema que existe en el d\u00eda a d\u00eda.<br><br>Por eso, antes de dise\u00f1ar, hay que entender.<\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7f0d61f e-flex e-con-boxed e-con e-parent\" data-id=\"7f0d61f\" 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=\"dd22d0f\" class=\"H2 e-dd22d0f-5bbfed2 e-heading-base\">El riesgo de dise\u00f1ar desde la soluci\u00f3n imaginada<\/h2>\n\t\t<div class=\"elementor-element elementor-element-ece0136 e-con-full e-flex e-con e-child\" data-id=\"ece0136\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-ee88144 e-con-full e-flex e-con e-child\" data-id=\"ee88144\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"7c57771\" class=\"H3 e-heading-base\">Product Discovery &amp; Defini\u00f3n<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-e3473b7-41f9134 e-paragraph-base\" data-interaction-id=\"e3473b7\">Uno de los errores m\u00e1s habituales en proyectos complejos es confundir lo que el cliente pide con lo que el usuario necesita. No porque el cliente no conozca su negocio, sino porque muchas veces expresa el problema desde la soluci\u00f3n que imagina, no desde la ra\u00edz de lo que ocurre.<br><br>\u201cNecesitamos un dashboard\u201d. \u201cQueremos automatizar este proceso\u201d. \u201cHay que redise\u00f1ar esta pantalla\u201d. \u201cQueremos incorporar inteligencia artificial\u201d. Todas esas peticiones pueden ser leg\u00edtimas, pero por s\u00ed solas no explican el problema. \u00bfQu\u00e9 decisi\u00f3n debe facilitar ese dashboard? \u00bfQu\u00e9 parte del proceso realmente consume tiempo? \u00bfQu\u00e9 informaci\u00f3n falta? \u00bfQu\u00e9 usuario se bloquea? \u00bfQu\u00e9 dato no es fiable? \u00bfQu\u00e9 tarea se repite sin aportar valor? \u00bfQu\u00e9 riesgo aparece si automatizamos demasiado?<br><br>Otra trampa frecuente es convertir un workshop en una lista infinita de deseos. En sesiones con stakeholders y usuarios reales aparecen muchas ideas, necesidades y frustraciones. Eso es valioso, pero no todo lo que aparece debe convertirse en funcionalidad. El trabajo estrat\u00e9gico consiste precisamente en ordenar, interpretar, priorizar y traducir. No se trata de documentar todo lo que alguien pide, sino de entender qu\u00e9 patr\u00f3n hay detr\u00e1s, qu\u00e9 problema se repite, qu\u00e9 impacto tiene y qu\u00e9 soluci\u00f3n puede sostenerse t\u00e9cnica y operativamente.<br><br>Cuando esto no se hace bien, el producto empieza a acumular funcionalidades sin direcci\u00f3n. Cada perfil pide una cosa, cada \u00e1rea defiende su prioridad y cada nueva pantalla intenta resolver un caso particular. El resultado suele ser una herramienta m\u00e1s pesada, m\u00e1s dif\u00edcil de mantener y, parad\u00f3jicamente, menos \u00fatil para quienes la usan.<\/p>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d58776b e-con-full e-flex e-con e-child\" data-id=\"d58776b\" 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=\"ca7f320\" id=\"1091\" src=\"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/carine-l-IjXm4mEI9qk-unsplash-scaled.jpg\" width=\"2560\" height=\"1920\" srcset=\"https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/carine-l-IjXm4mEI9qk-unsplash-scaled.jpg 2560w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/carine-l-IjXm4mEI9qk-unsplash-300x225.jpg 300w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/carine-l-IjXm4mEI9qk-unsplash-1024x768.jpg 1024w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/carine-l-IjXm4mEI9qk-unsplash-768x576.jpg 768w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/carine-l-IjXm4mEI9qk-unsplash-1536x1152.jpg 1536w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/carine-l-IjXm4mEI9qk-unsplash-2048x1536.jpg 2048w, https:\/\/macarenatorralba.es\/wp-content\/uploads\/2026\/05\/carine-l-IjXm4mEI9qk-unsplash-16x12.jpg 16w\" alt=\"fotograf\u00eda de taller design journey\"\/>\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-4abed1b e-flex e-con-boxed e-con e-parent\" data-id=\"4abed1b\" 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<h2 data-interaction-id=\"1e0893a\" class=\"H2 e-1e0893a-d1c7f24 e-heading-base\">Dise\u00f1ar es entender el sistema<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-54bdc55-84ca9db e-paragraph-base\" data-interaction-id=\"54bdc55\">Antes de dise\u00f1ar una interfaz, hay que entender el sistema que la sostiene: personas, procesos, decisiones, restricciones, datos, herramientas y expectativas de negocio. En proyectos complejos, la UX estrat\u00e9gica no empieza en Figma, sino en la capacidad de leer esa realidad, detectar d\u00f3nde se rompe la experiencia y traducir la complejidad en decisiones de producto claras, viables y accionables.<\/p>\n\t\t<div class=\"elementor-element elementor-element-7696944 e-con-full e-flex e-con e-child\" data-id=\"7696944\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-41bf3c3 e-con-full e-flex e-con e-child\" data-id=\"41bf3c3\" 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=\"1498867\"><\/div>\t\t<div class=\"elementor-element elementor-element-b4ffe24 e-con-full e-flex e-con e-child\" data-id=\"b4ffe24\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"07d620d\" class=\"H3 e-heading-base\">Leer antes que dise\u00f1ar<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"3ac84e4\">Dise\u00f1ar no consiste solo en decidir c\u00f3mo se ve una pantalla, sino en comprender c\u00f3mo trabajan las personas, qu\u00e9 informaci\u00f3n necesitan, qu\u00e9 decisiones toman y qu\u00e9 tareas les generan fricci\u00f3n. Cuando el contexto es complejo, una interfaz bien resuelta visualmente puede fallar si no responde al proceso real que hay detr\u00e1s.<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2b0b4c6 e-con-full e-flex e-con e-child\" data-id=\"2b0b4c6\" 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=\"0e5e8c3\"><\/div>\t\t<div class=\"elementor-element elementor-element-451e053 e-con-full e-flex e-con e-child\" data-id=\"451e053\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"d8ae5fb\" class=\"H3 e-heading-base\">Entender la complejidad real<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"9354f9f\">En plataformas con m\u00faltiples perfiles, entidades, procesos y niveles de coordinaci\u00f3n, el valor no est\u00e1 en producir pantallas r\u00e1pido, sino en ordenar el ecosistema completo. Hay que comprender dependencias, flujos, datos, reporting, interoperabilidad y oportunidades de mejora antes de convertir todo eso en una propuesta de producto coherente.<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-06ec40a e-con-full e-flex e-con e-child\" data-id=\"06ec40a\" 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=\"e625111\"><\/div>\t\t<div class=\"elementor-element elementor-element-4e5f152 e-con-full e-flex e-con e-child\" data-id=\"4e5f152\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"474387c\" class=\"H3 e-heading-base\">Conectar negocio, usuario y tecnolog\u00eda<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"98ecc54\">Los problemas complejos rara vez pertenecen solo a UX, solo a negocio o solo a tecnolog\u00eda. Suelen estar en la intersecci\u00f3n. Por eso es clave escuchar a usuarios y stakeholders, detectar fricciones, hablar con equipos t\u00e9cnicos, valorar viabilidad, anticipar delivery y traducir todo ese aprendizaje en decisiones que puedan construirse.<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0c4d868 e-con-full e-flex e-con e-child\" data-id=\"0c4d868\" 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=\"3e823e3\"><\/div>\t\t<div class=\"elementor-element elementor-element-341499f e-con-full e-flex e-con e-child\" data-id=\"341499f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"999072e\" class=\"H3 e-heading-base\">Dise\u00f1ar con direcci\u00f3n de producto<\/h2>\n\t\t\t\t\t<p class=\"Body2 e-paragraph-base\" data-interaction-id=\"c31371d\">Empatizar con el usuario no basta si despu\u00e9s no se aterriza en alcance, prioridades y viabilidad. Definir requisitos tampoco sirve si no se entienden los flujos reales. Una buena fase previa convierte investigaci\u00f3n, negocio y restricciones t\u00e9cnicas en una direcci\u00f3n de producto clara: qu\u00e9 construir, por qu\u00e9, para qui\u00e9n y en qu\u00e9 orden.<\/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-e39e3b4 e-flex e-con-boxed e-con e-parent\" data-id=\"e39e3b4\" 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=\"6432882\" class=\"H2 e-6432882-dd83498 e-heading-base\">Del contexto a la direcci\u00f3n<\/h2>\n\t\t<div class=\"elementor-element elementor-element-af450e1 e-con-full e-flex e-con e-child\" data-id=\"af450e1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1738cea e-con-full e-flex e-con e-child\" data-id=\"1738cea\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"35839e6\" class=\"Enphasis2 e-heading-base\">Trabajo para transformar informaci\u00f3n dispersa en una direcci\u00f3n de producto clara, priorizada y construible.<\/h2>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cab7ced e-con-full e-flex e-con e-child\" data-id=\"cab7ced\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-a7168aa e-con-full e-flex e-con e-child\" data-id=\"a7168aa\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<p class=\"e-paragraph-base\" data-interaction-id=\"fa6c2ed\">Cuando abordo una fase de definici\u00f3n o aterrizaje de producto, intento no pensar en ella como una secuencia r\u00edgida de pasos, sino como un proceso de reducci\u00f3n progresiva de incertidumbre. Primero se abre el problema; despu\u00e9s se ordena; finalmente se convierte en direcci\u00f3n.<br><br>La primera parte es entender el contexto. Esto implica talleres de discovery, entrevistas, revisi\u00f3n de procesos, sesiones con stakeholders y, cuando tiene sentido, cuestionarios que permitan recoger informaci\u00f3n m\u00e1s estructurada. Aqu\u00ed no busco solo \u201crequisitos\u201d, sino entender c\u00f3mo funciona realmente el trabajo. Qu\u00e9 tareas se hacen, en qu\u00e9 orden, con qu\u00e9 herramientas, qu\u00e9 informaci\u00f3n se pierde, qu\u00e9 decisiones dependen de otras personas, qu\u00e9 se duplica y qu\u00e9 genera frustraci\u00f3n.<br><br>Despu\u00e9s viene la s\u00edntesis. User personas, mapas de empat\u00eda y journeys no son entregables decorativos: son herramientas para ordenar una realidad compleja y hacerla discutible. Ayudan a poner sobre la mesa que no todos los usuarios tienen los mismos objetivos, capacidades digitales, presiones o criterios de \u00e9xito. Tambi\u00e9n permiten detectar puntos de fricci\u00f3n que no siempre aparecen cuando alguien enumera funcionalidades.<br><br>A partir de ah\u00ed, el trabajo empieza a transformarse en producto. El mapa de historias de usuario es especialmente \u00fatil porque obliga a pasar de \u201cnecesitamos algo para gestionar esto\u201d a \u201ccomo este perfil, necesito realizar esta acci\u00f3n para conseguir este objetivo\u201d. Ese cambio parece peque\u00f1o, pero es enorme: centra la definici\u00f3n en la acci\u00f3n, el usuario y el valor esperado. Tambi\u00e9n permite ordenar alcance, detectar dependencias y empezar a distinguir qu\u00e9 forma parte de un MVP y qu\u00e9 puede evolucionar en fases posteriores.<\/p>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-86f1ff4 e-con-full e-flex e-con e-child\" data-id=\"86f1ff4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<p class=\"e-paragraph-base\" data-interaction-id=\"599f531\">Los wireframes de baja fidelidad entran en ese momento como una herramienta de pensamiento, no como dise\u00f1o final. Sirven para validar navegaci\u00f3n, jerarqu\u00eda, estructura y l\u00f3gica funcional antes de invertir esfuerzo en una interfaz m\u00e1s pulida. Un wireframe permite discutir si una tarea est\u00e1 bien ubicada, si un flujo tiene sentido, si falta informaci\u00f3n, si una acci\u00f3n es comprensible o si el usuario necesita m\u00e1s contexto para tomar una decisi\u00f3n.<br><br>La validaci\u00f3n con stakeholders y usuarios es clave para evitar que la soluci\u00f3n se quede en una hip\u00f3tesis interna. Validar no significa preguntar \u201c\u00bfte gusta?\u201d, sino comprobar si lo propuesto encaja con la realidad operativa, si resuelve el problema, si genera dudas, si simplifica o a\u00f1ade fricci\u00f3n. Y, sobre todo, significa estar dispuesto a refinar: ajustar el mapa de historias, revisar el prototipo, reordenar prioridades y volver a alinear expectativas.<br><br>En proyectos donde aparece inteligencia artificial, esta fase es todav\u00eda m\u00e1s importante. Antes de decidir si hace falta un asistente, un modelo predictivo, un recomendador o una automatizaci\u00f3n, hay que entender el proceso, el dato disponible, el nivel de riesgo, el criterio profesional implicado y el grado de control humano necesario. La IA no deber\u00eda entrar como respuesta gen\u00e9rica, sino como una capacidad vinculada a un problema concreto.<br><br>Finalmente, todo ese trabajo necesita convertirse en hoja de ruta. No basta con descubrir y dise\u00f1ar; hay que priorizar, identificar valor, esfuerzo, dependencias, riesgos y fases de evoluci\u00f3n. Un buen roadmap no es una lista de funcionalidades ordenadas por deseo, sino una propuesta de direcci\u00f3n: qu\u00e9 construir primero, por qu\u00e9, qu\u00e9 valida, qu\u00e9 desbloquea y c\u00f3mo prepara al producto para crecer.<\/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-a6d9917 e-flex e-con-boxed e-con e-parent\" data-id=\"a6d9917\" 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=\"2d0a5ed\" class=\"H2 e-2d0a5ed-f66c41f e-heading-base\">Dise\u00f1ar menos en falso<\/h2>\n\t\t<div class=\"elementor-element elementor-element-bf8c5ad e-con-full e-flex e-con e-child\" data-id=\"bf8c5ad\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h2 data-interaction-id=\"bac3d41\" class=\"Enphasis2 e-heading-base\">Antes de construir producto, hay que construir direcci\u00f3n<\/h2>\n\t\t\t\t\t<p class=\"e-paragraph-base\" data-interaction-id=\"17463f6\">Una buena fase de aterrizaje no ralentiza el proyecto; evita construir en falso. Ayuda a que el dise\u00f1o no sea solo una representaci\u00f3n visual de deseos, sino una respuesta estructurada a problemas reales. Ayuda a que el backlog no sea una lista infinita, sino una herramienta de decisi\u00f3n. Ayuda a que la tecnolog\u00eda no se incorpore por moda, sino por valor. Y ayuda a que negocio, UX y desarrollo trabajen desde una comprensi\u00f3n compartida.<br><br>En proyectos complejos, la incertidumbre no desaparece del todo. Pero se puede ordenar. Se puede convertir en hip\u00f3tesis, criterios, prioridades, flujos, pantallas, arquitectura, roadmap y decisiones accionables. Ese es, para m\u00ed, el verdadero trabajo previo al dise\u00f1o: transformar ambig\u00fcedad en direcci\u00f3n. Porque antes de construir, hay que saber qu\u00e9 problema merece ser construido.<\/p>\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-c4d5b19 e-flex e-con-boxed e-con e-parent\" data-id=\"c4d5b19\" 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-14cdcb2 elementor-widget elementor-widget-html\" data-id=\"14cdcb2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- NAVEGACI\u00d3N REFLEXI\u00d3N ANTERIOR \/ SIGUIENTE -->\n<section class=\"mt-simple-post-nav is-loading\" id=\"mtSimplePostNav\" data-category-slug=\"insight\" aria-label=\"Navegaci\u00f3n entre reflexiones\">\n  <a class=\"mt-simple-post-nav-link mt-simple-post-nav-prev\" id=\"mtSimplePostPrev\" href=\"#\">\n    <span class=\"mt-simple-arrow mt-simple-arrow-left\"><\/span>\n    <span class=\"mt-simple-post-title\">Entrada anterior<\/span>\n  <\/a>\n\n  <a class=\"mt-simple-post-nav-link mt-simple-post-nav-next\" id=\"mtSimplePostNext\" href=\"#\">\n    <span class=\"mt-simple-post-title\">Entrada siguiente<\/span>\n    <span class=\"mt-simple-arrow mt-simple-arrow-right\"><\/span>\n  <\/a>\n<\/section>\n\n<style>\n\/* ===== INSIGHT DETAIL SIMPLE NAVIGATION ===== *\/\n\n.mt-simple-post-nav {\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 32px;\n  margin: 72px 0 0 0;\n  padding: 0;\n}\n\n.mt-simple-post-nav-link {\n  display: inline-flex;\n  align-items: center;\n  gap: 12px;\n  font-family: \"Poppins\", sans-serif !important;\n  font-size: 15px !important;\n  font-weight: 500 !important;\n  line-height: 1.3 !important;\n  color: #4E9288 !important;\n  text-decoration: none !important;\n  transition: color 0.25s ease, transform 0.25s ease;\n}\n\n.mt-simple-post-nav-link:hover {\n  color: #2B5E56 !important;\n}\n\n.mt-simple-post-nav-prev:hover {\n  transform: translateX(-3px);\n}\n\n.mt-simple-post-nav-next:hover {\n  transform: translateX(3px);\n}\n\n.mt-simple-post-nav-next {\n  margin-left: auto;\n  text-align: right;\n}\n\n.mt-simple-arrow {\n  width: 8px;\n  height: 8px;\n  border-top: 1.6px solid currentColor;\n  border-right: 1.6px solid currentColor;\n  display: inline-block;\n  flex: 0 0 auto;\n}\n\n.mt-simple-arrow-left {\n  transform: rotate(-135deg);\n}\n\n.mt-simple-arrow-right {\n  transform: rotate(45deg);\n}\n\n.mt-simple-post-title {\n  display: inline-block;\n}\n\n.mt-simple-post-nav.is-loading {\n  opacity: 0;\n  pointer-events: none;\n}\n\n.mt-simple-post-nav.is-empty {\n  display: none !important;\n}\n\n\/* Responsive *\/\n@media (max-width: 767px) {\n  .mt-simple-post-nav {\n    flex-direction: row;\n    align-items: center;\n    justify-content: space-between;\n    gap: 18px;\n    margin-top: 56px;\n    flex-wrap: nowrap;\n  }\n\n  .mt-simple-post-nav-link {\n    font-size: 15px !important;\n    line-height: 1.6 !important;\n    color: #4E9288 !important;\n    white-space: nowrap;\n  }\n\n  .mt-simple-post-nav-prev {\n    justify-content: flex-start;\n  }\n\n  .mt-simple-post-nav-next {\n    margin-left: auto;\n    justify-content: flex-end;\n    text-align: right;\n  }\n\n  .mt-simple-post-title {\n    white-space: nowrap;\n  }\n}\n<\/style>\n\n<script>\n(function () {\n  const DEFAULT_CATEGORY_SLUG = \"insight\";\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 entry\" : \"Entrada anterior\";\n  }\n\n  function getNextFallbackText() {\n    return isEnglish() ? \"Next entry\" : \"Entrada 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(categorySlug) {\n    const response = await fetch(\n      \"\/wp-json\/wp\/v2\/categories?slug=\" + encodeURIComponent(categorySlug)\n    );\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 \" + categorySlug);\n    }\n\n    return categories[0].id;\n  }\n\n  async function fetchInsightPosts(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 las reflexiones\");\n    }\n\n    return await response.json();\n  }\n\n  function updatePostNavLabels() {\n    const prevLink = document.getElementById(\"mtSimplePostPrev\");\n    const nextLink = document.getElementById(\"mtSimplePostNext\");\n\n    if (!prevLink || !nextLink) return;\n\n    const prevTitleEl = prevLink.querySelector(\".mt-simple-post-title\");\n    const nextTitleEl = nextLink.querySelector(\".mt-simple-post-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 renderInsightNav(posts) {\n    const nav = document.getElementById(\"mtSimplePostNav\");\n    const prevLink = document.getElementById(\"mtSimplePostPrev\");\n    const nextLink = document.getElementById(\"mtSimplePostNext\");\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      Entrada anterior = m\u00e1s antigua.\n      Si estamos en la m\u00e1s antigua, vuelve a la m\u00e1s reciente.\n\n      Entrada siguiente = m\u00e1s reciente.\n      Si estamos en la m\u00e1s reciente, vuelve a la m\u00e1s antigua.\n    *\/\n    const prevIndex = currentIndex === posts.length - 1 ? 0 : currentIndex + 1;\n    const nextIndex = currentIndex === 0 ? posts.length - 1 : 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    updatePostNavLabels();\n\n    nav.classList.remove(\"is-loading\");\n  }\n\n  async function initSimplePostNavigation() {\n    const nav = document.getElementById(\"mtSimplePostNav\");\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    const categorySlug = nav.getAttribute(\"data-category-slug\") || DEFAULT_CATEGORY_SLUG;\n\n    try {\n      const categoryId = await fetchCategoryId(categorySlug);\n      const posts = await fetchInsightPosts(categoryId);\n      renderInsightNav(posts);\n    } catch (error) {\n      nav.classList.add(\"is-empty\");\n      console.warn(\"No se pudo inicializar la navegaci\u00f3n de reflexiones:\", error);\n    }\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", initSimplePostNavigation);\n  } else {\n    initSimplePostNavigation();\n  }\n\n  window.addEventListener(\"load\", initSimplePostNavigation);\n\n  window.addEventListener(\"resize\", function () {\n    clearTimeout(resizeTimer);\n\n    resizeTimer = setTimeout(function () {\n      updatePostNavLabels();\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-f361c0d e-flex e-con-boxed e-con e-parent\" data-id=\"f361c0d\" 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=\"66a0915\" class=\"H2-W e-66a0915-1909d6e e-heading-base\">Hablemos de producto, UX y direcci\u00f3n<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"cc84cef\">Si est\u00e1s trabajando en una soluci\u00f3n compleja y necesitas ordenar procesos, usuarios, negocio y tecnolog\u00eda antes de construir, podemos conversar sobre c\u00f3mo convertir esa incertidumbre inicial en una direcci\u00f3n de producto clara, viable y accionable.<\/p>\n\t\t<div class=\"elementor-element elementor-element-c941544 e-con-full e-flex e-con e-child\" data-id=\"c941544\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c06e277 elementor-widget elementor-widget-button\" data-id=\"c06e277\" 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-9ba3642 e-flex e-con-boxed e-con e-parent\" data-id=\"9ba3642\" 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-bdd6bbd e-con-full e-flex e-con e-child\" data-id=\"bdd6bbd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-d1b003a e-con-full e-flex e-con e-child\" data-id=\"d1b003a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h1 data-interaction-id=\"f2e4c7c\" class=\"Enphasis1 e-heading-base\">Macarena Torralba<\/h1>\n\t\t\t\t\t<p class=\"Body1 e-paragraph-base\" data-interaction-id=\"3f841bb\">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-172a536 e-con-full e-flex e-con e-child\" data-id=\"172a536\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<p class=\"Body1 e-8063d05-6f2ccd7 e-paragraph-base\" data-interaction-id=\"8063d05\"><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=\"4927419\"><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-8c9b2a0 e-con-full e-flex e-con e-child\" data-id=\"8c9b2a0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<h1 data-interaction-id=\"468949f\" class=\"e-468949f-b5c8968 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-03e0bc9 e-con-full e-flex e-con e-child\" data-id=\"03e0bc9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4d6b032 elementor-widget elementor-widget-html\" data-id=\"4d6b032\" 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-2c9a1fc elementor-widget elementor-widget-html\" data-id=\"2c9a1fc\" 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-50308ee elementor-widget elementor-widget-html\" data-id=\"50308ee\" 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-39d30a9 elementor-widget elementor-widget-html\" data-id=\"39d30a9\" 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-82adc0d elementor-widget elementor-widget-html\" data-id=\"82adc0d\" 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  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: ocupa toda la altura de la card *\/\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: efecto background cover *\/\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: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 dibujada con CSS para evitar emoji en iPhone *\/\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: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: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(\/\\s+\/g, \" \")\n      .trim();\n  }\n\n  function extractBetween(text, start, end) {\n    const startIndex = text.indexOf(start);\n    const endIndex = text.indexOf(end);\n\n    if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {\n      return \"\";\n    }\n\n    return cleanProjectText(text.slice(startIndex + start.length, endIndex));\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\") return;\n\n      const rawElements = Array.from(card.querySelectorAll(\"p, div, span\")).filter(function (el) {\n        const text = el.textContent || \"\";\n\n        return (\n          text.includes(\"::sub::\") ||\n          text.includes(\"::desc::\") ||\n          text.includes(\"::tags::\")\n        ) &&\n        !el.querySelector(\"h3\") &&\n        !el.querySelector(\"img\") &&\n        !el.querySelector(\"a\");\n      });\n\n      if (!rawElements.length) return;\n\n      const rawElement = rawElements[0];\n      const rawText = rawElement.textContent || \"\";\n\n      const subtitle = extractBetween(rawText, \"::sub::\", \"::\/sub::\");\n      const desc = extractBetween(rawText, \"::desc::\", \"::\/desc::\");\n      const tags = extractBetween(rawText, \"::tags::\", \"::\/tags::\");\n\n      rawElement.innerHTML =\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\n      card.dataset.projectFormatted = \"true\";\n    });\n  }\n\n  document.addEventListener(\"DOMContentLoaded\", function () {\n    setTimeout(formatProjectCards, 300);\n  });\n\n  window.addEventListener(\"load\", function () {\n    setTimeout(formatProjectCards, 300);\n    setTimeout(formatProjectCards, 1000);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-53ef11d elementor-widget elementor-widget-html\" data-id=\"53ef11d\" 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-f8602cd elementor-widget elementor-widget-html\" data-id=\"f8602cd\" 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-0d1395d elementor-widget elementor-widget-html\" data-id=\"0d1395d\" 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-d41e548 e-con-full e-flex e-con e-child\" data-id=\"d41e548\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<p class=\"Body1 e-05d9508-fc91ba9 e-paragraph-base\" data-interaction-id=\"05d9508\"><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>Antes de construir, hay que convertir incertidumbre en direcci\u00f3n de producto La interfaz es solo la parte visible de una decisi\u00f3n de producto. Antes de dise\u00f1ar, hace falta entender procesos, usuarios, negocio y tecnolog\u00eda para que cada pantalla responda a una direcci\u00f3n clara y no a una suma de suposiciones. UX Strategy \u00b7 Product Design [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":230,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_canvas","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[50,49,47,10,51,52,46,48,35],"class_list":["post-208","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-insight","tag-business","tag-business-tech-alignment","tag-definicion","tag-delivery","tag-emerging-tech","tag-ia-data","tag-product-design","tag-roadmap","tag-ux-strategy"],"_links":{"self":[{"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/posts\/208","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=208"}],"version-history":[{"count":81,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/posts\/208\/revisions"}],"predecessor-version":[{"id":1967,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/posts\/208\/revisions\/1967"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/media\/230"}],"wp:attachment":[{"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/media?parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/categories?post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/macarenatorralba.es\/es\/wp-json\/wp\/v2\/tags?post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}