{"id":127,"date":"2026-09-22T11:43:12","date_gmt":"2026-09-22T09:43:12","guid":{"rendered":"https:\/\/hoo.barcelona\/?page_id=127"},"modified":"2026-10-09T08:56:56","modified_gmt":"2026-10-09T06:56:56","slug":"ho-3d-printed-barefoot-footwear","status":"publish","type":"page","link":"https:\/\/hoo.barcelona\/es\/","title":{"rendered":"Ho 3D Printed Barefoot Footwear"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"127\" class=\"elementor elementor-127\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f3a566a sonar-hero e-con-full e-flex elementor-invisible e-con e-parent\" data-id=\"f3a566a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;,&quot;animation&quot;:&quot;fadeIn&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0723d12 sonar-background elementor-widget elementor-widget-html\" data-id=\"0723d12\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"sonar-stage\" aria-hidden=\"true\">\n    <span class=\"sonar-ring\"><\/span>\n    <span class=\"sonar-ring\"><\/span>\n    <span class=\"sonar-ring\"><\/span>\n    <span class=\"sonar-ring\"><\/span>\n    <span class=\"sonar-ring\"><\/span>\n    <span class=\"sonar-ring\"><\/span>\n<\/div>\n\n<style>\n\/* =========================================================\n   SONAR \u2014 VERSI\u00d3N LENTA\n   ---------------------------------------------------------\n   CONTENEDOR PRINCIPAL:\n   sonar-hero\n\n   WIDGET HTML:\n   sonar-background\n========================================================= *\/\n\n.sonar-hero {\n    position: relative;\n    overflow: hidden;\n}\n\n\n\/* Widget HTML como fondo absoluto *\/\n.sonar-background {\n    position: absolute !important;\n    inset: 0 !important;\n\n    width: 100% !important;\n    height: 100% !important;\n\n    margin: 0 !important;\n    padding: 0 !important;\n\n    z-index: 0 !important;\n\n    pointer-events: none !important;\n}\n\n\n\/* Evitar alturas\/m\u00e1rgenes propios del widget *\/\n.sonar-background > .elementor-widget-container {\n    width: 100% !important;\n    height: 100% !important;\n\n    margin: 0 !important;\n    padding: 0 !important;\n}\n\n\n\/* =========================================================\n   STAGE\n========================================================= *\/\n\n.sonar-stage {\n    position: absolute;\n\n    inset: 0;\n\n    width: 100%;\n    height: 100%;\n\n    overflow: hidden;\n\n    pointer-events: none;\n\n    --sonar-size: 160vmax;\n}\n\n\n\/* =========================================================\n   ANILLOS\n========================================================= *\/\n\n.sonar-ring {\n    position: absolute;\n\n    left: 50%;\n    top: 50%;\n\n    width: var(--sonar-size);\n    height: var(--sonar-size);\n\n    border-radius: 50%;\n\n    border:\n        1px solid\n        rgba(115, 115, 115, 0.52);\n\n    box-sizing: border-box;\n\n    opacity: 0;\n\n    transform:\n        translate(-50%, -50%)\n        scale(0.025);\n\n    animation:\n        sonar-wave\n        10.8s\n        linear\n        infinite;\n\n    will-change:\n        transform,\n        opacity;\n}\n\n\n\/* 10.8 \/ 6 = 1.8 segundos *\/\n\n.sonar-ring:nth-child(1) {\n    animation-delay: 0s;\n}\n\n.sonar-ring:nth-child(2) {\n    animation-delay: -1.8s;\n}\n\n.sonar-ring:nth-child(3) {\n    animation-delay: -3.6s;\n}\n\n.sonar-ring:nth-child(4) {\n    animation-delay: -5.4s;\n}\n\n.sonar-ring:nth-child(5) {\n    animation-delay: -7.2s;\n}\n\n.sonar-ring:nth-child(6) {\n    animation-delay: -9s;\n}\n\n\n\/* =========================================================\n   ANIMACI\u00d3N\n========================================================= *\/\n\n@keyframes sonar-wave {\n\n    0% {\n        transform:\n            translate(-50%, -50%)\n            scale(0.025);\n\n        opacity: 0;\n    }\n\n\n    3% {\n        opacity: 0.75;\n    }\n\n\n    20% {\n        opacity: 0.68;\n    }\n\n\n    60% {\n        opacity: 0.48;\n    }\n\n\n    85% {\n        opacity: 0.22;\n    }\n\n\n    100% {\n        transform:\n            translate(-50%, -50%)\n            scale(1);\n\n        opacity: 0;\n    }\n}\n\n\n\/* =========================================================\n   ELEMENTOR EDITOR\n========================================================= *\/\n\n.elementor-editor-active .sonar-stage {\n    display: none !important;\n}\n\n\n\/* =========================================================\n   ACCESIBILIDAD\n========================================================= *\/\n\n@media (prefers-reduced-motion: reduce) {\n\n    .sonar-ring {\n        animation: none !important;\n        display: none !important;\n    }\n\n}\n<\/style>\n\n\n<script>\n(function () {\n    \"use strict\";\n\n\n    function isElementorEditor() {\n\n        try {\n\n            if (\n                document.body &&\n                document.body.classList.contains(\n                    \"elementor-editor-active\"\n                )\n            ) {\n                return true;\n            }\n\n\n            if (\n                window.elementorFrontend &&\n                typeof window.elementorFrontend.isEditMode === \"function\" &&\n                window.elementorFrontend.isEditMode()\n            ) {\n                return true;\n            }\n\n\n            if (\n                window.parent !== window &&\n                window.parent.document &&\n                window.parent.document.body &&\n                window.parent.document.body.classList.contains(\n                    \"elementor-editor-active\"\n                )\n            ) {\n                return true;\n            }\n\n        } catch (e) {}\n\n\n        return false;\n    }\n\n\n    if (isElementorEditor()) {\n        return;\n    }\n\n\n    const stages =\n        document.querySelectorAll(\n            \".sonar-stage\"\n        );\n\n\n    const stage =\n        stages[\n            stages.length - 1\n        ];\n\n\n    if (!stage) {\n        return;\n    }\n\n\n    const hero =\n        stage.closest(\n            \".sonar-hero\"\n        );\n\n\n    if (!hero) {\n        return;\n    }\n\n\n    function updateSonarSize() {\n\n        const rect =\n            hero.getBoundingClientRect();\n\n\n        if (\n            rect.width <= 0 ||\n            rect.height <= 0\n        ) {\n            return;\n        }\n\n\n        const diagonal =\n            Math.hypot(\n                rect.width,\n                rect.height\n            );\n\n\n        const diameter =\n            diagonal * 1.18;\n\n\n        stage.style.setProperty(\n            \"--sonar-size\",\n            diameter + \"px\"\n        );\n\n    }\n\n\n    updateSonarSize();\n\n\n    let resizeRAF =\n        0;\n\n\n    function scheduleUpdate() {\n\n        if (resizeRAF) {\n            return;\n        }\n\n\n        resizeRAF =\n            requestAnimationFrame(\n                function () {\n\n                    resizeRAF = 0;\n\n                    updateSonarSize();\n\n                }\n            );\n\n    }\n\n\n    if (\n        \"ResizeObserver\" in window\n    ) {\n\n        const observer =\n            new ResizeObserver(\n                scheduleUpdate\n            );\n\n\n        observer.observe(\n            hero\n        );\n\n    }\n\n\n    window.addEventListener(\n        \"resize\",\n        scheduleUpdate,\n        {\n            passive: true\n        }\n    );\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3fd831b e-con-full e-flex e-con e-child\" data-id=\"3fd831b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-42a1350 elementor-invisible elementor-widget elementor-widget-image\" data-id=\"42a1350\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInLeft&quot;,&quot;_animation_delay&quot;:1}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"347\" height=\"182\" src=\"https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/lann.png\" class=\"attachment-2048x2048 size-2048x2048 wp-image-139\" alt=\"Black HO Barcelona barefoot sneaker side view, zero-drop 3D printed design\" srcset=\"https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/lann.png 347w, https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/lann-300x157.png 300w\" sizes=\"(max-width: 347px) 100vw, 347px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1246744 elementor-hidden-desktop elementor-hidden-mobile elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"1246744\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:1.7}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">3D printed <br> footwear<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-05c7eb2 e-con-full e-flex e-con e-child\" data-id=\"05c7eb2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2a7ea95 mesh-shoe-target elementor-widget-tablet__width-initial elementor-widget elementor-widget-image\" data-id=\"2a7ea95\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"450\" height=\"765\" src=\"https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/LANN-home.png\" class=\"attachment-large size-large wp-image-185\" alt=\"Black HO Barcelona barefoot sneaker viewed from above, ergonomic wide toe box\" srcset=\"https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/LANN-home.png 450w, https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/LANN-home-176x300.png 176w\" sizes=\"(max-width: 450px) 100vw, 450px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42a5c4b mesh-background elementor-widget elementor-widget-html\" data-id=\"42a5c4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    \"use strict\";\n\n\n    \/* ============================================================\n       H\u014c \u2014 DEPTH SURFACE SCAN \/ INTERACTIVE + IDLE SCANNER\n       ------------------------------------------------------------\n\n       IDLE:\n       - l\u00ednea vertical muy fina\n       - completamente definida\n       - sin halo difuso\n       - barrido lento izquierda \u2192 derecha\n       - peque\u00f1a pausa entre barridos\n\n       INTERACCI\u00d3N:\n       - conserva el Depth Surface Scan original\n       - contours\n       - relief\n       - micro-refracci\u00f3n\n       - textura superficial\n       - respuesta INMEDIATA al cursor\n\n       SEGURIDAD ELEMENTOR:\n       - NO modifica .sonar-hero\n       - NO modifica el contenedor 33%\n       - NO a\u00f1ade hijos a Elementor\n       - NO modifica flex\/grid\/position\/z-index\n       - NO recrea el sonar\n       - NO cambia tama\u00f1o ni posici\u00f3n del zapato\n       - Canvas externo en BODY\n       - Shadow DOM aislado\n\n       CLASES:\n\n       Hero:\n       sonar-hero\n\n       Widget Imagen:\n       mesh-shoe-target\n\n       Widget HTML:\n       ninguna clase\n    ============================================================ *\/\n\n\n    \/* ============================================================\n       1. DEPTH MAP\n    ============================================================ *\/\n\n    const DEPTH_URL =\n        \"https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/tmpupdks4jv.png\";\n\n\n    \/* ============================================================\n       2. EFECTO INTERACTIVO ORIGINAL\n    ============================================================ *\/\n\n    const SCAN_WIDTH =\n        0.115;\n\n\n    const DEPTH_BEND =\n        0.115;\n\n\n    const CONTOUR_COUNT =\n        18.0;\n\n\n    const REFRACTION =\n        0.0045;\n\n\n    \/*\n     * Intensidad cuando hay interacci\u00f3n.\n     *\/\n    const INTERACTIVE_INTENSITY =\n        1.0;\n\n\n    \/* ============================================================\n       3. ZONA DE ACTIVACI\u00d3N\n\n       El cursor NO tiene que estar encima del zapato.\n\n       1.15 significa:\n       +115% del ancho del zapato a izquierda\n       +115% a derecha.\n\n       Esto crea una zona bastante amplia,\n       pero sigue estando vinculada visualmente al objeto.\n    ============================================================ *\/\n\n    const ACTIVATION_MARGIN_X =\n        1.15;\n\n\n    \/*\n     * Margen arriba y abajo.\n     *\/\n    const ACTIVATION_MARGIN_Y =\n        0.40;\n\n\n    \/*\n     * Cuando el cursor est\u00e1 dentro de esa zona ampliada,\n     * remapeamos su posici\u00f3n al zapato.\n\n       Esto evita que el efecto quede f\u00edsicamente\n       fuera del zapato aunque el rat\u00f3n est\u00e9 cerca.\n    *\/\n    const INTERACTION_OVERSCAN =\n        0.08;\n\n\n    \/* ============================================================\n       4. SCANNER IDLE\n    ============================================================ *\/\n\n    \/*\n     * Tiempo que tarda la l\u00ednea en atravesar\n     * completamente el zapato.\n\n       3.6 s = bastante m\u00e1s lento y deliberado,\n       como un esc\u00e1ner.\n    *\/\n    const IDLE_SCAN_DURATION =\n        3.20;\n\n\n    \/*\n     * Pausa despu\u00e9s del barrido.\n     *\/\n    const IDLE_SCAN_PAUSE =\n        0.15;\n\n\n    \/*\n     * L\u00ednea muy fina.\n\n       En un render de unos 300\u2013400 px de ancho\n       queda aproximadamente alrededor de 1 px\n       o ligeramente menos.\n    *\/\n    const IDLE_LINE_WIDTH =\n        0.00125;\n\n\n    \/*\n     * Solo antialiasing del borde.\n\n       NO genera halo.\n    *\/\n    const IDLE_LINE_SOFTNESS =\n        0.00075;\n\n\n    \/*\n     * Intensidad de la l\u00ednea.\n    *\/\n    const IDLE_LINE_INTENSITY =\n        0.72;\n\n\n    \/* ============================================================\n       5. CAMBIO IDLE \u2194 INTERACTIVO\n\n       Esto \u00fanicamente suaviza la transici\u00f3n\n       entre los dos modos.\n\n       NO suaviza la posici\u00f3n del cursor.\n    ============================================================ *\/\n\n    const MODE_EASE =\n        0.42;\n\n\n    \/* ============================================================\n       6. RENDER\n    ============================================================ *\/\n\n    const MAX_DPR_DESKTOP =\n        1.5;\n\n    const MAX_DPR_TABLET =\n        1.25;\n\n    const MAX_DPR_MOBILE =\n        1;\n\n\n    const OVERLAY_Z_INDEX =\n        40;\n\n\n    \/* ============================================================\n       7. ELEMENTOR EDITOR\n    ============================================================ *\/\n\n    function isElementorEditor() {\n\n        try {\n\n            if (\n                document.body &&\n                document.body.classList.contains(\n                    \"elementor-editor-active\"\n                )\n            ) {\n                return true;\n            }\n\n\n            if (\n                window.elementorFrontend &&\n                typeof window.elementorFrontend.isEditMode === \"function\" &&\n                window.elementorFrontend.isEditMode()\n            ) {\n                return true;\n            }\n\n\n            if (\n                window.parent !== window &&\n                window.parent.document &&\n                window.parent.document.body &&\n                window.parent.document.body.classList.contains(\n                    \"elementor-editor-active\"\n                )\n            ) {\n                return true;\n            }\n\n        } catch (error) {}\n\n\n        return false;\n    }\n\n\n    if (isElementorEditor()) {\n        return;\n    }\n\n\n    \/* ============================================================\n       8. LOCALIZAR SCRIPT\n    ============================================================ *\/\n\n    const currentScript =\n        document.currentScript;\n\n\n    if (!currentScript) {\n        return;\n    }\n\n\n    \/* ============================================================\n       9. HERO\n\n       SOLO LECTURA.\n    ============================================================ *\/\n\n    const hero =\n        currentScript.closest(\n            \".sonar-hero\"\n        );\n\n\n    if (!hero) {\n\n        console.warn(\n            \"H\u014d Depth Scan: no encuentro .sonar-hero\"\n        );\n\n        return;\n    }\n\n\n    \/* ============================================================\n       10. IMAGEN DEL ZAPATO\n    ============================================================ *\/\n\n    const shoeWidget =\n        hero.querySelector(\n            \".mesh-shoe-target\"\n        );\n\n\n    if (!shoeWidget) {\n\n        console.warn(\n            \"H\u014d Depth Scan: falta mesh-shoe-target.\"\n        );\n\n        return;\n    }\n\n\n    const shoeImage =\n        shoeWidget.querySelector(\n            \"img\"\n        );\n\n\n    if (!shoeImage) {\n\n        console.warn(\n            \"H\u014d Depth Scan: no encuentro el <img>.\"\n        );\n\n        return;\n    }\n\n\n    \/* ============================================================\n       11. REDUCED MOTION\n    ============================================================ *\/\n\n    const reducedMotion =\n\n        window.matchMedia &&\n        window.matchMedia(\n            \"(prefers-reduced-motion: reduce)\"\n        ).matches;\n\n\n    if (reducedMotion) {\n        return;\n    }\n\n\n    \/* ============================================================\n       12. LIMPIAR INSTANCIA PREVIA\n    ============================================================ *\/\n\n    document\n        .querySelectorAll(\n            \"[data-ho-depth-scan-portal='1']\"\n        )\n        .forEach(\n            function (element) {\n\n                element.remove();\n\n            }\n        );\n\n\n    \/* ============================================================\n       13. PORTAL EXTERNO\n    ============================================================ *\/\n\n    const host =\n        document.createElement(\n            \"div\"\n        );\n\n\n    host.setAttribute(\n        \"data-ho-depth-scan-portal\",\n        \"1\"\n    );\n\n\n    host.style.cssText = [\n\n        \"position:fixed\",\n        \"left:0\",\n        \"top:0\",\n\n        \"width:1px\",\n        \"height:1px\",\n\n        \"margin:0\",\n        \"padding:0\",\n        \"border:0\",\n\n        \"pointer-events:none\",\n\n        \"overflow:hidden\",\n\n        \"background:transparent\",\n\n        \"z-index:\" +\n            OVERLAY_Z_INDEX,\n\n        \"visibility:hidden\",\n\n        \"contain:strict\"\n\n    ].join(\";\");\n\n\n    document.body.appendChild(\n        host\n    );\n\n\n    \/* ============================================================\n       14. SHADOW DOM\n    ============================================================ *\/\n\n    const shadow =\n        host.attachShadow({\n            mode: \"open\"\n        });\n\n\n    const style =\n        document.createElement(\n            \"style\"\n        );\n\n\n    style.textContent = `\n\n        :host {\n            all: initial;\n        }\n\n        canvas {\n            position: absolute;\n\n            left: 0;\n            top: 0;\n\n            width: 100%;\n            height: 100%;\n\n            display: block;\n\n            margin: 0;\n            padding: 0;\n            border: 0;\n\n            pointer-events: none;\n\n            background: transparent;\n        }\n\n    `;\n\n\n    shadow.appendChild(\n        style\n    );\n\n\n    \/* ============================================================\n       15. CANVAS\n    ============================================================ *\/\n\n    const canvas =\n        document.createElement(\n            \"canvas\"\n        );\n\n\n    canvas.setAttribute(\n        \"aria-hidden\",\n        \"true\"\n    );\n\n\n    shadow.appendChild(\n        canvas\n    );\n\n\n    \/* ============================================================\n       16. WEBGL\n    ============================================================ *\/\n\n    const gl =\n        canvas.getContext(\n            \"webgl\",\n            {\n                alpha: true,\n                antialias: false,\n                depth: false,\n                stencil: false,\n                premultipliedAlpha: false,\n                preserveDrawingBuffer: false,\n                powerPreference: \"high-performance\"\n            }\n        );\n\n\n    if (!gl) {\n\n        console.warn(\n            \"H\u014d Depth Scan: WebGL no disponible.\"\n        );\n\n\n        host.remove();\n\n        return;\n    }\n\n\n    \/* ============================================================\n       17. VERTEX SHADER\n    ============================================================ *\/\n\n    const vertexSource = `\n\n        attribute vec2 aPosition;\n\n        varying vec2 vUv;\n\n\n        void main() {\n\n            vUv =\n                aPosition * 0.5 + 0.5;\n\n\n            gl_Position =\n                vec4(\n                    aPosition,\n                    0.0,\n                    1.0\n                );\n\n        }\n\n    `;\n\n\n    \/* ============================================================\n       18. FRAGMENT SHADER\n    ============================================================ *\/\n\n    const fragmentSource = `\n\n        precision highp float;\n\n\n        varying vec2 vUv;\n\n\n        uniform sampler2D uColor;\n        uniform sampler2D uDepth;\n\n\n        uniform vec2 uPointer;\n        uniform vec2 uTexel;\n\n\n        uniform float uAngle;\n        uniform float uTime;\n\n\n        uniform float uInteractiveIntensity;\n        uniform float uInteractiveMix;\n\n\n        uniform float uScanWidth;\n        uniform float uDepthBend;\n        uniform float uContourCount;\n        uniform float uRefraction;\n\n\n        uniform float uIdleX;\n        uniform float uIdleWidth;\n        uniform float uIdleSoftness;\n        uniform float uIdleIntensity;\n\n\n        \/* ========================================================\n           DEPTH\n        ======================================================== *\/\n\n        float readDepth(\n            vec2 uv\n        ) {\n\n            return texture2D(\n                uDepth,\n                clamp(\n                    uv,\n                    0.0,\n                    1.0\n                )\n            ).r;\n\n        }\n\n\n        \/* ========================================================\n           MAIN\n        ======================================================== *\/\n\n        void main() {\n\n\n            \/* ====================================================\n               RENDER ORIGINAL\n            ==================================================== *\/\n\n            vec4 base =\n\n                texture2D(\n                    uColor,\n                    vUv\n                );\n\n\n            if (\n                base.a <=\n                0.001\n            ) {\n\n                gl_FragColor =\n                    vec4(\n                        0.0\n                    );\n\n                return;\n            }\n\n\n            float objectMask =\n\n                smoothstep(\n                    0.50,\n                    0.91,\n                    base.a\n                );\n\n\n            \/* ====================================================\n               DEPTH\n            ==================================================== *\/\n\n            float depth =\n                readDepth(\n                    vUv\n                );\n\n\n            float depthL =\n\n                readDepth(\n                    vUv -\n                    vec2(\n                        uTexel.x,\n                        0.0\n                    )\n                );\n\n\n            float depthR =\n\n                readDepth(\n                    vUv +\n                    vec2(\n                        uTexel.x,\n                        0.0\n                    )\n                );\n\n\n            float depthD =\n\n                readDepth(\n                    vUv -\n                    vec2(\n                        0.0,\n                        uTexel.y\n                    )\n                );\n\n\n            float depthU =\n\n                readDepth(\n                    vUv +\n                    vec2(\n                        0.0,\n                        uTexel.y\n                    )\n                );\n\n\n            vec2 gradient =\n\n                vec2(\n                    depthL -\n                    depthR,\n\n                    depthD -\n                    depthU\n                );\n\n\n            float relief =\n\n                clamp(\n                    length(\n                        gradient\n                    ) * 18.0,\n                    0.0,\n                    1.0\n                );\n\n\n            \/* ====================================================\n               EFECTO INTERACTIVO ORIGINAL\n            ==================================================== *\/\n\n            vec2 scanDir =\n\n                normalize(\n                    vec2(\n                        cos(\n                            uAngle\n                        ),\n                        sin(\n                            uAngle\n                        )\n                    )\n                );\n\n\n            float surfacePlane =\n\n                dot(\n                    vUv -\n                    0.5,\n                    scanDir\n                )\n\n                +\n\n                (\n                    depth -\n                    0.5\n                )\n\n                *\n\n                uDepthBend;\n\n\n            float pointerPlane =\n\n                dot(\n                    uPointer -\n                    0.5,\n                    scanDir\n                );\n\n\n            float signedDistance =\n\n                surfacePlane -\n                pointerPlane;\n\n\n            float distanceToScan =\n\n                abs(\n                    signedDistance\n                );\n\n\n            float band =\n\n                1.0\n\n                -\n\n                smoothstep(\n                    uScanWidth * 0.10,\n                    uScanWidth,\n                    distanceToScan\n                );\n\n\n            float core =\n\n                1.0\n\n                -\n\n                smoothstep(\n                    0.0,\n                    uScanWidth * 0.075,\n                    distanceToScan\n                );\n\n\n            \/* ====================================================\n               CONTOURS ORIGINALES\n            ==================================================== *\/\n\n            float contourPhase =\n\n                fract(\n                    depth *\n                    uContourCount\n                );\n\n\n            float contourDistance =\n\n                min(\n                    contourPhase,\n                    1.0 -\n                    contourPhase\n                );\n\n\n            float contours =\n\n                1.0\n\n                -\n\n                smoothstep(\n                    0.018,\n                    0.055,\n                    contourDistance\n                );\n\n\n            contours *=\n\n                band *\n                objectMask;\n\n\n            \/* ====================================================\n               REFRACTION ORIGINAL\n            ==================================================== *\/\n\n            vec2 refractDirection =\n\n                normalize(\n                    gradient +\n                    vec2(\n                        0.00001\n                    )\n                );\n\n\n            \/*\n             * IMPORTANTE:\n             * la refracci\u00f3n desaparece completamente\n             * durante el scanner idle.\n             *\/\n            float activeBand =\n\n                band *\n                uInteractiveMix;\n\n\n            vec2 refractedUv =\n\n                vUv\n\n                +\n\n                refractDirection\n\n                *\n\n                uRefraction\n\n                *\n\n                activeBand\n\n                *\n\n                relief\n\n                *\n\n                objectMask;\n\n\n            refractedUv =\n\n                clamp(\n                    refractedUv,\n                    0.0,\n                    1.0\n                );\n\n\n            vec4 refracted =\n\n                texture2D(\n                    uColor,\n                    refractedUv\n                );\n\n\n            float safeRefraction =\n\n                smoothstep(\n                    0.48,\n                    0.88,\n                    refracted.a\n                )\n\n                *\n\n                objectMask\n\n                *\n\n                activeBand;\n\n\n            vec3 color =\n\n                mix(\n                    base.rgb,\n                    refracted.rgb,\n                    safeRefraction * 0.72\n                );\n\n\n            \/* ====================================================\n               PULSO ORIGINAL\n            ==================================================== *\/\n\n            float pulse =\n\n                0.90\n\n                +\n\n                sin(\n                    uTime * 4.1 +\n                    depth * 17.0\n                )\n\n                *\n\n                0.10;\n\n\n            \/* ====================================================\n               COLOR INTERACTIVO\n            ==================================================== *\/\n\n            vec3 scanColor =\n\n                vec3(\n                    0.74,\n                    0.86,\n                    1.0\n                );\n\n\n            float coreEnergy =\n\n                core\n\n                *\n\n                objectMask\n\n                *\n\n                uInteractiveIntensity\n\n                *\n\n                uInteractiveMix;\n\n\n            float contourEnergy =\n\n                contours\n\n                *\n\n                pulse\n\n                *\n\n                uInteractiveIntensity\n\n                *\n\n                uInteractiveMix;\n\n\n            float reliefEnergy =\n\n                relief\n\n                *\n\n                band\n\n                *\n\n                objectMask\n\n                *\n\n                uInteractiveIntensity\n\n                *\n\n                uInteractiveMix;\n\n\n            color =\n\n                mix(\n\n                    color,\n\n                    scanColor,\n\n                    clamp(\n\n                        coreEnergy * 0.32\n\n                        +\n\n                        contourEnergy * 0.30\n\n                        +\n\n                        reliefEnergy * 0.075,\n\n                        0.0,\n                        0.52\n\n                    )\n\n                );\n\n\n            color +=\n\n                scanColor\n\n                *\n\n                coreEnergy\n\n                *\n\n                0.075;\n\n\n            color *=\n\n                1.0\n\n                +\n\n                reliefEnergy *\n                0.035;\n\n\n            \/* ====================================================\n               SCANNER IDLE\n\n               Completamente independiente del depth scan.\n\n               - vertical\n               - recto\n               - sin deformaci\u00f3n\n               - sin halo\n               - sin blur\n               - sin contours\n               - sin refracci\u00f3n\n            ==================================================== *\/\n\n            float idleDistance =\n\n                abs(\n                    vUv.x -\n                    uIdleX\n                );\n\n\n            float idleLine =\n\n                1.0\n\n                -\n\n                smoothstep(\n                    uIdleWidth,\n                    uIdleWidth +\n                    uIdleSoftness,\n                    idleDistance\n                );\n\n\n            idleLine *=\n\n                objectMask\n\n                *\n\n                uIdleIntensity\n\n                *\n\n                (\n                    1.0 -\n                    uInteractiveMix\n                );\n\n\n            \/*\n             * Tono ligeramente m\u00e1s neutro que\n             * el efecto interactivo.\n             *\/\n            vec3 idleColor =\n\n                vec3(\n                    0.78,\n                    0.86,\n                    0.95\n                );\n\n\n            \/*\n             * L\u00ednea definida.\n             *\n             * No generamos ning\u00fan halo alrededor.\n             *\/\n            color =\n\n                mix(\n                    color,\n                    idleColor,\n                    idleLine * 0.58\n                );\n\n\n            \/*\n             * Ligero incremento de luminosidad\n             * \u00fanicamente en el p\u00edxel de la l\u00ednea.\n             *\/\n            color +=\n\n                idleColor\n\n                *\n\n                idleLine\n\n                *\n\n                0.035;\n\n\n            \/* ====================================================\n               SALIDA\n            ==================================================== *\/\n\n            gl_FragColor =\n\n                vec4(\n                    color,\n                    base.a\n                );\n\n        }\n\n    `;\n\n\n    \/* ============================================================\n       19. COMPILAR\n    ============================================================ *\/\n\n    function compileShader(\n        type,\n        source\n    ) {\n\n        const shader =\n            gl.createShader(\n                type\n            );\n\n\n        gl.shaderSource(\n            shader,\n            source\n        );\n\n\n        gl.compileShader(\n            shader\n        );\n\n\n        if (\n            !gl.getShaderParameter(\n                shader,\n                gl.COMPILE_STATUS\n            )\n        ) {\n\n            const error =\n                gl.getShaderInfoLog(\n                    shader\n                );\n\n\n            gl.deleteShader(\n                shader\n            );\n\n\n            throw new Error(\n                error\n            );\n\n        }\n\n\n        return shader;\n\n    }\n\n\n    let vertexShader;\n    let fragmentShader;\n\n\n    try {\n\n        vertexShader =\n            compileShader(\n                gl.VERTEX_SHADER,\n                vertexSource\n            );\n\n\n        fragmentShader =\n            compileShader(\n                gl.FRAGMENT_SHADER,\n                fragmentSource\n            );\n\n    } catch (error) {\n\n        console.error(\n            \"H\u014d Depth Scan shader:\",\n            error\n        );\n\n\n        host.remove();\n\n        return;\n    }\n\n\n    \/* ============================================================\n       20. PROGRAMA\n    ============================================================ *\/\n\n    const program =\n        gl.createProgram();\n\n\n    gl.attachShader(\n        program,\n        vertexShader\n    );\n\n\n    gl.attachShader(\n        program,\n        fragmentShader\n    );\n\n\n    gl.linkProgram(\n        program\n    );\n\n\n    if (\n        !gl.getProgramParameter(\n            program,\n            gl.LINK_STATUS\n        )\n    ) {\n\n        console.error(\n            \"H\u014d Depth Scan:\",\n            gl.getProgramInfoLog(\n                program\n            )\n        );\n\n\n        host.remove();\n\n        return;\n    }\n\n\n    gl.useProgram(\n        program\n    );\n\n\n    \/* ============================================================\n       21. QUAD\n    ============================================================ *\/\n\n    const buffer =\n        gl.createBuffer();\n\n\n    gl.bindBuffer(\n        gl.ARRAY_BUFFER,\n        buffer\n    );\n\n\n    gl.bufferData(\n\n        gl.ARRAY_BUFFER,\n\n        new Float32Array([\n            -1, -1,\n             1, -1,\n            -1,  1,\n\n            -1,  1,\n             1, -1,\n             1,  1\n        ]),\n\n        gl.STATIC_DRAW\n\n    );\n\n\n    const positionLocation =\n\n        gl.getAttribLocation(\n            program,\n            \"aPosition\"\n        );\n\n\n    gl.enableVertexAttribArray(\n        positionLocation\n    );\n\n\n    gl.vertexAttribPointer(\n        positionLocation,\n        2,\n        gl.FLOAT,\n        false,\n        0,\n        0\n    );\n\n\n    \/* ============================================================\n       22. UNIFORMS\n    ============================================================ *\/\n\n    const uniforms = {\n\n        color:\n            gl.getUniformLocation(\n                program,\n                \"uColor\"\n            ),\n\n        depth:\n            gl.getUniformLocation(\n                program,\n                \"uDepth\"\n            ),\n\n        pointer:\n            gl.getUniformLocation(\n                program,\n                \"uPointer\"\n            ),\n\n        texel:\n            gl.getUniformLocation(\n                program,\n                \"uTexel\"\n            ),\n\n        angle:\n            gl.getUniformLocation(\n                program,\n                \"uAngle\"\n            ),\n\n        time:\n            gl.getUniformLocation(\n                program,\n                \"uTime\"\n            ),\n\n        interactiveIntensity:\n            gl.getUniformLocation(\n                program,\n                \"uInteractiveIntensity\"\n            ),\n\n        interactiveMix:\n            gl.getUniformLocation(\n                program,\n                \"uInteractiveMix\"\n            ),\n\n        scanWidth:\n            gl.getUniformLocation(\n                program,\n                \"uScanWidth\"\n            ),\n\n        depthBend:\n            gl.getUniformLocation(\n                program,\n                \"uDepthBend\"\n            ),\n\n        contourCount:\n            gl.getUniformLocation(\n                program,\n                \"uContourCount\"\n            ),\n\n        refraction:\n            gl.getUniformLocation(\n                program,\n                \"uRefraction\"\n            ),\n\n        idleX:\n            gl.getUniformLocation(\n                program,\n                \"uIdleX\"\n            ),\n\n        idleWidth:\n            gl.getUniformLocation(\n                program,\n                \"uIdleWidth\"\n            ),\n\n        idleSoftness:\n            gl.getUniformLocation(\n                program,\n                \"uIdleSoftness\"\n            ),\n\n        idleIntensity:\n            gl.getUniformLocation(\n                program,\n                \"uIdleIntensity\"\n            )\n\n    };\n\n\n    \/* ============================================================\n       23. CARGA DE IM\u00c1GENES\n    ============================================================ *\/\n\n    function loadImage(\n        url\n    ) {\n\n        return new Promise(\n            function (\n                resolve,\n                reject\n            ) {\n\n                const image =\n                    new Image();\n\n\n                image.decoding =\n                    \"async\";\n\n\n                image.onload =\n                    function () {\n\n                        resolve(\n                            image\n                        );\n\n                    };\n\n\n                image.onerror =\n                    reject;\n\n\n                image.src =\n                    url;\n\n            }\n        );\n\n    }\n\n\n    function waitForShoeImage() {\n\n        return new Promise(\n            function (resolve) {\n\n                if (\n                    shoeImage.complete &&\n                    shoeImage.naturalWidth > 0 &&\n                    shoeImage.naturalHeight > 0\n                ) {\n\n                    resolve(\n                        shoeImage\n                    );\n\n                    return;\n                }\n\n\n                shoeImage.addEventListener(\n                    \"load\",\n                    function () {\n\n                        resolve(\n                            shoeImage\n                        );\n\n                    },\n                    {\n                        once: true\n                    }\n                );\n\n            }\n        );\n\n    }\n\n\n    \/* ============================================================\n       24. PREPARAR TEXTURAS\n    ============================================================ *\/\n\n    function prepareTextures(\n        colorImage,\n        depthImage\n    ) {\n\n        const sourceW =\n            colorImage.naturalWidth;\n\n\n        const sourceH =\n            colorImage.naturalHeight;\n\n\n        \/* --------------------------------------------------------\n           COLOR\n        -------------------------------------------------------- *\/\n\n        const colorCanvas =\n            document.createElement(\n                \"canvas\"\n            );\n\n\n        colorCanvas.width =\n            sourceW;\n\n\n        colorCanvas.height =\n            sourceH;\n\n\n        const colorCtx =\n            colorCanvas.getContext(\n                \"2d\"\n            );\n\n\n        colorCtx.clearRect(\n            0,\n            0,\n            sourceW,\n            sourceH\n        );\n\n\n        colorCtx.drawImage(\n            colorImage,\n            0,\n            0,\n            sourceW,\n            sourceH\n        );\n\n\n        \/* --------------------------------------------------------\n           DEPTH TEMP\n        -------------------------------------------------------- *\/\n\n        const tempDepth =\n            document.createElement(\n                \"canvas\"\n            );\n\n\n        tempDepth.width =\n            sourceW;\n\n\n        tempDepth.height =\n            sourceH;\n\n\n        const tempCtx =\n            tempDepth.getContext(\n                \"2d\"\n            );\n\n\n        tempCtx.drawImage(\n            depthImage,\n            0,\n            0,\n            sourceW,\n            sourceH\n        );\n\n\n        tempCtx.globalCompositeOperation =\n            \"destination-in\";\n\n\n        tempCtx.drawImage(\n            colorImage,\n            0,\n            0,\n            sourceW,\n            sourceH\n        );\n\n\n        \/* --------------------------------------------------------\n           DEPTH FINAL\n        -------------------------------------------------------- *\/\n\n        const depthCanvas =\n            document.createElement(\n                \"canvas\"\n            );\n\n\n        depthCanvas.width =\n            sourceW;\n\n\n        depthCanvas.height =\n            sourceH;\n\n\n        const depthCtx =\n            depthCanvas.getContext(\n                \"2d\"\n            );\n\n\n        depthCtx.fillStyle =\n            \"rgb(128,128,128)\";\n\n\n        depthCtx.fillRect(\n            0,\n            0,\n            sourceW,\n            sourceH\n        );\n\n\n        depthCtx.drawImage(\n            tempDepth,\n            0,\n            0\n        );\n\n\n        return {\n\n            colorCanvas,\n            depthCanvas,\n\n            width:\n                sourceW,\n\n            height:\n                sourceH\n\n        };\n\n    }\n\n\n    \/* ============================================================\n       25. TEXTURA WEBGL\n    ============================================================ *\/\n\n    function createTexture(\n        source,\n        unit\n    ) {\n\n        const texture =\n            gl.createTexture();\n\n\n        gl.activeTexture(\n            gl.TEXTURE0 +\n            unit\n        );\n\n\n        gl.bindTexture(\n            gl.TEXTURE_2D,\n            texture\n        );\n\n\n        gl.pixelStorei(\n            gl.UNPACK_FLIP_Y_WEBGL,\n            true\n        );\n\n\n        gl.pixelStorei(\n            gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,\n            false\n        );\n\n\n        gl.texParameteri(\n            gl.TEXTURE_2D,\n            gl.TEXTURE_WRAP_S,\n            gl.CLAMP_TO_EDGE\n        );\n\n\n        gl.texParameteri(\n            gl.TEXTURE_2D,\n            gl.TEXTURE_WRAP_T,\n            gl.CLAMP_TO_EDGE\n        );\n\n\n        gl.texParameteri(\n            gl.TEXTURE_2D,\n            gl.TEXTURE_MIN_FILTER,\n            gl.LINEAR\n        );\n\n\n        gl.texParameteri(\n            gl.TEXTURE_2D,\n            gl.TEXTURE_MAG_FILTER,\n            gl.LINEAR\n        );\n\n\n        gl.texImage2D(\n            gl.TEXTURE_2D,\n            0,\n            gl.RGBA,\n            gl.RGBA,\n            gl.UNSIGNED_BYTE,\n            source\n        );\n\n\n        return texture;\n\n    }\n\n\n    \/* ============================================================\n       26. ESTADO\n    ============================================================ *\/\n\n    let prepared =\n        null;\n\n\n    let heroRect =\n        null;\n\n\n    let imageRect =\n        null;\n\n\n    let ready =\n        false;\n\n\n    let visible =\n        true;\n\n\n    \/*\n     * true cuando estamos dentro de la zona\n     * ampliada alrededor del zapato.\n    *\/\n    let interactive =\n        false;\n\n\n    \/*\n     * Transici\u00f3n visual de modo.\n\n       La posici\u00f3n del rat\u00f3n NO utiliza este easing.\n    *\/\n    let interactiveMix =\n        0;\n\n\n    \/*\n     * Posici\u00f3n INMEDIATA del cursor.\n    *\/\n    let pointerX =\n        0.5;\n\n\n    let pointerY =\n        0.5;\n\n\n    let pointerAngle =\n        0;\n\n\n    \/* ============================================================\n       27. DPR\n    ============================================================ *\/\n\n    function getDPR() {\n\n        let maximum =\n            MAX_DPR_DESKTOP;\n\n\n        if (\n            window.innerWidth <=\n            1024\n        ) {\n\n            maximum =\n                MAX_DPR_TABLET;\n\n        }\n\n\n        if (\n            window.innerWidth <=\n            767\n        ) {\n\n            maximum =\n                MAX_DPR_MOBILE;\n\n        }\n\n\n        return Math.min(\n            window.devicePixelRatio || 1,\n            maximum\n        );\n\n    }\n\n\n    \/* ============================================================\n       28. GEOMETR\u00cdA\n\n       SOLO LECTURA DE ELEMENTOR.\n    ============================================================ *\/\n\n    function updateGeometry() {\n\n        heroRect =\n            hero.getBoundingClientRect();\n\n\n        imageRect =\n            shoeImage.getBoundingClientRect();\n\n\n        if (\n            imageRect.width <= 1 ||\n            imageRect.height <= 1\n        ) {\n\n            host.style.visibility =\n                \"hidden\";\n\n            return;\n        }\n\n\n        host.style.left =\n            imageRect.left + \"px\";\n\n\n        host.style.top =\n            imageRect.top + \"px\";\n\n\n        host.style.width =\n            imageRect.width + \"px\";\n\n\n        host.style.height =\n            imageRect.height + \"px\";\n\n\n        host.style.visibility =\n\n            visible\n\n                ?\n\n                \"visible\"\n\n                :\n\n                \"hidden\";\n\n\n        const dpr =\n            getDPR();\n\n\n        const pixelW =\n\n            Math.max(\n                1,\n                Math.round(\n                    imageRect.width *\n                    dpr\n                )\n            );\n\n\n        const pixelH =\n\n            Math.max(\n                1,\n                Math.round(\n                    imageRect.height *\n                    dpr\n                )\n            );\n\n\n        if (\n            canvas.width !==\n                pixelW\n\n            ||\n\n            canvas.height !==\n                pixelH\n        ) {\n\n            canvas.width =\n                pixelW;\n\n\n            canvas.height =\n                pixelH;\n\n        }\n\n\n        gl.viewport(\n            0,\n            0,\n            canvas.width,\n            canvas.height\n        );\n\n    }\n\n\n    \/* ============================================================\n       29. CURSOR\n\n       IMPORTANTE:\n\n       No hay easing.\n       No hay target \u2192 current.\n       No hay efecto de persecuci\u00f3n.\n\n       El shader recibe inmediatamente\n       la nueva posici\u00f3n.\n    ============================================================ *\/\n\n    function pointerMove(\n        event\n    ) {\n\n        if (\n            !heroRect ||\n            !imageRect\n        ) {\n            return;\n        }\n\n\n        \/*\n         * Seguimos limitando la interacci\u00f3n al HERO.\n\n         * As\u00ed no responde cuando el usuario ya est\u00e1\n         * navegando por otra secci\u00f3n.\n         *\/\n        const insideHero =\n\n            event.clientX >=\n                heroRect.left\n\n            &&\n\n            event.clientX <=\n                heroRect.right\n\n            &&\n\n            event.clientY >=\n                heroRect.top\n\n            &&\n\n            event.clientY <=\n                heroRect.bottom;\n\n\n        if (!insideHero) {\n\n            interactive =\n                false;\n\n            return;\n        }\n\n\n        \/* ========================================================\n           ZONA AMPLIADA\n        ======================================================== *\/\n\n        const marginX =\n\n            imageRect.width *\n            ACTIVATION_MARGIN_X;\n\n\n        const marginY =\n\n            imageRect.height *\n            ACTIVATION_MARGIN_Y;\n\n\n        const left =\n\n            imageRect.left -\n            marginX;\n\n\n        const right =\n\n            imageRect.right +\n            marginX;\n\n\n        const top =\n\n            imageRect.top -\n            marginY;\n\n\n        const bottom =\n\n            imageRect.bottom +\n            marginY;\n\n\n        interactive =\n\n            event.clientX >=\n                left\n\n            &&\n\n            event.clientX <=\n                right\n\n            &&\n\n            event.clientY >=\n                top\n\n            &&\n\n            event.clientY <=\n                bottom;\n\n\n        if (!interactive) {\n            return;\n        }\n\n\n        \/* ========================================================\n           REMAP DE LA ZONA GRANDE \u2192 ZAPATO\n\n           De esta manera el efecto ya empieza a verse\n           ANTES de que el cursor toque f\u00edsicamente\n           la imagen.\n        ======================================================== *\/\n\n        let nx =\n\n            (\n                event.clientX -\n                left\n            )\n\n            \/\n\n            (\n                right -\n                left\n            );\n\n\n        let ny =\n\n            (\n                event.clientY -\n                top\n            )\n\n            \/\n\n            (\n                bottom -\n                top\n            );\n\n\n        nx =\n\n            Math.max(\n                0,\n                Math.min(\n                    1,\n                    nx\n                )\n            );\n\n\n        ny =\n\n            Math.max(\n                0,\n                Math.min(\n                    1,\n                    ny\n                )\n            );\n\n\n        \/*\n         * El scan puede quedar ligeramente fuera\n         * para entrar y salir de forma natural.\n         *\/\n        pointerX =\n\n            -INTERACTION_OVERSCAN\n\n            +\n\n            nx *\n\n            (\n                1 +\n                INTERACTION_OVERSCAN * 2\n            );\n\n\n        pointerY =\n\n            1\n\n            -\n\n            (\n\n                INTERACTION_OVERSCAN\n\n                +\n\n                ny *\n\n                (\n                    1 -\n                    INTERACTION_OVERSCAN * 2\n                )\n\n            );\n\n\n        \/*\n         * Conservamos exactamente la l\u00f3gica angular\n         * del efecto original.\n\n         * Tambi\u00e9n SIN easing.\n        *\/\n        const heroY =\n\n            (\n                event.clientY -\n                heroRect.top\n            )\n\n            \/\n\n            heroRect.height;\n\n\n        pointerAngle =\n\n            (\n                0.5 -\n                heroY\n            )\n\n            *\n\n            0.46;\n\n    }\n\n\n    window.addEventListener(\n        \"pointermove\",\n        pointerMove,\n        {\n            passive: true\n        }\n    );\n\n\n    document.documentElement.addEventListener(\n        \"mouseleave\",\n        function () {\n\n            interactive =\n                false;\n\n        },\n        {\n            passive: true\n        }\n    );\n\n\n    \/* ============================================================\n       30. RESIZE \/ SCROLL\n    ============================================================ *\/\n\n    let geometryRAF =\n        0;\n\n\n    function scheduleGeometry() {\n\n        if (geometryRAF) {\n            return;\n        }\n\n\n        geometryRAF =\n\n            requestAnimationFrame(\n                function () {\n\n                    geometryRAF =\n                        0;\n\n\n                    updateGeometry();\n\n                }\n            );\n\n    }\n\n\n    if (\n        \"ResizeObserver\" in window\n    ) {\n\n        const resizeObserver =\n            new ResizeObserver(\n                scheduleGeometry\n            );\n\n\n        resizeObserver.observe(\n            hero\n        );\n\n\n        resizeObserver.observe(\n            shoeWidget\n        );\n\n    }\n\n\n    window.addEventListener(\n        \"resize\",\n        scheduleGeometry,\n        {\n            passive: true\n        }\n    );\n\n\n    window.addEventListener(\n        \"scroll\",\n        scheduleGeometry,\n        {\n            passive: true,\n            capture: true\n        }\n    );\n\n\n    \/* ============================================================\n       31. VISIBILIDAD\n    ============================================================ *\/\n\n    if (\n        \"IntersectionObserver\" in window\n    ) {\n\n        const observer =\n\n            new IntersectionObserver(\n\n                function (\n                    entries\n                ) {\n\n                    visible =\n\n                        entries[0]\n\n                            ?\n\n                            entries[0].isIntersecting\n\n                            :\n\n                            true;\n\n\n                    host.style.visibility =\n\n                        visible\n\n                            ?\n\n                            \"visible\"\n\n                            :\n\n                            \"hidden\";\n\n\n                    if (visible) {\n\n                        scheduleGeometry();\n\n                    }\n\n                },\n\n                {\n                    threshold: 0.01\n                }\n\n            );\n\n\n        observer.observe(\n            hero\n        );\n\n    }\n\n\n    \/* ============================================================\n       32. CONSERVAR LAYOUT ORIGINAL\n    ============================================================ *\/\n\n    const originalOpacity =\n        shoeImage.style.opacity;\n\n\n    const originalOpacityPriority =\n        shoeImage.style.getPropertyPriority(\n            \"opacity\"\n        );\n\n\n    function hideOriginalImage() {\n\n        shoeImage.style.setProperty(\n            \"opacity\",\n            \"0\",\n            \"important\"\n        );\n\n    }\n\n\n    function restoreOriginalImage() {\n\n        if (\n            originalOpacity\n        ) {\n\n            shoeImage.style.setProperty(\n                \"opacity\",\n                originalOpacity,\n                originalOpacityPriority\n            );\n\n        } else {\n\n            shoeImage.style.removeProperty(\n                \"opacity\"\n            );\n\n        }\n\n    }\n\n\n    \/* ============================================================\n       33. CONTEXT LOST\n    ============================================================ *\/\n\n    canvas.addEventListener(\n        \"webglcontextlost\",\n        function (event) {\n\n            event.preventDefault();\n\n\n            running =\n                false;\n\n\n            restoreOriginalImage();\n\n\n            host.style.visibility =\n                \"hidden\";\n\n        },\n        false\n    );\n\n\n    \/* ============================================================\n       34. RENDER\n    ============================================================ *\/\n\n    let running =\n        false;\n\n\n    let lastFrame =\n        0;\n\n\n    const startTime =\n        performance.now();\n\n\n    function render(\n        now\n    ) {\n\n        if (!running) {\n            return;\n        }\n\n\n        requestAnimationFrame(\n            render\n        );\n\n\n        if (\n            !ready ||\n            !visible ||\n            document.hidden\n        ) {\n            return;\n        }\n\n\n        \/*\n         * ~40 FPS.\n         *\/\n        if (\n            now -\n            lastFrame <\n            25\n        ) {\n            return;\n        }\n\n\n        lastFrame =\n            now;\n\n\n        const time =\n\n            (\n                now -\n                startTime\n            )\n\n            \/\n\n            1000;\n\n\n        \/* ========================================================\n           TRANSICI\u00d3N ENTRE MODOS\n\n           Aproximadamente 100 ms.\n\n           Solo hace desaparecer\/aparecer los efectos.\n\n           NO retrasa el cursor.\n        ======================================================== *\/\n\n        const desiredMix =\n\n            interactive\n                ? 1\n                : 0;\n\n\n        interactiveMix +=\n\n            (\n                desiredMix -\n                interactiveMix\n            )\n\n            *\n\n            MODE_EASE;\n\n\n        if (\n            Math.abs(\n                interactiveMix -\n                desiredMix\n            ) <\n            0.002\n        ) {\n\n            interactiveMix =\n                desiredMix;\n\n        }\n\n\n        \/* ========================================================\n           IDLE SCANNER\n\n           3.6 s recorriendo el objeto\n           + 0.8 s de pausa.\n        ======================================================== *\/\n\n        const completeCycle =\n\n            IDLE_SCAN_DURATION +\n            IDLE_SCAN_PAUSE;\n\n\n        const cycleTime =\n\n            time %\n            completeCycle;\n\n\n        let idleX;\n\n\n        if (\n            cycleTime <\n            IDLE_SCAN_DURATION\n        ) {\n\n            const progress =\n\n                cycleTime \/\n                IDLE_SCAN_DURATION;\n\n\n            \/*\n             * Movimiento LINEAL.\n\n             * Queremos sensaci\u00f3n de lectura\/escaneo,\n             * no una animaci\u00f3n decorativa con easing.\n            *\/\n            idleX =\n\n                -0.045\n\n                +\n\n                progress *\n                1.09;\n\n        } else {\n\n            \/*\n             * Durante la pausa:\n             * completamente fuera.\n             *\/\n            idleX =\n                2.0;\n\n        }\n\n\n        \/* ========================================================\n           CLEAR\n        ======================================================== *\/\n\n        gl.viewport(\n            0,\n            0,\n            canvas.width,\n            canvas.height\n        );\n\n\n        gl.clearColor(\n            0,\n            0,\n            0,\n            0\n        );\n\n\n        gl.clear(\n            gl.COLOR_BUFFER_BIT\n        );\n\n\n        \/* ========================================================\n           INTERACTIVO\n\n           DIRECTO.\n\n           No hay:\n           currentX\n           currentY\n           currentAngle\n           POINTER_EASE\n        ======================================================== *\/\n\n        gl.uniform2f(\n            uniforms.pointer,\n            pointerX,\n            pointerY\n        );\n\n\n        gl.uniform1f(\n            uniforms.angle,\n            pointerAngle\n        );\n\n\n        gl.uniform1f(\n            uniforms.time,\n            time\n        );\n\n\n        gl.uniform1f(\n            uniforms.interactiveMix,\n            interactiveMix\n        );\n\n\n        \/* ========================================================\n           IDLE\n        ======================================================== *\/\n\n        gl.uniform1f(\n            uniforms.idleX,\n            idleX\n        );\n\n\n        \/* ========================================================\n           BLEND\n        ======================================================== *\/\n\n        gl.enable(\n            gl.BLEND\n        );\n\n\n        gl.blendFunc(\n            gl.SRC_ALPHA,\n            gl.ONE_MINUS_SRC_ALPHA\n        );\n\n\n        \/* ========================================================\n           DRAW\n        ======================================================== *\/\n\n        gl.drawArrays(\n            gl.TRIANGLES,\n            0,\n            6\n        );\n\n    }\n\n\n    function startRender() {\n\n        if (running) {\n            return;\n        }\n\n\n        running =\n            true;\n\n\n        requestAnimationFrame(\n            render\n        );\n\n    }\n\n\n    \/* ============================================================\n       35. INICIALIZACI\u00d3N\n    ============================================================ *\/\n\n    Promise.all([\n\n        waitForShoeImage(),\n\n        loadImage(\n            DEPTH_URL\n        )\n\n    ])\n\n    .then(\n        function (\n            images\n        ) {\n\n            const colorImage =\n                images[0];\n\n\n            const depthImage =\n                images[1];\n\n\n            prepared =\n\n                prepareTextures(\n                    colorImage,\n                    depthImage\n                );\n\n\n            try {\n\n                createTexture(\n                    prepared.colorCanvas,\n                    0\n                );\n\n\n                createTexture(\n                    prepared.depthCanvas,\n                    1\n                );\n\n            } catch (error) {\n\n                console.error(\n                    \"H\u014d Depth Scan: error creando texturas.\",\n                    error\n                );\n\n\n                host.remove();\n\n\n                restoreOriginalImage();\n\n\n                return;\n\n            }\n\n\n            gl.uniform1i(\n                uniforms.color,\n                0\n            );\n\n\n            gl.uniform1i(\n                uniforms.depth,\n                1\n            );\n\n\n            gl.uniform2f(\n\n                uniforms.texel,\n\n                1 \/\n                prepared.width,\n\n                1 \/\n                prepared.height\n\n            );\n\n\n            \/* ----------------------------------------------------\n               EFECTO INTERACTIVO ORIGINAL\n            ---------------------------------------------------- *\/\n\n            gl.uniform1f(\n                uniforms.scanWidth,\n                SCAN_WIDTH\n            );\n\n\n            gl.uniform1f(\n                uniforms.depthBend,\n                DEPTH_BEND\n            );\n\n\n            gl.uniform1f(\n                uniforms.contourCount,\n                CONTOUR_COUNT\n            );\n\n\n            gl.uniform1f(\n                uniforms.refraction,\n                REFRACTION\n            );\n\n\n            gl.uniform1f(\n                uniforms.interactiveIntensity,\n                INTERACTIVE_INTENSITY\n            );\n\n\n            \/* ----------------------------------------------------\n               SCANNER IDLE\n            ---------------------------------------------------- *\/\n\n            gl.uniform1f(\n                uniforms.idleWidth,\n                IDLE_LINE_WIDTH\n            );\n\n\n            gl.uniform1f(\n                uniforms.idleSoftness,\n                IDLE_LINE_SOFTNESS\n            );\n\n\n            gl.uniform1f(\n                uniforms.idleIntensity,\n                IDLE_LINE_INTENSITY\n            );\n\n\n            gl.uniform1f(\n                uniforms.interactiveMix,\n                0\n            );\n\n\n            ready =\n                true;\n\n\n            updateGeometry();\n\n\n            startRender();\n\n\n            \/*\n             * WebGL pinta primero.\n             * Despu\u00e9s ocultamos \u00fanicamente\n             * la imagen visual original.\n\n             * El layout permanece id\u00e9ntico.\n            *\/\n            requestAnimationFrame(\n                function () {\n\n                    requestAnimationFrame(\n                        function () {\n\n                            if (\n                                ready &&\n                                canvas.width > 1 &&\n                                canvas.height > 1\n                            ) {\n\n                                hideOriginalImage();\n\n                            }\n\n                        }\n                    );\n\n                }\n            );\n\n        }\n    )\n\n    .catch(\n        function (\n            error\n        ) {\n\n            console.error(\n                \"H\u014d Depth Scan: error cargando depth map.\",\n                error\n            );\n\n\n            host.remove();\n\n\n            restoreOriginalImage();\n\n        }\n    );\n\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1c49cfd e-con-full e-flex e-con e-child\" data-id=\"1c49cfd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-381d8a7 e-con-full elementor-hidden-tablet e-flex e-con e-child\" data-id=\"381d8a7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a86ea3e elementor-widget elementor-widget-image\" data-id=\"a86ea3e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"569\" src=\"https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/HO.svg\" class=\"attachment-large size-large wp-image-144\" alt=\"HO Barcelona logo\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8977235 elementor-widget__width-inherit e-transform elementor-hidden-mobile elementor-widget elementor-widget-heading\" data-id=\"8977235\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_transform_rotateZ_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:-90,&quot;sizes&quot;:[]},&quot;_transform_rotateZ_effect_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateZ_effect_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Ergonomic design <br>\nBarefoot sneakers concept<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0afa0c9 elementor-widget elementor-widget-text-editor\" data-id=\"0afa0c9\" 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>HO is born where design, comfort and evolution meet.\u2028 We create sneakers and mules with a distinct identity, made to adapt to each person and to keep evolving with us.\u2028 We don\u2019t follow trends. We design in motion.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27a1183 elementor-hidden-tablet elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"27a1183\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:1.7}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">3D printed <br> footwear<\/h1>\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-b29cb4b e-con-full e-flex e-con e-parent\" data-id=\"b29cb4b\" data-element_type=\"container\" data-e-type=\"container\" id=\"about\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9d0c8ac elementor-widget elementor-widget-html\" data-id=\"9d0c8ac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n  .marquee-wrapper {\n    width: 100vw;\n    position: relative;\n    left: 50%;\n    right: 50%;\n    margin-left: -50vw;\n    margin-right: -50vw;\n    overflow: hidden;\n    background-color: #fff; \/* Fondo negro tech *\/\n    color: #000; \/* Texto blanco suave *\/\n    padding: 16px 0;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n    text-transform: uppercase;\n    font-weight: 400;\n    font-size: 0.95rem;\n    letter-spacing: 0.15em;\n    border-top: 0.1px solid #222;\n    border-bottom: 0.1px solid #222;\n    white-space: nowrap;\n    display: flex;\n  }\n\n  .marquee-track {\n    display: flex;\n    gap: 2.5rem;\n    animation: scroll-marquee 25s linear infinite;\n    will-change: transform;\n  }\n\n  .marquee-item {\n    display: flex;\n    align-items: center;\n    gap: 2.5rem;\n    flex-shrink: 0;\n  }\n\n  .marquee-item span {\n    display: inline-flex;\n    align-items: center;\n  }\n\n  \/* Separador elegante estilo dot *\/\n  .marquee-item span::after {\n    content: \"\u2022\";\n    margin-left: 2.5rem;\n    opacity: 0.8;\n    color: #FF5118; \/* Detalle verde ne\u00f3n \/ bio-tech *\/\n  }\n\n  @keyframes scroll-marquee {\n    0% {\n      transform: translateX(0);\n    }\n    100% {\n      transform: translateX(-50%);\n    }\n  }\n\n  \/* Detener animaci\u00f3n al pasar el cursor (Opcional) *\/\n  .marquee-wrapper:hover .marquee-track {\n    animation-play-state: paused;\n  }\n<\/style>\n\n<div class=\"marquee-wrapper\">\n  <div class=\"marquee-track\">\n    <!-- Bloque 1 -->\n    <div class=\"marquee-item\">\n      <span>BAREFOOT<\/span>\n      <span>PARAMETRIC<\/span>\n      <span>3D-PRINTED<\/span>\n      <span>ZERO-DROP<\/span>\n      <span>MADE IN BARCELONA<\/span>\n      <span>WIDE TOE BOX<\/span>\n      <span>FREEDOM<\/span>\n      <span>MADE-TO-ORDER<\/span>\n    <\/div>\n    <!-- Bloque 2 (Duplicado para lograr un loop infinito continuo) -->\n    <div class=\"marquee-item\" aria-hidden=\"true\">\n      <span>BAREFOOT<\/span>\n      <span>PARAMETRIC<\/span>\n      <span>3D-PRINTED<\/span>\n      <span>ZERO-DROP<\/span>\n      <span>MADE IN BARCELONA<\/span>\n      <span>WIDE TOE BOX<\/span>\n      <span>FREEDOM<\/span>\n      <span>MADE-TO-ORDER<\/span>\n    <\/div>\n  <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-54ef8f0 e-flex e-con-boxed e-con e-parent\" data-id=\"54ef8f0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-98e1030 e-con-full e-flex e-con e-child\" data-id=\"98e1030\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-244815f elementor-widget__width-initial elementor-widget-tablet__width-auto elementor-widget elementor-widget-text-editor\" data-id=\"244815f\" 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>01 \u2013 CONCEPT<\/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-b5e7419 e-con-full e-flex e-con e-child\" data-id=\"b5e7419\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e417df6 elementor-widget elementor-widget-heading\" data-id=\"e417df6\" 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\">THE HUMAN FOOT IS DESIGNED <strong>TO MOVE FREELY.<\/strong><br>\nOUR GOAL IS TO REMOVE WHAT LIMITS IT.<\/h2>\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-b124aa3 e-flex e-con-boxed e-con e-parent\" data-id=\"b124aa3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-c665940 e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"c665940\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-26025b8 e-con-full e-flex e-con e-child\" data-id=\"26025b8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-933b142 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"933b142\" 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>HO is a Barcelona studio building a new generation of <strong>ergonomic barefoot footwear<\/strong> through parametric design and additive manufacturing. Each pair is engineered around anatomy, not around fashion.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c665dd2 elementor-widget-tablet__width-initial elementor-hidden-desktop elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"c665dd2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8d68c1c e-con-full e-flex e-con e-child\" data-id=\"8d68c1c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-620817d elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"620817d\" 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>MANIFESTO<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1a0c835 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"1a0c835\" 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>Less noise. More life. A quiet architecture for the foot \u2014 precise, honest, and made only when needed.<\/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<div class=\"elementor-element elementor-element-2a1394a e-flex e-con-boxed e-con e-parent\" data-id=\"2a1394a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-168b5d1 e-con-full e-flex e-con e-child\" data-id=\"168b5d1\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;slideshow&quot;,&quot;background_slideshow_gallery&quot;:[{&quot;id&quot;:678,&quot;url&quot;:&quot;https:\\\/\\\/hoo.barcelona\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/gridho03-1.jpg&quot;},{&quot;id&quot;:676,&quot;url&quot;:&quot;https:\\\/\\\/hoo.barcelona\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/gridho02.jpg&quot;},{&quot;id&quot;:675,&quot;url&quot;:&quot;https:\\\/\\\/hoo.barcelona\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/gridho01.jpg&quot;}],&quot;background_slideshow_slide_duration&quot;:4000,&quot;background_slideshow_transition_duration&quot;:700,&quot;background_slideshow_loop&quot;:&quot;yes&quot;,&quot;background_slideshow_slide_transition&quot;:&quot;fade&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-005b59a e-con-full e-flex e-con e-child\" data-id=\"005b59a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;slideshow&quot;,&quot;background_slideshow_gallery&quot;:[{&quot;id&quot;:682,&quot;url&quot;:&quot;https:\\\/\\\/hoo.barcelona\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/001.jpg&quot;},{&quot;id&quot;:683,&quot;url&quot;:&quot;https:\\\/\\\/hoo.barcelona\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/002.jpg&quot;},{&quot;id&quot;:684,&quot;url&quot;:&quot;https:\\\/\\\/hoo.barcelona\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/008.jpg&quot;}],&quot;background_slideshow_slide_duration&quot;:3000,&quot;background_slideshow_ken_burns&quot;:&quot;yes&quot;,&quot;background_slideshow_loop&quot;:&quot;yes&quot;,&quot;background_slideshow_slide_transition&quot;:&quot;fade&quot;,&quot;background_slideshow_transition_duration&quot;:500,&quot;background_slideshow_ken_burns_zoom_direction&quot;:&quot;in&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ee1cb64 e-con-full e-flex e-con e-child\" data-id=\"ee1cb64\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-106a718 e-con-full e-flex e-con e-child\" data-id=\"106a718\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;slideshow&quot;,&quot;background_slideshow_gallery&quot;:[{&quot;id&quot;:699,&quot;url&quot;:&quot;https:\\\/\\\/hoo.barcelona\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/011.jpg&quot;},{&quot;id&quot;:695,&quot;url&quot;:&quot;https:\\\/\\\/hoo.barcelona\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/9.jpg&quot;},{&quot;id&quot;:689,&quot;url&quot;:&quot;https:\\\/\\\/hoo.barcelona\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/012.jpg&quot;}],&quot;background_slideshow_lazyload&quot;:&quot;yes&quot;,&quot;background_slideshow_loop&quot;:&quot;yes&quot;,&quot;background_slideshow_slide_duration&quot;:5000,&quot;background_slideshow_slide_transition&quot;:&quot;fade&quot;,&quot;background_slideshow_transition_duration&quot;:500}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-350512c e-con-full e-flex e-con e-child\" data-id=\"350512c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\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-c654974 backgrid e-flex e-con-boxed e-con e-parent\" data-id=\"c654974\" data-element_type=\"container\" data-e-type=\"container\" id=\"product\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-2d65f9c e-con-full e-flex e-con e-child\" data-id=\"2d65f9c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-c578bcd e-con-full e-flex e-con e-child\" data-id=\"c578bcd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a0debaa elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"a0debaa\" 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>02 \u2013 PRODUCT<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-69be2a9 elementor-hidden-mobile elementor-widget elementor-widget-image\" data-id=\"69be2a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"354\" src=\"https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/lannstxc.png\" class=\"attachment-large size-large wp-image-638\" alt=\"HO Barcelona barefoot shoe design sketch and footwear development process\" srcset=\"https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/lannstxc.png 500w, https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/lannstxc-300x212.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-98e4ed5 e-con-full e-flex e-con e-child\" data-id=\"98e4ed5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-75c99c9 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"75c99c9\" 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\">From code to motion<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b5c7047 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"b5c7047\" 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>3D printing is not the finish \u2014 it is the language. Every curve, every lattice cell is designed digitally and printed as a single, continuous body.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e9daf6d elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"e9daf6d\" 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>No unnecessary layers.\u2028<\/p><p>No separation between form and structure.<\/p><p>Made for every foot.<\/p><p class=\"p1\"><b>Your width.<\/b> <span class=\"s1\"><b>Your proportions.<\/b> <\/span><span class=\"s1\"><b>Your feet.<\/b><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09925de elementor-hidden-desktop elementor-hidden-tablet elementor-widget elementor-widget-image\" data-id=\"09925de\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"354\" src=\"https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/lannstxc.png\" class=\"attachment-large size-large wp-image-638\" alt=\"HO Barcelona barefoot shoe design sketch and footwear development process\" srcset=\"https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/lannstxc.png 500w, https:\/\/hoo.barcelona\/wp-content\/uploads\/2026\/09\/lannstxc-300x212.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/>\t\t\t\t\t\t\t\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-d0b2cd9 e-con-full e-flex e-con e-child\" data-id=\"d0b2cd9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b754ee8 elementor-widget elementor-widget-html\" data-id=\"b754ee8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ============================================================\n   H\u014c \u2014 BACKGRID \/ GRID ONLY\n   ------------------------------------------------------------\n   ELEMENTOR:\n\n   Contenedor exterior:\n   backgrid\n\n   Widget HTML:\n   ninguna clase\n\n   EFECTO:\n   - cuadr\u00edcula t\u00e9cnica muy fina\n   - ocupa TODO el contenedor .backgrid\n   - se desplaza lentamente hacia la derecha al hacer scroll\n   - no bloquea clics\n   - sin SVG\n   - sin canvas\n   - sin WebGL\n============================================================ *\/\n\n\n\/* ============================================================\n   CONTENEDOR\n============================================================ *\/\n\n.backgrid {\n    position: relative;\n\n    \/*\n     * Posici\u00f3n horizontal del grid.\n     * JS modifica \u00fanicamente esta variable.\n     *\/\n    --backgrid-x: 0px;\n\n\n    \/*\n     * Tama\u00f1o de cada cuadr\u00edcula.\n     *\/\n    --backgrid-size: 70px;\n\n\n    \/*\n     * L\u00ednea muy fina y tenue.\n     *\/\n    --backgrid-line:\n        rgba(23, 27, 31, 0.035);\n\n\n    \/* ========================================================\n       GRID\n\n       Se pinta directamente como background de .backgrid.\n\n       Por tanto ocupa siempre el 100% real del contenedor,\n       independientemente de cu\u00e1nto crezca por su contenido.\n    ======================================================== *\/\n\n    background-image:\n\n        linear-gradient(\n            to right,\n            var(--backgrid-line) 1px,\n            transparent 1px\n        ),\n\n        linear-gradient(\n            to bottom,\n            var(--backgrid-line) 1px,\n            transparent 1px\n        );\n\n\n    background-size:\n\n        var(--backgrid-size)\n        var(--backgrid-size),\n\n        var(--backgrid-size)\n        var(--backgrid-size);\n\n\n    background-position:\n\n        var(--backgrid-x) 0,\n\n        var(--backgrid-x) 0;\n\n\n    background-repeat:\n        repeat,\n        repeat;\n}\n\n\n\/* ============================================================\n   TABLET\n============================================================ *\/\n\n@media (max-width: 1024px) {\n\n    .backgrid {\n        --backgrid-size:\n            70px;\n    }\n\n}\n\n\n\/* ============================================================\n   MOBILE\n============================================================ *\/\n\n@media (max-width: 767px) {\n\n    .backgrid {\n        --backgrid-size:\n            60px;\n    }\n\n}\n\n\n\/* ============================================================\n   ELEMENTOR EDITOR\n\n   En editor quitamos el grid para que quede completamente limpio.\n============================================================ *\/\n\n.elementor-editor-active .backgrid {\n    background-image:\n        none !important;\n}\n\n\n\/* ============================================================\n   REDUCED MOTION\n\n   El grid permanece visible,\n   pero JS no lo mover\u00e1.\n============================================================ *\/\n<\/style>\n\n\n<script>\n(function () {\n    \"use strict\";\n\n\n    \/* ============================================================\n       H\u014c \u2014 BACKGRID SCROLL CONTROLLER\n\n       Muy ligero:\n\n       - 1 listener de scroll\n       - requestAnimationFrame\n       - cambia una \u00fanica CSS variable\n       - solo actualiza secciones visibles\n    ============================================================ *\/\n\n\n    \/* ============================================================\n       AJUSTE DE VELOCIDAD\n\n       0.068 significa:\n\n       1000 px de scroll\n       =\n       68 px de desplazamiento lateral.\n\n       Al bajar:\n       grid hacia la derecha.\n    ============================================================ *\/\n\n    const GRID_SCROLL_SPEED =\n        0.068;\n\n\n    \/* ============================================================\n       ELEMENTOR EDITOR\n    ============================================================ *\/\n\n    function isElementorEditor() {\n\n        try {\n\n            if (\n                document.body &&\n                document.body.classList.contains(\n                    \"elementor-editor-active\"\n                )\n            ) {\n                return true;\n            }\n\n\n            if (\n                window.elementorFrontend &&\n                typeof window.elementorFrontend.isEditMode === \"function\" &&\n                window.elementorFrontend.isEditMode()\n            ) {\n                return true;\n            }\n\n\n            if (\n                window.parent !== window &&\n                window.parent.document &&\n                window.parent.document.body &&\n                window.parent.document.body.classList.contains(\n                    \"elementor-editor-active\"\n                )\n            ) {\n                return true;\n            }\n\n        } catch (error) {}\n\n\n        return false;\n    }\n\n\n    if (isElementorEditor()) {\n        return;\n    }\n\n\n    \/* ============================================================\n       REDUCED MOTION\n    ============================================================ *\/\n\n    const reducedMotion =\n\n        window.matchMedia &&\n        window.matchMedia(\n            \"(prefers-reduced-motion: reduce)\"\n        ).matches;\n\n\n    \/* ============================================================\n       SECCIONES\n    ============================================================ *\/\n\n    const sections =\n        Array.from(\n            document.querySelectorAll(\n                \".backgrid\"\n            )\n        );\n\n\n    if (!sections.length) {\n        return;\n    }\n\n\n    \/*\n     * Si el usuario prefiere movimiento reducido,\n     * dejamos el grid est\u00e1tico.\n     *\/\n    if (reducedMotion) {\n        return;\n    }\n\n\n    \/* ============================================================\n       SECCIONES VISIBLES\n    ============================================================ *\/\n\n    let visibleSections =\n        new Set(\n            sections\n        );\n\n\n    if (\n        \"IntersectionObserver\" in window\n    ) {\n\n        visibleSections =\n            new Set();\n\n\n        const observer =\n\n            new IntersectionObserver(\n\n                function (\n                    entries\n                ) {\n\n                    entries.forEach(\n                        function (entry) {\n\n                            if (\n                                entry.isIntersecting\n                            ) {\n\n                                visibleSections.add(\n                                    entry.target\n                                );\n\n                            } else {\n\n                                visibleSections.delete(\n                                    entry.target\n                                );\n\n                            }\n\n                        }\n                    );\n\n\n                    scheduleUpdate();\n\n                },\n\n                {\n                    rootMargin:\n                        \"200px 0px 200px 0px\",\n\n                    threshold:\n                        0\n                }\n\n            );\n\n\n        sections.forEach(\n            function (section) {\n\n                observer.observe(\n                    section\n                );\n\n            }\n        );\n\n    }\n\n\n    \/* ============================================================\n       SCROLL\n    ============================================================ *\/\n\n    let animationFrame =\n        0;\n\n\n    function updateGrid() {\n\n        animationFrame =\n            0;\n\n\n        \/*\n         * Scroll hacia abajo\n         * =\n         * grid hacia la derecha.\n         *\/\n        const x =\n\n            window.scrollY *\n            GRID_SCROLL_SPEED;\n\n\n        visibleSections.forEach(\n            function (section) {\n\n                section.style.setProperty(\n                    \"--backgrid-x\",\n                    x.toFixed(2) + \"px\"\n                );\n\n            }\n        );\n\n    }\n\n\n    function scheduleUpdate() {\n\n        if (animationFrame) {\n            return;\n        }\n\n\n        animationFrame =\n\n            requestAnimationFrame(\n                updateGrid\n            );\n\n    }\n\n\n    \/* ============================================================\n       EVENTS\n    ============================================================ *\/\n\n    window.addEventListener(\n        \"scroll\",\n        scheduleUpdate,\n        {\n            passive: true\n        }\n    );\n\n\n    window.addEventListener(\n        \"resize\",\n        scheduleUpdate,\n        {\n            passive: true\n        }\n    );\n\n\n    \/* ============================================================\n       INICIO\n    ============================================================ *\/\n\n    scheduleUpdate();\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-96ab0b0 e-con-full e-flex e-con e-child\" data-id=\"96ab0b0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-16ff03c e-con-full e-flex e-con e-child\" data-id=\"16ff03c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d6e81d3 elementor-widget-divider--view-line_icon elementor-widget-divider--element-align-left elementor-view-default elementor-widget elementor-widget-divider\" data-id=\"d6e81d3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z\"><\/path><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ae62ac6 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"ae62ac6\" 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>STEP A<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-748f268 elementor-widget elementor-widget-heading\" data-id=\"748f268\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Foot data<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43154e4 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"43154e4\" 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>Scan and study anatomical volume, arch profile and pressure map.<\/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-f94a849 e-con-full e-flex e-con e-child\" data-id=\"f94a849\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bf816a9 elementor-widget-divider--view-line_icon elementor-widget-divider--element-align-left elementor-view-default elementor-widget elementor-widget-divider\" data-id=\"bf816a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z\"><\/path><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc1c40f elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"fc1c40f\" 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>STEP B<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f76887e elementor-widget elementor-widget-heading\" data-id=\"f76887e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">PARAMETRIC GEOMETRY<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d23019 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"7d23019\" 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>A generative lattice built from the foot&#8217;s own topology.<\/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-8514fbf e-con-full e-flex e-con e-child\" data-id=\"8514fbf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f10cb40 elementor-widget-divider--view-line_icon elementor-widget-divider--element-align-left elementor-view-default elementor-widget elementor-widget-divider\" data-id=\"f10cb40\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z\"><\/path><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b5d742 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"6b5d742\" 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>STEP C<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e48664 elementor-widget elementor-widget-heading\" data-id=\"5e48664\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">ADDITIVE PRINT<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e2641a4 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"e2641a4\" 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>One continuous polymer structure. No glue, no filler, no waste.<\/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-65e96df e-con-full e-flex e-con e-child\" data-id=\"65e96df\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b664835 elementor-widget-divider--view-line_icon elementor-widget-divider--element-align-left elementor-view-default elementor-widget elementor-widget-divider\" data-id=\"b664835\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z\"><\/path><\/svg><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e781ec elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"5e781ec\" 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>STEP D<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5638ef4 elementor-widget elementor-widget-heading\" data-id=\"5638ef4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">WEAR-TESTED<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5d6658c elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"5d6658c\" 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>Each unit inspected, flexed, weighed, signed and shipped.<\/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-bccad9f e-con-full e-flex e-con e-child\" data-id=\"bccad9f\" 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-307aa63 e-con-full e-flex e-con e-child\" data-id=\"307aa63\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3635974 elementor-widget__width-initial elementor-widget-mobile__width-auto elementor-widget elementor-widget-text-editor\" data-id=\"3635974\" 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>Weight<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c845308 elementor-widget elementor-widget-heading\" data-id=\"c845308\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u2248 190 G<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f2bec95 e-con-full e-flex e-con e-child\" data-id=\"f2bec95\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d2f58f2 elementor-widget__width-initial elementor-widget-mobile__width-auto elementor-widget elementor-widget-text-editor\" data-id=\"d2f58f2\" 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>DROP<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6ec233 elementor-widget elementor-widget-heading\" data-id=\"c6ec233\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">0 MM<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-388dddd e-con-full e-flex e-con e-child\" data-id=\"388dddd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-59481da elementor-widget__width-initial elementor-widget-mobile__width-auto elementor-widget elementor-widget-text-editor\" data-id=\"59481da\" 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>MATERIAL<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0d3b08e elementor-widget elementor-widget-heading\" data-id=\"0d3b08e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">TPU<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-573cf39 e-con-full e-flex e-con e-child\" data-id=\"573cf39\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f04967b elementor-widget__width-initial elementor-widget-mobile__width-auto elementor-widget elementor-widget-text-editor\" data-id=\"f04967b\" 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>PRODUCTION<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e9ae676 elementor-widget elementor-widget-heading\" data-id=\"e9ae676\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">MADE TO ORDER<\/h3>\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\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-408e0a8 e-con-full e-flex e-con e-parent\" data-id=\"408e0a8\" 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-a0d303b e-flex e-con-boxed e-con e-child\" data-id=\"a0d303b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-8309c67 e-con-full e-flex e-con e-child\" data-id=\"8309c67\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-06409f2 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"06409f2\" 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>03 \u2013 CONSCIOUS<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b3c9964 elementor-widget-mobile__width-initial elementor-widget elementor-widget-heading\" data-id=\"b3c9964\" 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\">LESS NOISE <strong>MORE LIFE.<\/strong><br>\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-468cf39 e-con-full e-flex e-con e-child\" data-id=\"468cf39\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-9d1130a e-con-full e-flex e-con e-child\" data-id=\"9d1130a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-41c6e9c elementor-widget elementor-widget-heading\" data-id=\"41c6e9c\" 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\">MADE TO ORDER<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-22489fe elementor-widget elementor-widget-text-editor\" data-id=\"22489fe\" 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>No stock. No waste. Each pair produced only when it has a home.<\/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-96b6940 e-con-full e-flex e-con e-child\" data-id=\"96b6940\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-27b3f0c elementor-widget elementor-widget-heading\" data-id=\"27b3f0c\" 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\">MATERIAL EFFICIENCY<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96308ca elementor-widget elementor-widget-text-editor\" data-id=\"96308ca\" 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>Additive printing places polymer only where it is needed \u2014 nothing else.<\/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-13452cb e-con-full e-flex e-con e-child\" data-id=\"13452cb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-bb640f7 e-con-full e-flex e-con e-child\" data-id=\"bb640f7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3faf30d elementor-widget elementor-widget-heading\" data-id=\"3faf30d\" 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\">LOCAL PRODUCTION<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b1cfb5 elementor-widget elementor-widget-text-editor\" data-id=\"4b1cfb5\" 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>Designed and printed in Barcelona. Shorter supply, longer thinking.<\/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-869e2f2 e-con-full e-flex e-con e-child\" data-id=\"869e2f2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8396402 elementor-widget elementor-widget-heading\" data-id=\"8396402\" 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\">SINGLE BODY<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-61f166f elementor-widget elementor-widget-text-editor\" data-id=\"61f166f\" 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>One continuous structure. Nothing to unglue at end of life.<\/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\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f9c6d90 e-con-full e-flex e-con e-parent\" data-id=\"f9c6d90\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0fb3079 elementor-view-framed elementor-widget-tablet__width-initial elementor-shape-circle elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"0fb3079\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-feather-alt\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tUltra light <br>and flexible\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ff6db8 elementor-view-framed elementor-widget-tablet__width-initial elementor-shape-circle elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"2ff6db8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-cube\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\t3d printed <br>design\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2cf8e14 elementor-view-framed elementor-widget-tablet__width-initial elementor-shape-circle elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"2cf8e14\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-cloudsmith\" viewBox=\"0 0 332 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tBarefoot <br>architecture\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b622e2e elementor-view-framed elementor-widget-tablet__width-initial elementor-shape-circle elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"b622e2e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-hand-holding-heart\" viewBox=\"0 0 576 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tsustainable <br>&amp; conscious\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e67904c elementor-view-framed elementor-widget-tablet__width-initial elementor-shape-circle elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"e67904c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-expand-arrows-alt\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tAbsolute <br>comfort\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5e2f3ca e-flex e-con-boxed e-con e-parent\" data-id=\"5e2f3ca\" data-element_type=\"container\" data-e-type=\"container\" id=\"contact\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-7baa4c8 e-con-full e-flex e-con e-child\" data-id=\"7baa4c8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d0a12f0 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"d0a12f0\" 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>04 \u2013 CONTACT<\/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-117f4fd e-con-full e-flex e-con e-child\" data-id=\"117f4fd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ba19cf0 elementor-widget elementor-widget-heading\" data-id=\"ba19cf0\" 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\">Take the next step<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8df428a elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"8df428a\" 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>Join the waiting list and receive the latest news \u2014 plus quiet notes from the studio, when there is something worth saying.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b144e9 elementor-widget elementor-widget-button\" data-id=\"2b144e9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm elementor-animation-grow\" href=\"mailto:info@hoo.barcelona?subject=I%20want%20to%20know%20more%20about%20Ho\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Want to know more?<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>3D printed footwear Ergonomic design Barefoot sneakers concept HO is born where design, comfort and evolution meet.\u2028 We create sneakers and mules with a distinct identity, made to adapt to each person and to keep evolving with us.\u2028 We don\u2019t follow trends. We design in motion. 3D printed footwear BAREFOOT PARAMETRIC 3D-PRINTED ZERO-DROP MADE IN [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":17,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-127","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/hoo.barcelona\/es\/wp-json\/wp\/v2\/pages\/127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hoo.barcelona\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hoo.barcelona\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hoo.barcelona\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hoo.barcelona\/es\/wp-json\/wp\/v2\/comments?post=127"}],"version-history":[{"count":483,"href":"https:\/\/hoo.barcelona\/es\/wp-json\/wp\/v2\/pages\/127\/revisions"}],"predecessor-version":[{"id":805,"href":"https:\/\/hoo.barcelona\/es\/wp-json\/wp\/v2\/pages\/127\/revisions\/805"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hoo.barcelona\/es\/wp-json\/wp\/v2\/media\/17"}],"wp:attachment":[{"href":"https:\/\/hoo.barcelona\/es\/wp-json\/wp\/v2\/media?parent=127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}