{"id":5797,"date":"2026-03-31T09:44:54","date_gmt":"2026-03-31T09:44:54","guid":{"rendered":"https:\/\/staging.openvaluefoundation.org\/?page_id=5797"},"modified":"2026-06-17T11:01:15","modified_gmt":"2026-06-17T11:01:15","slug":"sobre-nosotros","status":"publish","type":"page","link":"https:\/\/staging.openvaluefoundation.org\/en\/sobre-nosotros\/","title":{"rendered":"Sobre nosotros"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5797\" class=\"elementor elementor-5797\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b70d404 hero-section-js e-con-full e-flex e-con e-parent\" data-id=\"b70d404\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-83f1569 elementor-widget-mobile__width-initial elementor-widget__width-initial elementor-widget-tablet__width-inherit elementor-hidden-tablet elementor-widget elementor-widget-heading\" data-id=\"83f1569\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">La oportunidad nace en las personas <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8278558 elementor-widget-mobile__width-initial elementor-widget__width-initial elementor-widget-tablet__width-inherit elementor-hidden-desktop elementor-hidden-mobile elementor-widget elementor-widget-heading\" data-id=\"8278558\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">La oportunidad nace en las personas <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8c5e465 e-con-full e-flex e-con e-parent\" data-id=\"8c5e465\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-91b40c2 elementor-widget elementor-widget-html\" data-id=\"91b40c2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"es\">\n  <head>\n    <meta charset=\"UTF-8\" \/>\n    <title>OVF Carousel<\/title>\n    <style>\n      .ovf-carousel,\n      .ovf-carousel * {\n        box-sizing: border-box;\n        margin: 0;\n        padding: 0;\n      }\n\n      \/* ---- container ---- *\/\n      .ovf-carousel {\n        position: relative;\n        width: 100%; \/* full width *\/\n        max-width: 100%;\n        margin: 0 auto;\n        min-height: 500px; \/* base height, can grow when expanded *\/\n        background-color: #2e2315;\n        overflow-x: hidden;\n        overflow-y: visible; \/* allow text to expand downward *\/\n        font-family:\n          \"Proxima Nova\",\n          system-ui,\n          -apple-system,\n          BlinkMacSystemFont,\n          \"Segoe UI\",\n          sans-serif;\n        color: #fdfdfd;\n      }\n\n      \/* ---- scrolling track ---- *\/\n      .ovf-track {\n        position: relative; \/* so bg-strip is positioned relative to it *\/\n        display: flex;\n        align-items: flex-start;\n        height: 100%;\n        transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n        will-change: transform;\n      }\n\n      \/*\n        Shared background illustration.\n        Must be a real element of 960 px width (304\u00d73 + 24\u00d72)\n        so the browser paints the full image, and as the track\n        translates, the carousel viewport reveals different portions:\n        slide 1 \u2192 left (scribble), slide 2 \u2192 middle, slide 3 \u2192 right (lightbulb).\n      *\/\n      .ovf-bg-strip {\n        position: absolute;\n        top: 16px;\n        left: 110px;\n        width: 960px;\n        height: 200px;\n        background-image: url(\"\/wp-content\/uploads\/2026\/03\/Group-314.png\");\n        background-repeat: no-repeat;\n        background-size: 80% auto; \/* stretch to fill 960 px wide strip *\/\n        pointer-events: none;\n        z-index: 0;\n      }\n\n      \/* ---- slide ---- *\/\n      .ovf-slide {\n        position: relative;\n        z-index: 1; \/* above bg-strip *\/\n        flex: 0 0 304px;\n        width: 304px;\n        min-height: 485px; \/* base height, slide can grow downward *\/\n        padding: 40px 24px 76px;\n        display: flex;\n        flex-direction: column;\n        text-align: center;\n        opacity: 0.45;\n        transition: opacity 0.4s ease;\n      }\n\n      .ovf-slide + .ovf-slide {\n        margin-left: 24px;\n      }\n\n      .ovf-slide--active {\n        opacity: 1;\n      }\n\n      .ovf-slide--expanded {\n        padding-bottom: 84px !important; \/* slightly more bottom padding when expanded *\/\n      }\n\n      \/* ---- content position ---- *\/\n      .ovf-slide-body {\n        margin-top: 88px; \/* a bit lower, closer to layout *\/\n        display: flex;\n        flex-direction: column;\n      }\n\n      \/* ---- typography ---- *\/\n      .ovf-slide-header {\n        font-size: 26px;\n        font-weight: 700;\n        line-height: 1.25;\n        margin-bottom: 14px;\n        color: #fdfdfd;\n      }\n\n      .ovf-divider {\n        display: block;\n        width: 73px;\n        height: 3px;\n        border-radius: 99px;\n        background-color: rgba(255, 255, 255, 0.55);\n        margin: 0 auto 14px;\n        transition: background-color 0.3s ease;\n      }\n\n      .ovf-slide--expanded .ovf-divider {\n        background-color: #ffd61a;\n      }\n\n      .ovf-subheader {\n        font-size: 18px;\n        font-weight: 600;\n        line-height: 130%;\n        color: #f7f2e1;\n        margin-bottom: 10px;\n      }\n\n      \/* ---- body text ---- *\/\n      .ovf-text-wrap {\n        position: relative;\n      }\n\n      .ovf-text {\n        font-size: 16px;\n        font-weight: 400;\n        line-height: 135%;\n        color: rgba(247, 242, 225, 0.72);\n        max-height: 68px; \/* ~3 lines collapsed *\/\n        overflow: hidden;\n        margin-top: 12px; \/* small margin from subheader *\/\n        text-align: center;\n        margin-left: auto;\n        margin-right: auto;\n        max-width: 260px; \/* keep line length reasonable *\/\n        \/* NO transition here \u2014 instant change so JS can measure correctly *\/\n      }\n\n      .ovf-slide--expanded .ovf-text {\n        max-height: none;\n        text-align: center; \/* stays centered when expanded *\/\n      }\n\n      \/* bottom fade over collapsed text *\/\n      .ovf-fade {\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        height: 44px;\n        background: linear-gradient(\n          to bottom,\n          rgba(46, 35, 21, 0) 0%,\n          rgba(46, 35, 21, 1) 100%\n        );\n        pointer-events: none;\n        transition: opacity 0.3s ease;\n      }\n\n      .ovf-slide--expanded .ovf-fade {\n        opacity: 0;\n      }\n\n      \/* ---- expand button ---- *\/\n      .ovf-expand-btn {\n        position: static; \/* button in flow below text *\/\n        margin: 24px auto 0;\n        width: 36px;\n        height: 36px;\n        border-radius: 50%;\n        border: none;\n        background-color: #ffd61a;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        cursor: pointer;\n        box-shadow: 0 4px 18px rgba(0, 0, 0, 0.35);\n        z-index: 2;\n        flex-shrink: 0;\n        margin-bottom: 10px;\n        text-decoration: none;\n        transition:\n          background-color 0.2s ease,\n          box-shadow 0.2s ease,\n          transform 0.2s ease;\n      }\n\n      \/* Remove focus\/active underline and outline, add hover scale + subtle color *\/\n      .ovf-expand-btn:hover,\n      .ovf-expand-btn:active,\n      .ovf-expand-btn:focus,\n      .ovf-expand-btn:focus-visible {\n        background-color: #ffd61a;\n        outline: none;\n        box-shadow: 0 4px 18px rgba(0, 0, 0, 0.35);\n        text-decoration: none;\n        transform: scale(1.06);\n      }\n\n      .ovf-expand-btn img {\n        width: 36px;\n        height: 36px;\n        display: block;\n        transition: filter 0.2s ease;\n      }\n\n      \/* On hover, slightly shift icon colors so the whole circle looks more active *\/\n      .ovf-expand-btn:hover img,\n      .ovf-expand-btn:active img,\n      .ovf-expand-btn:focus img,\n      .ovf-expand-btn:focus-visible img {\n        filter: brightness(1.08) saturate(1.08);\n      }\n\n      \/* ---- dots ---- *\/\n      .ovf-dots {\n        position: absolute;\n        bottom: 20px; \/* slightly above bottom edge, as in layout *\/\n        left: 0;\n        right: 0;\n        display: flex;\n        justify-content: center;\n        gap: 10px;\n        z-index: 5;\n      }\n\n      .ovf-carousel--expanded .ovf-dots {\n        display: none;\n      }\n\n      .ovf-dot {\n        width: 8px;\n        height: 8px;\n        border-radius: 50%;\n        border: none;\n        background-color: rgba(255, 255, 255, 0.3);\n        cursor: pointer;\n        transition:\n          background-color 0.3s ease,\n          width 0.3s ease;\n      }\n\n      .ovf-dot--active {\n        background-color: #ffd61a;\n      }\n\n      \/* Override global button active\/focus styles for dots (no focus underline) *\/\n      .ovf-dot:hover,\n      .ovf-dot:active,\n      .ovf-dot:focus,\n      .ovf-dot:focus-visible {\n        background-color: rgba(255, 255, 255, 0.3);\n        outline: none;\n        box-shadow: none;\n        text-decoration: none;\n      }\n\n      .ovf-dot.ovf-dot--active,\n      .ovf-dot.ovf-dot--active:hover,\n      .ovf-dot.ovf-dot--active:active,\n      .ovf-dot.ovf-dot--active:focus,\n      .ovf-dot.ovf-dot--active:focus-visible {\n        background-color: #ffd61a;\n      }\n\n      \/* ---- tablet layout ---- *\/\n      @media (min-width: 768px) and (max-width: 1023.98px) {\n        .ovf-carousel {\n          min-height: 520px; \/* closer to mobile height *\/\n          max-width: 1024px;\n          margin-left: auto;\n          margin-right: auto;\n        }\n\n        .ovf-slide {\n          flex: 0 0 360px;\n          width: 360px;\n          min-height: 485px; \/* same as base slide min-height *\/\n        }\n\n        .ovf-slide-body {\n          margin-top: 88px; \/* align with mobile spacing *\/\n        }\n      }\n\n      \/* ---- desktop layout ---- *\/\n      @media (min-width: 1024px) {\n        .ovf-carousel {\n          min-height: 692px;\n          width: 100vw;\n          max-width: 100vw;\n          margin-left: 50%;\n          transform: translateX(-50%);\n          padding: 48px 64px 48px 64px;\n        }\n\n        .ovf-track {\n          justify-content: center;\n          transform: none !important;\n          transition: none;\n        }\n\n        .ovf-slide {\n          opacity: 1;\n          height: 540px;\n          min-height: 540px;\n        }\n\n        .ovf-slide--expanded {\n          height: auto;\n        }\n\n        .ovf-slide + .ovf-slide {\n          margin-left: 40px;\n        }\n\n        .ovf-slide-body {\n          margin-top: 150px;\n          flex: 2;\n          display: flex;\n          flex-direction: column;\n          justify-content: space-between;\n        }\n\n        .ovf-bg-strip {\n          left: 50%;\n          transform: translateX(-50%);\n          width: 1000px;\n          height: 200px;\n          background-image: url(\"\/wp-content\/uploads\/2026\/03\/Group-313.png\");\n          background-size: 100% auto;\n        }\n\n        .ovf-divider {\n          width: 138px;\n        }\n\n        .ovf-slide-header {\n          font-size: 32px;\n          font-weight: 600;\n          line-height: 120%;\n        }\n\n        .ovf-subheader {\n          font-size: 26px;\n          font-weight: 600;\n          line-height: 125%;\n          min-height: 96px;\n          display: flex;\n          align-items: center;\n          justify-content: center;\n        }\n\n        .ovf-text {\n          font-size: 18px;\n          font-weight: 400;\n          line-height: 135%;\n          max-height: 96px;\n        }\n\n        .ovf-expand-btn {\n          width: 56px;\n          height: 56px;\n        }\n\n        .ovf-expand-btn img {\n          width: 56px;\n          height: 56px;\n        }\n\n        .ovf-text-wrap {\n          height: 96px;\n          overflow: hidden;\n        }\n\n        .ovf-slide--expanded .ovf-text-wrap {\n          height: auto;\n          overflow: visible;\n        }\n\n        .ovf-dot {\n          display: none;\n        }\n\n        .ovf-dots {\n          display: none;\n        }\n      }\n    <\/style>\n  <\/head>\n  <body>\n    <div class=\"ovf-carousel\" id=\"ovfCarousel\">\n      <div class=\"ovf-track\" id=\"ovfTrack\">\n        <!-- shared illustration strip: 960 px wide, moves with track -->\n        <div class=\"ovf-bg-strip\"><\/div>\n\n        <!-- Slide 1 -->\n        <article class=\"ovf-slide ovf-slide--active\">\n          <div class=\"ovf-slide-body\">\n            <header class=\"ovf-slide-header\">\n              El problema<br \/>que abordamos\n            <\/header>\n            <span class=\"ovf-divider\"><\/span>\n            <h3 class=\"ovf-subheader\">\n              El talento est\u00e1 en todas partes, pero las oportunidades econ\u00f3micas no\n            <\/h3>\n            <div class=\"ovf-text-wrap\">\n              <p class=\"ovf-text\">\n                La falta de empleo y recursos mantiene a muchas personas\n                atrapadas en un c\u00edrculo de pobreza estructural y las soluciones\n                asistenciales no rompen ese ciclo a largo plazo.\n              <\/p>\n              <div class=\"ovf-fade\"><\/div>\n            <\/div>\n            <button class=\"ovf-expand-btn\" type=\"button\" aria-label=\"Expandir\">\n              <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/02\/Group-159.svg\" alt=\"\" \/>\n            <\/button>\n          <\/div>\n        <\/article>\n\n        <!-- Slide 2 -->\n        <article class=\"ovf-slide\">\n          <div class=\"ovf-slide-body\">\n            <header class=\"ovf-slide-header\">Nuestra<br \/>convicci\u00f3n<\/header>\n            <span class=\"ovf-divider\"><\/span>\n            <h3 class=\"ovf-subheader\">\n             Las oportunidades activan el potencial de las personas\n            <\/h3>\n            <div class=\"ovf-text-wrap\">\n              <p class=\"ovf-text\">\n                \"Las herramientas que hacen a los pa\u00edses ricos a\u00fan m\u00e1s ricos,\n                son las mismas que ayudar\u00e1n a los m\u00e1s pobres a salir de la\n                pobreza...\" Jim Yong Kim\n              <\/p>\n              <div class=\"ovf-fade\"><\/div>\n            <\/div>\n            <button class=\"ovf-expand-btn\" type=\"button\" aria-label=\"Expandir\">\n              <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/02\/Group-159.svg\" alt=\"\" \/>\n            <\/button>\n          <\/div>\n        <\/article>\n\n        <!-- Slide 3 -->\n        <article class=\"ovf-slide\">\n          <div class=\"ovf-slide-body\">\n            <header class=\"ovf-slide-header\">\u00bfC\u00f3mo<br \/>lo hacemos?<\/header>\n            <span class=\"ovf-divider\"><\/span>\n            <h3 class=\"ovf-subheader\">Abrimos oportunidades y mentes<\/h3>\n            <div class=\"ovf-text-wrap\">\n              <p class=\"ovf-text\">\n             Contribuimos de forma m\u00e1s sostenible al\n                cambio social con un modelo de financiaci\u00f3n h\u00edbrido entre la\n                filantrop\u00eda estrat\u00e9gica y la inversi\u00f3n de impacto. Adem\u00e1s, siendo conscientes de la necesidad\n                de difundir este modelo, promovemos la inversi\u00f3n de impacto a trav\u00e9s de la formaci\u00f3n, la divulgaci\u00f3n y la generaci\u00f3n de conocimiento.\n              <\/p>\n              <div class=\"ovf-fade\"><\/div>\n            <\/div>\n            <button class=\"ovf-expand-btn\" type=\"button\" aria-label=\"Expandir\">\n              <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/02\/Group-159.svg\" alt=\"\" \/>\n            <\/button>\n          <\/div>\n        <\/article>\n      <\/div>\n      <!-- \/track -->\n\n      <div class=\"ovf-dots\" id=\"ovfDots\">\n        <button\n          class=\"ovf-dot ovf-dot--active\"\n          data-i=\"0\"\n          aria-label=\"Slide 1\"\n        ><\/button>\n        <button class=\"ovf-dot\" data-i=\"1\" aria-label=\"Slide 2\"><\/button>\n        <button class=\"ovf-dot\" data-i=\"2\" aria-label=\"Slide 3\"><\/button>\n      <\/div>\n    <\/div>\n    <!-- \/carousel -->\n\n    <script>\n      (function () {\n        var carousel = document.getElementById(\"ovfCarousel\");\n        var track = document.getElementById(\"ovfTrack\");\n        var slides = Array.from(carousel.querySelectorAll(\".ovf-slide\"));\n        var dots = Array.from(carousel.querySelectorAll(\".ovf-dot\"));\n        if (!slides.length) return;\n\n        var SLIDE_W = 304;\n        var GAP = 24;\n        var current = 0;\n        var expandedIndex = null;\n\n        \/* ---- navigation ---- *\/\n\n        function setTranslate() {\n          var w = (slides[0].getBoundingClientRect().width || SLIDE_W) + GAP;\n          var offset = current * w;\n\n          \/\/ On tablet, avoid empty space at the end of the carousel\n          var vpWidth = carousel.getBoundingClientRect().width;\n          var totalWidth = slides.length * w - GAP;\n\n          if (window.innerWidth >= 768 && window.innerWidth < 1024) {\n            var maxOffset = Math.max(0, totalWidth - vpWidth);\n            if (offset > maxOffset) offset = maxOffset;\n          }\n\n          track.style.transform = \"translateX(\" + -offset + \"px)\";\n        }\n\n        function renderActive() {\n          slides.forEach(function (s, i) {\n            s.classList.toggle(\"ovf-slide--active\", i === current);\n          });\n          dots.forEach(function (d, i) {\n            d.classList.toggle(\"ovf-dot--active\", i === current);\n          });\n        }\n\n        function goTo(i) {\n          if (i < 0) i = slides.length - 1;\n          if (i >= slides.length) i = 0;\n          \/\/ collapse text when changing slide\n          setExpanded(null);\n          current = i;\n          setTranslate();\n          renderActive();\n        }\n\n        \/* ---- expand \/ collapse ---- *\/\n\n        function setExpanded(index) {\n          expandedIndex = index;\n\n          slides.forEach(function (slide, i) {\n            var isExpanded = i === index;\n            slide.classList.toggle(\"ovf-slide--expanded\", isExpanded);\n\n            var img = slide.querySelector(\".ovf-expand-btn img\");\n            if (img) {\n              img.src = isExpanded\n                ? \"\/wp-content\/uploads\/2026\/02\/Group-162.svg\" \/\/ arrow\n                : \"\/wp-content\/uploads\/2026\/02\/Group-159.svg\"; \/\/ plus\n            }\n          });\n        }\n\n        slides.forEach(function (slide, i) {\n          var btn = slide.querySelector(\".ovf-expand-btn\");\n          if (!btn) return;\n\n          btn.addEventListener(\"click\", function () {\n            if (expandedIndex === i) {\n              setExpanded(null);\n            } else {\n              setExpanded(i);\n            }\n          });\n        });\n\n        \/* ---- dots ---- *\/\n        dots.forEach(function (d) {\n          d.addEventListener(\"click\", function () {\n            goTo(parseInt(d.getAttribute(\"data-i\"), 10));\n          });\n        });\n\n        \/* ---- swipe ---- *\/\n        var tx = 0;\n        carousel.addEventListener(\n          \"touchstart\",\n          function (e) {\n            tx = e.touches[0].clientX;\n          },\n          { passive: true },\n        );\n        carousel.addEventListener(\n          \"touchend\",\n          function (e) {\n            var dx = e.changedTouches[0].clientX - tx;\n            if (Math.abs(dx) > 48) goTo(current + (dx < 0 ? 1 : -1));\n          },\n          { passive: true },\n        );\n\n        \/* ---- resize ---- *\/\n        window.addEventListener(\"resize\", setTranslate);\n\n        \/* ---- init ---- *\/\n        setTranslate();\n        renderActive();\n      })();\n    <\/script>\n  <\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-14d708e elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile e-flex e-con-boxed e-con e-parent\" data-id=\"14d708e\" 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<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-02c3df5 elementor-hidden-tablet elementor-hidden-mobile e-con-full e-flex e-con e-parent\" data-id=\"02c3df5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fb3ee0a elementor-widget elementor-widget-heading\" data-id=\"fb3ee0a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nuestros valores<\/h2>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4454e20 e-con-full valores-container e-flex e-con e-child\" data-id=\"4454e20\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-5a88f22 e-con-full e-flex e-con e-child\" data-id=\"5a88f22\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-0c2f398 e-con-full valores-box-desk1 e-flex e-con e-child\" data-id=\"0c2f398\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bb816bb elementor-widget elementor-widget-heading\" data-id=\"bb816bb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nacemos de la alegr\u00eda de dar<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-77e47c3 elementor-widget elementor-widget-text-editor\" data-id=\"77e47c3\" 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>y del convencimiento de que es posible erradicar la pobreza construyendo un mundo m\u00e1s justo y libre, abriendo oportunidades para que todas las personas puedan desarrollar todo su potencial y elegir el lugar del mundo en el que quieren estar.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9ab81ec e-con-full valores-box-desk2 e-flex e-con e-child\" data-id=\"9ab81ec\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-08e64b4 elementor-widget elementor-widget-heading\" data-id=\"08e64b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Compartimos nuestra experiencia<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-192b162 elementor-widget elementor-widget-text-editor\" data-id=\"192b162\" 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>Queremos compartir nuestras experiencias y aprendizajes para abrir las mentes a formas de abordar la pobreza y las desigualdades con m\u00e1s impacto, potenciando las riquezas que todos tenemos.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2b3edd2 e-con-full e-flex e-con e-child\" data-id=\"2b3edd2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-60c2f27 e-con-full valores-box-desk3 e-flex e-con e-child\" data-id=\"60c2f27\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8edb80e elementor-widget elementor-widget-heading\" data-id=\"8edb80e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">No nos limitamos a una forma de dar<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d0b8cc5 elementor-widget elementor-widget-text-editor\" data-id=\"d0b8cc5\" 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>fomentamos y ponemos en pr\u00e1ctica mecanismos alternativos para contribuir de formas m\u00e1s sostenibles al cambio social, apostando por modelos h\u00edbridos de inversi\u00f3n que fomentan la libertad y potencian la dignidad de las personas.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a7b4128 e-con-full valores-box-desk4 e-flex e-con e-child\" data-id=\"a7b4128\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-08aaf91 elementor-widget elementor-widget-heading\" data-id=\"08aaf91\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">La colaboraci\u00f3n es crucial para el cambio<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9d09e37 elementor-widget elementor-widget-text-editor\" data-id=\"9d09e37\" 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>Creemos que la colaboraci\u00f3n es crucial para el cambio, que las alianzas entre distintos sectores y entidades multiplican el impacto, y que entre todos llegamos m\u00e1s lejos.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-035b5cd e-con-full e-flex e-con e-child\" data-id=\"035b5cd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-a3cb9af e-con-full valores-box-desk5 e-flex e-con e-child\" data-id=\"a3cb9af\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2d6cd42 elementor-widget elementor-widget-heading\" data-id=\"2d6cd42\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Un enfoque basado en el aprendizaje<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0a76c67 elementor-widget elementor-widget-text-editor\" data-id=\"0a76c67\" 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>Estamos abiertos a experimentar, a equivocarnos y a aprender, con el objetivo de identificar estrategias m\u00e1s eficaces para mejorar las perspectivas de desarrollo de las personas m\u00e1s vulnerables. Buscamos el rigor, pero nos basamos en la confianza en la persona.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ea98a5f e-con-full valores-box-desk6 e-flex e-con e-child\" data-id=\"ea98a5f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9918ae4 elementor-widget elementor-widget-heading\" data-id=\"9918ae4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Trabajo y paciencia<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b133738 elementor-widget elementor-widget-text-editor\" data-id=\"b133738\" 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>Queremos compartir nuestras experiencias y aprendizajes para abrir las mentes a formas de abordar la pobreza y las desigualdades con m\u00e1s impacto, potenciando las riquezas que todos tenemos.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-23d9a3d elementor-hidden-desktop e-con-full e-flex e-con e-parent\" data-id=\"23d9a3d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-890c9e6 elementor-hidden-desktop elementor-hidden-mobile elementor-widget elementor-widget-heading\" data-id=\"890c9e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nuestros valores<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d6fa121 elementor-hidden-desktop elementor-hidden-tablet elementor-widget elementor-widget-heading\" data-id=\"d6fa121\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nuestros valores<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c7cf4c carousel-peek elementor-widget-mobile__width-inherit elementor-hidden-tablet elementor-pagination-type-bullets elementor-arrows-position-inside elementor-pagination-position-outside elementor-widget elementor-widget-n-carousel\" data-id=\"8c7cf4c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;carousel_items&quot;:[{&quot;slide_title&quot;:&quot;1&quot;,&quot;_id&quot;:&quot;27c09b1&quot;},{&quot;_id&quot;:&quot;5cdcea4&quot;,&quot;slide_title&quot;:&quot;2&quot;},{&quot;slide_title&quot;:&quot;3&quot;,&quot;_id&quot;:&quot;ffc86a4&quot;},{&quot;_id&quot;:&quot;8c61900&quot;,&quot;slide_title&quot;:&quot;4&quot;},{&quot;_id&quot;:&quot;5cb0a40&quot;,&quot;slide_title&quot;:&quot;5&quot;},{&quot;_id&quot;:&quot;663cb59&quot;,&quot;slide_title&quot;:&quot;6&quot;}],&quot;slides_to_show_tablet&quot;:&quot;2&quot;,&quot;slides_to_show_mobile&quot;:&quot;1&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;autoplay_speed&quot;:5000,&quot;pause_on_hover&quot;:&quot;yes&quot;,&quot;pause_on_interaction&quot;:&quot;yes&quot;,&quot;speed&quot;:500,&quot;arrows&quot;:&quot;yes&quot;,&quot;pagination&quot;:&quot;bullets&quot;,&quot;image_spacing_custom&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;image_spacing_custom_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"nested-carousel.default\">\n\t\t\t\t\t\t\t<div class=\"e-n-carousel swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Carrusel\" dir=\"ltr\">\n\t\t\t<div class=\"swiper-wrapper\" aria-live=\"off\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"1\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7e916a2 value-box1 e-flex e-con-boxed e-con e-child\" data-id=\"7e916a2\" 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-92250eb e-con-full e-flex e-con e-child\" data-id=\"92250eb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1ab5cd8 elementor-widget elementor-widget-heading\" data-id=\"1ab5cd8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nacemos de la alegr\u00eda de dar<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c5549c elementor-widget elementor-widget-text-editor\" data-id=\"6c5549c\" 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>y del convencimiento de que es posible erradicar la pobreza construyendo un mundo m\u00e1s justo y libre, abriendo oportunidades para que todas las personas puedan desarrollar todo su potencial y elegir el lugar del mundo en el que quieren estar.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"2\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-129a773 e-flex e-con-boxed e-con e-child\" data-id=\"129a773\" 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-bf782b7 e-con-full e-flex e-con e-child\" data-id=\"bf782b7\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8f03365 elementor-widget elementor-widget-heading\" data-id=\"8f03365\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">No nos limitamos a una forma de dar<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1486807 elementor-widget elementor-widget-text-editor\" data-id=\"1486807\" 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>fomentamos y ponemos en pr\u00e1ctica mecanismos alternativos para contribuir de formas m\u00e1s sostenibles al cambio social, apostando por modelos h\u00edbridos de inversi\u00f3n que fomentan la libertad y potencian la dignidad de las personas.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"3\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3c05196 e-flex e-con-boxed e-con e-child\" data-id=\"3c05196\" 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-66c6dc3 e-con-full e-flex e-con e-child\" data-id=\"66c6dc3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c142830 elementor-widget elementor-widget-heading\" data-id=\"c142830\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Un enfoque basado en el aprendizaje<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3aaf84f elementor-widget elementor-widget-text-editor\" data-id=\"3aaf84f\" 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>Estamos abiertos a experimentar, a equivocarnos y a aprender, con el objetivo de identificar estrategias m\u00e1s eficaces para mejorar las perspectivas de desarrollo de las personas m\u00e1s vulnerables. Buscamos el rigor, pero nos basamos en la confianza en la persona.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"4\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"4 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f6fc623 e-flex e-con-boxed e-con e-child\" data-id=\"f6fc623\" 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-3aa51ee e-con-full e-flex e-con e-child\" data-id=\"3aa51ee\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-25a156e elementor-widget elementor-widget-heading\" data-id=\"25a156e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Compartimos nuestra experiencia<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-39c2247 elementor-widget elementor-widget-text-editor\" data-id=\"39c2247\" 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>Queremos compartir nuestras experiencias y aprendizajes para abrir las mentes a formas de abordar la pobreza y las desigualdades con m\u00e1s impacto, potenciando las riquezas que todos tenemos.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"5\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"5 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-43de233 e-flex e-con-boxed e-con e-child\" data-id=\"43de233\" 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-e86f06b e-con-full e-flex e-con e-child\" data-id=\"e86f06b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1dba387 elementor-widget elementor-widget-heading\" data-id=\"1dba387\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">La colaboraci\u00f3n es crucial para el cambio<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-91bc977 elementor-widget elementor-widget-text-editor\" data-id=\"91bc977\" 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>Creemos que la colaboraci\u00f3n es crucial para el cambio, que las alianzas entre distintos sectores y entidades multiplican el impacto, y que entre todos llegamos m\u00e1s lejos.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"6\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"6 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b88863d e-flex e-con-boxed e-con e-child\" data-id=\"b88863d\" 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-ec8af1d e-con-full e-flex e-con e-child\" data-id=\"ec8af1d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-20322b8 elementor-widget elementor-widget-heading\" data-id=\"20322b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Trabajo y paciencia<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-46d7643 elementor-widget elementor-widget-text-editor\" data-id=\"46d7643\" 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>Sabemos que no es f\u00e1cil, que requiere de tiempo y trabajo, de paciencia y perseverancia, y estamos en el camino, con humildad y generosidad, siempre abiertos.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-prev\" role=\"button\" tabindex=\"0\" aria-label=\"Anterior\">\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-next\" role=\"button\" tabindex=\"0\" aria-label=\"Siguiente\">\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"swiper-pagination\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5226c95 carousel-peek-tablet elementor-widget-mobile__width-inherit elementor-hidden-mobile elementor-pagination-type-bullets elementor-arrows-position-inside elementor-pagination-position-outside elementor-widget elementor-widget-n-carousel\" data-id=\"5226c95\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;carousel_items&quot;:[{&quot;slide_title&quot;:&quot;1&quot;,&quot;_id&quot;:&quot;27c09b1&quot;},{&quot;_id&quot;:&quot;2eaf77b&quot;,&quot;slide_title&quot;:&quot;2&quot;},{&quot;slide_title&quot;:&quot;3&quot;,&quot;_id&quot;:&quot;ffc86a4&quot;},{&quot;slide_title&quot;:&quot;4&quot;,&quot;_id&quot;:&quot;4edf982&quot;},{&quot;_id&quot;:&quot;5cb0a40&quot;,&quot;slide_title&quot;:&quot;5&quot;},{&quot;_id&quot;:&quot;a9f4baf&quot;,&quot;slide_title&quot;:&quot;6&quot;}],&quot;slides_to_show_tablet&quot;:&quot;2&quot;,&quot;slides_to_show_mobile&quot;:&quot;1&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;autoplay_speed&quot;:5000,&quot;pause_on_hover&quot;:&quot;yes&quot;,&quot;pause_on_interaction&quot;:&quot;yes&quot;,&quot;infinite&quot;:&quot;yes&quot;,&quot;speed&quot;:500,&quot;offset_sides&quot;:&quot;none&quot;,&quot;arrows&quot;:&quot;yes&quot;,&quot;pagination&quot;:&quot;bullets&quot;,&quot;image_spacing_custom&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;image_spacing_custom_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"nested-carousel.default\">\n\t\t\t\t\t\t\t<div class=\"e-n-carousel swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Carrusel\" dir=\"ltr\">\n\t\t\t<div class=\"swiper-wrapper\" aria-live=\"off\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"1\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-740f9ac value-box1 e-flex e-con-boxed e-con e-child\" data-id=\"740f9ac\" 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-d86c061 e-con-full e-flex e-con e-child\" data-id=\"d86c061\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0b359a1 elementor-widget elementor-widget-heading\" data-id=\"0b359a1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nacemos de la alegr\u00eda de dar<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f501a9 elementor-widget elementor-widget-text-editor\" data-id=\"4f501a9\" 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>y del convencimiento de que es posible erradicar la pobreza construyendo un mundo m\u00e1s justo y libre, abriendo oportunidades para que todas las personas puedan desarrollar todo su potencial y elegir el lugar del mundo en el que quieren estar.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"2\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-55824cf e-flex e-con-boxed e-con e-child\" data-id=\"55824cf\" 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-4b852fd e-con-full e-flex e-con e-child\" data-id=\"4b852fd\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-765eca5 elementor-widget elementor-widget-heading\" data-id=\"765eca5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">No nos limitamos a una forma de dar<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-36495e1 elementor-widget elementor-widget-text-editor\" data-id=\"36495e1\" 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>fomentamos y ponemos en pr\u00e1ctica mecanismos alternativos para contribuir de formas m\u00e1s sostenibles al cambio social, apostando por modelos h\u00edbridos de inversi\u00f3n que fomentan la libertad y potencian la dignidad de las personas.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"3\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0a434ae e-flex e-con-boxed e-con e-child\" data-id=\"0a434ae\" 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-97ddbf7 e-con-full e-flex e-con e-child\" data-id=\"97ddbf7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1981769 elementor-widget elementor-widget-heading\" data-id=\"1981769\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Un enfoque basado en el aprendizaje<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cb6ccb1 elementor-widget elementor-widget-text-editor\" data-id=\"cb6ccb1\" 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>Estamos abiertos a experimentar, a equivocarnos y a aprender, con el objetivo de identificar estrategias m\u00e1s eficaces para mejorar las perspectivas de desarrollo de las personas m\u00e1s vulnerables. Buscamos el rigor, pero nos basamos en la confianza en la persona.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"4\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"4 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-40fcfcb value-box3 e-flex e-con-boxed e-con e-child\" data-id=\"40fcfcb\" 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-67445f5 e-con-full e-flex e-con e-child\" data-id=\"67445f5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7bc7f49 elementor-widget elementor-widget-heading\" data-id=\"7bc7f49\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Compartimos nuestra experiencia<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d7b185 elementor-widget elementor-widget-text-editor\" data-id=\"6d7b185\" 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>Queremos compartir nuestras experiencias y aprendizajes para abrir las mentes a formas de abordar la pobreza y las desigualdades con m\u00e1s impacto, potenciando las riquezas que todos tenemos.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"5\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"5 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bde857c e-flex e-con-boxed e-con e-child\" data-id=\"bde857c\" 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-1bbcb30 e-con-full e-flex e-con e-child\" data-id=\"1bbcb30\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3d65a7c elementor-widget elementor-widget-heading\" data-id=\"3d65a7c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">La colaboraci\u00f3n es crucial para el cambio<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a36c135 elementor-widget elementor-widget-text-editor\" data-id=\"a36c135\" 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>Creemos que la colaboraci\u00f3n es crucial para el cambio, que las alianzas entre distintos sectores y entidades multiplican el impacto, y que entre todos llegamos m\u00e1s lejos.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"6\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"6 of 6\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3907d40 value-box5 e-flex e-con-boxed e-con e-child\" data-id=\"3907d40\" 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-89b1898 e-con-full e-flex e-con e-child\" data-id=\"89b1898\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5b0f023 elementor-widget elementor-widget-heading\" data-id=\"5b0f023\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Trabajo y paciencia<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9b5b323 elementor-widget elementor-widget-text-editor\" data-id=\"9b5b323\" 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>Sabemos que no es f\u00e1cil, que requiere de tiempo y trabajo, de paciencia y perseverancia, y estamos en el camino, con humildad y generosidad, siempre abiertos.<\/p>\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\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-prev\" role=\"button\" tabindex=\"0\" aria-label=\"Anterior\">\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-next\" role=\"button\" tabindex=\"0\" aria-label=\"Siguiente\">\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"swiper-pagination\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e3116e elementor-widget elementor-widget-html\" data-id=\"5e3116e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n\n(function () {\n  var CLASS = 'carousel-peek-tablet';\n  var SPACE_BETWEEN = 15; \n  var TABLET_DELTA = 0.18; \n  function injectStyles() {\n    if (document.getElementById('carousel-peek-tablet-styles')) return;\n\n    var css = ''\n      + '.carousel-peek-tablet .swiper,'\n      + '.carousel-peek-tablet .swiper-container{'\n      + '  overflow: visible !important;'\n      + '}\\n'\n      + '.carousel-peek-tablet{'\n      + '  overflow: hidden;'\n      + '}\\n';\n\n    var style = document.createElement('style');\n    style.id = 'carousel-peek-tablet-styles';\n    style.type = 'text\/css';\n    style.appendChild(document.createTextNode(css));\n    document.head.appendChild(style);\n  }\n\n  function getSwiper(widget) {\n    var container =\n      widget.querySelector('.swiper') ||\n      widget.querySelector('.swiper-container');\n\n    if (!container) return null;\n\n    return (\n      container.swiper ||\n      (window.jQuery && window.jQuery(container).data('swiper')) ||\n      null\n    );\n  }\n\n  function updateTabletPeek(swiper) {\n    var data = swiper._peekTablet;\n    if (!data) return;\n\n    var vw = window.innerWidth || document.documentElement.clientWidth || 1024;\n    var isTablet = vw >= 768 && vw < 1024;\n\n    if (isTablet) {\n\n      var base = data.baseSlidesPerView || 1;\n      swiper.params.slidesPerView = base + TABLET_DELTA;\n      swiper.params.spaceBetween = SPACE_BETWEEN;\n    } else {\n\n      swiper.params.slidesPerView = data.orig.slidesPerView;\n      swiper.params.spaceBetween =\n        typeof data.orig.spaceBetween === 'number'\n          ? data.orig.spaceBetween\n          : swiper.params.spaceBetween;\n    }\n\n    swiper.update();\n  }\n\n  function applyPeekTablet(widget) {\n    var swiper = getSwiper(widget);\n    if (!swiper) return;\n    if (swiper._peekTablet && swiper._peekTablet.initialized) return;\n\n    var orig = {\n      slidesPerView: swiper.params.slidesPerView,\n      spaceBetween: swiper.params.spaceBetween\n    };\n\n    swiper._peekTablet = {\n      initialized: true,\n      orig: orig,\n      baseSlidesPerView: orig.slidesPerView || 1\n    };\n\n\n    updateTabletPeek(swiper);\n\n    if (!swiper._peekTabletResizeHandler) {\n      var handler = function () { updateTabletPeek(swiper); };\n      swiper._peekTabletResizeHandler = handler;\n      window.addEventListener('resize', handler);\n    }\n  }\n\n  function run() {\n    injectStyles();\n    document\n      .querySelectorAll('.' + CLASS)\n      .forEach(applyPeekTablet);\n  }\n\n\n  if (window.elementorFrontend && window.elementorFrontend.hooks) {\n    elementorFrontend.hooks.addAction(\n      'frontend\/element_ready\/widget',\n      function ($el) {\n        var widget = $el[0];\n        if (!widget || !widget.classList) return;\n        if (!widget.classList.contains(CLASS)) return;\n\n        injectStyles();\n        setTimeout(function () { applyPeekTablet(widget); }, 100);\n      }\n    );\n  }\n\n  \/\/ DOM ready + load\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () {\n      setTimeout(run, 400);\n    });\n  } else {\n    setTimeout(run, 400);\n  }\n  window.addEventListener('load', run);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fe4ba2b elementor-hidden-desktop elementor-hidden-tablet e-con-full e-flex e-con e-parent\" data-id=\"fe4ba2b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b8e60eb elementor-widget elementor-widget-heading\" data-id=\"b8e60eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nuestra historia<\/h2>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5ba3b7c e-con-full e-flex e-con e-child\" data-id=\"5ba3b7c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f6cab1b elementor-widget elementor-widget-text-editor\" data-id=\"f6cab1b\" 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>Open Value nace de un compromiso a largo plazo con el impacto por parte de sus fundadores, Mar\u00eda \u00c1ngeles Le\u00f3n y Francisco Garc\u00eda Param\u00e9s.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bbe0ebd history-bloque elementor-widget elementor-widget-fswp-text-unfold\" data-id=\"bbe0ebd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"fswp-text-unfold.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <div class=\"fswp-elt--read-more-main-wrapper\">\n                    <div class=\"fswp-elt--read-more-content-wrapper\">\n                            <div class=\"fswp-elt--read-more-content\">\n                    <p>Durante m\u00e1s de 25 a\u00f1os, han dedicado parte de su patrimonio personal a iniciativas que mejoran la vida de comunidades vulnerables, especialmente en el \u00c1frica subsahariana.<\/p><p>Inicialmente a trav\u00e9s de la filantrop\u00eda tradicional, m\u00e1s tarde adoptaron enfoques m\u00e1s sostenibles, inspirados por pioneros como Acumen y Yunus Social Business. Ese viaje dio lugar a Open Value Foundation (OVF) en 2017.<\/p>                <\/div>\n\n                \n                                    <div class=\"fswp-elt--read-more-button-wrapper\">\n                        <a class=\"fswp-elt--read-more more show-icon\"\n                            data-height=\"0\"\n                            data-more=\"\"\n                            data-less=\"\"\n                            aria-expanded=\"false\">\n                            <span class=\"fswp-elt--read-more-text\">\n                                                            <\/span>\n                                                            <span class=\"fswp-elt--read-more-icon more\">\n                                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\"><circle cx=\"18\" cy=\"18\" r=\"14\" fill=\"#FFD61A\"><\/circle><path d=\"M18.0004 11.9766C17.2484 11.9766 16.6388 12.5861 16.6388 13.3381V16.6398H13.3371C12.5852 16.6398 11.9756 17.2494 11.9756 18.0014C11.9756 18.7534 12.5852 19.3629 13.3371 19.3629H16.6388V22.6647C16.6388 23.4167 17.2484 24.0262 18.0004 24.0262C18.7525 24.0262 19.3619 23.4167 19.3619 22.6647V19.3629H22.6637C23.4157 19.3629 24.0252 18.7534 24.0252 18.0014C24.0252 17.2494 23.4157 16.6398 22.6637 16.6398H19.3619V13.3381C19.3619 12.5861 18.7525 11.9766 18.0004 11.9766Z\" fill=\"black\"><\/path><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.9998 1.80078C9.0528 1.80078 1.7998 9.05377 1.7998 18.0008C1.7998 26.9479 9.0528 34.2008 17.9998 34.2008C26.9469 34.2008 34.1998 26.9479 34.1998 18.0008C34.1998 9.05377 26.9469 1.80078 17.9998 1.80078ZM4.52293 18.0008C4.52293 10.5577 10.5567 4.52391 17.9998 4.52391C25.4428 4.52391 31.4768 10.5577 31.4768 18.0008C31.4768 25.4438 25.4428 31.4777 17.9998 31.4777C10.5567 31.4777 4.52293 25.4438 4.52293 18.0008Z\" fill=\"#FFD61A\"><\/path><\/svg>                                <\/span>\n                                                                                        <span class=\"fswp-elt--read-more-icon less\">\n                                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"33\" height=\"33\" viewBox=\"0 0 33 33\" fill=\"none\"><circle cx=\"16.2002\" cy=\"16.2002\" r=\"14\" fill=\"#FFD61A\"><\/circle><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.9517 15.8674C10.643 15.5924 10.6152 15.1187 10.8896 14.8093L15.6417 9.45175C15.7836 9.29175 15.9871 9.2002 16.2007 9.2002C16.4143 9.2002 16.6177 9.29175 16.7597 9.45175L21.5118 14.8093C21.7862 15.1187 21.7584 15.5924 21.4497 15.8674C21.141 16.1424 20.6683 16.1146 20.3939 15.8052L16.9486 11.9209V22.4507C16.9486 22.8646 16.6137 23.2002 16.2007 23.2002C15.7876 23.2002 15.4528 22.8646 15.4528 22.4507V11.9209L12.0075 15.8052C11.7331 16.1146 11.2604 16.1424 10.9517 15.8674Z\" fill=\"black\"><\/path><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.2 0C7.25299 0 0 7.25299 0 16.2C0 25.1471 7.25299 32.4 16.2 32.4C25.1471 32.4 32.4 25.1471 32.4 16.2C32.4 7.25299 25.1471 0 16.2 0ZM2.72313 16.2C2.72313 8.75693 8.75693 2.72313 16.2 2.72313C23.643 2.72313 29.677 8.75693 29.677 16.2C29.677 23.643 23.643 29.677 16.2 29.677C8.75693 29.677 2.72313 23.643 2.72313 16.2Z\" fill=\"#FFD61A\"><\/path><\/svg>                                <\/span>\n                                                    <\/a>\n                    <\/div>\n                                    <\/div><!--read-more-content-wrapper-->\n            <\/div>\n    \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cda80f7 e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-parent\" data-id=\"cda80f7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-0f3765d e-con-full e-flex e-con e-child\" data-id=\"0f3765d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9cf0fb4 elementor-widget elementor-widget-heading\" data-id=\"9cf0fb4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nuestra historia<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7fb3c97 elementor-widget elementor-widget-text-editor\" data-id=\"7fb3c97\" 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>Open Value nace de la vocaci\u00f3n social de sus fundadores, Mar\u00eda \u00c1ngeles Le\u00f3n y Francisco Garc\u00eda Param\u00e9s, quienes durante m\u00e1s de 25 a\u00f1os, han dedicado parte de su patrimonio familiar a iniciativas que mejoran la vida de comunidades vulnerables, especialmente en \u00c1frica subsahariana.\u2028<\/p><p>Inicialmente a trav\u00e9s de la filantrop\u00eda tradicional, m\u00e1s tarde adoptaron enfoques m\u00e1s sostenibles y alineados con su trayectoria profesional, inspirados por pioneros como Acumen y Yunus Social Business. Ese viaje dio lugar a la constituci\u00f3n de Open Value Foundation (OVF) en 2017.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0b56565 e-con-full elementor-hidden-mobile elementor-hidden-desktop e-flex e-con e-parent\" data-id=\"0b56565\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-90ac411 e-con-full e-flex e-con e-child\" data-id=\"90ac411\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c34db17 elementor-widget elementor-widget-heading\" data-id=\"c34db17\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nuestra historia<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aa7f961 elementor-widget elementor-widget-text-editor\" data-id=\"aa7f961\" 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>Open Value nace de un compromiso a largo plazo con el impacto por parte de sus fundadores, Mar\u00eda \u00c1ngeles Le\u00f3n y Francisco Garc\u00eda Param\u00e9s. Durante m\u00e1s de 25 a\u00f1os, han dedicado parte de su patrimonio personal a iniciativas que mejoran la vida de comunidades vulnerables, especialmente en el \u00c1frica subsahariana.\u2028<\/p><p>Inicialmente a trav\u00e9s de la filantrop\u00eda tradicional, m\u00e1s tarde adoptaron enfoques m\u00e1s sostenibles, inspirados por pioneros como Acumen y Yunus Social Business. Ese viaje dio lugar a Open Value Foundation (OVF) en 2017.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e38b777 e-con-full e-flex e-con e-parent\" data-id=\"e38b777\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bd45666 elementor-widget elementor-widget-html\" data-id=\"bd45666\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link\n  rel=\"stylesheet\"\n  href=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.css\"\n\/>\n<style>\n  :root {\n    --primary-color: #ffd61a;\n    --secondary-color: #212749;\n    --accent-color: #a35a12;\n    --text-color: #2a2a2a;\n    --light-gray: #c4c1ba;\n    --ovf-blue: #212749;\n    --ovf-green: #ffd61a;\n  }\n\n  * {\n    box-sizing: border-box;\n  }\n\n  @media (min-width: 1025px) {\n    .elementor-element.elementor-element-f8450.e-con {\n      padding: 0 !important;\n    }\n\n    .elementor-element.elementor-element-f8450.e-con > .e-con-inner {\n      padding: 0 !important;\n    }\n  }\n\n  .timeline-container {\n    max-width: 1440px;\n    margin: 0 auto;\n    position: relative;\n    z-index: 0;\n    overflow-x: hidden;\n  }\n\n  .timeline-container .swiper {\n    width: 100%;\n  }\n\n  .timeline-container .swiper-slide {\n    opacity: 1;\n    transform: none;\n    transition: none;\n  }\n\n  .timeline-slide {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .timeline-content {\n    display: flex;\n    gap: 0px;\n    align-items: flex-start;\n  }\n\n  .timeline-text {\n    flex: 1;\n    font-size: 16px;\n    line-height: 1.6;\n    position: relative;\n    margin-top: 100px;\n    left: 44px;\n  }\n\n  .timeline-year {\n    font-size: 80px;\n    font-weight: 700;\n    color: var(--secondary-color);\n    margin-top: 0px;\n    position: relative;\n    font-family: \"Proxima Nova\", Arial, sans-serif;\n    font-style: normal;\n    line-height: 130%;\n    padding-left: 64px;\n    width: 500px;\n  }\n\n  .timeline-year span {\n    font-family: \"Proxima Nova\", Arial, sans-serif;\n    background-image: url(\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/05\/num01.png\");\n    background-size: cover;\n    background-position: center;\n    display: inline-block;\n\n    \/* El truco para que se rellene el texto *\/\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    color: transparent;\n\n    \/* Opcional: animaci\u00f3n suave al aparecer *\/\n    transition: background-position 0.3s ease;\n  }\n\n  .timeline-title {\n    font-family: \"Proxima Nova\", Arial, sans-serif;\n    font-size: 32px;\n    font-weight: 600;\n    color: var(--secondary-color);\n    margin-top: 0px;\n    position: relative;\n    border-radius: 8px;\n    padding-left: 64px;\n    width: 540px;\n  }\n\n  .timeline-title span {\n    background-image: url(\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/05\/num01.png\");\n    background-size: cover;\n    background-position: center;\n    display: inline-block;\n\n    \/* El truco para que se rellene el texto *\/\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    color: transparent;\n\n    \/* Opcional: animaci\u00f3n suave al aparecer *\/\n    transition: background-position 0.3s ease;\n  }\n\n  .timeline-description {\n    color: var(--text-color);\n    font-family: \"Proxima Nova\", Arial, sans-serif;\n    font-size: 18px;\n    font-style: normal;\n    font-weight: 400;\n    line-height: 150%; \/* 27px *\/\n    margin: 10px 30px 0px 0px;\n    padding-left: 64px;\n    width: 480px;\n  }\n\n  .btn-ovf {\n    display: inline-flex;\n    align-items: center;\n    gap: 0.5rem;\n    padding: 0.65rem 1rem;\n    border: 1px solid var(--ovf-blue);\n    border-radius: 4px;\n    background: #fff;\n    color: var(--ovf-blue);\n    text-decoration: none;\n    font-weight: 600;\n    line-height: 1.1;\n    transition:\n      background-color 0.2s ease,\n      border-color 0.2s ease;\n    margin-top: 15px;\n    margin-left: 64px;\n  }\n\n  .btn-ovf:hover {\n    background: var(--ovf-green);\n    border-color: transparent;\n    color: var(--ovf-blue);\n  }\n\n  .btn-ovf__plus {\n    display: inline-block;\n    margin-left: 0.5rem;\n    font-weight: 800;\n    line-height: 1;\n  }\n\n  .timeline-image {\n    flex: 1;\n    top: 24px;\n    position: relative;\n  }\n\n  .timeline-image img {\n    width: 580px;\n    height: 470px;\n    object-fit: cover;\n    border-radius: 4px;\n  }\n\n  .timeline-image::after {\n    content: \"\";\n    width: 580px;\n    position: absolute;\n    inset: 0;\n    background: rgba(0, 0, 0, 0); \/* oscurece la imagen *\/\n    z-index: 1;\n    pointer-events: none;\n  }\n\n  .timeline-slide.timeline-animate .timeline-year,\n  .timeline-slide.timeline-animate .timeline-title,\n  .timeline-slide.timeline-animate .timeline-description,\n  .timeline-slide.timeline-animate .timeline-image {\n    opacity: 0;\n    transform: translateY(24px);\n    filter: blur(6px);\n  }\n\n  \/* Entrada desfasada, con bounce visual y blur *\/\n  .timeline-slide.timeline-animate .timeline-year {\n    animation: hoverElegantReveal 0.5s cubic-bezier(0.25, 0.46, 0.45, 1.4)\n      forwards 0.05s;\n  }\n  .timeline-slide.timeline-animate .timeline-title {\n    animation: hoverElegantReveal 0.5s cubic-bezier(0.25, 0.46, 0.45, 1.4)\n      forwards 0.15s;\n  }\n  .timeline-slide.timeline-animate .timeline-description {\n    animation: hoverElegantReveal 0.5s cubic-bezier(0.25, 0.46, 0.45, 1.4)\n      forwards 0.25s;\n  }\n  .timeline-slide.timeline-animate .timeline-image {\n    animation: hoverElegantFade 0.5s ease-out forwards 0.35s;\n  }\n\n  @keyframes hoverElegantReveal {\n    0% {\n      opacity: 0;\n      transform: translateY(24px);\n      filter: blur(6px);\n    }\n    80% {\n      transform: translateY(-2px);\n    }\n    100% {\n      opacity: 1;\n      transform: translateY(0);\n      filter: blur(0);\n    }\n  }\n\n  @keyframes hoverElegantFade {\n    0% {\n      opacity: 0;\n      filter: blur(6px);\n    }\n    100% {\n      opacity: 1;\n      filter: blur(0);\n    }\n  }\n\n  \/* DRAM\u00c1TICO, elegante, tipo cine *\/\n  .timeline-slide.timeline-click-animate .timeline-year,\n  .timeline-slide.timeline-click-animate .timeline-title,\n  .timeline-slide.timeline-click-animate .timeline-description,\n  .timeline-slide.timeline-click-animate .timeline-image {\n    opacity: 0;\n    transform: translateY(40px) scale(1.05);\n    filter: blur(8px);\n    transform-origin: top center;\n  }\n\n  \/* Entrada escalonada *\/\n  .timeline-slide.timeline-click-animate .timeline-year {\n    animation: cinematicFadeIn 0.8s cubic-bezier(0.22, 1, 0.36, 1) forwards 0.1s;\n  }\n  .timeline-slide.timeline-click-animate .timeline-title {\n    animation: cinematicFadeIn 0.8s cubic-bezier(0.22, 1, 0.36, 1) forwards 0.3s;\n  }\n  .timeline-slide.timeline-click-animate .timeline-description {\n    animation: cinematicFadeIn 0.8s cubic-bezier(0.22, 1, 0.36, 1) forwards 0.5s;\n  }\n  .timeline-slide.timeline-click-animate .timeline-image {\n    animation: cinematicFadeInImage 0.9s cubic-bezier(0.22, 1, 0.36, 1) forwards\n      0.7s;\n  }\n\n  \/* Keyframes *\/\n  @keyframes cinematicFadeIn {\n    0% {\n      opacity: 0;\n      transform: translateY(40px) scale(1.05);\n      filter: blur(8px);\n    }\n    100% {\n      opacity: 1;\n      transform: translateY(0) scale(1);\n      filter: blur(0);\n    }\n  }\n\n  @keyframes cinematicFadeInImage {\n    0% {\n      opacity: 0;\n      transform: scale(1.05);\n      filter: blur(10px) brightness(0.8);\n    }\n    100% {\n      opacity: 1;\n      transform: scale(1);\n      filter: blur(0) brightness(1);\n    }\n  }\n\n  .timeline-navigation {\n    position: relative;\n    margin-top: 0px;\n    overflow: visible;\n  }\n\n  .yearsOffset {\n    width: 100%;\n    height: 100%;\n    display: flex;\n    justify-content: flex-start;\n    overflow: hidden;\n  }\n\n  .timeline-nav-wrapper {\n    width: 100%;\n    min-width: max-content;\n    display: flex;\n    scroll-behavior: smooth;\n    padding-top: 80px;\n    position: relative;\n    touch-action: pan-x;\n    cursor: grab;\n    overflow-x: auto;\n  }\n\n  .timeline-nav-wrapper:active {\n    cursor: grabbing;\n  }\n\n  .timeline-nav-wrapper::-webkit-scrollbar {\n    display: none;\n  }\n\n  .timeline-nav-wrapper::after {\n    content: \"\";\n    display: block;\n    flex-shrink: 0;\n    width: 200px;\n    background: linear-gradient(\n      to right,\n      rgba(255, 255, 255, 0) 0%,\n      rgba(255, 255, 255, 1) 100%\n    );\n    transition: opacity 0.3s ease;\n    opacity: 1;\n  }\n\n  .timeline-nav-wrapper.end-reached::after {\n    opacity: 0;\n  }\n\n  \/* Desktop: make tail after last year shorter *\/\n  @media (min-width: 1025px) {\n    .timeline-nav-wrapper::after {\n      width: 40px;\n    }\n  }\n\n  .timeline-nav-item {\n    align-items: center;\n    justify-content: space-around;\n    align-self: flex-start;\n    min-width: 100px;\n    font-size: 24px;\n    font-weight: 700;\n    color: var(--light-gray);\n    text-align: left;\n    cursor: pointer;\n    padding: 0 28px;\n    position: relative;\n    z-index: 2;\n    transition: color 0.3s ease;\n    flex-shrink: 0;\n    white-space: nowrap;\n  }\n\n  .timeline-nav-item.active span {\n    display: inline-block;\n    color: #B68826;\n    \/* Opcional: animaci\u00f3n suave al aparecer *\/\n    transition: background-position 0.3s ease;\n  }\n\n  .timeline-nav-item[data-year-type=\"range\"] {\n    min-width: 110px;\n  }\n\n  @keyframes activePulse {\n    0%,\n    100% {\n      transform: scale(1);\n    }\n    50% {\n      transform: scale(1.15);\n    }\n  }\n\n  .timeline-nav-item:hover {\n    color: #B68826;\n  }\n\n  .timeline-nav-item.last-blink {\n    animation: lastYearBlink 2s infinite;\n  }\n\n  @keyframes lastYearBlink {\n    0%,\n    100% {\n      transform: scale(1);\n    }\n    50% {\n      transform: scale(1.1);\n      box-shadow: 0 0 0 10px rgba(255, 214, 26, 0.3);\n    }\n  }\n\n  .timeline-progress {\n    position: absolute;\n    top: 50px;\n    left: 0px;\n    height: 8px;\n    background-color: var(--light-gray);\n    width: 100%;\n    z-index: 1;\n  }\n\n  .timeline-progress-fill {\n    position: absolute;\n    top: 0;\n    left: -25px;\n    height: 100%;\n    width: 40px;\n    background-color: var(--accent-color);\n    transition: width 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55);\n  }\n\n  .donut-indicator {\n    position: absolute;\n    top: 31.5px;\n    left: 0px;\n    width: 45px;\n    height: 45px;\n    pointer-events: none;\n    z-index: 3;\n    transition: left 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55);\n    transform: translateX(-50%);\n  }\n\n  .donut-circle {\n    width: 45px;\n    height: 45px;\n    position: absolute;\n    top: 0px;\n    left: 0px;\n    border-radius: 50%;\n    background: radial-gradient(\n      circle,\n      transparent 14px,\n      var(--accent-color) 15px\n    );\n    animation: pulse 1.2s infinite ease-in-out;\n    z-index: 2;\n  }\n\n  .scroll-zone {\n    position: absolute;\n    top: 0;\n    height: 100%;\n    width: 30px;\n    z-index: 4;\n    cursor: pointer;\n    opacity: 0;\n    transition: opacity 0.3s ease;\n  }\n\n  .scroll-zone.left {\n    left: -30px;\n  }\n\n  .scroll-zone.right {\n    right: 0;\n  }\n\n  .timeline-navigation:hover .scroll-zone {\n    opacity: 1;\n  }\n\n  @keyframes pulse {\n    0%,\n    100% {\n      transform: scale(1);\n    }\n    50% {\n      transform: scale(1.1);\n      box-shadow: 0 0 0 10px var(--light-gray);\n    }\n  }\n\n  @keyframes bounce {\n    0%,\n    100% {\n      transform: translateX(0);\n    }\n    50% {\n      transform: translateX(-10px);\n    }\n  }\n\n  @keyframes pressEffect {\n    0% {\n      transform: scale(1);\n      box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.2);\n    }\n    50% {\n      transform: scale(0.88);\n      box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.25);\n    }\n    100% {\n      transform: scale(1);\n      box-shadow: 0 0 0 0 rgba(0, 0, 0, 0);\n    }\n  }\n\n  .press-effect {\n    animation: pressEffect 0.4s ease;\n  }\n\n  .bounce-effect {\n    animation: bounce 0.5s ease;\n  }\n\n  \/* MEDIA QUERIES RESPONSIVE - VERSI\u00d3N CORREGIDA *\/\n\n  \/* Tablet (1024px y menos) *\/\n  @media (max-width: 1024px) {\n    body {\n      padding: 0 20px;\n    }\n\n    .timeline-container {\n      height: auto;\n      padding-bottom: 40px;\n    }\n\n    .timeline-content {\n      flex-direction: column;\n      align-items: center;\n      gap: 30px;\n    }\n\n    .timeline-text {\n      margin-top: 40px;\n      left: 0;\n      text-align: center;\n      width: 100%;\n      padding: 0 20px;\n      flex: 0 0 auto;\n    }\n\n    .timeline-year {\n      font-size: 60px;\n      padding-left: 0;\n      width: 100%;\n      text-align: center;\n    }\n\n    .timeline-title {\n      font-size: 28px;\n      padding-left: 0;\n      width: 100%;\n      text-align: center;\n      margin: 15px 0;\n    }\n\n    .timeline-description {\n      padding-left: 0;\n      width: 100%;\n      max-width: 600px;\n      margin: 0 auto;\n      text-align: center;\n    }\n\n    .btn-ovf {\n      margin-left: 0;\n      justify-content: center;\n    }\n\n    .timeline-image {\n      width: 100%;\n      display: flex;\n      justify-content: center;\n      height: 380px;\n      flex: 0 0 auto;\n      top: 0;\n    }\n\n    .timeline-image img {\n      width: 100%;\n      max-width: 600px;\n      height: 100%;\n      object-fit: cover;\n    }\n\n    .timeline-navigation {\n      margin-top: 40px;\n    }\n\n    .yearsOffset {\n      width: 100%;\n    }\n\n    .timeline-nav-wrapper {\n      padding-top: 60px;\n    }\n\n    .timeline-nav-item {\n      font-size: 20px;\n      padding: 0 20px;\n    }\n\n    .donut-indicator {\n      top: 21.5px;\n    }\n\n    .timeline-progress {\n      top: 40px;\n    }\n  }\n\n  \/* Tablet peque\u00f1a (768px y menos) *\/\n  @media (max-width: 768px) {\n    body {\n      padding: 0 15px;\n    }\n\n    .timeline-year {\n      font-size: 50px;\n    }\n\n    .timeline-title {\n      font-size: 24px;\n    }\n\n    .timeline-description {\n      font-size: 16px;\n    }\n\n    .timeline-image {\n      height: 340px;\n    }\n\n    .timeline-text {\n      height: auto;\n    }\n\n    .timeline-nav-item {\n      font-size: 18px;\n      padding: 0 15px;\n      min-width: 85px;\n    }\n\n    .timeline-nav-item[data-year-type=\"range\"] {\n      min-width: 95px;\n    }\n  }\n\n  \/* Mobile (600px y menos) *\/\n  @media (max-width: 600px) {\n    \/* \u0424\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u0448\u0438\u0440\u0438\u043d\u0443 \u0441\u043b\u0430\u0439\u0434\u043e\u0432 \u2014 \u0438\u043d\u0430\u0447\u0435 Swiper \u0441\u0442\u0430\u0432\u0438\u0442 \u0442\u043e 390px, \u0442\u043e 398px \u0438 margin 30\/38px *\/\n    .timeline-container .swiper {\n      width: 100% !important;\n    }\n    .timeline-container .swiper-slide {\n      width: 100% !important;\n      margin-right: 30px !important;\n    }\n\n    .timeline-content {\n      flex-direction: column;\n      align-items: center;\n      gap: 30px;\n    }\n\n    .timeline-year {\n      font-size: 42px;\n    }\n\n    .timeline-title {\n      font-size: 22px;\n    }\n\n    .timeline-description {\n      font-size: 15px;\n      line-height: 1.5;\n    }\n\n    \/* Fija altura \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0442\u0435\u043a\u0441\u0442\u0430, \u0447\u0442\u043e\u0431\u044b\n       \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e timeline \u0431\u044b\u043b\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c *\/\n    .timeline-image {\n      height: 320px;\n      width: 100%;\n      display: flex;\n      justify-content: center;\n    }\n\n    .timeline-image img {\n      width: 100%;\n      max-width: 600px;\n      height: 100%;\n      object-fit: cover;\n    }\n\n    .timeline-text {\n      height: auto;\n    }\n\n    .timeline-nav-wrapper {\n      padding-top: 50px;\n    }\n\n    .timeline-nav-item {\n      font-size: 16px;\n      padding: 0 12px;\n      min-width: 75px;\n    }\n\n    .timeline-nav-item[data-year-type=\"range\"] {\n      min-width: 85px;\n    }\n\n    .donut-indicator {\n      width: 35px;\n      height: 35px;\n    }\n\n    .donut-circle {\n      width: 35px;\n      height: 35px;\n    }\n  }\n\n  \/* Mobile peque\u00f1o (480px y menos) *\/\n  @media (max-width: 480px) {\n    .timeline-container .swiper {\n      width: 100% !important;\n    }\n    .timeline-container .swiper-slide {\n      width: 100% !important;\n      margin-right: 30px !important;\n    }\n\n    .timeline-content {\n      margin-top: 24px;\n      gap: 30px;\n    }\n    .timeline-year {\n      font-size: 36px;\n    }\n\n    .timeline-title {\n      font-size: 20px;\n    }\n\n    .timeline-description {\n      font-size: 14px;\n    }\n\n    \/* \u0414\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435 \u0442\u0435\u043a\u0441\u0442 \u0438 \u0444\u043e\u0442\u043e,\n       \u043d\u043e \u043f\u043e\u2011\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u044b *\/\n    .timeline-image {\n      height: 300px;\n      width: 100%;\n      display: flex;\n      justify-content: center;\n    }\n\n    .timeline-image img {\n      width: 100%;\n      max-width: 600px;\n      height: 100%;\n      object-fit: cover;\n    }\n\n    .timeline-text {\n      margin: 0;\n      height: auto;\n    }\n\n    .timeline-navigation {\n      margin-top: 24px !important;\n      padding-top: 56px;\n    }\n\n    .timeline-description {\n      margin: 0px !important;\n    }\n\n    \/* Progress line + donut: closer and thinner on mobile *\/\n    .timeline-progress {\n      height: 6px;\n      top: 36px;\n    }\n\n    .timeline-progress-fill {\n      height: 6px;\n    }\n\n    .donut-indicator {\n      top: 21.5px;\n      width: 35px;\n      height: 35px;\n    }\n\n    .donut-circle {\n      width: 35px;\n      height: 35px;\n    }\n\n    \/* Hide desktop year scroller on mobile *\/\n    .yearsOffset {\n      display: none !important;\n    }\n\n    \/* Mobile 3-year navigation *\/\n    .mobile-year-nav {\n      display: flex !important;\n      justify-content: center;\n      align-items: center;\n      gap: 16px;\n      margin-top: 8px;\n      padding: 0;\n    }\n\n    .mobile-year-item {\n      font-size: 16px;\n      font-weight: 600;\n      color: var(--light-gray);\n      cursor: pointer;\n      transition:\n        color 0.25s ease,\n        opacity 0.25s ease;\n      min-width: 64px;\n      text-align: center;\n    }\n\n    .mobile-year-item.current {\n      color: #B68826;\n    }\n\n    .mobile-year-item.prev,\n    .mobile-year-item.next {\n      opacity: 0.7;\n    }\n\n    .mobile-year-item:hover {\n      color: #B68826;\n      opacity: 1;\n    }\n\n    \/* Mobile arrows + dots controls *\/\n    .mobile-controls {\n      display: flex !important;\n      justify-content: center;\n      align-items: center;\n      gap: 24px;\n      margin-top: 16px;\n    }\n\n    .mobile-arrow {\n      width: 48px;\n      height: 48px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background: transparent !important;\n      padding: 0;\n      cursor: pointer;\n      border: none !important;\n      outline: none !important;\n      box-shadow: none !important;\n      -webkit-tap-highlight-color: transparent;\n    }\n\n    .mobile-arrow:focus,\n    .mobile-arrow:active {\n      background: transparent !important;\n      border: none !important;\n      outline: none !important;\n      box-shadow: none !important;\n    }\n\n    .mobile-arrow img {\n      width: 48px;\n      height: 48px;\n      object-fit: contain;\n      pointer-events: none;\n    }\n\n    .mobile-dots {\n      display: flex !important;\n      justify-content: center;\n      align-items: center;\n      gap: 8px;\n    }\n\n    .mobile-dot {\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      background: rgba(163, 90, 18, 0.3);\n      transition: all 0.3s ease;\n    }\n\n    .mobile-dot.active {\n      background: rgba(163, 90, 18, 1);\n      transform: scale(1.4);\n    }\n  }\n\n  \/* Hide mobile nav on large screens only *\/\n  .mobile-year-nav {\n    display: none;\n  }\n\n  .mobile-controls {\n    display: none;\n  }\n\n  .mobile-dots {\n    display: none;\n  }\n\n  \/* Tablet: use mobile-style navigation (481px\u20131024px) *\/\n  @media (min-width: 481px) and (max-width: 1024px) {\n    \/* Make timeline navigation stretch full viewport width *\/\n    .timeline-navigation {\n      width: 100vw;\n      margin-left: 50%;\n      transform: translateX(-50%);\n      margin-top: 32px;\n      padding-top: 56px;\n    }\n\n    \/* Hide desktop year scroller on tablet *\/\n    .yearsOffset {\n      display: none !important;\n    }\n\n    \/* Show mobile-style year navigation and controls *\/\n    .mobile-year-nav,\n    .mobile-controls,\n    .mobile-dots {\n      display: flex !important;\n    }\n\n    \/* 3-year navigation: same as mobile, but slightly lower *\/\n    .mobile-year-nav {\n      justify-content: center;\n      align-items: center;\n      gap: 16px;\n      margin-top: 16px;\n      padding: 0;\n    }\n\n    .mobile-year-item {\n      font-size: 16px;\n      font-weight: 600;\n      color: var(--light-gray);\n      cursor: pointer;\n      transition:\n        color 0.25s ease,\n        opacity 0.25s ease;\n      min-width: 64px;\n      text-align: center;\n    }\n\n    .mobile-year-item.current {\n      color: #B68826;\n    }\n\n    .mobile-year-item.prev,\n    .mobile-year-item.next {\n      opacity: 0.7;\n    }\n\n    .mobile-year-item:hover {\n      color: #B68826;\n      opacity: 1;\n    }\n\n    \/* Arrows + dots controls: same as mobile, but slightly lower *\/\n    .mobile-controls {\n      justify-content: center;\n      align-items: center;\n      gap: 24px;\n      margin-top: 24px;\n    }\n\n    .mobile-arrow {\n      width: 48px;\n      height: 48px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background: transparent !important;\n      padding: 0;\n      cursor: pointer;\n      border: none !important;\n      outline: none !important;\n      box-shadow: none !important;\n      -webkit-tap-highlight-color: transparent;\n    }\n\n    .mobile-arrow:focus,\n    .mobile-arrow:active {\n      background: transparent !important;\n      border: none !important;\n      outline: none !important;\n      box-shadow: none !important;\n    }\n\n    .mobile-arrow img {\n      width: 48px;\n      height: 48px;\n      object-fit: contain;\n      pointer-events: none;\n    }\n\n    .mobile-dots {\n      justify-content: center;\n      align-items: center;\n      gap: 8px;\n    }\n\n    .mobile-dot {\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      background: rgba(163, 90, 18, 0.3);\n      transition: all 0.3s ease;\n    }\n\n    .mobile-dot.active {\n      background: rgba(163, 90, 18, 1);\n      transform: scale(1.4);\n    }\n  }\n\n  \/* Mobile muy peque\u00f1o (360px y menos) *\/\n  @media (max-width: 360px) {\n    .timeline-nav-item {\n      font-size: 13px;\n      padding: 0 8px;\n      min-width: 60px;\n    }\n\n    .timeline-nav-item[data-year-type=\"range\"] {\n      min-width: 70px;\n    }\n  }\n\n  \/* Ajustes espec\u00edficos para orientaci\u00f3n horizontal en m\u00f3viles *\/\n  @media (max-height: 500px) and (orientation: landscape) {\n    .timeline-container {\n      height: auto;\n      min-height: 100vh;\n    }\n\n    .timeline-content {\n      flex-direction: row;\n      gap: 20px;\n    }\n\n    .timeline-text {\n      margin-top: 20px;\n      text-align: left;\n      flex: 1;\n    }\n\n    .timeline-image {\n      flex: 1;\n    }\n\n    .timeline-image img {\n      height: 250px;\n    }\n  }\n<\/style>\n\n<div class=\"timeline-container\">\n  <div class=\"swiper mySwiper\">\n    <div class=\"swiper-wrapper\" id=\"swiperWrapper\"><\/div>\n  <\/div>\n  <div class=\"timeline-navigation\" id=\"timelineNav\">\n    <div class=\"scroll-zone left\"><\/div>\n    <div class=\"scroll-zone right\"><\/div>\n    <div class=\"timeline-progress\" id=\"timelineProgress\">\n      <div class=\"timeline-progress-fill\" id=\"timelineProgressFill\"><\/div>\n    <\/div>\n    <div class=\"donut-indicator\" id=\"donutIndicator\">\n      <div class=\"donut-circle\"><\/div>\n    <\/div>\n    <div class=\"yearsOffset\" id=\"yearsOffset\">\n      <div class=\"timeline-nav-wrapper\" id=\"timelineNavWrapper\"><\/div>\n    <\/div>\n    <!-- Mobile navigation -->\n    <div class=\"mobile-year-nav\" id=\"mobileYearNav\"><\/div>\n    <div class=\"mobile-controls\" id=\"mobileControls\">\n      <button\n        class=\"mobile-arrow mobile-arrow-left\"\n        id=\"mobileArrowPrev\"\n        aria-label=\"Previous year\"\n        type=\"button\"\n      >\n        <img decoding=\"async\"\n          src=\"\/wp-content\/uploads\/2026\/02\/Slider-Buttons-left.svg\"\n          alt=\"Previous\"\n        \/>\n      <\/button>\n      <div class=\"mobile-dots\" id=\"mobileDots\"><\/div>\n      <button\n        class=\"mobile-arrow mobile-arrow-right\"\n        id=\"mobileArrowNext\"\n        aria-label=\"Next year\"\n        type=\"button\"\n      >\n        <img decoding=\"async\"\n          src=\"\/wp-content\/uploads\/2026\/02\/Slider-Arrow-right.svg\"\n          alt=\"Next\"\n        \/>\n      <\/button>\n    <\/div>\n  <\/div>\n<\/div>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.js\"><\/script>\n<script>\n  const swiperWrapper = document.getElementById(\"swiperWrapper\");\n  const timelineNavWrapper = document.getElementById(\"timelineNavWrapper\");\n  const progressBar = document.getElementById(\"timelineProgressFill\");\n  const donutIndicator = document.getElementById(\"donutIndicator\");\n  const donutCircle = document.querySelector(\".donut-circle\");\n  const mobileYearNav = document.getElementById(\"mobileYearNav\");\n  const mobileDots = document.getElementById(\"mobileDots\");\n  const mobileArrowPrev = document.getElementById(\"mobileArrowPrev\");\n  const mobileArrowNext = document.getElementById(\"mobileArrowNext\");\n\n  let navItems = [];\n  let currentIndex = 0;\n  let isDragging = false;\n  let dragStartX = 0;\n  let scrollStart = 0;\n\n  \/\/ Check if mobile or tablet (up to 1024px)\n  function isMobile() {\n    return window.innerWidth <= 1024;\n  }\n\n  \/\/ Funci\u00f3n para animar el rebote del donut\n  function triggerBounceEffect() {\n    donutCircle.classList.add(\"press-effect\");\n    donutCircle.addEventListener(\n      \"animationend\",\n      () => {\n        donutCircle.classList.remove(\"press-effect\");\n      },\n      { once: true },\n    );\n  }\n\n  \/\/ Inicializar datos de la l\u00ednea de tiempo\n  const timelineData = [\n    {\n      year: \"1997\",\n      title: \"Primeros pasos en la filantrop\u00eda\",\n      description:\n        \"Mar\u00eda \u00c1ngeles Le\u00f3n y Francisco Garc\u00eda-Param\u00e9s inician su compromiso con el impacto social, destinando parte de su patrimonio a donaciones filantr\u00f3picas asistenciales a comunidades vulnerables de \u00c1frica subsahariana.\",\n      image: \"\/wp-content\/uploads\/2026\/03\/1997.jpeg\",\n    },\n    {\n      year: \"2006\",\n      title: \"Aprendiendo de los pioneros\",\n      description:\n        \"La familia crea Fundaci\u00f3n Valor e inicia su inversi\u00f3n en impacto junto a Acumen y otros socios, sentando las bases con proyectos como Dlight. Paralelamente, Paco Param\u00e9s lanza desde Bestinver el fondo Ayuda a \u00c1frica junto a \u00c1frica Directo y apoya el programa Baobab para j\u00f3venes migrantes, un compromiso que dos d\u00e9cadas despu\u00e9s, se sigue sosteniendo.\",\n      image: \"\/wp-content\/uploads\/2026\/03\/2006.jpeg\",\n    },\n    {\n      year: \"2013-15\",\n      title: \"Explorando nuevos modelos\",\n      description:\n        \"Comienzan a colaborar con Yunus Social Business y desarrollan su propia tesis de inversi\u00f3n centrada en la sostenibilidad financiera y la dignidad a trav\u00e9s del trabajo. Donan a proyectos desde la fundaci\u00f3n que luego son invertidos por Yunus (como Tugende). Se define el modelo h\u00edbrido de actuaci\u00f3n.\",\n      image: \"\/wp-content\/uploads\/2026\/03\/2012.jpg\",\n    },\n    {\n      year: \"2017\",\n      title: \"Consolidaci\u00f3n del modelo h\u00edbrido\",\n      description:\n        \"Fundaci\u00f3n Valor pasa a denominarse Open Value Foundation, reflejando su vocaci\u00f3n internacional y m\u00e1s de 20 a\u00f1os de experiencia en impacto. Se posiciona como una de las primeras fundaciones en Espa\u00f1a en impulsar la filantrop\u00eda estrat\u00e9gica y la inversi\u00f3n de impacto, con equipo propio y sistema de medici\u00f3n.\",\n      image: \"\/wp-content\/uploads\/2026\/03\/2017.jpg\",\n    },\n    {\n      year: \"2018\",\n      title: \"Abrimos oportunidades y mentes\",\n      description:\n        \"OVF comienza a invertir directamente en Espa\u00f1a y \u00c1frica subsahariana, consolidando su estrategia de impacto y define su primera Teor\u00eda del Cambio. Lanza BValue junto a Ship2Be y colabora con Unreasonable East Africa (Shona). Adem\u00e1s, impulsa el ecosistema de impacto en Espa\u00f1a con la creaci\u00f3n de SpainNAB junto a Creas, Gawa, Bolsa Social y Ship2Be. Tambi\u00e9n, impulsa dos c\u00e1tedras con la Universidad Pontificia de Comillas y la Universidad Aut\u00f3noma de Madrid.\",\n      image: \"\/wp-content\/uploads\/2026\/03\/2018.png\",\n      yearType: \"range\",\n    },\n    {\n      year: \"2019\",\n      title: \"Nacen nuevas iniciativas de impacto\",\n      description:\n        \"OVF impulsa el Fondo de Fundaciones de Impacto (Fdf Impacto) junto a Ship2B y Anesvad para promover su modelo h\u00edbrido entre la filantrop\u00eda y la inversi\u00f3n de impacto y animar a otras fundaciones a que lo repliquen. Adem\u00e1s, trae Acumen Academy a Espa\u00f1a, reforzando el ecosistema de impacto. Paralelamente, lanza Global Social Impact Fund Africa, el primer fondo espa\u00f1ol de impacto en \u00c1frica subsahariana.\",\n      image: \"\/wp-content\/uploads\/2026\/03\/2019.png\",\n      yearType: \"range\",\n    },\n    {\n      year: \"2020-21\",\n      title: \"De la experimentaci\u00f3n al impacto a escala\",\n      description:\n        \"Se valida el modelo de la fundaci\u00f3n y su estrategia de inversi\u00f3n de impacto, consolidando su enfoque de acompa\u00f1amiento a proyectos. Se produce el spin-off y lanzamiento de Global Social Impact Investments (GSI) como sociedad gestora de instituciones de inversi\u00f3n colectiva de impacto. A trav\u00e9s de GSI, se invierte en empresas previamente apoyadas por OVF, como BURN y One Acre Fund, demostrando la eficacia de su estrategia de \u201cacompa\u00f1ar, fortalecer y escalar\u201d.\",\n      image: \"\/wp-content\/uploads\/2026\/03\/2020.jpeg\",\n      yearType: \"range\",\n    },\n    {\n      year: \"2022\u201323\",\n      title: \"A\u00f1o de consolidaci\u00f3n y crecimiento del portfolio\",\n      description:\n        \"Se amplia el portfolio a 30 empresas sociales y se gestiona cerca de 1,2 M\u20ac en venture philanthropy, capital catal\u00edtico y donaciones.\",\n      image: \"\/wp-content\/uploads\/2026\/03\/2022.jpeg\",\n      yearType: \"range\",\n    },\n    {\n      year: \"2024-25\",\n      title: \"Primeras coinversiones e inversiones en equity\",\n      description:\n        \"OVF explora el mundo de la coinversi\u00f3n con otras entidades espa\u00f1olas invirtiendo en empresas sociales como Umoa Cosmetics, Whesoyy y Ed Partners. Adem\u00e1s invierte en equity en algunas compa\u00f1\u00edas del porfolio demostrando su compromiso a largo plazo. Lo que dar\u00e1 origen a nuestro club de inversi\u00f3n de impacto: Catalytic Ventures.\",\n      image: \"\/wp-content\/uploads\/2026\/03\/2024.jpeg\",\n    },\n    \/\/ {\n    \/\/   year: \"2025\",\n    \/\/   title: \"Se lanzan las primeras convocatorias de financiaci\u00f3n\",\n    \/\/   description:\n    \/\/     \"Open Value lanza sus primeras convocatorias de apoyo al emprendimiento social espa\u00f1ol con foco en la inclusi\u00f3n de colectivos vulnerables y la redistribuci\u00f3n territorial.\",\n    \/\/   image: \"\/wp-content\/uploads\/2026\/03\/2025-scaled.jpeg\",\n    \/\/ },\n    {\n      year: \"2026\",\n      title: \"Se crea el primer club de inversores de impacto en Espa\u00f1a\",\n      description:\n        \"Nace Catalytic Ventures, agrupando a inversores que invierten en empresas sociales \u00abdeal by deal\u00bb.\",\n      image: \"\/wp-content\/uploads\/2026\/03\/2026.png\",\n    },\n  ];\n\n  timelineData.forEach((item, index) => {\n    const slide = document.createElement(\"div\");\n    slide.className = \"swiper-slide timeline-slide\";\n\n    slide.innerHTML = `\n              <div class=\"timeline-content\">\n                  <div class=\"timeline-text\">\n                      <div class=\"timeline-year\"><span>${item.year}<\/span><\/div>\n                      <h2 class=\"timeline-title\"><span>${item.title}<\/span><\/h2>\n                      <p class=\"timeline-description\">${item.description.replace(\/\\n\/g, \"<br>\")}<\/p>\n                  <\/div>\n                  <div class=\"timeline-image\">\n                      <img decoding=\"async\" src=\"${item.image}\" alt=\"${item.title} image\" \/>\n                  <\/div>\n              <\/div>`;\n    swiperWrapper.appendChild(slide);\n\n    const navItem = document.createElement(\"div\");\n    navItem.className = \"timeline-nav-item\";\n    navItem.dataset.index = index;\n    const span = document.createElement(\"span\");\n    span.textContent = item.year;\n    navItem.appendChild(span);\n    if (item.yearType === \"range\" || item.year.includes(\"\u2013\")) {\n      navItem.dataset.yearType = \"range\";\n    }\n    timelineNavWrapper.appendChild(navItem);\n  });\n\n  navItems = document.querySelectorAll(\".timeline-nav-item\");\n\n  function updateActive(index, animationType = \"hover\") {\n    navItems.forEach((n) => n.classList.remove(\"active\"));\n    document.querySelectorAll(\".timeline-slide\").forEach((s) => {\n      s.classList.remove(\"timeline-animate\", \"timeline-click-animate\");\n    });\n\n    if (navItems[index]) {\n      navItems[index].classList.add(\"active\");\n    }\n\n    const currentSlide = document.querySelectorAll(\".swiper-slide\")[index];\n    if (currentSlide) {\n      if (animationType === \"click\") {\n        currentSlide.classList.add(\"timeline-click-animate\");\n      } else {\n        currentSlide.classList.add(\"timeline-animate\");\n      }\n    }\n\n    currentIndex = index;\n  }\n\n  function getPathByYear(index, donutX, donutY, textX, textY, midX) {\n    \/\/ Estabilizamos las coordenadas para evitar bugs\n    const safeDonutX = Math.max(0, Math.round(donutX));\n    const safeDonutY = Math.max(0, Math.round(donutY));\n    const safeTextX = Math.max(0, Math.round(textX));\n    const safeTextY = Math.max(0, Math.round(textY));\n    const safeMidX = Math.max(0, Math.round(midX));\n\n    switch (index) {\n      case 0: \/\/ A\u00f1o 1997\n        return `\n                      M ${safeDonutX - 5},${safeDonutY - 30}\n                      L ${safeTextX},${safeTextY + 75}\n                      L ${safeTextX + 30},${safeTextY + 75}\n                  `;\n      case 1: \/\/ A\u00f1o 2006 - T invertida centrada\n        const verticalTop = safeDonutY - 220;\n        return `\n                      M ${safeDonutX - 5},${safeDonutY - 30}\n                      L ${safeDonutX - 5},${verticalTop}\n                      M ${safeDonutX - 65},${verticalTop}\n                      L ${safeDonutX + 350},${verticalTop}\n                  `;\n      case 2: \/\/ A\u00f1o 2012 - Caja sin lado izquierdo (como tu dibujo rojo)\n        return `\n                      M ${safeDonutX - 5},${safeDonutY - 30}\n                      L ${safeDonutX - 5},${safeTextY + 300}\n                      L ${safeTextX + 500},${safeTextY + 300}\n                      L ${safeTextX + 500},${safeTextY + 70}\n\n                  `;\n      case 3: \/\/ A\u00f1o 2017\n        return `\n                   M ${safeDonutX - 5},${safeDonutY - 30}\n                      L ${safeDonutX - 5},${safeDonutY - 50}\n                      L ${safeMidX - 30},${safeDonutY - 50}\n                      L ${safeMidX},${safeTextY}\n                      L ${safeTextX},${safeTextY}\n                      L ${safeTextX - 30},${safeTextY}\n                  `;\n      default:\n        return `\n                      M ${safeDonutX},${safeDonutY}\n                      L ${safeDonutX - 30},${safeDonutY}\n                      L ${safeDonutX - 90},${safeDonutY - 50}\n                      L ${safeMidX},${safeDonutY - 50}\n                      L ${safeMidX},${safeTextY}\n                      L ${safeTextX},${safeTextY}\n                      L ${safeTextX + 30},${safeTextY}\n                  `;\n    }\n  }\n\n  function drawDramaticLine(donutEl, index) {\n    const path = document.getElementById(\"animatedPath\");\n    if (!donutEl || index === null) {\n      path.setAttribute(\"d\", \"\");\n      path.style.transition = \"none\";\n      path.style.strokeDasharray = \"0\";\n      path.style.strokeDashoffset = \"0\";\n      return;\n    }\n\n    const slide = document.querySelectorAll(\".swiper-slide\")[index];\n    const textBox = slide.querySelector(\".timeline-text\");\n    const svg = document.getElementById(\"timelineConnector\");\n\n    const svgRect = svg.getBoundingClientRect();\n    const donutRect = donutEl.getBoundingClientRect();\n    const textRect = textBox.getBoundingClientRect();\n\n    const donutX = donutRect.left + donutRect.width \/ 2 - svgRect.left;\n    const donutY = donutRect.top + donutRect.height \/ 2 - svgRect.top;\n\n    const textX = textRect.left + 10 - svgRect.left;\n    const textY = textRect.top + 10 - svgRect.top;\n\n    const rawMidX = Math.min(donutX, textX) - 10;\n    const midX = Math.max(40, Math.min(donutX, textX) - 100);\n\n    const d = getPathByYear(index, donutX, donutY, textX, textY, midX);\n\n    path.setAttribute(\"d\", d);\n    const totalLength = path.getTotalLength();\n    path.style.transition = \"none\";\n    path.style.strokeDasharray = totalLength;\n    path.style.strokeDashoffset = totalLength;\n    path.getBoundingClientRect();\n    path.style.transition = \"stroke-dashoffset 1.2s ease-out\";\n    path.style.strokeDashoffset = \"0\";\n  }\n\n  function setupEventListeners() {\n    navItems.forEach((item) => {\n      item.addEventListener(\"click\", () => {\n        const index = parseInt(item.dataset.index);\n        centerDonutOnItem(item);\n        \/\/ Esperar 300ms y luego dibujar la l\u00ednea\n        setTimeout(() => {\n          drawDramaticLine(donutIndicator, index);\n        }, 0);\n        setTimeout(() => {\n          swiper.slideTo(index);\n        }, 400);\n\n        updateActive(index, \"click\");\n      });\n\n      item.addEventListener(\"mouseenter\", () => {\n        const index = parseInt(item.dataset.index);\n        const itemCenter =\n          item.offsetLeft +\n          item.offsetWidth \/ 2 -\n          timelineNavWrapper.scrollLeft;\n        centerDonutOnItem(item);\n        swiper.slideTo(index);\n        drawDramaticLine(null, null);\n        triggerBounceEffect();\n\n        updateActive(index);\n      });\n    });\n\n    \/\/ Rueda del rat\u00f3n \/ trackpad\n    timelineNavWrapper.addEventListener(\n      \"wheel\",\n      (e) => {\n        e.preventDefault();\n        timelineNavWrapper.scrollLeft += e.deltaY;\n      },\n      { passive: false },\n    );\n\n    \/\/ Arrastre con rat\u00f3n\n    timelineNavWrapper.addEventListener(\"mousedown\", (e) => {\n      isDragging = true;\n      dragStartX = e.clientX;\n      scrollStart = timelineNavWrapper.scrollLeft;\n      timelineNavWrapper.style.cursor = \"grabbing\";\n    });\n\n    document.addEventListener(\"mouseup\", () => {\n      isDragging = false;\n      timelineNavWrapper.style.cursor = \"grab\";\n    });\n\n    document.addEventListener(\"mousemove\", (e) => {\n      if (!isDragging) return;\n      const deltaX = e.clientX - dragStartX;\n      timelineNavWrapper.scrollLeft = scrollStart - deltaX;\n    });\n  }\n\n  function centerDonutOnItem(item) {\n    const navRect = document\n      .getElementById(\"timelineNav\")\n      .getBoundingClientRect();\n    const span = item.querySelector(\"span\") || item;\n    const spanRect = span.getBoundingClientRect();\n    const spanCenter = spanRect.left - navRect.left + spanRect.width \/ 2;\n    donutIndicator.style.left = `${spanCenter}px`;\n    progressBar.style.width = `${spanCenter}px`;\n    triggerBounceEffect();\n  }\n\n  \/\/ Limit gray baseline so it ends near the last year on desktop\n  function updateProgressMaxWidth() {\n    const timelineNav = document.getElementById(\"timelineNav\");\n    const progress = document.getElementById(\"timelineProgress\");\n    if (!timelineNav || !progress || !navItems.length) return;\n\n    const lastItem = navItems[navItems.length - 1];\n    const navRect = timelineNav.getBoundingClientRect();\n    const span = lastItem.querySelector(\"span\") || lastItem;\n    const spanRect = span.getBoundingClientRect();\n    const lastCenter = spanRect.left - navRect.left + spanRect.width \/ 2;\n\n    \/\/ Add a small tail after the last year for visual balance\n    const tail = 50; \/\/ px\n    progress.style.width = `${lastCenter + tail}px`;\n  }\n\n  function centerDonutOnMobileYear(index) {\n    if (!isMobile()) return;\n    const currentItem = mobileYearNav.querySelector(\n      \".mobile-year-item.current\",\n    );\n    if (!currentItem) return;\n\n    const navRect = mobileYearNav.getBoundingClientRect();\n    const itemRect = currentItem.getBoundingClientRect();\n    const itemCenter = itemRect.left - navRect.left + itemRect.width \/ 2;\n\n    donutIndicator.style.left = `${itemCenter}px`;\n    progressBar.style.width = `${itemCenter}px`;\n  }\n\n  \/\/ Mobile navigation functions\n  function createMobileDots() {\n    mobileDots.innerHTML = \"\";\n    timelineData.forEach((_, index) => {\n      const dot = document.createElement(\"div\");\n      dot.className = \"mobile-dot\" + (index === 0 ? \" active\" : \"\");\n      dot.dataset.index = index;\n      dot.addEventListener(\"click\", () => {\n        swiper.slideTo(index);\n      });\n      mobileDots.appendChild(dot);\n    });\n  }\n\n  function updateMobileNav(index) {\n    if (!isMobile()) return;\n\n    mobileYearNav.innerHTML = \"\";\n\n    const prevIndex = index - 1;\n    const nextIndex = index + 1;\n\n    \/\/ Previous year\n    if (prevIndex >= 0) {\n      const prevItem = document.createElement(\"div\");\n      prevItem.className = \"mobile-year-item prev\";\n      prevItem.textContent = timelineData[prevIndex].year;\n      prevItem.addEventListener(\"click\", () => swiper.slideTo(prevIndex));\n      mobileYearNav.appendChild(prevItem);\n    } else {\n      const placeholder = document.createElement(\"div\");\n      placeholder.className = \"mobile-year-item\";\n      placeholder.style.visibility = \"hidden\";\n      placeholder.textContent = \"0000\";\n      mobileYearNav.appendChild(placeholder);\n    }\n\n    \/\/ Current year\n    const currentItem = document.createElement(\"div\");\n    currentItem.className = \"mobile-year-item current\";\n    currentItem.textContent = timelineData[index].year;\n    mobileYearNav.appendChild(currentItem);\n\n    \/\/ Next year\n    if (nextIndex < timelineData.length) {\n      const nextItem = document.createElement(\"div\");\n      nextItem.className = \"mobile-year-item next\";\n      nextItem.textContent = timelineData[nextIndex].year;\n      nextItem.addEventListener(\"click\", () => swiper.slideTo(nextIndex));\n      mobileYearNav.appendChild(nextItem);\n    } else {\n      const placeholder = document.createElement(\"div\");\n      placeholder.className = \"mobile-year-item\";\n      placeholder.style.visibility = \"hidden\";\n      placeholder.textContent = \"0000\";\n      mobileYearNav.appendChild(placeholder);\n    }\n\n    \/\/ Update dots\n    document.querySelectorAll(\".mobile-dot\").forEach((dot, i) => {\n      dot.classList.toggle(\"active\", i === index);\n    });\n\n    \/\/ Center donut under current mobile year\n    centerDonutOnMobileYear(index);\n  }\n\n  \/\/ Swiper\n  const swiper = new Swiper(\".mySwiper\", {\n    slidesPerView: 1,\n    spaceBetween: 30,\n    loop: false,\n    allowTouchMove: isMobile(),\n    breakpoints: {\n      0: { autoHeight: true },\n      1025: { autoHeight: false },\n    },\n    on: {\n      init() {\n        this.slideTo(0);\n        updateActive(0);\n        setupEventListeners();\n        createMobileDots();\n        updateMobileNav(0);\n\n        requestAnimationFrame(() => {\n          if (!isMobile() && navItems[0]) {\n            centerDonutOnItem(navItems[0]);\n            updateProgressMaxWidth();\n          }\n        });\n\n        if (mobileArrowPrev && mobileArrowNext) {\n          mobileArrowPrev.addEventListener(\"click\", () => {\n            swiper.slidePrev();\n          });\n          mobileArrowNext.addEventListener(\"click\", () => {\n            swiper.slideNext();\n          });\n        }\n      },\n      slideChange() {\n        updateActive(this.activeIndex);\n        updateMobileNav(this.activeIndex);\n\n        \/\/ Center donut on desktop\n        if (!isMobile() && navItems[this.activeIndex]) {\n          centerDonutOnItem(navItems[this.activeIndex]);\n        } else if (isMobile()) {\n          centerDonutOnMobileYear(this.activeIndex);\n        }\n      },\n    },\n  });\n\n  \/\/ Handle resize\n  window.addEventListener(\"resize\", () => {\n    swiper.allowTouchMove = isMobile();\n    updateMobileNav(swiper.activeIndex);\n    if (!isMobile()) {\n      updateProgressMaxWidth();\n    }\n  });\n\n  document.addEventListener(\"DOMContentLoaded\", () => {\n    updateActive(0);\n  });\n<\/script>\n\n<!--svg linea vertical gris GSI Timeline -->\n<svg\n  id=\"timelineConnector\"\n  style=\"\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    pointer-events: none;\n    z-index: 10;\n  \"\n>\n  <defs>\n    <filter id=\"glow\">\n      <feGaussianBlur stdDeviation=\"3.5\" result=\"coloredBlur\" \/>\n      <feMerge>\n        <feMergeNode in=\"coloredBlur\" \/>\n        <feMergeNode in=\"SourceGraphic\" \/>\n      <\/feMerge>\n    <\/filter>\n  <\/defs>\n\n  <!-- \ud83d\udca1 Aqu\u00ed a\u00f1adimos la l\u00ednea animada principal -->\n  <path id=\"animatedPath\" stroke=\"#C4C1BA\" stroke-width=\"3\" fill=\"none\" \/>\n\n  <!-- (Opcional: si usas los otros caminos a\u00fan) -->\n  <path id=\"lineSegment1\" stroke=\"#C4C1BA\" stroke-width=\"3\" fill=\"none\" \/>\n  <path id=\"lineSegment2\" stroke=\"#C4C1BA\" stroke-width=\"3\" fill=\"none\" \/>\n  <path id=\"lineSegment3\" stroke=\"#C4C1BA\" stroke-width=\"3\" fill=\"none\" \/>\n<\/svg>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-958fa69 elementor-hidden-desktop e-flex e-con-boxed e-con e-parent\" data-id=\"958fa69\" 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<div class=\"elementor-element elementor-element-692dc33 elementor-hidden-tablet elementor-widget elementor-widget-heading\" data-id=\"692dc33\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">De d\u00f3nde venimos:<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-121e987 elementor-hidden-mobile elementor-widget elementor-widget-heading\" data-id=\"121e987\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">De d\u00f3nde venimos:<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9b524ee elementor-widget elementor-widget-heading\" data-id=\"9b524ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Un ecosistema familiar donde confluyen conocimientos valores e impacto<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9b19531 venimos-bloque elementor-widget elementor-widget-fswp-text-unfold\" data-id=\"9b19531\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"fswp-text-unfold.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <div class=\"fswp-elt--read-more-main-wrapper\">\n                    <div class=\"fswp-elt--read-more-content-wrapper\">\n                            <div class=\"fswp-elt--read-more-content\">\n                    <p>Open Value forma parte de Santa Comba, un ecosistema familiar fundado por Mar\u00eda \u00c1ngeles Le\u00f3n y Francisco Garc\u00eda Param\u00e9s donde cada iniciativa opera de forma independiente pero donde todos los equipos comparten una misma filosof\u00eda y una visi\u00f3n a largo plazo.<br \/>Esta colaboraci\u00f3n intencionada crea sinergias que amplifican el impacto financiero y social, multiplicando el valor de cada una de las partes<\/p>                <\/div>\n\n                \n                                    <div class=\"fswp-elt--read-more-button-wrapper\">\n                        <a class=\"fswp-elt--read-more more show-icon\"\n                            data-height=\"0\"\n                            data-more=\"\"\n                            data-less=\"\"\n                            aria-expanded=\"false\">\n                            <span class=\"fswp-elt--read-more-text\">\n                                                            <\/span>\n                                                            <span class=\"fswp-elt--read-more-icon more\">\n                                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\"><circle cx=\"18\" cy=\"18\" r=\"14\" fill=\"#FFD61A\"><\/circle><path d=\"M18.0004 11.9766C17.2484 11.9766 16.6388 12.5861 16.6388 13.3381V16.6398H13.3371C12.5852 16.6398 11.9756 17.2494 11.9756 18.0014C11.9756 18.7534 12.5852 19.3629 13.3371 19.3629H16.6388V22.6647C16.6388 23.4167 17.2484 24.0262 18.0004 24.0262C18.7525 24.0262 19.3619 23.4167 19.3619 22.6647V19.3629H22.6637C23.4157 19.3629 24.0252 18.7534 24.0252 18.0014C24.0252 17.2494 23.4157 16.6398 22.6637 16.6398H19.3619V13.3381C19.3619 12.5861 18.7525 11.9766 18.0004 11.9766Z\" fill=\"black\"><\/path><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.9998 1.80078C9.0528 1.80078 1.7998 9.05377 1.7998 18.0008C1.7998 26.9479 9.0528 34.2008 17.9998 34.2008C26.9469 34.2008 34.1998 26.9479 34.1998 18.0008C34.1998 9.05377 26.9469 1.80078 17.9998 1.80078ZM4.52293 18.0008C4.52293 10.5577 10.5567 4.52391 17.9998 4.52391C25.4428 4.52391 31.4768 10.5577 31.4768 18.0008C31.4768 25.4438 25.4428 31.4777 17.9998 31.4777C10.5567 31.4777 4.52293 25.4438 4.52293 18.0008Z\" fill=\"#FFD61A\"><\/path><\/svg>                                <\/span>\n                                                                                        <span class=\"fswp-elt--read-more-icon less\">\n                                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"33\" height=\"33\" viewBox=\"0 0 33 33\" fill=\"none\"><circle cx=\"16.2002\" cy=\"16.2002\" r=\"14\" fill=\"#FFD61A\"><\/circle><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.9517 15.8674C10.643 15.5924 10.6152 15.1187 10.8896 14.8093L15.6417 9.45175C15.7836 9.29175 15.9871 9.2002 16.2007 9.2002C16.4143 9.2002 16.6177 9.29175 16.7597 9.45175L21.5118 14.8093C21.7862 15.1187 21.7584 15.5924 21.4497 15.8674C21.141 16.1424 20.6683 16.1146 20.3939 15.8052L16.9486 11.9209V22.4507C16.9486 22.8646 16.6137 23.2002 16.2007 23.2002C15.7876 23.2002 15.4528 22.8646 15.4528 22.4507V11.9209L12.0075 15.8052C11.7331 16.1146 11.2604 16.1424 10.9517 15.8674Z\" fill=\"black\"><\/path><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.2 0C7.25299 0 0 7.25299 0 16.2C0 25.1471 7.25299 32.4 16.2 32.4C25.1471 32.4 32.4 25.1471 32.4 16.2C32.4 7.25299 25.1471 0 16.2 0ZM2.72313 16.2C2.72313 8.75693 8.75693 2.72313 16.2 2.72313C23.643 2.72313 29.677 8.75693 29.677 16.2C29.677 23.643 23.643 29.677 16.2 29.677C8.75693 29.677 2.72313 23.643 2.72313 16.2Z\" fill=\"#FFD61A\"><\/path><\/svg>                                <\/span>\n                                                    <\/a>\n                    <\/div>\n                                    <\/div><!--read-more-content-wrapper-->\n            <\/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-c42eb55 elementor-hidden-tablet elementor-hidden-mobile e-con-full e-flex e-con e-parent\" data-id=\"c42eb55\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-c6826d0 e-con-full e-flex e-con e-child\" data-id=\"c6826d0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b0d2b98 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"b0d2b98\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">De d\u00f3nde venimos: un ecosistema familiar donde confluyen conocimientos valores e impacto <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f53cab elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"6f53cab\" 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 class=\"p1\"><span class=\"s1\">Open Value forma parte de Santa Comba, un ecosistema familiar fundado por Mar\u00eda \u00c1ngeles Le\u00f3n y Francisco Garc\u00eda Param\u00e9s donde cada iniciativa opera de forma independiente pero donde todos los equipos comparten una misma filosof\u00eda y una visi\u00f3n a largo plazo.<\/span><\/p><p class=\"p1\"><span class=\"s1\">Esta colaboraci\u00f3n intencionada crea sinergias que amplifican el impacto financiero y social, multiplicando el valor de cada una de las partes.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fb4050d e-con-full e-flex e-con e-child\" data-id=\"fb4050d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-25ac9c5 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"25ac9c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"es\">\n  <head>\n    <meta charset=\"UTF-8\" \/>\n    <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" \/>\n    <title>Ecosistema Santa Comba<\/title>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/svg.js\/3.2.0\/svg.min.js\"><\/script>\n    <style>\n      :root {\n        --capital-color: #ffd61a;\n        --knowledge-color: #486286;\n        --impact-color: #2e2315;\n        --all-btn-color: #212749;\n        --primary-color: #ffd61a;\n        --secondary-color: #212749;\n        --accent-color: #a35a12;\n        --dark-color: #2e2315;\n        --highlight-color: #ffd61a;\n        --office-color: #c4c1ba;\n        --credit-color: #ffd61a;\n        --equity-color: #212749;\n        --background-light: #fefefe;\n        --text-color: #2a2a2a;\n        --neutral-light: #f0edde;\n        --neutral-medium: #c4c1ba;\n        --bullet-office: #c4c1ba;\n      }\n\n      * {\n        box-sizing: border-box;\n        margin: 0;\n        padding: 0;\n      }\n      body {\n        font-family: \"Proxima Nova\", Arial, sans-serif;\n        color: var(--text-color);\n        line-height: 1.6;\n        background-color: var(--neutral-light);\n      }\n\n      \/* Remove padding from the HTML widget container *\/\n      .elementor-widget-html .elementor-widget-container {\n        padding: 0 !important;\n      }\n\n      \/* Override the Elementor boxed container that wraps this widget *\/\n      [data-id=\"7374a38\"],\n      [data-id=\"7374a38\"] > .e-con-inner {\n        max-width: 100% !important;\n        width: 100% !important;\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n      }\n\n      \/* Vertical centering within the Elementor container *\/\n      [data-id=\"7374a38\"] > .e-con-inner {\n        display: flex !important;\n        flex-direction: column !important;\n        justify-content: center !important;\n      }\n\n      @media (min-width: 1025px) {\n        [data-id=\"7374a38\"],\n        [data-id=\"7374a38\"] > .e-con-inner {\n          padding-left: 64px !important;\n          padding-right: 64px !important;\n        }\n      }\n\n      .filter-container {\n        display: flex;\n        justify-content: center;\n        gap: 12px;\n        margin: 32px auto 0;\n        flex-wrap: wrap;\n        padding: 32px 0 24px;\n        background-color: #f5f5f5;\n      }\n\n      .ecosystem-title {\n        font-size: 36px;\n        font-weight: 700;\n        color: var(--dark-color);\n        margin-bottom: 16px;\n      }\n\n      .selected-label {\n        margin: 0 0 16px 0;\n        font-size: 0.95rem;\n        color: var(--text-color);\n      }\n\n      button.filter-slider {\n        position: relative;\n        cursor: pointer;\n        width: auto;\n        min-width: 100px;\n        height: 32px;\n        background-color: #f5f2e1 !important;\n        border-radius: 16px;\n        transition: all 0.3s ease;\n        display: flex;\n        align-items: center;\n        justify-content: flex-end;\n        padding: 0 12px 0 42px;\n        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n        border: 1px solid transparent;\n        color: #2a2a2a !important;\n        font-family: \"Proxima Nova\", Arial, sans-serif;\n        font-size: 16px;\n        font-weight: 400;\n        margin: 0;\n        outline: none;\n      }\n      button.filter-slider::before {\n        position: absolute;\n        content: \"\";\n        height: 25px;\n        width: 25px;\n        left: 4px;\n        top: 50%;\n        transform: translateY(-50%);\n        background-color: white;\n        transition: all 0.3s ease;\n        border-radius: 50%;\n      }\n      .filter-label {\n        white-space: nowrap;\n        text-align: right;\n        margin-left: auto;\n      }\n      \/* Inactive: outlined\/light background, colored circle right *\/\n      \/* Active: solid background, white circle left *\/\n      button.filter-slider.active {\n        padding: 0 42px 0 12px;\n        justify-content: flex-start;\n      }\n      button.filter-slider.active .filter-label {\n        margin-left: 0;\n        text-align: left;\n      }\n      button.filter-slider.active::before {\n        left: auto;\n        right: 4px;\n      }\n      \/* Active state (circle right): solid colored *\/\n      #allBtn.active {\n        background-color: var(--all-btn-color) !important;\n        border-color: var(--all-btn-color) !important;\n        color: #fefefe !important;\n      }\n      #capitalBtn.active {\n        background-color: var(--capital-color) !important;\n        border-color: var(--capital-color) !important;\n        color: #1a1a1a !important;\n      }\n      #knowledgeBtn.active {\n        background-color: var(--knowledge-color) !important;\n        border-color: var(--knowledge-color) !important;\n        color: #fefefe !important;\n      }\n      #impactBtn.active {\n        background-color: var(--impact-color) !important;\n        border-color: var(--impact-color) !important;\n        color: #fefefe !important;\n      }\n      #allBtn.active::before {\n        background-color: #fefefe !important;\n      }\n      #capitalBtn.active::before {\n        background-color: #fefefe !important;\n      }\n      #knowledgeBtn.active::before {\n        background-color: #fefefe !important;\n      }\n      #impactBtn.active::before {\n        background-color: #fefefe !important;\n      }\n      \/* Inactive state (circle left): light\/outlined *\/\n      #allBtn:not(.active) {\n        background-color: transparent !important;\n        border-color: var(--all-btn-color) !important;\n        color: #1a1a1a !important;\n      }\n      #capitalBtn:not(.active) {\n        background-color: #fefefe !important;\n        border-color: var(--capital-color) !important;\n        color: #1a1a1a !important;\n      }\n      #knowledgeBtn:not(.active) {\n        background-color: #fefefe !important;\n        border-color: var(--knowledge-color) !important;\n        color: #1a1a1a !important;\n      }\n      #impactBtn:not(.active) {\n        background-color: #fefefe !important;\n        border-color: var(--impact-color) !important;\n        color: #1a1a1a !important;\n      }\n      #allBtn:not(.active)::before {\n        background-color: var(--all-btn-color) !important;\n      }\n      #capitalBtn:not(.active)::before {\n        background-color: var(--capital-color) !important;\n      }\n      #knowledgeBtn:not(.active)::before {\n        background-color: var(--knowledge-color) !important;\n      }\n      #impactBtn:not(.active)::before {\n        background-color: var(--impact-color) !important;\n      }\n\n      .ecosystem-container {\n        display: flex;\n        width: 100%;\n        margin: 0 0 40px;\n        background-color: #f5f5f5;\n        border-radius: 0;\n      }\n\n      .info-panel {\n        position: relative;\n        width: 300px;\n        flex-shrink: 0;\n        margin-left: 0;\n        background: white;\n        padding: 1.2em 1.2em 1.2em 10px;\n        font-size: 0.9rem;\n        min-height: 400px;\n        max-height: none;\n        overflow-y: auto;\n        opacity: 0.95;\n        box-shadow: 0 0 0 rgba(0, 0, 0, 0);\n        border-radius: 8px;\n        border: 0 solid var(--neutral-medium);\n      }\n      .info-panel::-webkit-scrollbar {\n        width: 8px;\n      }\n      .info-panel::-webkit-scrollbar-track {\n        background: #e0e0e0;\n      }\n      .info-panel::-webkit-scrollbar-thumb {\n        background: #b0b0b0;\n        border-radius: 4px;\n      }\n      .info-panel h2 {\n        margin: 0 0 16px 0;\n        font-size: 20px;\n        color: var(--dark-color);\n        border-bottom: 2px solid var(--highlight-color);\n        padding-bottom: 8px;\n      }\n      .flow-block {\n        border-left: 6px solid;\n        padding: 16px;\n        margin: 16px 0;\n        background: white;\n        border-radius: 0 6px 6px 0;\n        display: none;\n      }\n      .flow-block.capital-block {\n        border-color: var(--capital-color);\n      }\n      .flow-block.knowledge-block {\n        border-color: var(--knowledge-color);\n      }\n      .flow-block.impact-block {\n        border-color: var(--impact-color);\n      }\n      .flow-block h3 {\n        font-size: 16px;\n        font-weight: bold;\n        color: var(--dark-color);\n        margin-bottom: 8px;\n      }\n      .flow-block ul {\n        padding-left: 1.2rem;\n        list-style: disc;\n        margin: 0;\n        color: #111;\n        font-size: 0.95rem;\n        line-height: 1.5;\n      }\n\n      .ecosystem-diagram-wrapper {\n        flex: 1;\n        min-width: 0;\n        background-color: #f5f5f5;\n        display: flex;\n        align-items: flex-start;\n        justify-content: center;\n        height: 650px;\n      }\n\n      .ecosystem-diagram {\n        position: relative;\n        width: 800px;\n        flex-shrink: 0;\n        height: 650px;\n        padding-top: 30px;\n        overflow: visible;\n      }\n\n      .entity {\n        position: absolute;\n        width: 180px;\n        height: 162px;\n        z-index: 5 !important;\n        transition: transform 0.3s ease;\n      }\n      .entity svg {\n        width: 100%;\n        height: auto;\n        z-index: 5 !important;\n        stroke: none !important;\n      }\n      .entity img {\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        transform: translate(-50%, -50%);\n        max-width: 70%;\n        max-height: 70%;\n        object-fit: contain;\n        pointer-events: none;\n        z-index: 20 !important;\n      }\n\n      .santa-comba {\n        top: 50px;\n        left: 50%;\n        transform: translateX(-50%);\n      }\n      .santa-comba.pulse {\n        animation: heartbeat 2s infinite;\n      }\n      @keyframes heartbeat {\n        0% {\n          transform: translateX(-50%) scale(1);\n        }\n        25% {\n          transform: translateX(-50%) scale(1.05);\n        }\n        50% {\n          transform: translateX(-50%) scale(1);\n        }\n        75% {\n          transform: translateX(-50%) scale(1.05);\n        }\n        100% {\n          transform: translateX(-50%) scale(1);\n        }\n      }\n\n      .cobas {\n        top: 320px;\n        left: 25%;\n        transform: translate(-50%, -50%);\n      }\n      .gsi {\n        top: 320px;\n        left: 50%;\n        transform: translate(-50%, -50%);\n      }\n      .ovf {\n        top: 320px;\n        left: 75%;\n        transform: translate(-50%, -50%);\n      }\n      .value-school {\n        top: 510px;\n        left: 50%;\n        transform: translate(-50%, -50%);\n      }\n\n      @media (max-width: 768px) {\n        .ecosystem-container {\n          flex-direction: column;\n          align-items: center;\n        }\n        .ecosystem-diagram {\n          width: 400px;\n          height: 400px;\n        }\n        .entity {\n          width: 120px;\n          height: 105px;\n          z-index: 5 !important;\n        }\n        .info-panel {\n          width: 100%;\n          max-width: 480px;\n          padding: 1.5rem;\n        }\n        .filter-container {\n          flex-wrap: wrap;\n        }\n      }\n\n      .capital-flow {\n        stroke: var(--capital-color);\n      }\n      .knowledge-flow {\n        stroke: var(--knowledge-color);\n      }\n      .impact-flow {\n        stroke: var(--impact-color);\n      }\n    <\/style>\n  <\/head>\n  <body>\n    <div class=\"filter-container\">\n      <button class=\"filter-slider active\" id=\"allBtn\">\n        <span class=\"filter-label\">All<\/span>\n      <\/button>\n      <button class=\"filter-slider\" id=\"capitalBtn\">\n        <span class=\"filter-label\">Capital flows<\/span>\n      <\/button>\n      <button class=\"filter-slider\" id=\"knowledgeBtn\">\n        <span class=\"filter-label\">Knowledge flows<\/span>\n      <\/button>\n      <button class=\"filter-slider\" id=\"impactBtn\">\n        <span class=\"filter-label\">Ecosystem impact flows<\/span>\n      <\/button>\n    <\/div>\n\n    <div class=\"ecosystem-container\">\n      <div class=\"info-panel\">\n        <h2 class=\"ecosystem-title\">Santa Comba Ecosystem<\/h2>\n        <p class=\"selected-label\">Selected: <span id=\"selectedText\"><\/span><\/p>\n\n        <div class=\"flow-block capital-block\">\n          <h3>Capital flows<\/h3>\n          <ul>\n            <li>\n              From Cobas AM to Santa Comba and from Santa Comba to OVF, GSI, and\n              Value School. From GSI to OVF.\n            <\/li>\n          <\/ul>\n        <\/div>\n\n        <div class=\"flow-block knowledge-block\">\n          <h3>Knowledge flows<\/h3>\n          <ul>\n            <li>Internal exchange of expertise, know-how, insights.<\/li>\n            <li>Bidirectional flows, especially Cobas \u2192 GSI and OVF \u2192 GSI.<\/li>\n          <\/ul>\n        <\/div>\n\n        <div class=\"flow-block impact-block\">\n          <h3>Ecosystem impact flows<\/h3>\n          <ul>\n            <li>Knowledge sharing (external contribution).<\/li>\n            <li>From all entities toward the Santa Comba or outward.<\/li>\n          <\/ul>\n        <\/div>\n      <\/div>\n\n      <div class=\"ecosystem-diagram-wrapper\">\n        <div class=\"ecosystem-diagram\" id=\"diagram\">\n          <div class=\"entity santa-comba\">\n            <a href=\"https:\/\/santacombagestion.com\/\" target=\"_blank\">\n              <svg\n                fill=\"none\"\n                viewBox=\"0 0 180 162\"\n                xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n              >\n                <path\n                  d=\"M122.826 0.581923C131.4 0.581925 139.323 5.1563 143.61 12.5819L176.336 69.2642C180.623 76.6898 180.623 85.8386 176.336 93.2642L143.61 149.946C139.323 157.372 131.4 161.946 122.826 161.946L57.3748 161.946C48.8004 161.946 40.8774 157.372 36.5902 149.946L3.86469 93.2642C-0.422493 85.8386 -0.422498 76.6898 3.86469 69.2642L36.5902 12.5819C40.8774 5.1563 48.8004 0.581922 57.3748 0.581924L122.826 0.581923Z\"\n                  fill=\"#FEFEFE\"\n                  stroke=\"#212749\"\n                  stroke-width=\"0\"\n                \/><\/svg\n            ><\/a>\n            <img decoding=\"async\"\n              alt=\"Santa Comba\"\n              src=\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/06\/santaCombaLogo01-1.png\"\n            \/>\n          <\/div>\n\n          <div class=\"entity cobas\">\n            <a href=\"https:\/\/www.cobasam.com\/\" target=\"_blank\">\n              <svg\n                fill=\"none\"\n                viewBox=\"0 0 180 162\"\n                xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n              >\n                <path\n                  d=\"M122.826 0.581923C131.4 0.581925 139.323 5.1563 143.61 12.5819L176.336 69.2642C180.623 76.6898 180.623 85.8386 176.336 93.2642L143.61 149.946C139.323 157.372 131.4 161.946 122.826 161.946L57.3748 161.946C48.8004 161.946 40.8774 157.372 36.5902 149.946L3.86469 93.2642C-0.422493 85.8386 -0.422498 76.6898 3.86469 69.2642L36.5902 12.5819C40.8774 5.1563 48.8004 0.581922 57.3748 0.581924L122.826 0.581923Z\"\n                  fill=\"#FEFEFE\"\n                  stroke=\"#212749\"\n                  stroke-width=\"0\"\n                \/><\/svg\n            ><\/a>\n            <img decoding=\"async\"\n              alt=\"Cobas AM\"\n              src=\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/06\/cobas01.png\"\n            \/>\n          <\/div>\n\n          <div class=\"entity gsi\">\n            <a href=\"https:\/\/globalsocialimpact.es\/\" target=\"_blank\">\n              <svg\n                fill=\"none\"\n                viewBox=\"0 0 180 162\"\n                xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n              >\n                <path\n                  d=\"M122.826 0.581923C131.4 0.581925 139.323 5.1563 143.61 12.5819L176.336 69.2642C180.623 76.6898 180.623 85.8386 176.336 93.2642L143.61 149.946C139.323 157.372 131.4 161.946 122.826 161.946L57.3748 161.946C48.8004 161.946 40.8774 157.372 36.5902 149.946L3.86469 93.2642C-0.422493 85.8386 -0.422498 76.6898 3.86469 69.2642L36.5902 12.5819C40.8774 5.1563 48.8004 0.581922 57.3748 0.581924L122.826 0.581923Z\"\n                  fill=\"#FEFEFE\"\n                  stroke=\"#212749\"\n                  stroke-width=\"0\"\n                \/><\/svg\n            ><\/a>\n            <img decoding=\"async\"\n              alt=\"GSI\"\n              src=\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/06\/logo03.png\"\n            \/>\n          <\/div>\n\n          <div class=\"entity ovf\">\n            <a href=\"https:\/\/www.openvaluefoundation.org\/es\/\" target=\"_blank\">\n              <svg\n                fill=\"none\"\n                viewBox=\"0 0 180 162\"\n                xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n              >\n                <path\n                  d=\"M122.826 0.581923C131.4 0.581925 139.323 5.1563 143.61 12.5819L176.336 69.2642C180.623 76.6898 180.623 85.8386 176.336 93.2642L143.61 149.946C139.323 157.372 131.4 161.946 122.826 161.946L57.3748 161.946C48.8004 161.946 40.8774 157.372 36.5902 149.946L3.86469 93.2642C-0.422493 85.8386 -0.422498 76.6898 3.86469 69.2642L36.5902 12.5819C40.8774 5.1563 48.8004 0.581922 57.3748 0.581924L122.826 0.581923Z\"\n                  fill=\"#FEFEFE\"\n                  stroke=\"#212749\"\n                  stroke-width=\"0\"\n                \/><\/svg\n            ><\/a>\n            <img decoding=\"async\"\n              alt=\"Open Value Foundation\"\n              src=\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/06\/openValue2.png\"\n            \/>\n          <\/div>\n\n          <div class=\"entity value-school\">\n            <a href=\"https:\/\/valueschool.es\/\" target=\"_blank\">\n              <svg\n                fill=\"none\"\n                viewBox=\"0 0 180 162\"\n                xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n              >\n                <path\n                  d=\"M122.826 0.581923C131.4 0.581925 139.323 5.1563 143.61 12.5819L176.336 69.2642C180.623 76.6898 180.623 85.8386 176.336 93.2642L143.61 149.946C139.323 157.372 131.4 161.946 122.826 161.946L57.3748 161.946C48.8004 161.946 40.8774 157.372 36.5902 149.946L3.86469 93.2642C-0.422493 85.8386 -0.422498 76.6898 3.86469 69.2642L36.5902 12.5819C40.8774 5.1563 48.8004 0.581922 57.3748 0.581924L122.826 0.581923Z\"\n                  fill=\"#FEFEFE\"\n                  stroke=\"#212749\"\n                  stroke-width=\"0\"\n                \/><\/svg\n            ><\/a>\n            <img decoding=\"async\"\n              alt=\"Value School\"\n              src=\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/06\/valueSchoolLogo.png\"\n            \/>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <script>\n      document.addEventListener(\"DOMContentLoaded\", function () {\n        const SVG = window.SVG;\n        if (!SVG) return;\n\n        const diagram = document.getElementById(\"diagram\");\n        if (!diagram) return;\n\n        \/\/ Estilos para capas\n        const style = document.createElement(\"style\");\n        style.textContent = `\n      .lines-layer  { position:absolute; top:0; left:0; z-index: 1  !important; pointer-events:none; }\n      .donuts-layer { position:absolute; top:0; left:0; z-index: 10 !important; pointer-events:none; }\n      .effects-layer{ position:absolute; top:0; left:0; z-index: 30 !important; pointer-events:none; }\n    `;\n        document.head.appendChild(style);\n\n        \/\/ Tres canvas SVG: l\u00edneas (abajo), donuts (medio), efectos\/plus (arriba)\n        const linesCanvas = SVG()\n          .addTo(\"#diagram\")\n          .size(\"100%\", \"100%\")\n          .addClass(\"lines-layer\");\n        const donutsCanvas = SVG()\n          .addTo(\"#diagram\")\n          .size(\"100%\", \"100%\")\n          .addClass(\"donuts-layer\");\n        const effectsCanvas = SVG()\n          .addTo(\"#diagram\")\n          .size(\"100%\", \"100%\")\n          .addClass(\"effects-layer\");\n\n        const sx = diagram.offsetWidth \/ 970;\n\n        const entities = {\n          santaComba: { x: 410 * sx, y: 90 },\n          cobas: { x: 242.5 * sx, y: 401 },\n          gsi: { x: 485 * sx, y: 401 },\n          ovf: { x: 727.5 * sx, y: 401 },\n          valueSchool: { x: 485 * sx, y: 591 },\n        };\n\n        let capitalFlows = [];\n        let knowledgeFlows = [];\n        let impactFlows = [];\n        let activeFlows = {\n          capital: false,\n          knowledge: false,\n          impact: false,\n          all: false,\n        };\n        let animationHandles = [];\n        let santaCombaPulsing = false;\n        let isAnimating = false;\n\n        function createFlow(start, end, className, curveLeft) {\n          const dx = end.x - start.x;\n          const dy = end.y - start.y;\n          const distance = Math.sqrt(dx * dx + dy * dy);\n          const radius = distance \/ 1.755;\n          const sweepFlag = curveLeft ? 0 : 1;\n          const pathString = `M${start.x},${start.y} A${radius},${radius} 0 0,${sweepFlag} ${end.x},${end.y}`;\n\n          const color =\n            className === \"capital-flow\"\n              ? \"#FFD61A\"\n              : className === \"knowledge-flow\"\n                ? \"#A35A12\"\n                : \"#B68826\";\n\n          const basePath = linesCanvas\n            .path(pathString)\n            .stroke({ width: 7, color: \"#C4C1BA\" })\n            .fill(\"none\")\n            .addClass(\"flow-line flow-line-base\")\n            .show();\n\n          const coloredPath = linesCanvas\n            .path(pathString)\n            .stroke({\n              width: 7,\n              color,\n              dasharray: distance,\n              dashoffset: distance,\n            })\n            .fill(\"none\")\n            .addClass(\"flow-line flow-line-colored\")\n            .addClass(className)\n            .hide();\n\n          const donut = donutsCanvas\n            .circle(14)\n            .stroke({ width: 7, color })\n            .fill(\"#FEFEFE\")\n            .addClass(\"flow-line\")\n            .center(start.x, start.y)\n            .hide();\n\n          return {\n            basePath,\n            coloredPath,\n            donut,\n            pathString,\n            distance,\n            className,\n            start: { x: start.x, y: start.y },\n            end: { x: end.x, y: end.y },\n          };\n        }\n\n        \/\/ Efecto shockwave + cruces \"+\"\n        const createCrosses = (x, y) => {\n          const svg = effectsCanvas.node; \/\/ CAPA DE EFECTOS (por encima)\n          const particleCount = 60;\n          const colors = [\n            \"#FFD61A\",\n            \"#E8C218\",\n            \"#D4AD10\",\n            \"#B89508\",\n            \"#B68826\",\n          ];\n\n          \/\/ Anillo\n          const ring = document.createElementNS(\n            \"http:\/\/www.w3.org\/2000\/svg\",\n            \"circle\",\n          );\n          ring.setAttribute(\"cx\", x.toString());\n          ring.setAttribute(\"cy\", y.toString());\n          ring.setAttribute(\"r\", \"0\");\n          ring.setAttribute(\"fill\", \"none\");\n          ring.setAttribute(\"stroke\", \"#FFD61A\");\n          ring.setAttribute(\"stroke-width\", \"3\");\n          ring.setAttribute(\"opacity\", \"1\");\n          svg.appendChild(ring);\n\n          let ringRadius = 0;\n          const maxRingRadius = 180;\n          const animateRing = () => {\n            if (ringRadius < maxRingRadius) {\n              ringRadius += 4;\n              const opacity = Math.max(0, 1 - ringRadius \/ maxRingRadius);\n              const strokeWidth = 3 * opacity;\n              ring.setAttribute(\"r\", ringRadius.toString());\n              ring.setAttribute(\"opacity\", opacity.toString());\n              ring.setAttribute(\"stroke-width\", strokeWidth.toString());\n              requestAnimationFrame(animateRing);\n            } else {\n              ring.remove();\n            }\n          };\n          requestAnimationFrame(animateRing);\n\n          \/\/ Part\u00edculas \"+\"\n          for (let i = 0; i < particleCount; i++) {\n            const angle = Math.random() * Math.PI * 2;\n            const startDistance = Math.random() * 40 + 15;\n            const speed = Math.random() * 5 + 2;\n            const maxDistance = Math.random() * 250 + 180;\n            const size = Math.random() * 12 + 6;\n\n            const g = document.createElementNS(\n              \"http:\/\/www.w3.org\/2000\/svg\",\n              \"g\",\n            );\n            const startX = x + Math.cos(angle) * startDistance;\n            const startY = y + Math.sin(angle) * startDistance;\n\n            const horizontal = document.createElementNS(\n              \"http:\/\/www.w3.org\/2000\/svg\",\n              \"line\",\n            );\n            const vertical = document.createElementNS(\n              \"http:\/\/www.w3.org\/2000\/svg\",\n              \"line\",\n            );\n\n            horizontal.setAttribute(\"x1\", (-size \/ 2).toString());\n            horizontal.setAttribute(\"y1\", \"0\");\n            horizontal.setAttribute(\"x2\", (size \/ 2).toString());\n            horizontal.setAttribute(\"y2\", \"0\");\n            horizontal.setAttribute(\"stroke\", colors[i % colors.length]);\n            horizontal.setAttribute(\"stroke-width\", \"3\");\n            horizontal.setAttribute(\"stroke-linecap\", \"round\");\n\n            vertical.setAttribute(\"x1\", \"0\");\n            vertical.setAttribute(\"y1\", (-size \/ 2).toString());\n            vertical.setAttribute(\"x2\", \"0\");\n            vertical.setAttribute(\"y2\", (size \/ 2).toString());\n            vertical.setAttribute(\"stroke\", colors[i % colors.length]);\n            vertical.setAttribute(\"stroke-width\", \"3\");\n            vertical.setAttribute(\"stroke-linecap\", \"round\");\n\n            g.appendChild(horizontal);\n            g.appendChild(vertical);\n            g.setAttribute(\"transform\", `translate(${startX}, ${startY})`);\n            g.setAttribute(\"opacity\", \"0\");\n            svg.appendChild(g);\n\n            let currentDistance = startDistance;\n            let opacity = 0;\n            let rotation = 0;\n\n            const animateParticle = () => {\n              if (currentDistance < maxDistance && opacity >= 0) {\n                if (ringRadius > startDistance - 15)\n                  opacity = Math.min(1, opacity + 0.12);\n\n                currentDistance += speed;\n                rotation += 8;\n\n                const newX = x + Math.cos(angle) * currentDistance;\n                const newY = y + Math.sin(angle) * currentDistance;\n                const fadeOpacity =\n                  opacity *\n                  Math.max(\n                    0,\n                    1 -\n                      (currentDistance - startDistance) \/\n                        (maxDistance - startDistance),\n                  );\n\n                g.setAttribute(\n                  \"transform\",\n                  `translate(${newX}, ${newY}) rotate(${rotation})`,\n                );\n                g.setAttribute(\"opacity\", fadeOpacity.toString());\n\n                requestAnimationFrame(animateParticle);\n              } else {\n                g.remove();\n              }\n            };\n            requestAnimationFrame(animateParticle);\n          }\n        };\n\n        function stopAllAnimations() {\n          animationHandles.forEach((item) => {\n            if (item.animationHandle)\n              cancelAnimationFrame(item.animationHandle);\n          });\n          animationHandles = [];\n\n          [...capitalFlows, ...knowledgeFlows, ...impactFlows].forEach(\n            (flow) => {\n              if (flow.animationHandle)\n                cancelAnimationFrame(flow.animationHandle);\n            },\n          );\n\n          if (santaCombaPulsing) {\n            document.querySelector(\".santa-comba\").classList.remove(\"pulse\");\n            santaCombaPulsing = false;\n          }\n\n          \/\/ Limpieza de restos (si hubiese)\n          linesCanvas.find(\"g\").forEach((group) => {\n            if (group.children().length === 2) group.remove();\n          });\n        }\n\n        function clearAllFlows() {\n          stopAllAnimations();\n          linesCanvas.clear();\n          donutsCanvas.clear();\n          effectsCanvas.clear(); \/\/ limpiar tambi\u00e9n la capa de efectos\n          capitalFlows = [];\n          knowledgeFlows = [];\n          impactFlows = [];\n        }\n\n        function updateButtons() {\n          document\n            .getElementById(\"allBtn\")\n            .classList.toggle(\"active\", activeFlows.all);\n          document\n            .getElementById(\"capitalBtn\")\n            .classList.toggle(\"active\", activeFlows.capital);\n          document\n            .getElementById(\"knowledgeBtn\")\n            .classList.toggle(\"active\", activeFlows.knowledge);\n          document\n            .getElementById(\"impactBtn\")\n            .classList.toggle(\"active\", activeFlows.impact);\n        }\n\n        function updateInfoPanel() {\n          const selectedTextEl = document.getElementById(\"selectedText\");\n          const selected = [];\n          if (activeFlows.capital) selected.push(\"Capital\");\n          if (activeFlows.knowledge) selected.push(\"Knowledge\");\n          if (activeFlows.impact) selected.push(\"Impact\");\n\n          if (selected.length === 0) {\n            selectedTextEl.innerHTML =\n              '<span style=\"color: #333333;\">None<\/span>';\n          } else {\n            selectedTextEl.innerHTML = selected\n              .map((label) => `<span style=\"color: #2A2A2A;\">${label}<\/span>`)\n              .join(`<span style=\"color: #FFD61A;\"> + <\/span>`);\n          }\n\n          document.querySelector(\".capital-block\").style.display =\n            activeFlows.capital ? \"block\" : \"none\";\n          document.querySelector(\".knowledge-block\").style.display =\n            activeFlows.knowledge ? \"block\" : \"none\";\n          document.querySelector(\".impact-block\").style.display =\n            activeFlows.impact ? \"block\" : \"none\";\n        }\n\n        function toggleFlow(flowType) {\n          if (isAnimating) return;\n          isAnimating = true;\n\n          if (flowType === \"all\") {\n            const newState = !activeFlows.all;\n            activeFlows = {\n              capital: newState,\n              knowledge: newState,\n              impact: newState,\n              all: newState,\n            };\n          } else {\n            activeFlows[flowType] = !activeFlows[flowType];\n            activeFlows.all =\n              activeFlows.capital &&\n              activeFlows.knowledge &&\n              activeFlows.impact;\n          }\n\n          \/\/ Reset y recreaci\u00f3n\n          clearAllFlows();\n\n          if (activeFlows.capital) {\n            createCapitalFlows();\n            setTimeout(() => animateFlowSequentially(capitalFlows), 50);\n          }\n          if (activeFlows.knowledge) {\n            createKnowledgeFlows();\n            animateKnowledgeFlow();\n          }\n          if (activeFlows.impact) {\n            createImpactFlows();\n            animateImpactFlows(); \/\/ SIEMPRE dispara los \u201c+\u201d al finalizar\n          }\n\n          updateButtons();\n          updateInfoPanel();\n          isAnimating = false;\n        }\n\n        function createCapitalFlows() {\n          capitalFlows = [];\n\n          const cobasToSanta = createFlow(\n            { x: entities.cobas.x, y: entities.cobas.y - 150 },\n            { x: entities.santaComba.x, y: entities.santaComba.y + 10 },\n            \"capital-flow\",\n            false,\n          );\n          capitalFlows.push(cobasToSanta);\n\n          const santaToOvf = createFlow(\n            {\n              x: entities.santaComba.x + 155 * sx,\n              y: entities.santaComba.y + 15,\n            },\n            { x: entities.ovf.x, y: entities.ovf.y - 165 },\n            \"capital-flow\",\n            false,\n          );\n          santaToOvf.isSimultaneous = true;\n          capitalFlows.push(santaToOvf);\n\n          const santaToGsi = createFlow(\n            {\n              x: entities.santaComba.x + 5 * sx,\n              y: entities.santaComba.y + 80,\n            },\n            { x: entities.gsi.x - 85 * sx, y: entities.gsi.y - 100 },\n            \"capital-flow\",\n            true,\n          );\n          santaToGsi.isSimultaneous = true;\n          capitalFlows.push(santaToGsi);\n\n          const santaToValue = createFlow(\n            {\n              x: entities.santaComba.x + 135 * sx,\n              y: entities.santaComba.y + 105,\n            },\n            {\n              x: entities.valueSchool.x + 75 * sx,\n              y: entities.valueSchool.y - 115,\n            },\n            \"capital-flow\",\n            false,\n          );\n          santaToValue.isSimultaneous = true;\n          capitalFlows.push(santaToValue);\n\n          const gsiToOvfCurve = createFlow(\n            { x: entities.gsi.x + 50 * sx, y: entities.gsi.y - 5 },\n            { x: entities.ovf.x, y: entities.ovf.y - 5 },\n            \"capital-flow\",\n            true,\n          );\n          gsiToOvfCurve.isSimultaneous = true;\n          capitalFlows.push(gsiToOvfCurve);\n\n          return capitalFlows;\n        }\n\n        function animateFlowSequentially(flows, index = 0) {\n          function variableSpeed(t) {\n            if (t < 0.25) return 2 * t * t;\n            else if (t < 0.75) return 0.125 + (t - 0.25) * 1.5;\n            const r = (t - 0.75) \/ 0.25;\n            return 0.875 + 0.125 * (2 * r - r * r);\n          }\n\n          if (index >= flows.length) {\n            setTimeout(() => animateFlowSequentially(flows), 1000);\n            return;\n          }\n\n          const duration = index === 0 ? 1500 : 3000;\n\n          if (index === 1 && flows[index].isSimultaneous) {\n            const simultaneous = flows.slice(1, 4);\n            let completed = 0;\n\n            simultaneous.forEach((flow) => {\n              const pathLength = flow.coloredPath.length();\n              flow.coloredPath.show().attr({\n                \"stroke-dasharray\": pathLength,\n                \"stroke-dashoffset\": pathLength,\n              });\n              flow.donut.center(flow.start.x, flow.start.y).show();\n\n              let startTime = null;\n              function step(timestamp) {\n                if (!startTime) startTime = timestamp;\n                const elapsed = timestamp - startTime;\n                const raw = Math.min(elapsed \/ duration, 1);\n                const prog = variableSpeed(raw);\n                const offset = (1 - prog) * pathLength;\n\n                flow.coloredPath.attr(\"stroke-dashoffset\", offset);\n\n                if (raw < 1) {\n                  const point = flow.coloredPath.pointAt(prog * pathLength);\n                  flow.donut.center(point.x, point.y);\n                  flow.animationHandle = requestAnimationFrame(step);\n                } else {\n                  flow.coloredPath.attr(\"stroke-dashoffset\", 0);\n                  const endPoint = flow.coloredPath.pointAt(pathLength);\n                  flow.donut.center(endPoint.x, endPoint.y);\n                  completed++;\n                  if (completed === simultaneous.length) {\n                    setTimeout(\n                      () => animateFlowSequentially(flows, index + 3),\n                      300,\n                    );\n                  }\n                }\n              }\n              flow.animationHandle = requestAnimationFrame(step);\n              animationHandles.push(flow);\n            });\n            return;\n          }\n\n          const currentFlow = flows[index];\n          const pathLength = currentFlow.coloredPath.length();\n\n          currentFlow.coloredPath.show().attr({\n            \"stroke-dasharray\": pathLength,\n            \"stroke-dashoffset\": pathLength,\n          });\n          currentFlow.donut\n            .center(currentFlow.start.x, currentFlow.start.y)\n            .show();\n\n          let startTime = null;\n          function step(timestamp) {\n            if (!startTime) startTime = timestamp;\n            const elapsed = timestamp - startTime;\n            const raw = Math.min(elapsed \/ duration, 1);\n            const prog = variableSpeed(raw);\n            const offset = (1 - prog) * pathLength;\n\n            currentFlow.coloredPath.attr(\"stroke-dashoffset\", offset);\n\n            if (raw < 1) {\n              const point = currentFlow.coloredPath.pointAt(prog * pathLength);\n              currentFlow.donut.center(point.x, point.y);\n              currentFlow.animationHandle = requestAnimationFrame(step);\n            } else {\n              currentFlow.coloredPath.attr(\"stroke-dashoffset\", 0);\n              const endPoint = currentFlow.coloredPath.pointAt(pathLength);\n              currentFlow.donut.center(endPoint.x, endPoint.y);\n              setTimeout(\n                () => animateFlowSequentially(flows, index + 1),\n                index === 0 ? 150 : 300,\n              );\n            }\n          }\n          currentFlow.animationHandle = requestAnimationFrame(step);\n          animationHandles.push(currentFlow);\n        }\n\n        function createKnowledgeFlows() {\n          knowledgeFlows = [];\n\n          const topLevel = -120; \/\/ superior\n          const midLevel = -60; \/\/ cruce\n          const bottomLevel = -60; \/\/ inferior\n\n          const cobasToGsi = createFlow(\n            { x: entities.cobas.x + 50 * sx, y: entities.cobas.y + topLevel },\n            { x: entities.gsi.x - 50 * sx, y: entities.gsi.y + topLevel },\n            \"knowledge-flow\",\n            false,\n          );\n          knowledgeFlows.push(cobasToGsi);\n\n          const gsiToOvf = createFlow(\n            { x: entities.gsi.x + 40 * sx, y: entities.gsi.y + midLevel },\n            { x: entities.ovf.x - 40 * sx, y: entities.ovf.y + bottomLevel },\n            \"knowledge-flow\",\n            true,\n          );\n          knowledgeFlows.push(gsiToOvf);\n\n          const ovfToGsi = createFlow(\n            { x: entities.ovf.x - 50 * sx, y: entities.ovf.y + topLevel },\n            { x: entities.gsi.x + 50 * sx, y: entities.gsi.y + topLevel },\n            \"knowledge-flow\",\n            true,\n          );\n          knowledgeFlows.push(ovfToGsi);\n\n          const gsiToCobas = createFlow(\n            { x: entities.gsi.x - 40 * sx, y: entities.gsi.y + midLevel },\n            {\n              x: entities.cobas.x + 40 * sx,\n              y: entities.cobas.y + bottomLevel,\n            },\n            \"knowledge-flow\",\n            false,\n          );\n          knowledgeFlows.push(gsiToCobas);\n\n          return knowledgeFlows;\n        }\n\n        function animateKnowledgeFlow() {\n          stopAllAnimations();\n          if (knowledgeFlows.length === 0) return;\n\n          knowledgeFlows.forEach((flow) => {\n            flow.basePath\n              .show()\n              .stroke({ color: \"#C4C1BA\", width: 7 })\n              .attr(\"stroke-opacity\", 1);\n            flow.coloredPath\n              .show()\n              .stroke({ color: \"#A35A12\", width: 7 })\n              .attr({ \"stroke-dasharray\": \"0,10000\", \"stroke-dashoffset\": 0 });\n          });\n\n          const donutSize = 16;\n          const masterDonut = donutsCanvas\n            .circle(donutSize)\n            .stroke({ width: 7, color: \"#A35A12\", opacity: 0.95 })\n            .fill(\"#FEFEFE\")\n            .addClass(\"knowledge-donut\")\n            .center(knowledgeFlows[0].start.x, knowledgeFlows[0].start.y)\n            .show();\n\n          const duration = 3000;\n          const trailLength = 150;\n          let startTime = null;\n\n          function animate(timestamp) {\n            if (!startTime) startTime = timestamp;\n            const elapsed = (timestamp - startTime) % duration;\n            const progress = elapsed \/ duration;\n\n            const totalLength = knowledgeFlows.reduce(\n              (sum, f) => sum + f.distance,\n              0,\n            );\n            const currentPos = progress * totalLength;\n\n            let accumulated = 0,\n              currentSegment = 0,\n              segmentProgress = 0;\n            for (let i = 0; i < knowledgeFlows.length; i++) {\n              if (currentPos <= accumulated + knowledgeFlows[i].distance) {\n                currentSegment = i;\n                segmentProgress =\n                  (currentPos - accumulated) \/ knowledgeFlows[i].distance;\n                break;\n              }\n              accumulated += knowledgeFlows[i].distance;\n            }\n\n            const point = knowledgeFlows[currentSegment].coloredPath.pointAt(\n              segmentProgress * knowledgeFlows[currentSegment].distance,\n            );\n            masterDonut.center(point.x, point.y);\n\n            knowledgeFlows.forEach((flow, i) => {\n              const segmentStart = knowledgeFlows\n                .slice(0, i)\n                .reduce((s, f) => s + f.distance, 0);\n              const segmentEnd = segmentStart + flow.distance;\n              const visibleStart = Math.max(0, currentPos - trailLength);\n              const visibleEnd = currentPos + 1;\n\n              if (visibleEnd <= segmentStart || visibleStart >= segmentEnd) {\n                flow.coloredPath.attr(\"stroke-dasharray\", \"0,10000\");\n              } else {\n                const localStart = Math.max(0, visibleStart - segmentStart);\n                const localEnd = Math.min(\n                  flow.distance,\n                  visibleEnd - segmentStart,\n                );\n                const overshoot = 10;\n                const visibleLen = Math.max(\n                  0,\n                  localEnd - localStart + overshoot,\n                );\n                flow.coloredPath.attr({\n                  \"stroke-dasharray\": `${visibleLen},${flow.distance}`,\n                  \"stroke-dashoffset\": -localStart,\n                });\n              }\n            });\n\n            animationHandles.push({\n              animationHandle: requestAnimationFrame(animate),\n            });\n          }\n\n          animationHandles.push({\n            animationHandle: requestAnimationFrame(animate),\n          });\n        }\n\n        function createImpactFlows() {\n          impactFlows = [];\n\n          const cobasToSanta = createFlow(\n            { x: entities.cobas.x - 85 * sx, y: entities.cobas.y - 90 },\n            {\n              x: entities.santaComba.x + 30 * sx,\n              y: entities.santaComba.y - 30,\n            },\n            \"impact-flow\",\n            false,\n          );\n          impactFlows.push(cobasToSanta);\n\n          const ovfToSanta = createFlow(\n            { x: entities.ovf.x + 85 * sx, y: entities.ovf.y - 85 },\n            {\n              x: entities.santaComba.x + 120 * sx,\n              y: entities.santaComba.y - 30,\n            },\n            \"impact-flow\",\n            true,\n          );\n          impactFlows.push(ovfToSanta);\n\n          const gsiToSanta = createFlow(\n            { x: entities.gsi.x - 45 * sx, y: entities.gsi.y - 7 },\n            {\n              x: entities.santaComba.x - 10 * sx,\n              y: entities.santaComba.y + 35,\n            },\n            \"impact-flow\",\n            false,\n          );\n          impactFlows.push(gsiToSanta);\n\n          const valueToSanta = createFlow(\n            {\n              x: entities.valueSchool.x + 50 * sx,\n              y: entities.valueSchool.y - 10,\n            },\n            {\n              x: entities.santaComba.x + 160 * sx,\n              y: entities.santaComba.y + 40,\n            },\n            \"impact-flow\",\n            true,\n          );\n          impactFlows.push(valueToSanta);\n\n          return impactFlows;\n        }\n\n        function animateImpactFlows() {\n          function variableSpeed(t) {\n            if (t < 0.25) return 2 * t * t;\n            else if (t < 0.75) return 0.125 + (t - 0.25) * 1.5;\n            const r = (t - 0.75) \/ 0.25;\n            return 0.875 + 0.125 * (2 * r - r * r);\n          }\n\n          if (impactFlows.length === 0) return;\n\n          let completed = 0;\n          const flowsToAnimate = impactFlows;\n          const baseDuration = 1500;\n          const arrivalTime = Date.now() + baseDuration;\n\n          const resetDonuts = () => {\n            flowsToAnimate.forEach((flow) => {\n              flow.donut.center(flow.start.x, flow.start.y);\n            });\n          };\n\n          resetDonuts();\n\n          flowsToAnimate.forEach((flow, index) => {\n            const delay = index * 100;\n\n            setTimeout(() => {\n              const pathLength = flow.coloredPath.length();\n              const adjustedDuration = Math.max(400, arrivalTime - Date.now()); \/\/ evita duraciones negativas\n\n              flow.coloredPath.show().attr({\n                \"stroke-dasharray\": pathLength,\n                \"stroke-dashoffset\": pathLength,\n              });\n              flow.donut.center(flow.start.x, flow.start.y).show();\n\n              let startTime = null;\n\n              function step(timestamp) {\n                if (!startTime) startTime = timestamp;\n                const elapsed = timestamp - startTime;\n                const raw = Math.min(elapsed \/ adjustedDuration, 1);\n                const prog = variableSpeed(raw);\n                const offset = (1 - prog) * pathLength;\n\n                flow.coloredPath.attr(\"stroke-dashoffset\", offset);\n\n                if (raw < 1) {\n                  const point = flow.coloredPath.pointAt(prog * pathLength);\n                  flow.donut.center(point.x, point.y);\n                  flow.animationHandle = requestAnimationFrame(step);\n                } else {\n                  flow.coloredPath.attr(\"stroke-dashoffset\", 0);\n                  const endPoint = flow.coloredPath.pointAt(pathLength);\n                  flow.donut.center(endPoint.x, endPoint.y);\n                  completed++;\n\n                  if (completed === flowsToAnimate.length) {\n                    const santaComba = document.querySelector(\".santa-comba\");\n                    santaComba.classList.add(\"pulse\");\n                    santaCombaPulsing = true;\n\n                    \/\/ SIEMPRE: shockwave + \u201c+\u201d al FINAL de Impact\n                    createCrosses(\n                      entities.santaComba.x + 75 * sx,\n                      entities.santaComba.y - 50,\n                    );\n\n                    setTimeout(() => {\n                      if (santaCombaPulsing) {\n                        santaComba.classList.remove(\"pulse\");\n                        santaCombaPulsing = false;\n                      }\n                      resetDonuts();\n                      setTimeout(() => animateImpactFlows(), 50);\n                    }, 2000);\n                  }\n                }\n              }\n\n              flow.animationHandle = requestAnimationFrame(step);\n              animationHandles.push(flow);\n            }, delay);\n          });\n        }\n\n        function initialize() {\n          createCapitalFlows();\n          createKnowledgeFlows();\n          createImpactFlows();\n\n          activeFlows = {\n            capital: false,\n            knowledge: false,\n            impact: false,\n            all: false,\n          };\n          \/\/ Arranca en \"Impact\" para ver el efecto \u201c+\u201d de inmediato.\n          toggleFlow(\"all\");\n          updateButtons();\n          updateInfoPanel();\n        }\n\n        document\n          .getElementById(\"allBtn\")\n          .addEventListener(\"click\", () => toggleFlow(\"all\"));\n        document\n          .getElementById(\"capitalBtn\")\n          .addEventListener(\"click\", () => toggleFlow(\"capital\"));\n        document\n          .getElementById(\"knowledgeBtn\")\n          .addEventListener(\"click\", () => toggleFlow(\"knowledge\"));\n        document\n          .getElementById(\"impactBtn\")\n          .addEventListener(\"click\", () => toggleFlow(\"impact\"));\n\n        initialize();\n      });\n    <\/script>\n  <\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8b120d8 elementor-hidden-desktop e-flex e-con-boxed e-con e-parent\" data-id=\"8b120d8\" 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<div class=\"elementor-element elementor-element-a346970 elementor-widget elementor-widget-html\" data-id=\"a346970\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<meta charset=\"UTF-8\" \/>\n<meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" \/>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/svg.js\/3.2.0\/svg.min.js\"><\/script>\n<style>\n  :root {\n    \/* Santa Comba ecosystem \u2013 main flow colors (from design) *\/\n    --capital-color: #ffd61a;\n    --knowledge-color: #486286;\n    --impact-color: #2e2315;\n    --all-btn-color: #212749;\n    --primary-color: #ffd61a;\n    --secondary-color: #212749;\n    --accent-color: #a35a12;\n    --dark-color: #2e2315;\n    --highlight-color: #ffd61a;\n    --office-color: #c4c1ba;\n    --credit-color: #ffd61a;\n    --equity-color: #212749;\n    --background-light: #fefefe;\n    --text-color: #2a2a2a;\n    --neutral-light: #f0edde;\n    --neutral-medium: #c4c1ba;\n    --bullet-office: #c4c1ba;\n  }\n\n  * {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n  body {\n    font-family: \"Proxima Nova\", Arial, sans-serif;\n    color: var(--text-color);\n    line-height: 1.6;\n    background-color: var(--background-light);\n  }\n\n  .mobile-filter-container {\n    display: flex;\n    justify-content: center;\n    gap: 8px;\n    margin: 15px 0;\n    flex-wrap: wrap;\n    padding: 0 10px;\n  }\n\n  button.mobile-filter-slider {\n    height: 28px;\n    border-radius: 14px;\n    width: auto !important;\n    min-width: 72px !important;\n    font-size: 13px;\n    position: relative;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    display: flex;\n    align-items: center;\n    padding: 0 10px 0 38px;\n    justify-content: flex-end;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n    border: 1px solid transparent;\n    color: #2a2a2a !important;\n    background-color: #f5f2e1 !important;\n  }\n  button.mobile-filter-slider::before {\n    position: absolute;\n    content: \"\";\n    width: 22px;\n    height: 22px;\n    left: 3px;\n    top: 50%;\n    transform: translateY(-50%);\n    background-color: white;\n    transition: all 0.3s ease;\n    border-radius: 50%;\n  }\n  .mobile-filter-label {\n    white-space: nowrap;\n    text-align: right;\n    margin-left: auto;\n  }\n  \/* Inactive: outlined\/light background, colored circle right *\/\n  \/* Active: solid background, white circle left *\/\n  button.mobile-filter-slider.active {\n    padding: 0 38px 0 10px;\n    justify-content: flex-start;\n  }\n  button.mobile-filter-slider.active .mobile-filter-label {\n    margin-left: 0;\n    text-align: left;\n  }\n  button.mobile-filter-slider.active::before {\n    left: auto;\n    right: 3px;\n  }\n  \/* Active state (circle right): solid colored *\/\n  #mobileAllBtn.active {\n    background-color: var(--all-btn-color) !important;\n    border-color: var(--all-btn-color) !important;\n    color: #fefefe !important;\n  }\n  #mobileCapitalBtn.active {\n    background-color: var(--capital-color) !important;\n    border-color: var(--capital-color) !important;\n    color: #1a1a1a !important;\n  }\n  #mobileKnowledgeBtn.active {\n    background-color: var(--knowledge-color) !important;\n    border-color: var(--knowledge-color) !important;\n    color: #fefefe !important;\n  }\n  #mobileImpactBtn.active {\n    background-color: var(--impact-color) !important;\n    border-color: var(--impact-color) !important;\n    color: #fefefe !important;\n  }\n  #mobileAllBtn.active::before {\n    background-color: #fefefe !important;\n  }\n  #mobileCapitalBtn.active::before {\n    background-color: #fefefe !important;\n  }\n  #mobileKnowledgeBtn.active::before {\n    background-color: #fefefe !important;\n  }\n  #mobileImpactBtn.active::before {\n    background-color: #fefefe !important;\n  }\n  \/* Inactive state (circle left): light\/outlined *\/\n  #mobileAllBtn:not(.active) {\n    background-color: transparent !important;\n    border-color: var(--all-btn-color) !important;\n    color: #1a1a1a !important;\n  }\n  #mobileCapitalBtn:not(.active) {\n    background-color: #fefefe !important;\n    border-color: var(--capital-color) !important;\n    color: #1a1a1a !important;\n  }\n  #mobileKnowledgeBtn:not(.active) {\n    background-color: #fefefe !important;\n    border-color: var(--knowledge-color) !important;\n    color: #1a1a1a !important;\n  }\n  #mobileImpactBtn:not(.active) {\n    background-color: #fefefe !important;\n    border-color: var(--impact-color) !important;\n    color: #1a1a1a !important;\n  }\n  #mobileAllBtn:not(.active)::before {\n    background-color: var(--all-btn-color) !important;\n  }\n  #mobileCapitalBtn:not(.active)::before {\n    background-color: var(--capital-color) !important;\n  }\n  #mobileKnowledgeBtn:not(.active)::before {\n    background-color: var(--knowledge-color) !important;\n  }\n  #mobileImpactBtn:not(.active)::before {\n    background-color: var(--impact-color) !important;\n  }\n  .mobile-ecosystem-container {\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n    margin: 0 auto;\n    padding: 15px 0;\n    background-color: #f5f5f5;\n  }\n\n  .mobile-info-container {\n    display: flex;\n    flex-direction: row;\n    width: 100%;\n    min-height: 130px;\n    height: auto;\n    padding: 0 10px;\n    margin-bottom: 15px;\n  }\n\n  .mobile-info-panel {\n    position: relative;\n    width: 100%;\n    background: white;\n    padding: 20px;\n    font-size: 0.85rem;\n    min-height: auto;\n    overflow-y: auto;\n    opacity: 0.95;\n    box-shadow: 0 0 0 rgba(0, 0, 0, 0.15);\n    border-radius: 8px;\n    border: 0 solid var(--neutral-medium);\n  }\n  .mobile-info-panel h2 {\n    margin: 0 0 10px 0;\n    font-size: 16px;\n    color: var(--dark-color);\n    border-bottom: 2px solid var(--highlight-color);\n    padding-bottom: 6px;\n  }\n  .mobile-flow-block {\n    border-left: 2px solid;\n    padding: 10px;\n    margin: 10px 0;\n    background: transparent;\n    border-radius: 0 6px 6px 0;\n    display: none;\n  }\n  .mobile-flow-block.capital-block {\n    border-color: var(--capital-color);\n  }\n  .mobile-flow-block.knowledge-block {\n    border-color: var(--knowledge-color);\n  }\n  .mobile-flow-block.impact-block {\n    border-color: var(--impact-color);\n  }\n  .mobile-flow-block h3 {\n    font-size: 14px;\n    font-weight: bold;\n    color: var(--dark-color);\n    margin-bottom: 6px;\n  }\n  .mobile-flow-block ul {\n    padding-left: 1rem;\n    list-style: disc;\n    margin: 0;\n    color: #111;\n    font-size: 0.85rem;\n    line-height: 1.4;\n  }\n\n  .mobile-ecosystem-diagram {\n    background-color: transparent;\n    position: relative;\n    width: 100%;\n    height: 50vh;\n    min-height: 350px;\n  }\n\n  .mobile-entity {\n    position: absolute;\n    width: 90px;\n    height: 81px;\n    z-index: 5 !important;\n    transition: transform 0.3s ease;\n  }\n  .mobile-entity svg {\n    width: 100%;\n    height: auto;\n    z-index: 5 !important;\n    stroke: none !important;\n  }\n  .mobile-entity img {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    max-width: 70%;\n    max-height: 70%;\n    object-fit: contain;\n    pointer-events: none;\n    z-index: 20 !important;\n  }\n\n  .mobile-santa-comba {\n    top: 10%;\n    left: 55%;\n    transform: translateX(-50%);\n  }\n  .mobile-santa-comba.pulse {\n    animation: mobile-heartbeat 2s infinite;\n  }\n  @keyframes mobile-heartbeat {\n    0% {\n      transform: translateX(-50%) scale(1);\n    }\n    25% {\n      transform: translateX(-50%) scale(1.05);\n    }\n    50% {\n      transform: translateX(-50%) scale(1);\n    }\n    75% {\n      transform: translateX(-50%) scale(1.05);\n    }\n    100% {\n      transform: translateX(-50%) scale(1);\n    }\n  }\n\n  .mobile-cobas {\n    top: 55%;\n    left: 22%;\n    transform: translate(-50%, -50%);\n  }\n  .mobile-gsi {\n    top: 55%;\n    left: 52%;\n    transform: translate(-50%, -50%);\n  }\n  .mobile-ovf {\n    top: 55%;\n    left: 80%;\n    transform: translate(-50%, -50%);\n  }\n  .mobile-value-school {\n    top: 85%;\n    left: 52%;\n    transform: translate(-50%, -50%);\n  }\n\n  .mobile-capital-flow {\n    stroke: var(--capital-color);\n  }\n  .mobile-knowledge-flow {\n    stroke: var(--knowledge-color);\n  }\n  .mobile-impact-flow {\n    stroke: var(--impact-color);\n  }\n\n  \/* Mobile-specific adjustments *\/\n  @media (max-width: 480px) {\n    .mobile-filter-container {\n      gap: 6px;\n    }\n\n    button.mobile-filter-slider {\n      padding: 0 8px 0 30px;\n    }\n    button.mobile-filter-slider.active {\n      padding: 0 30px 0 8px;\n    }\n    button.mobile-filter-slider::before {\n      height: 20px;\n      width: 20px;\n    }\n\n    .mobile-entity {\n      width: 80px;\n      height: 72px;\n    }\n\n    .mobile-info-panel {\n      padding: 10px;\n      font-size: 0.8rem;\n    }\n    .mobile-info-panel h2 {\n      font-size: 15px;\n    }\n    .mobile-flow-block {\n      padding: 8px;\n      margin: 8px 0;\n    }\n    .mobile-flow-block h3 {\n      font-size: 13px;\n    }\n    .mobile-flow-block ul {\n      font-size: 0.8rem;\n    }\n  }\n\n  @media (max-width: 360px) {\n    .mobile-entity {\n      width: 70px;\n      height: 63px;\n    }\n    .mobile-ecosystem-diagram {\n      height: 45vh;\n      min-height: 300px;\n    }\n  }\n\n  \/* Tablet: keep diagram centered with stable height *\/\n  @media (min-width: 768px) and (max-width: 1024px) {\n    .mobile-ecosystem-container {\n      max-width: 768px;\n      margin: 0 auto;\n    }\n\n    .mobile-ecosystem-diagram {\n      max-width: 768px;\n      margin: 0 auto;\n      height: 60vh;\n      min-height: 420px;\n    }\n  }\n<\/style>\n\n<div class=\"mobile-filter-container\">\n  <button class=\"mobile-filter-slider active\" id=\"mobileAllBtn\">\n    <span class=\"mobile-filter-label\">All<\/span>\n  <\/button>\n  <button class=\"mobile-filter-slider\" id=\"mobileCapitalBtn\">\n    <span class=\"mobile-filter-label\">Capital flows<\/span>\n  <\/button>\n  <button class=\"mobile-filter-slider\" id=\"mobileKnowledgeBtn\">\n    <span class=\"mobile-filter-label\">Knowledge flows<\/span>\n  <\/button>\n  <button class=\"mobile-filter-slider\" id=\"mobileImpactBtn\">\n    <span class=\"mobile-filter-label\">Ecosystem impact flows<\/span>\n  <\/button>\n<\/div>\n\n<div class=\"mobile-ecosystem-container\">\n  <div class=\"mobile-info-container\">\n    <div class=\"mobile-info-panel\">\n      <h2>Selected: <span id=\"mobileSelectedText\"><\/span><\/h2>\n\n      <div class=\"mobile-flow-block capital-block\">\n        <h3>Capital flows<\/h3>\n        <ul>\n          <li>\n            From Cobas AM to Santa Comba and from Santa Comba to OVF, GSI, and\n            Value School. From GSI to OVF.\n          <\/li>\n        <\/ul>\n      <\/div>\n\n      <div class=\"mobile-flow-block knowledge-block\">\n        <h3>Knowledge flows<\/h3>\n        <ul>\n          <li>Internal exchange of expertise, know-how, insights.<\/li>\n          <li>Bidirectional flows, especially Cobas \u2192 GSI and OVF \u2192 GSI.<\/li>\n        <\/ul>\n      <\/div>\n\n      <div class=\"mobile-flow-block impact-block\">\n        <h3>Ecosystem impact flows<\/h3>\n        <ul>\n          <li>Knowledge sharing (external contribution).<\/li>\n          <li>From all entities toward the Santa Comba or outward.<\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"mobile-ecosystem-diagram\" id=\"mobileDiagram\">\n    <div class=\"mobile-entity mobile-santa-comba\">\n      <a href=\"https:\/\/santacombagestion.com\/\" target=\"_blank\">\n        <svg\n          fill=\"none\"\n          viewBox=\"0 0 180 162\"\n          xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n        >\n          <path\n            d=\"M122.826 0.581923C131.4 0.581925 139.323 5.1563 143.61 12.5819L176.336 69.2642C180.623 76.6898 180.623 85.8386 176.336 93.2642L143.61 149.946C139.323 157.372 131.4 161.946 122.826 161.946L57.3748 161.946C48.8004 161.946 40.8774 157.372 36.5902 149.946L3.86469 93.2642C-0.422493 85.8386 -0.422498 76.6898 3.86469 69.2642L36.5902 12.5819C40.8774 5.1563 48.8004 0.581922 57.3748 0.581924L122.826 0.581923Z\"\n            fill=\"#FEFEFE\"\n            stroke=\"#212749\"\n            stroke-width=\"0\"\n          \/><\/svg\n      ><\/a>\n      <img decoding=\"async\"\n        alt=\"Santa Comba\"\n        src=\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/06\/santaCombaLogo01-1.png\"\n      \/>\n    <\/div>\n\n    <div class=\"mobile-entity mobile-cobas\">\n      <a href=\"https:\/\/www.cobasam.com\/\" target=\"_blank\">\n        <svg\n          fill=\"none\"\n          viewBox=\"0 0 180 162\"\n          xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n        >\n          <path\n            d=\"M122.826 0.581923C131.4 0.581925 139.323 5.1563 143.61 12.5819L176.336 69.2642C180.623 76.6898 180.623 85.8386 176.336 93.2642L143.61 149.946C139.323 157.372 131.4 161.946 122.826 161.946L57.3748 161.946C48.8004 161.946 40.8774 157.372 36.5902 149.946L3.86469 93.2642C-0.422493 85.8386 -0.422498 76.6898 3.86469 69.2642L36.5902 12.5819C40.8774 5.1563 48.8004 0.581922 57.3748 0.581924L122.826 0.581923Z\"\n            fill=\"#FEFEFE\"\n            stroke=\"#212749\"\n            stroke-width=\"0\"\n          \/><\/svg\n      ><\/a>\n      <img decoding=\"async\"\n        alt=\"Cobas AM\"\n        src=\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/06\/cobas01.png\"\n      \/>\n    <\/div>\n\n    <div class=\"mobile-entity mobile-gsi\">\n      <a href=\"https:\/\/globalsocialimpact.es\/\" target=\"_blank\">\n        <svg\n          fill=\"none\"\n          viewBox=\"0 0 180 162\"\n          xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n        >\n          <path\n            d=\"M122.826 0.581923C131.4 0.581925 139.323 5.1563 143.61 12.5819L176.336 69.2642C180.623 76.6898 180.623 85.8386 176.336 93.2642L143.61 149.946C139.323 157.372 131.4 161.946 122.826 161.946L57.3748 161.946C48.8004 161.946 40.8774 157.372 36.5902 149.946L3.86469 93.2642C-0.422493 85.8386 -0.422498 76.6898 3.86469 69.2642L36.5902 12.5819C40.8774 5.1563 48.8004 0.581922 57.3748 0.581924L122.826 0.581923Z\"\n            fill=\"#FEFEFE\"\n            stroke=\"#212749\"\n            stroke-width=\"0\"\n          \/><\/svg\n      ><\/a>\n      <img decoding=\"async\"\n        alt=\"GSI\"\n        src=\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/06\/logo03.png\"\n      \/>\n    <\/div>\n\n    <div class=\"mobile-entity mobile-ovf\">\n      <a href=\"https:\/\/www.openvaluefoundation.org\/es\/\" target=\"_blank\">\n        <svg\n          fill=\"none\"\n          viewBox=\"0 0 180 162\"\n          xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n        >\n          <path\n            d=\"M122.826 0.581923C131.4 0.581925 139.323 5.1563 143.61 12.5819L176.336 69.2642C180.623 76.6898 180.623 85.8386 176.336 93.2642L143.61 149.946C139.323 157.372 131.4 161.946 122.826 161.946L57.3748 161.946C48.8004 161.946 40.8774 157.372 36.5902 149.946L3.86469 93.2642C-0.422493 85.8386 -0.422498 76.6898 3.86469 69.2642L36.5902 12.5819C40.8774 5.1563 48.8004 0.581922 57.3748 0.581924L122.826 0.581923Z\"\n            fill=\"#FEFEFE\"\n            stroke=\"#212749\"\n            stroke-width=\"0\"\n          \/><\/svg\n      ><\/a>\n      <img decoding=\"async\"\n        alt=\"Open Value Foundation\"\n        src=\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/06\/openValue2.png\"\n      \/>\n    <\/div>\n\n    <div class=\"mobile-entity mobile-value-school\">\n      <a href=\"https:\/\/valueschool.es\/\" target=\"_blank\">\n        <svg\n          fill=\"none\"\n          viewBox=\"0 0 180 162\"\n          xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n        >\n          <path\n            d=\"M122.826 0.581923C131.4 0.581925 139.323 5.1563 143.61 12.5819L176.336 69.2642C180.623 76.6898 180.623 85.8386 176.336 93.2642L143.61 149.946C139.323 157.372 131.4 161.946 122.826 161.946L57.3748 161.946C48.8004 161.946 40.8774 157.372 36.5902 149.946L3.86469 93.2642C-0.422493 85.8386 -0.422498 76.6898 3.86469 69.2642L36.5902 12.5819C40.8774 5.1563 48.8004 0.581922 57.3748 0.581924L122.826 0.581923Z\"\n            fill=\"#FEFEFE\"\n            stroke=\"#212749\"\n            stroke-width=\"0\"\n          \/><\/svg\n      ><\/a>\n      <img decoding=\"async\"\n        alt=\"Value School\"\n        src=\"https:\/\/globalsocialimpact.es\/wp-content\/uploads\/2025\/06\/valueSchoolLogo.png\"\n      \/>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n  document.addEventListener(\"DOMContentLoaded\", function () {\n    const SVG = window.SVG;\n    if (!SVG) return;\n\n    const diagram = document.getElementById(\"mobileDiagram\");\n    if (!diagram) return;\n\n    \/\/ Estilos para capas\n    const style = document.createElement(\"style\");\n    style.textContent = `\n      .mobile-lines-layer  { position:absolute; top:0; left:0; z-index: 1  !important; pointer-events:none; }\n      .mobile-donuts-layer { position:absolute; top:0; left:0; z-index: 10 !important; pointer-events:none; }\n      .mobile-effects-layer{ position:absolute; top:0; left:0; z-index: 30 !important; pointer-events:none; }\n    `;\n    document.head.appendChild(style);\n\n    \/\/ Tres canvas SVG: l\u00edneas (abajo), donuts (medio), efectos\/plus (arriba)\n    const linesCanvas = SVG()\n      .addTo(\"#mobileDiagram\")\n      .size(\"100%\", \"100%\")\n      .addClass(\"mobile-lines-layer\");\n    const donutsCanvas = SVG()\n      .addTo(\"#mobileDiagram\")\n      .size(\"100%\", \"100%\")\n      .addClass(\"mobile-donuts-layer\");\n    const effectsCanvas = SVG()\n      .addTo(\"#mobileDiagram\")\n      .size(\"100%\", \"100%\")\n      .addClass(\"mobile-effects-layer\");\n\n    \/\/ Coordenadas adaptadas para m\u00f3vil\n    const diagramWidth = diagram.offsetWidth;\n    const diagramHeight = diagram.offsetHeight;\n\n    const entities = {\n      santaComba: { x: diagramWidth * 0.5, y: diagramHeight * 0.15 },\n      cobas: { x: diagramWidth * 0.2, y: diagramHeight * 0.6 },\n      gsi: { x: diagramWidth * 0.5, y: diagramHeight * 0.6 },\n      ovf: { x: diagramWidth * 0.8, y: diagramHeight * 0.6 },\n      valueSchool: { x: diagramWidth * 0.5, y: diagramHeight * 0.85 },\n    };\n\n    let capitalFlows = [];\n    let knowledgeFlows = [];\n    let impactFlows = [];\n    let activeFlows = {\n      capital: false,\n      knowledge: false,\n      impact: false,\n      all: false,\n    };\n    let animationHandles = [];\n    let santaCombaPulsing = false;\n    let isAnimating = false;\n\n    function createFlow(start, end, className, curveLeft) {\n      const dx = end.x - start.x;\n      const dy = end.y - start.y;\n      const distance = Math.sqrt(dx * dx + dy * dy);\n      const radius = distance \/ 1.755;\n      const sweepFlag = curveLeft ? 0 : 1;\n      const pathString = `M${start.x},${start.y} A${radius},${radius} 0 0,${sweepFlag} ${end.x},${end.y}`;\n\n      const color =\n        className === \"mobile-capital-flow\"\n          ? \"#FFD61A\"\n          : className === \"mobile-knowledge-flow\"\n            ? \"#A35A12\"\n            : \"#B68826\";\n\n      const basePath = linesCanvas\n        .path(pathString)\n        .stroke({ width: 5, color: \"#C4C1BA\" })\n        .fill(\"none\")\n        .addClass(\"mobile-flow-line mobile-flow-line-base\")\n        .show();\n\n      const coloredPath = linesCanvas\n        .path(pathString)\n        .stroke({ width: 5, color, dasharray: distance, dashoffset: distance })\n        .fill(\"none\")\n        .addClass(\"mobile-flow-line mobile-flow-line-colored\")\n        .addClass(className)\n        .hide();\n\n      const donut = donutsCanvas\n        .circle(8)\n        .stroke({ width: 5, color })\n        .fill(\"#FEFEFE\")\n        .addClass(\"mobile-flow-line\")\n        .center(start.x, start.y)\n        .hide();\n\n      return {\n        basePath,\n        coloredPath,\n        donut,\n        pathString,\n        distance,\n        className,\n        start: { x: start.x, y: start.y },\n        end: { x: end.x, y: end.y },\n      };\n    }\n\n    \/\/ Efecto shockwave + cruces \"+\" (optimizado para m\u00f3vil)\n    const createCrosses = (x, y) => {\n      const svg = effectsCanvas.node;\n      const particleCount = 40; \/\/ Reducido para mejor rendimiento en m\u00f3vil\n      const colors = [\"#FFD61A\", \"#E8C218\", \"#D4AD10\", \"#B89508\", \"#B68826\"];\n\n      \/\/ Anillo\n      const ring = document.createElementNS(\n        \"http:\/\/www.w3.org\/2000\/svg\",\n        \"circle\",\n      );\n      ring.setAttribute(\"cx\", x.toString());\n      ring.setAttribute(\"cy\", y.toString());\n      ring.setAttribute(\"r\", \"0\");\n      ring.setAttribute(\"fill\", \"none\");\n      ring.setAttribute(\"stroke\", \"#FFD61A\");\n      ring.setAttribute(\"stroke-width\", \"2\");\n      ring.setAttribute(\"opacity\", \"1\");\n      svg.appendChild(ring);\n\n      let ringRadius = 0;\n      const maxRingRadius = 120; \/\/ Reducido para m\u00f3vil\n      const animateRing = () => {\n        if (ringRadius < maxRingRadius) {\n          ringRadius += 3;\n          const opacity = Math.max(0, 1 - ringRadius \/ maxRingRadius);\n          const strokeWidth = 2 * opacity;\n          ring.setAttribute(\"r\", ringRadius.toString());\n          ring.setAttribute(\"opacity\", opacity.toString());\n          ring.setAttribute(\"stroke-width\", strokeWidth.toString());\n          requestAnimationFrame(animateRing);\n        } else {\n          ring.remove();\n        }\n      };\n      requestAnimationFrame(animateRing);\n\n      \/\/ Part\u00edculas \"+\"\n      for (let i = 0; i < particleCount; i++) {\n        const angle = Math.random() * Math.PI * 2;\n        const startDistance = Math.random() * 30 + 10;\n        const speed = Math.random() * 3 + 1.5;\n        const maxDistance = Math.random() * 150 + 120;\n        const size = Math.random() * 8 + 4;\n\n        const g = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"g\");\n        const startX = x + Math.cos(angle) * startDistance;\n        const startY = y + Math.sin(angle) * startDistance;\n\n        const horizontal = document.createElementNS(\n          \"http:\/\/www.w3.org\/2000\/svg\",\n          \"line\",\n        );\n        const vertical = document.createElementNS(\n          \"http:\/\/www.w3.org\/2000\/svg\",\n          \"line\",\n        );\n\n        horizontal.setAttribute(\"x1\", (-size \/ 2).toString());\n        horizontal.setAttribute(\"y1\", \"0\");\n        horizontal.setAttribute(\"x2\", (size \/ 2).toString());\n        horizontal.setAttribute(\"y2\", \"0\");\n        horizontal.setAttribute(\"stroke\", colors[i % colors.length]);\n        horizontal.setAttribute(\"stroke-width\", \"2\");\n        horizontal.setAttribute(\"stroke-linecap\", \"round\");\n\n        vertical.setAttribute(\"x1\", \"0\");\n        vertical.setAttribute(\"y1\", (-size \/ 2).toString());\n        vertical.setAttribute(\"x2\", \"0\");\n        vertical.setAttribute(\"y2\", (size \/ 2).toString());\n        vertical.setAttribute(\"stroke\", colors[i % colors.length]);\n        vertical.setAttribute(\"stroke-width\", \"2\");\n        vertical.setAttribute(\"stroke-linecap\", \"round\");\n\n        g.appendChild(horizontal);\n        g.appendChild(vertical);\n        g.setAttribute(\"transform\", `translate(${startX}, ${startY})`);\n        g.setAttribute(\"opacity\", \"0\");\n        svg.appendChild(g);\n\n        let currentDistance = startDistance;\n        let opacity = 0;\n        let rotation = 0;\n\n        const animateParticle = () => {\n          if (currentDistance < maxDistance && opacity >= 0) {\n            if (ringRadius > startDistance - 10)\n              opacity = Math.min(1, opacity + 0.1);\n\n            currentDistance += speed;\n            rotation += 6;\n\n            const newX = x + Math.cos(angle) * currentDistance;\n            const newY = y + Math.sin(angle) * currentDistance;\n            const fadeOpacity =\n              opacity *\n              Math.max(\n                0,\n                1 -\n                  (currentDistance - startDistance) \/\n                    (maxDistance - startDistance),\n              );\n\n            g.setAttribute(\n              \"transform\",\n              `translate(${newX}, ${newY}) rotate(${rotation})`,\n            );\n            g.setAttribute(\"opacity\", fadeOpacity.toString());\n\n            requestAnimationFrame(animateParticle);\n          } else {\n            g.remove();\n          }\n        };\n        requestAnimationFrame(animateParticle);\n      }\n    };\n\n    function stopAllAnimations() {\n      animationHandles.forEach((item) => {\n        if (item.animationHandle) cancelAnimationFrame(item.animationHandle);\n      });\n      animationHandles = [];\n\n      [...capitalFlows, ...knowledgeFlows, ...impactFlows].forEach((flow) => {\n        if (flow.animationHandle) cancelAnimationFrame(flow.animationHandle);\n      });\n\n      if (santaCombaPulsing) {\n        document.querySelector(\".mobile-santa-comba\").classList.remove(\"pulse\");\n        santaCombaPulsing = false;\n      }\n\n      \/\/ Limpieza de restos (si hubiese)\n      linesCanvas.find(\"g\").forEach((group) => {\n        if (group.children().length === 2) group.remove();\n      });\n    }\n\n    function clearAllFlows() {\n      stopAllAnimations();\n      linesCanvas.clear();\n      donutsCanvas.clear();\n      effectsCanvas.clear();\n      capitalFlows = [];\n      knowledgeFlows = [];\n      impactFlows = [];\n    }\n\n    function updateButtons() {\n      document\n        .getElementById(\"mobileAllBtn\")\n        .classList.toggle(\"active\", activeFlows.all);\n      document\n        .getElementById(\"mobileCapitalBtn\")\n        .classList.toggle(\"active\", activeFlows.capital);\n      document\n        .getElementById(\"mobileKnowledgeBtn\")\n        .classList.toggle(\"active\", activeFlows.knowledge);\n      document\n        .getElementById(\"mobileImpactBtn\")\n        .classList.toggle(\"active\", activeFlows.impact);\n    }\n\n    function updateInfoPanel() {\n      const selectedTextEl = document.getElementById(\"mobileSelectedText\");\n      const selected = [];\n      if (activeFlows.capital) selected.push(\"Capital\");\n      if (activeFlows.knowledge) selected.push(\"Knowledge\");\n      if (activeFlows.impact) selected.push(\"Impact\");\n\n      if (selected.length === 0) {\n        selectedTextEl.innerHTML = '<span style=\"color: #333333;\">None<\/span>';\n      } else {\n        selectedTextEl.innerHTML = selected\n          .map((label) => `<span style=\"color: #2A2A2A;\">${label}<\/span>`)\n          .join(`<span style=\"color: #FFD61A;\"> + <\/span>`);\n      }\n\n      document.querySelector(\".mobile-flow-block.capital-block\").style.display =\n        activeFlows.capital ? \"block\" : \"none\";\n      document.querySelector(\n        \".mobile-flow-block.knowledge-block\",\n      ).style.display = activeFlows.knowledge ? \"block\" : \"none\";\n      document.querySelector(\".mobile-flow-block.impact-block\").style.display =\n        activeFlows.impact ? \"block\" : \"none\";\n    }\n\n    function toggleFlow(flowType) {\n      if (isAnimating) return;\n\n      if (flowType === \"all\") {\n        const newState = !activeFlows.all;\n        activeFlows = {\n          capital: newState,\n          knowledge: newState,\n          impact: newState,\n          all: newState,\n        };\n      } else {\n        activeFlows[flowType] = !activeFlows[flowType];\n        activeFlows.all =\n          activeFlows.capital && activeFlows.knowledge && activeFlows.impact;\n      }\n\n      clearAllFlows();\n\n      if (activeFlows.capital) {\n        createCapitalFlows();\n        setTimeout(() => animateFlowSequentially(capitalFlows), 50);\n      }\n      if (activeFlows.knowledge) {\n        createKnowledgeFlows();\n        animateKnowledgeFlow();\n      }\n      if (activeFlows.impact) {\n        createImpactFlows();\n        animateImpactFlows();\n      }\n\n      updateButtons();\n      updateInfoPanel();\n    }\n\n    \/\/ \u2705 un solo listener por bot\u00f3n, sirve para desktop y mobile\n    [\"all\", \"capital\", \"knowledge\", \"impact\"].forEach((type) => {\n      document\n        .getElementById(\n          `mobile${type.charAt(0).toUpperCase() + type.slice(1)}Btn`,\n        )\n        .addEventListener(\"click\", () => toggleFlow(type));\n    });\n\n    function createCapitalFlows() {\n      capitalFlows = [];\n\n      const cobasToSanta = createFlow(\n        { x: entities.cobas.x, y: entities.cobas.y - 60 },\n        { x: entities.santaComba.x, y: entities.santaComba.y + -20 },\n        \"mobile-capital-flow\",\n        false,\n      );\n      capitalFlows.push(cobasToSanta);\n\n      const santaToOvf = createFlow(\n        { x: entities.santaComba.x + 40, y: entities.santaComba.y - 20 },\n        { x: entities.ovf.x, y: entities.ovf.y - 60 },\n        \"mobile-capital-flow\",\n        false,\n      );\n      santaToOvf.isSimultaneous = true;\n      capitalFlows.push(santaToOvf);\n\n      const santaToGsi = createFlow(\n        { x: entities.santaComba.x + 45, y: entities.santaComba.y + 30 },\n        { x: entities.gsi.x - 30, y: entities.gsi.y - 40 },\n        \"mobile-capital-flow\",\n        true,\n      );\n      santaToGsi.isSimultaneous = true;\n      capitalFlows.push(santaToGsi);\n\n      const santaToValue = createFlow(\n        { x: entities.santaComba.x + 45, y: entities.santaComba.y + 45 },\n        { x: entities.valueSchool.x + 25, y: entities.valueSchool.y - 40 },\n        \"mobile-capital-flow\",\n        false,\n      );\n      santaToValue.isSimultaneous = true;\n      capitalFlows.push(santaToValue);\n\n      const gsiToOvfCurve = createFlow(\n        { x: entities.gsi.x + 20, y: entities.gsi.y - 5 },\n        { x: entities.ovf.x, y: entities.ovf.y - 5 },\n        \"mobile-capital-flow\",\n        true,\n      );\n      gsiToOvfCurve.isSimultaneous = true;\n      capitalFlows.push(gsiToOvfCurve);\n\n      return capitalFlows;\n    }\n\n    function animateFlowSequentially(flows, index = 0) {\n      function variableSpeed(t) {\n        if (t < 0.25) return 2 * t * t;\n        else if (t < 0.75) return 0.125 + (t - 0.25) * 1.5;\n        const r = (t - 0.75) \/ 0.25;\n        return 0.875 + 0.125 * (2 * r - r * r);\n      }\n\n      if (index >= flows.length) {\n        setTimeout(() => animateFlowSequentially(flows), 800);\n        return;\n      }\n\n      const duration = index === 0 ? 1200 : 2500;\n\n      if (index === 1 && flows[index].isSimultaneous) {\n        const simultaneous = flows.slice(1, 4);\n        let completed = 0;\n\n        simultaneous.forEach((flow) => {\n          const pathLength = flow.coloredPath.length();\n          flow.coloredPath.show().attr({\n            \"stroke-dasharray\": pathLength,\n            \"stroke-dashoffset\": pathLength,\n          });\n          flow.donut.center(flow.start.x, flow.start.y).show();\n\n          let startTime = null;\n          function step(timestamp) {\n            if (!startTime) startTime = timestamp;\n            const elapsed = timestamp - startTime;\n            const raw = Math.min(elapsed \/ duration, 1);\n            const prog = variableSpeed(raw);\n            const offset = (1 - prog) * pathLength;\n\n            flow.coloredPath.attr(\"stroke-dashoffset\", offset);\n\n            if (raw < 1) {\n              const point = flow.coloredPath.pointAt(prog * pathLength);\n              flow.donut.center(point.x, point.y);\n              flow.animationHandle = requestAnimationFrame(step);\n            } else {\n              flow.coloredPath.attr(\"stroke-dashoffset\", 0);\n              const endPoint = flow.coloredPath.pointAt(pathLength);\n              flow.donut.center(endPoint.x, endPoint.y);\n              completed++;\n              if (completed === simultaneous.length) {\n                setTimeout(\n                  () => animateFlowSequentially(flows, index + 3),\n                  200,\n                );\n              }\n            }\n          }\n          flow.animationHandle = requestAnimationFrame(step);\n          animationHandles.push(flow);\n        });\n        return;\n      }\n\n      const currentFlow = flows[index];\n      const pathLength = currentFlow.coloredPath.length();\n\n      currentFlow.coloredPath.show().attr({\n        \"stroke-dasharray\": pathLength,\n        \"stroke-dashoffset\": pathLength,\n      });\n      currentFlow.donut.center(currentFlow.start.x, currentFlow.start.y).show();\n\n      let startTime = null;\n      function step(timestamp) {\n        if (!startTime) startTime = timestamp;\n        const elapsed = timestamp - startTime;\n        const raw = Math.min(elapsed \/ duration, 1);\n        const prog = variableSpeed(raw);\n        const offset = (1 - prog) * pathLength;\n\n        currentFlow.coloredPath.attr(\"stroke-dashoffset\", offset);\n\n        if (raw < 1) {\n          const point = currentFlow.coloredPath.pointAt(prog * pathLength);\n          currentFlow.donut.center(point.x, point.y);\n          currentFlow.animationHandle = requestAnimationFrame(step);\n        } else {\n          currentFlow.coloredPath.attr(\"stroke-dashoffset\", 0);\n          const endPoint = currentFlow.coloredPath.pointAt(pathLength);\n          currentFlow.donut.center(endPoint.x, endPoint.y);\n          setTimeout(\n            () => animateFlowSequentially(flows, index + 1),\n            index === 0 ? 100 : 200,\n          );\n        }\n      }\n      currentFlow.animationHandle = requestAnimationFrame(step);\n      animationHandles.push(currentFlow);\n    }\n\n    function createKnowledgeFlows() {\n      knowledgeFlows = [];\n\n      const topLevel = -40;\n      const midLevel = -20;\n      const bottomLevel = -20;\n\n      const cobasToGsi = createFlow(\n        { x: entities.cobas.x + 20, y: entities.cobas.y + topLevel },\n        { x: entities.gsi.x - 20, y: entities.gsi.y + topLevel },\n        \"mobile-knowledge-flow\",\n        false,\n      );\n      knowledgeFlows.push(cobasToGsi);\n\n      const gsiToOvf = createFlow(\n        { x: entities.gsi.x + 15, y: entities.gsi.y + midLevel },\n        { x: entities.ovf.x - 15, y: entities.ovf.y + bottomLevel },\n        \"mobile-knowledge-flow\",\n        true,\n      );\n      knowledgeFlows.push(gsiToOvf);\n\n      const ovfToGsi = createFlow(\n        { x: entities.ovf.x - 20, y: entities.ovf.y + topLevel },\n        { x: entities.gsi.x + 20, y: entities.gsi.y + topLevel },\n        \"mobile-knowledge-flow\",\n        true,\n      );\n      knowledgeFlows.push(ovfToGsi);\n\n      const gsiToCobas = createFlow(\n        { x: entities.gsi.x - 15, y: entities.gsi.y + midLevel },\n        { x: entities.cobas.x + 15, y: entities.cobas.y + bottomLevel },\n        \"mobile-knowledge-flow\",\n        false,\n      );\n      knowledgeFlows.push(gsiToCobas);\n\n      return knowledgeFlows;\n    }\n\n    function animateKnowledgeFlow() {\n      stopAllAnimations();\n      if (knowledgeFlows.length === 0) return;\n\n      knowledgeFlows.forEach((flow) => {\n        flow.basePath\n          .show()\n          .stroke({ color: \"#C4C1BA\", width: 5 })\n          .attr(\"stroke-opacity\", 1);\n        flow.coloredPath\n          .show()\n          .stroke({ color: \"#A35A12\", width: 5 })\n          .attr({ \"stroke-dasharray\": \"0,10000\", \"stroke-dashoffset\": 0 });\n      });\n\n      const donutSize = 14;\n      const masterDonut = donutsCanvas\n        .circle(donutSize)\n        .stroke({ width: 5, color: \"#A35A12\", opacity: 0.95 })\n        .fill(\"#FEFEFE\")\n        .addClass(\"mobile-knowledge-donut\")\n        .center(knowledgeFlows[0].start.x, knowledgeFlows[0].start.y)\n        .show();\n\n      const duration = 2500;\n      const trailLength = 100;\n      let startTime = null;\n\n      function animate(timestamp) {\n        if (!startTime) startTime = timestamp;\n        const elapsed = (timestamp - startTime) % duration;\n        const progress = elapsed \/ duration;\n\n        const totalLength = knowledgeFlows.reduce(\n          (sum, f) => sum + f.distance,\n          0,\n        );\n        const currentPos = progress * totalLength;\n\n        let accumulated = 0,\n          currentSegment = 0,\n          segmentProgress = 0;\n        for (let i = 0; i < knowledgeFlows.length; i++) {\n          if (currentPos <= accumulated + knowledgeFlows[i].distance) {\n            currentSegment = i;\n            segmentProgress =\n              (currentPos - accumulated) \/ knowledgeFlows[i].distance;\n            break;\n          }\n          accumulated += knowledgeFlows[i].distance;\n        }\n\n        const point = knowledgeFlows[currentSegment].coloredPath.pointAt(\n          segmentProgress * knowledgeFlows[currentSegment].distance,\n        );\n        masterDonut.center(point.x, point.y);\n\n        knowledgeFlows.forEach((flow, i) => {\n          const segmentStart = knowledgeFlows\n            .slice(0, i)\n            .reduce((s, f) => s + f.distance, 0);\n          const segmentEnd = segmentStart + flow.distance;\n          const visibleStart = Math.max(0, currentPos - trailLength);\n          const visibleEnd = currentPos + 1;\n\n          if (visibleEnd <= segmentStart || visibleStart >= segmentEnd) {\n            flow.coloredPath.attr(\"stroke-dasharray\", \"0,10000\");\n          } else {\n            const localStart = Math.max(0, visibleStart - segmentStart);\n            const localEnd = Math.min(flow.distance, visibleEnd - segmentStart);\n            const overshoot = 8;\n            const visibleLen = Math.max(0, localEnd - localStart + overshoot);\n            flow.coloredPath.attr({\n              \"stroke-dasharray\": `${visibleLen},${flow.distance}`,\n              \"stroke-dashoffset\": -localStart,\n            });\n          }\n        });\n\n        animationHandles.push({\n          animationHandle: requestAnimationFrame(animate),\n        });\n      }\n\n      animationHandles.push({\n        animationHandle: requestAnimationFrame(animate),\n      });\n    }\n\n    function createImpactFlows() {\n      impactFlows = [];\n\n      const cobasToSanta = createFlow(\n        { x: entities.cobas.x - 30, y: entities.cobas.y - 30 },\n        { x: entities.santaComba.x - 10, y: entities.santaComba.y - 5 },\n        \"mobile-impact-flow\",\n        false,\n      );\n      impactFlows.push(cobasToSanta);\n\n      const ovfToSanta = createFlow(\n        { x: entities.ovf.x + 30, y: entities.ovf.y - 30 },\n        { x: entities.santaComba.x + 45, y: entities.santaComba.y - 10 },\n        \"mobile-impact-flow\",\n        true,\n      );\n      impactFlows.push(ovfToSanta);\n\n      const gsiToSanta = createFlow(\n        { x: entities.gsi.x - 25, y: entities.gsi.y - 7 },\n        { x: entities.santaComba.x - 15, y: entities.santaComba.y + 15 },\n        \"mobile-impact-flow\",\n        false,\n      );\n      impactFlows.push(gsiToSanta);\n\n      const valueToSanta = createFlow(\n        { x: entities.valueSchool.x + 15, y: entities.valueSchool.y - 10 },\n        { x: entities.santaComba.x + 60, y: entities.santaComba.y + 15 },\n        \"mobile-impact-flow\",\n        true,\n      );\n      impactFlows.push(valueToSanta);\n\n      return impactFlows;\n    }\n\n    function animateImpactFlows() {\n      function variableSpeed(t) {\n        if (t < 0.25) return 2 * t * t;\n        else if (t < 0.75) return 0.125 + (t - 0.25) * 1.5;\n        const r = (t - 0.75) \/ 0.25;\n        return 0.875 + 0.125 * (2 * r - r * r);\n      }\n\n      if (impactFlows.length === 0) return;\n\n      let completed = 0;\n      const flowsToAnimate = impactFlows;\n      const baseDuration = 1200;\n      const arrivalTime = Date.now() + baseDuration;\n\n      const resetDonuts = () => {\n        flowsToAnimate.forEach((flow) => {\n          flow.donut.center(flow.start.x, flow.start.y);\n        });\n      };\n\n      resetDonuts();\n\n      flowsToAnimate.forEach((flow, index) => {\n        const delay = index * 80;\n\n        setTimeout(() => {\n          const pathLength = flow.coloredPath.length();\n          const adjustedDuration = Math.max(300, arrivalTime - Date.now());\n\n          flow.coloredPath.show().attr({\n            \"stroke-dasharray\": pathLength,\n            \"stroke-dashoffset\": pathLength,\n          });\n          flow.donut.center(flow.start.x, flow.start.y).show();\n\n          let startTime = null;\n\n          function step(timestamp) {\n            if (!startTime) startTime = timestamp;\n            const elapsed = timestamp - startTime;\n            const raw = Math.min(elapsed \/ adjustedDuration, 1);\n            const prog = variableSpeed(raw);\n            const offset = (1 - prog) * pathLength;\n\n            flow.coloredPath.attr(\"stroke-dashoffset\", offset);\n\n            if (raw < 1) {\n              const point = flow.coloredPath.pointAt(prog * pathLength);\n              flow.donut.center(point.x, point.y);\n              flow.animationHandle = requestAnimationFrame(step);\n            } else {\n              flow.coloredPath.attr(\"stroke-dashoffset\", 0);\n              const endPoint = flow.coloredPath.pointAt(pathLength);\n              flow.donut.center(endPoint.x, endPoint.y);\n              completed++;\n\n              if (completed === flowsToAnimate.length) {\n                const santaComba = document.querySelector(\n                  \".mobile-santa-comba\",\n                );\n                santaComba.classList.add(\"pulse\");\n                santaCombaPulsing = true;\n\n                createCrosses(\n                  entities.santaComba.x + 25,\n                  entities.santaComba.y - 15,\n                );\n\n                setTimeout(() => {\n                  if (santaCombaPulsing) {\n                    santaComba.classList.remove(\"pulse\");\n                    santaCombaPulsing = false;\n                  }\n                  resetDonuts();\n                  setTimeout(() => animateImpactFlows(), 50);\n                }, 1500);\n              }\n            }\n          }\n\n          flow.animationHandle = requestAnimationFrame(step);\n          animationHandles.push(flow);\n        }, delay);\n      });\n    }\n\n    function initialize() {\n      createCapitalFlows();\n      createKnowledgeFlows();\n      createImpactFlows();\n\n      activeFlows = {\n        capital: false,\n        knowledge: false,\n        impact: false,\n        all: false,\n      };\n      toggleFlow(\"all\");\n      updateButtons();\n      updateInfoPanel();\n    }\n\n    \/\/ Event listeners con soporte t\u00e1ctil\n    document\n      .getElementById(\"mobileAllBtn\")\n      .addEventListener(\"click\", () => toggleFlow(\"all\"));\n    document\n      .getElementById(\"mobileCapitalBtn\")\n      .addEventListener(\"click\", () => toggleFlow(\"capital\"));\n    document\n      .getElementById(\"mobileKnowledgeBtn\")\n      .addEventListener(\"click\", () => toggleFlow(\"knowledge\"));\n    document\n      .getElementById(\"mobileImpactBtn\")\n      .addEventListener(\"click\", () => toggleFlow(\"impact\"));\n\n    \/\/ Tambi\u00e9n agregar eventos t\u00e1ctiles para mejor experiencia m\u00f3vil\n    document.getElementById(\"mobileAllBtn\").addEventListener(\n      \"touchstart\",\n      (e) => {\n        e.preventDefault();\n        toggleFlow(\"all\");\n      },\n      { passive: false },\n    );\n\n    document.getElementById(\"mobileCapitalBtn\").addEventListener(\n      \"touchstart\",\n      (e) => {\n        e.preventDefault();\n        toggleFlow(\"capital\");\n      },\n      { passive: false },\n    );\n\n    document.getElementById(\"mobileKnowledgeBtn\").addEventListener(\n      \"touchstart\",\n      (e) => {\n        e.preventDefault();\n        toggleFlow(\"knowledge\");\n      },\n      { passive: false },\n    );\n\n    document.getElementById(\"mobileImpactBtn\").addEventListener(\n      \"touchstart\",\n      (e) => {\n        e.preventDefault();\n        toggleFlow(\"impact\");\n      },\n      { passive: false },\n    );\n\n    \/\/ Recalcular posiciones al redimensionar\n    window.addEventListener(\"resize\", function () {\n      const diagramWidth = diagram.offsetWidth;\n      const diagramHeight = diagram.offsetHeight;\n\n      entities.santaComba = { x: diagramWidth * 0.5, y: diagramHeight * 0.15 };\n      entities.cobas = { x: diagramWidth * 0.2, y: diagramHeight * 0.6 };\n      entities.gsi = { x: diagramWidth * 0.5, y: diagramHeight * 0.6 };\n      entities.ovf = { x: diagramWidth * 0.8, y: diagramHeight * 0.6 };\n      entities.valueSchool = { x: diagramWidth * 0.5, y: diagramHeight * 0.85 };\n\n      \/\/ Recrear flujos si est\u00e1n activos\n      if (activeFlows.capital || activeFlows.knowledge || activeFlows.impact) {\n        const currentState = { ...activeFlows };\n        clearAllFlows();\n        activeFlows = {\n          capital: false,\n          knowledge: false,\n          impact: false,\n          all: false,\n        };\n\n        if (currentState.capital) toggleFlow(\"capital\");\n        if (currentState.knowledge) toggleFlow(\"knowledge\");\n        if (currentState.impact) toggleFlow(\"impact\");\n      }\n    });\n\n    initialize();\n  });\n<\/script>\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>La oportunidad nace en las personas La oportunidad nace en las personas OVF Carousel El problemaque abordamos El talento est\u00e1 en todas partes, pero las oportunidades econ\u00f3micas no La falta de empleo y recursos mantiene a muchas personas atrapadas en un c\u00edrculo de pobreza estructural y las soluciones asistenciales no rompen ese ciclo a largo [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-5797","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/staging.openvaluefoundation.org\/en\/wp-json\/wp\/v2\/pages\/5797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staging.openvaluefoundation.org\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/staging.openvaluefoundation.org\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/staging.openvaluefoundation.org\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/staging.openvaluefoundation.org\/en\/wp-json\/wp\/v2\/comments?post=5797"}],"version-history":[{"count":147,"href":"https:\/\/staging.openvaluefoundation.org\/en\/wp-json\/wp\/v2\/pages\/5797\/revisions"}],"predecessor-version":[{"id":10477,"href":"https:\/\/staging.openvaluefoundation.org\/en\/wp-json\/wp\/v2\/pages\/5797\/revisions\/10477"}],"wp:attachment":[{"href":"https:\/\/staging.openvaluefoundation.org\/en\/wp-json\/wp\/v2\/media?parent=5797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}