{"id":6866,"date":"2025-06-07T11:24:38","date_gmt":"2025-06-07T10:24:38","guid":{"rendered":"https:\/\/x-cube.nl\/locatie-eindhoven\/"},"modified":"2026-02-24T13:25:09","modified_gmt":"2026-02-24T12:25:09","slug":"locatie-eindhoven","status":"publish","type":"page","link":"https:\/\/x-cube.nl\/nl\/locatie-eindhoven\/","title":{"rendered":"Locatie: Eindhoven"},"content":{"rendered":"<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:54px;--awb-padding-bottom:57px;--awb-margin-top:0px;--awb-background-color:var(--awb-color2);--awb-background-image:linear-gradient(180deg, var(--awb-color2) 0%,var(--awb-color4) 100%);--awb-flex-wrap:wrap;\" ><div class=\"awb-background-pattern\" style=\"background-image:  url(data:image\/svg+xml;utf8,%3Csvg%20width%3D%2280%22%20height%3D%22120%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23prefix__clip0_43_320%29%22%20fill%3D%22rgba%28255%2C255%2C255%2C0.02%29%22%3E%3Cpath%20d%3D%22M40%200L0%2030v30l40-30V0zm0%2030v30l40%2030V60L40%2030zM40-30V0l40%2030V0L40-30zm0%2090L0%2090v30l40-30V60zm0%2030v30l40%2030v-30L40%2090z%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22prefix__clip0_43_320%22%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M0%200h80v120H0z%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E);opacity: 1 ;mix-blend-mode:normal;\"><\/div><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_2_3 2_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color7);--awb-margin-top-small:10px;--awb-margin-right-small:0px;--awb-margin-bottom-small:10px;--awb-margin-left-small:0px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:48;line-height:var(--awb-typography1-line-height);\">Hollywood Event Center<\/h2><\/div><div class=\"fusion-title title fusion-title-2 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-custom_color_3);--awb-margin-top:-10px;--awb-margin-top-small:-15px;--awb-margin-right-small:0px;--awb-margin-bottom-small:10px;--awb-margin-left-small:0px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:36;line-height:var(--awb-typography1-line-height);\">Eindhoven<\/h3><\/div><div class=\"fusion-text fusion-text-1\" style=\"--awb-text-color:var(--awb-color7);--awb-margin-top:20px;\"><p data-start=\"1171\" data-end=\"1541\">Op zoek naar een unieke en spannende activiteit in Eindhoven? Probeer de <strong data-start=\"1236\" data-end=\"1246\">X-Cube<\/strong> bij Hollywood Event Center!<br \/>\nDe X-Cube is een escape-achtige game van de volgende generatie waarin jij en je team uitdagingen en minigames oplossen op grote interactieve schermen, compleet met geluid, licht, tijdsdruk en humor. Het is een mix tussen een escape room en een spelshow \u2013 perfect voor teams die van een uitdaging houden.<\/p>\n<p data-start=\"1543\" data-end=\"1768\">De locatie in Eindhoven beschikt over <strong data-start=\"1570\" data-end=\"1584\">\u00e9\u00e9n X-Cube<\/strong>, geschikt voor <strong data-start=\"1599\" data-end=\"1634\">2 tot 6 spelers tegelijk<\/strong>. Deze bevindt zich op de <strong data-start=\"1657\" data-end=\"1695\">eerste verdieping, tegenover de bar<\/strong>, in een afgesloten ruimte zonder omgevingsgeluid \u2013 ideaal voor maximale focus en plezier.<\/p>\n<p data-start=\"1770\" data-end=\"1943\">Hollywood Event Center biedt daarnaast <strong data-start=\"1805\" data-end=\"1857\">glow-in-the-dark minigolf, sim racing en nog veel meer<\/strong>, waardoor het een geweldige bestemming is voor een compleet uitje met vrienden, familie of collega\u2019s.<\/p>\n<p data-start=\"1770\" data-end=\"1943\">\u26a0\ufe0f <strong data-start=\"346\" data-end=\"357\">Let op<\/strong>: De X-Cube in Eindhoven is tijdelijk niet beschikbaar vanwege verbouwingen.<br data-start=\"428\" data-end=\"431\" \/>De dichtstbijzijnde locaties zijn <a href=\"https:\/\/x-cube.nl\/nl\/locatie-kaatsheuvel\/\">Kaatsheuvel <\/a>en <a href=\"https:\/\/x-cube.nl\/nl\/locatie-bergen-op-zoom\/\">Bergen op Zoom<\/a>.<\/p>\n<\/div><div class=\"fusion-image-carousel fusion-image-carousel-auto fusion-image-carousel-1\" style=\"margin-top:20px;margin-bottom:20px;\"><div data-slide-effect=\"fade\" class=\"awb-carousel awb-swiper awb-swiper-carousel awb-carousel--slider awb-swiper-dots-position-bottom\" data-layout=\"slider\" data-autoplay=\"no\" data-autoplayspeed=\"2500\" data-autoplaypause=\"no\" data-loop=\"yes\" data-columns=\"5\" data-columnsmedium=\"1\" data-columnssmall=\"1\" data-itemmargin=\"13\" data-itemwidth=\"180\" data-touchscroll=\"no\" data-freemode=\"no\" data-imagesize=\"auto\" data-scrollitems=\"0\" data-centeredslides=\"no\" data-rotationangle=\"50\" data-depth=\"100\" data-speed=\"500\" data-shadow=\"yes\" data-pagination=\"bullets\" style=\"--awb-border-radius-top-left:20px;--awb-border-radius-top-right:20px;--awb-border-radius-bottom-right:20px;--awb-border-radius-bottom-left:20px;--awb-arrow-size:30px;--awb-arrow-color:var(--awb-color7);--awb-dots-align:center;\"><div class=\"swiper-wrapper awb-image-carousel-wrapper fusion-flex-align-items-center\"><div class=\"swiper-slide\"><div class=\"fusion-carousel-item-wrapper\"><div class=\"fusion-image-wrapper hover-type-none\"><img decoding=\"async\" width=\"1426\" height=\"951\" src=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/6835a633b2c89ef23ee47f8f_250512-HollywoodEntertainmentCenter-Eindhoven-MVF-69.webp\" class=\"attachment-full size-full\" alt=\"\" srcset=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/6835a633b2c89ef23ee47f8f_250512-HollywoodEntertainmentCenter-Eindhoven-MVF-69-200x133.webp 200w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/6835a633b2c89ef23ee47f8f_250512-HollywoodEntertainmentCenter-Eindhoven-MVF-69-300x200.webp 300w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/6835a633b2c89ef23ee47f8f_250512-HollywoodEntertainmentCenter-Eindhoven-MVF-69-400x267.webp 400w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/6835a633b2c89ef23ee47f8f_250512-HollywoodEntertainmentCenter-Eindhoven-MVF-69-600x400.webp 600w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/6835a633b2c89ef23ee47f8f_250512-HollywoodEntertainmentCenter-Eindhoven-MVF-69-768x512.webp 768w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/6835a633b2c89ef23ee47f8f_250512-HollywoodEntertainmentCenter-Eindhoven-MVF-69-800x534.webp 800w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/6835a633b2c89ef23ee47f8f_250512-HollywoodEntertainmentCenter-Eindhoven-MVF-69-1024x683.webp 1024w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/6835a633b2c89ef23ee47f8f_250512-HollywoodEntertainmentCenter-Eindhoven-MVF-69-1200x800.webp 1200w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/6835a633b2c89ef23ee47f8f_250512-HollywoodEntertainmentCenter-Eindhoven-MVF-69.webp 1426w\" sizes=\"(max-width: 1426px) 100vw, 1426px\" \/><\/div><\/div><\/div><div class=\"swiper-slide\"><div class=\"fusion-carousel-item-wrapper\"><div class=\"fusion-image-wrapper hover-type-none\"><img decoding=\"async\" width=\"2048\" height=\"1365\" src=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79.jpg\" class=\"attachment-full size-full\" alt=\"\" srcset=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79-200x133.jpg 200w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79-300x200.jpg 300w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79-400x267.jpg 400w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79-600x400.jpg 600w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79-768x512.jpg 768w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79-800x533.jpg 800w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79-1024x683.jpg 1024w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79-1200x800.jpg 1200w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79-1536x1024.jpg 1536w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/20240322_xCube_Maassluis_MartijnvanLeeuwen-79.jpg 2048w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/div><\/div><\/div><div class=\"swiper-slide\"><div class=\"fusion-carousel-item-wrapper\"><div class=\"fusion-image-wrapper hover-type-none\"><img decoding=\"async\" width=\"900\" height=\"624\" src=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/03\/Achtergrond.jpg\" class=\"attachment-full size-full\" alt=\"\" srcset=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/03\/Achtergrond-200x139.jpg 200w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/03\/Achtergrond-300x208.jpg 300w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/03\/Achtergrond-400x277.jpg 400w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/03\/Achtergrond-600x416.jpg 600w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/03\/Achtergrond-768x532.jpg 768w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/03\/Achtergrond-800x555.jpg 800w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/03\/Achtergrond.jpg 900w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/div><\/div><\/div><\/div><div class=\"awb-swiper-button awb-swiper-button-prev\"><i class=\"awb-icon-angle-left\" aria-hidden=\"true\"><\/i><\/div><div class=\"awb-swiper-button awb-swiper-button-next\"><i class=\"awb-icon-angle-right\" aria-hidden=\"true\"><\/i><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-padding-top:20px;--awb-padding-right:20px;--awb-padding-bottom:29px;--awb-padding-left:20px;--awb-overflow:hidden;--awb-bg-color:rgba(84,60,255,0.18);--awb-bg-color-hover:rgba(84,60,255,0.18);--awb-bg-size:cover;--awb-border-color:rgba(255,255,255,0.35);--awb-border-top:0.5px;--awb-border-right:0.5px;--awb-border-bottom:0.5px;--awb-border-left:0.5px;--awb-border-style:solid;--awb-border-radius:10px 10px 10px 10px;--awb-width-large:33.333333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-2\" style=\"--awb-font-size:25px;--awb-text-color:var(--awb-color7);--awb-margin-top:20px;--awb-text-font-family:&quot;Bungee&quot;;--awb-text-font-style:normal;--awb-text-font-weight:400;\"><p>Informatie<\/p>\n<\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"--awb-flex-grow:0;--awb-flex-grow-medium:0;--awb-flex-grow-small:0;--awb-flex-shrink:0;--awb-flex-shrink-medium:0;--awb-flex-shrink-small:0;width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-0 fusion_builder_column_inner_1_6 1_6 fusion-flex-column\" style=\"--awb-padding-top:0px;--awb-padding-right:-20px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-bg-size:cover;--awb-width-large:16.666666666667%;--awb-margin-top-large:0px;--awb-spacing-right-large:11.52%;--awb-margin-bottom-large:3px;--awb-spacing-left-large:11.52%;--awb-width-medium:16.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:11.52%;--awb-spacing-left-medium:11.52%;--awb-width-small:20%;--awb-order-small:0;--awb-spacing-right-small:9.6%;--awb-spacing-left-small:9.6%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><i class=\"fb-icon-element-1 fb-icon-element fontawesome-icon fa-clock fas circle-yes fusion-text-flow\" style=\"--awb-iconcolor:var(--awb-color7);--awb-iconcolor-hover:var(--awb-color7);--awb-circlecolor:rgba(255,63,146,0);--awb-circlecolor-hover:var(--awb-custom_color_3);--awb-circlebordercolor-hover:var(--awb-color8);--awb-circlebordersize:0px;--awb-font-size:20px;--awb-width:29px;--awb-height:29px;--awb-line-height:29px;--awb-margin-right:10px;\"><\/i><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-1 fusion_builder_column_inner_4_5 4_5 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:80%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.4%;--awb-margin-bottom-large:-20px;--awb-spacing-left-large:0%;--awb-width-medium:80%;--awb-order-medium:0;--awb-spacing-right-medium:2.4%;--awb-spacing-left-medium:0%;--awb-width-small:66.666666666667%;--awb-order-small:0;--awb-spacing-right-small:2.88%;--awb-spacing-left-small:0%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-text fusion-text-3\" style=\"--awb-font-size:18px;--awb-text-color:var(--awb-custom_color_3);--awb-text-font-family:&quot;Montserrat&quot;;--awb-text-font-style:normal;--awb-text-font-weight:700;\"><p>Openingstijden<\/p>\n<\/div><\/div><\/div><\/div><div class=\"fusion-text fusion-text-4\" style=\"--awb-text-color:var(--awb-color7);--awb-margin-top:10px;\"><div class=\"openingstijden\">\n<div><span class=\"dag\">Maandag <\/span><span class=\"tijd\">12:00 &#8211; 22:00<\/span><\/div>\n<div><span class=\"dag\">Dinsdag <\/span><span class=\"tijd\">12:00 &#8211; 22:00<\/span><\/div>\n<div><span class=\"tijd\">Woensdag 12:00 &#8211; 22:00<\/span><\/div>\n<div><span class=\"dag\">Donderdag <\/span><span class=\"tijd\">12:00 &#8211; 22:00<\/span><\/div>\n<div><span class=\"dag\">Vrijdag <\/span><span class=\"tijd\">12:00 &#8211; 00:30<\/span><\/div>\n<div><span class=\"dag\">Zaterdag <\/span><span class=\"tijd\">12:00 &#8211; 00:30<\/span><\/div>\n<div><span class=\"dag\">Zondag <\/span><span class=\"tijd\">12:00 &#8211; 22:00<\/span><\/div>\n<div><\/div>\n<div><\/div>\n<\/div>\n<div><strong data-start=\"67\" data-end=\"83\">Let op:<\/strong> Openingtijden kunnen afwijken tijdens feestdagen en in vakanties.<\/div>\n<\/div><div class=\"fusion-separator fusion-full-width-sep\" style=\"align-self: center;margin-left: auto;margin-right: auto;margin-top:20px;width:100%;\"><div class=\"fusion-separator-border sep-single sep-dotted\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:rgba(255,255,255,0.32);border-color:rgba(255,255,255,0.32);border-top-width:1px;\"><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"--awb-flex-grow:0;--awb-flex-grow-medium:0;--awb-flex-grow-small:0;--awb-flex-shrink:0;--awb-flex-shrink-medium:0;--awb-flex-shrink-small:0;width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-2 fusion_builder_column_inner_1_6 1_6 fusion-flex-column\" style=\"--awb-padding-top:0px;--awb-padding-right:-20px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-bg-size:cover;--awb-width-large:16.666666666667%;--awb-margin-top-large:16px;--awb-spacing-right-large:11.52%;--awb-margin-bottom-large:3px;--awb-spacing-left-large:11.52%;--awb-width-medium:16.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:11.52%;--awb-spacing-left-medium:11.52%;--awb-width-small:20%;--awb-order-small:0;--awb-spacing-right-small:9.6%;--awb-spacing-left-small:9.6%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><i class=\"fb-icon-element-2 fb-icon-element fontawesome-icon fa-map-marker fas circle-yes fusion-text-flow\" style=\"--awb-iconcolor:var(--awb-color7);--awb-iconcolor-hover:var(--awb-color7);--awb-circlecolor:rgba(255,63,146,0);--awb-circlecolor-hover:var(--awb-custom_color_3);--awb-circlebordercolor-hover:var(--awb-color8);--awb-circlebordersize:0px;--awb-font-size:20px;--awb-width:29px;--awb-height:29px;--awb-line-height:29px;--awb-margin-right:10px;\"><\/i><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-3 fusion_builder_column_inner_4_5 4_5 fusion-flex-column\" style=\"--awb-padding-top:18px;--awb-bg-size:cover;--awb-width-large:80%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.4%;--awb-margin-bottom-large:-20px;--awb-spacing-left-large:0%;--awb-width-medium:80%;--awb-order-medium:0;--awb-spacing-right-medium:2.4%;--awb-spacing-left-medium:0%;--awb-width-small:66.666666666667%;--awb-order-small:0;--awb-spacing-right-small:2.88%;--awb-spacing-left-small:0%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-text fusion-text-5\" style=\"--awb-font-size:18px;--awb-text-color:var(--awb-custom_color_3);--awb-text-font-family:&quot;Montserrat&quot;;--awb-text-font-style:normal;--awb-text-font-weight:700;\"><p>Adres<\/p>\n<\/div><\/div><\/div><\/div><div class=\"fusion-text fusion-text-6\" style=\"--awb-text-color:var(--awb-color7);--awb-margin-top:10px;\"><p><strong>Hollywood Event Center Eindhoven<br \/>\n<\/strong>Vijfkamplaan 6c<br \/>\n5624 EB Eindhoven<br \/>\n+31 (0)40 202 4826<\/p>\n<div><\/div>\n<\/div><div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-1 fusion-button-default-span fusion-button-default-type awb-b-icon-pos-left\" style=\"--button_accent_color:var(--awb-color7);--button_border_color:var(--awb-color7);--button_accent_hover_color:var(--awb-color7);--button_border_hover_color:var(--awb-color4);--button-border-radius-top-left:30px;--button-border-radius-top-right:30px;--button-border-radius-bottom-right:30px;--button-border-radius-bottom-left:30px;--button_gradient_angle:45deg;--button_gradient_top_color:var(--awb-custom_color_2);--button_gradient_bottom_color:var(--awb-custom_color_2);--button_gradient_top_color_hover:hsla(var(--awb-color2-h),calc(var(--awb-color2-s) - 5%),calc(var(--awb-color2-l) - 10%),var(--awb-color2-a));--button_gradient_bottom_color_hover:hsla(var(--awb-color2-h),calc(var(--awb-color2-s) - 5%),calc(var(--awb-color2-l) - 10%),var(--awb-color2-a));--button_text_transform:uppercase;--button_typography-letter-spacing:1px;--button_typography-font-family:&quot;Montserrat&quot;;--button_typography-font-style:normal;--button_typography-font-weight:600;\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" data-hover=\"icon_position\" href=\"https:\/\/www.google.com\/maps\/dir\/?api=1&amp;destination=Vijfkamplaan+6C,+5624+EB+Eindhoven\"><i class=\"fa-map-marker-alt fas awb-button__icon awb-button__icon--default button-icon-left\" aria-hidden=\"true\"><\/i><i class=\"fa-map-marker-alt fas awb-button__icon awb-button__icon--default button-icon-left\" aria-hidden=\"true\"><\/i><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Route<\/span><\/a><\/div><div class=\"fusion-text fusion-text-7\" style=\"--awb-text-color:var(--awb-color7);--awb-margin-top:10px;\"><div class=\"openingstijden\">\n<div><strong>Steden dichtbij<\/strong><\/div>\n<div><span class=\"dag\">Tilburg<\/span><span class=\"tijd\">35,0 km<\/span><\/div>\n<div><span class=\"dag\">Den Bosch <\/span><span class=\"tijd\">35,0 km<\/span><\/div>\n<div><span class=\"dag\">Helmond<\/span><span class=\"tijd\">15,0 km<\/span><\/div>\n<div><span class=\"dag\">Weert<\/span><span class=\"tijd\">40,0 km<\/span><\/div>\n<div><span class=\"dag\">Roermond<\/span><span class=\"tijd\">50,0 km<\/span><\/div>\n<\/div>\n<div><\/div>\n<\/div><div class=\"fusion-separator fusion-full-width-sep\" style=\"align-self: center;margin-left: auto;margin-right: auto;margin-top:20px;width:100%;\"><div class=\"fusion-separator-border sep-single sep-dotted\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:rgba(255,255,255,0.32);border-color:rgba(255,255,255,0.32);border-top-width:1px;\"><\/div><\/div><div class=\"fusion-text fusion-text-8\" style=\"--awb-font-size:13px;--awb-text-color:var(--awb-color7);\"><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"--awb-flex-grow:0;--awb-flex-grow-medium:0;--awb-flex-grow-small:0;--awb-flex-shrink:0;--awb-flex-shrink-medium:0;--awb-flex-shrink-small:0;width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-4 fusion_builder_column_inner_1_6 1_6 fusion-flex-column\" style=\"--awb-padding-top:0px;--awb-padding-right:-20px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-bg-size:cover;--awb-width-large:16.666666666667%;--awb-margin-top-large:16px;--awb-spacing-right-large:11.52%;--awb-margin-bottom-large:3px;--awb-spacing-left-large:11.52%;--awb-width-medium:16.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:11.52%;--awb-spacing-left-medium:11.52%;--awb-width-small:20%;--awb-order-small:0;--awb-spacing-right-small:9.6%;--awb-spacing-left-small:9.6%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><i class=\"fb-icon-element-3 fb-icon-element fontawesome-icon fa-info fas circle-yes fusion-text-flow\" style=\"--awb-iconcolor:var(--awb-color7);--awb-iconcolor-hover:var(--awb-color7);--awb-circlecolor:rgba(255,63,146,0);--awb-circlecolor-hover:var(--awb-custom_color_3);--awb-circlebordercolor-hover:var(--awb-color8);--awb-circlebordersize:0px;--awb-font-size:20px;--awb-width:29px;--awb-height:29px;--awb-line-height:29px;--awb-margin-right:10px;\"><\/i><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-5 fusion_builder_column_inner_4_5 4_5 fusion-flex-column\" style=\"--awb-padding-top:18px;--awb-bg-size:cover;--awb-width-large:80%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.4%;--awb-margin-bottom-large:-20px;--awb-spacing-left-large:0%;--awb-width-medium:80%;--awb-order-medium:0;--awb-spacing-right-medium:2.4%;--awb-spacing-left-medium:0%;--awb-width-small:66.666666666667%;--awb-order-small:0;--awb-spacing-right-small:2.88%;--awb-spacing-left-small:0%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-text fusion-text-9\" style=\"--awb-font-size:18px;--awb-text-color:var(--awb-custom_color_3);--awb-text-font-family:&quot;Montserrat&quot;;--awb-text-font-style:normal;--awb-text-font-weight:700;\"><p>X-Cube informatie<\/p>\n<\/div><\/div><\/div><\/div><div class=\"fusion-text fusion-text-10\" style=\"--awb-text-color:var(--awb-color7);--awb-margin-top:10px;\"><p data-start=\"166\" data-end=\"217\">The X-Cube is temporarily unavailable in Eindhoven.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-bottom:0px;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><!-- Include Mapbox GL CSS -->\r\n<link href=\"https:\/\/api.mapbox.com\/mapbox-gl-js\/v3.2.0\/mapbox-gl.css\" rel=\"stylesheet\">\r\n\r\n<!-- Include Mapbox GL JS -->\r\n<script src=\"https:\/\/api.mapbox.com\/mapbox-gl-js\/v3.2.0\/mapbox-gl.js\"><\/script>\r\n\r\n<!-- Include Mapbox GL Geocoder CSS -->\r\n<script src=\"https:\/\/api.mapbox.com\/mapbox-gl-js\/plugins\/mapbox-gl-geocoder\/v5.0.0\/mapbox-gl-geocoder.min.js\"><\/script>\r\n<link rel=\"stylesheet\"\r\n    href=\"https:\/\/api.mapbox.com\/mapbox-gl-js\/plugins\/mapbox-gl-geocoder\/v5.0.0\/mapbox-gl-geocoder.css\" type=\"text\/css\">\r\n\r\n<!-- Preconnect to Google Fonts -->\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap\"\r\n    rel=\"stylesheet\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n<style>\r\n    body {\r\n        margin: 0px;\r\n        padding: 0px;\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-optical-sizing: auto;\r\n        font-weight: normal;\r\n        font-style: normal;\r\n    }\r\n\r\n    .map-wrapper {\r\n        max-width: 100%;\r\n        width: 100%;\r\n        margin: 0 auto;\r\n    }\r\n\r\n    .map-wrapper_inner {\r\n        width: 100%;\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        position: relative;\r\n    }\r\n\r\n    .aside-section {\r\n        position: absolute;\r\n        left: 0px;\r\n        width: 40%;\r\n        height: auto;\r\n        max-height: 100%;\r\n        margin: 10px;\r\n        z-index: 2;\r\n        box-shadow: 0px 0px 0.25rem #4f4444;\r\n        border-radius: 0.25rem;\r\n        background-color: #fff;\r\n        overflow: hidden;\r\n    }\r\n\r\n    .geocoder {\r\n        width: 100%;\r\n    }\r\n\r\n    .suggestions-wrapper {\r\n        display: none;\r\n    }\r\n\r\n    .location-list {\r\n        width: 100%;\r\n        overflow-y: auto;\r\n        overflow-x: hidden;\r\n        display: none;\r\n    }\r\n\r\n    .location-list::-webkit-scrollbar {\r\n        width: 8px;\r\n    }\r\n\r\n    .location-list::-webkit-scrollbar-thumb {\r\n        background: #9e9e9e;\r\n        border-radius: 8px;\r\n    }\r\n\r\n    .location-list::-webkit-scrollbar-thumb:hover {\r\n        background: #767676;\r\n    }\r\n\r\n    .location-list.show {\r\n        max-height: 50vh;\r\n        display: block;\r\n    }\r\n\r\n    .location-item {\r\n        transition: 0.25s;\r\n        width: 100%;\r\n        border-bottom: 1px solid #ececec;\r\n        padding: 0.8rem 1rem;\r\n        line-height: 1.5rem;\r\n        color: #221f46;\r\n        font-weight: 600;\r\n        text-transform: capitalize;\r\n        cursor: pointer;\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        box-sizing: border-box;\r\n    }\r\n\r\n    \/* FIX: keyboard focus style for accessibility *\/\r\n    .location-item:focus {\r\n        outline: 2px solid #4A33C9;\r\n        outline-offset: -2px;\r\n        background-color: #f0eeff;\r\n    }\r\n\r\n    .location-item .location {\r\n        display: flex;\r\n        flex-direction: column;\r\n    }\r\n\r\n    .location-item:hover {\r\n        background-color: #ececec;\r\n        padding: 0.8rem 1.25rem;\r\n    }\r\n\r\n    .location-item>* {\r\n        pointer-events: none;\r\n    }\r\n\r\n    .location-item h3 {\r\n        color: #4A33C9 !important;\r\n        font-size: 20px !important;\r\n        line-height: 24px !important;\r\n        margin: 0 !important;\r\n    }\r\n\r\n    .location-item p {\r\n        line-height: 18px !important;\r\n        opacity: 0.75 !important;\r\n        margin: 0 !important;\r\n    }\r\n\r\n    #map {\r\n        width: 100%;\r\n        height: 70vh;\r\n        font-family: \"Montserrat\", sans-serif;\r\n    }\r\n\r\n    .div-marker {\r\n        cursor: pointer;\r\n    }\r\n\r\n    .div-marker.active svg #path-fill {\r\n        fill: #4A33C9;\r\n    }\r\n\r\n    .div-marker>* {\r\n        pointer-events: none;\r\n    }\r\n\r\n    .mapboxgl-ctrl-geocoder {\r\n        min-width: 100%;\r\n    }\r\n\r\n    .mapboxgl-ctrl-geocoder--icon-search {\r\n        display: none !important;\r\n    }\r\n\r\n    .mapboxgl-ctrl-geocoder--input {\r\n        background-color: #F7F7F7 !important;\r\n    }\r\n\r\n    .mapboxgl-popup-content {\r\n        border-width: 0px;\r\n        color: rgb(53 0 85);\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-size: .875rem;\r\n        line-height: 1.25rem;\r\n        padding: 0;\r\n        height: auto;\r\n        width: fit-content;\r\n        max-width: 20rem;\r\n    }\r\n\r\n    .mapboxgl-popup-close-button {\r\n        padding-top: 0.25rem;\r\n        padding-left: 0.375rem;\r\n        padding-right: 0.375rem;\r\n        font-size: 1.75rem;\r\n    }\r\n\r\n    .mapboxgl-popup-content h2 {\r\n        padding-right: 1rem;\r\n        font-style: italic;\r\n        font-weight: 900;\r\n        font-size: 1.125rem;\r\n        line-height: 1.75rem;\r\n        margin: 0;\r\n    }\r\n\r\n    .mapboxgl-popup-content .popup-content {\r\n        padding: 1rem;\r\n    }\r\n\r\n    .mapboxgl-popup-content .popup-content > div {\r\n        margin-bottom: 0.5rem;\r\n    }\r\n\r\n    \/* FIX: simplified popup button \u2014 no broken glow variables, clean solid style *\/\r\n    .mapboxgl-popup-content a {\r\n        text-decoration: none;\r\n        display: block;\r\n        margin-top: 0.75rem;\r\n    }\r\n\r\n    .mapboxgl-popup-content .btn--pink {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        background-color: #4A33C9;\r\n        color: #fff;\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-weight: 700;\r\n        font-size: 0.875rem;\r\n        letter-spacing: 0.05em;\r\n        text-transform: uppercase;\r\n        padding: 0.75rem 1.5rem;\r\n        border-radius: 4px;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n\r\n    .mapboxgl-popup-content .btn--pink:hover {\r\n        background-color: #3826a8;\r\n    }\r\n\r\n    \/* FIX: distance badge in popup *\/\r\n    .popup-distance {\r\n        display: inline-block;\r\n        font-size: 0.75rem;\r\n        font-weight: 500;\r\n        font-style: normal;\r\n        color: #888;\r\n        margin-left: 0.4rem;\r\n    }\r\n\r\n    .header-section {\r\n        display: flex;\r\n        padding: 5px;\r\n    }\r\n\r\n    .toggle-btn {\r\n        background-color: rgb(236, 236, 236);\r\n        border: none;\r\n        margin-right: 0.25rem;\r\n        cursor: pointer;\r\n        font-size: 18px;\r\n        border-radius: 2px;\r\n        padding: 0.25rem;\r\n        width: 36px;\r\n    }\r\n\r\n    @media only screen and (max-width: 700px) {\r\n        .map-wrapper {\r\n            width: 100%;\r\n            max-width: 100%;\r\n        }\r\n\r\n        .aside-section {\r\n            width: 90% !important;\r\n            max-width: 90%;\r\n        }\r\n    }\r\n<\/style>\r\n\r\n<div class=\"map-wrapper\">\r\n    <div class=\"map-wrapper_inner\">\r\n        <div class=\"aside-section\">\r\n            <div class=\"header-section\">\r\n                <!-- FIX: aria-label for accessibility -->\r\n                <button class=\"btn toggle-btn\" id=\"toggle-btn\" aria-label=\"Toggle location list\">&#9776;<\/button>\r\n                <div id=\"geocoder\" class=\"geocoder\"><\/div>\r\n            <\/div>\r\n            <div class=\"location-list\" role=\"list\" aria-label=\"Locations\"><\/div>\r\n        <\/div>\r\n        <div id=\"map\"><\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/PapaParse\/5.4.1\/papaparse.min.js\"\r\n    integrity=\"sha512-dfX5uYVXzyU8+KHqj8bjo7UkOdg18PaOtpa48djpNbZHwExddghZ+ZmzWT06R5v6NSk3ZUfsH6FNEDepLx9hPQ==\"\r\n    crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"><\/script>\r\n\r\n<script>\r\n    mapboxgl.accessToken = 'pk.eyJ1IjoieGN1YmV0ZWNoIiwiYSI6ImNsazB4aG85bTAwNWkzaW92cW4xejhkaHkifQ.Mr8oNwtF_lxKf9RWSrPDiA';\r\n\r\n    const map = new mapboxgl.Map({\r\n        container: 'map',\r\n        style: 'mapbox:\/\/styles\/xcubetech\/cltb7lzhi000401qp6air6qie',\r\n        center: { lng: 5.2913, lat: 52.1326 },\r\n        zoom: 7\r\n    });\r\n\r\n    \/\/ FIX: hoisted to a constant \u2014 evaluated once, not on every click\r\n    const isMobile = (function () {\r\n        let check = false;\r\n        (function (a) { if (\/(android|bb\\d+|meego).+mobile|avantgo|bada\\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino\/i.test(a) || \/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-\/i.test(a.substr(0, 4))) check = true; })(navigator.userAgent || navigator.vendor || window.opera);\r\n        return check;\r\n    })();\r\n\r\n    const svgIcons = `\r\n        <svg display=\"block\" height=\"41px\" width=\"27px\" viewBox=\"0 0 27 41\" role=\"img\" aria-label=\"Location marker\">\r\n            <defs>\r\n                <radialGradient id=\"shadowGradient\">\r\n                    <stop offset=\"10%\" stop-opacity=\"0.4\"><\/stop>\r\n                    <stop offset=\"100%\" stop-opacity=\"0.05\"><\/stop>\r\n                <\/radialGradient>\r\n            <\/defs>\r\n            <ellipse cx=\"13.5\" cy=\"34.8\" rx=\"10.5\" ry=\"5.25\" fill=\"url(#shadowGradient)\"><\/ellipse>\r\n            <path id=\"path-fill\" fill=\"#221f46\" d=\"M27,13.5C27,19.07 20.25,27 14.75,34.5C14.02,35.5 12.98,35.5 12.25,34.5C6.75,27 0,19.22 0,13.5C0,6.04 6.04,0 13.5,0C20.96,0 27,6.04 27,13.5Z\"><\/path>\r\n            <path opacity=\"0.25\" d=\"M13.5,0C6.04,0 0,6.04 0,13.5C0,19.22 6.75,27 12.25,34.5C13,35.52 14.02,35.5 14.75,34.5C20.25,27 27,19.07 27,13.5C27,6.04 20.96,0 13.5,0ZM13.5,1C20.42,1 26,6.58 26,13.5C26,15.9 24.5,19.18 22.22,22.74C19.95,26.3 16.71,30.14 13.94,33.91C13.74,34.18 13.61,34.32 13.5,34.44C13.39,34.32 13.26,34.18 13.06,33.91C10.28,30.13 7.41,26.31 5.02,22.77C2.62,19.23 1,15.95 1,13.5C1,6.58 6.58,1 13.5,1Z\"><\/path>\r\n            <circle fill=\"white\" cx=\"13.5\" cy=\"13.5\" r=\"5.5\"><\/circle>\r\n        <\/svg>\r\n    `;\r\n\r\n    function getLanguageCode() {\r\n        const match = window.location.pathname.match(\/\\\/([a-z]{2})\\\/\/i);\r\n        return match ? match[1].toUpperCase() : null;\r\n    }\r\n\r\n    const langCode = getLanguageCode();\r\n\r\n    function ensureAbsoluteURL(url) {\r\n        if (!url) return url;\r\n        return url.match(\/^https?:\\\/\\\/\/i) ? url : `https:\/\/${url}`;\r\n    }\r\n\r\n    function getBookingLink(entry) {\r\n        const localKey = langCode ? `Booking Link ${langCode}` : null;\r\n        const link = (localKey && entry[localKey]) ? entry[localKey] : entry['Booking Link'];\r\n        return ensureAbsoluteURL(link);\r\n    }\r\n\r\n    \/\/ FIX: compute distance in km between two lat\/lng points (Haversine formula)\r\n    function getDistanceKm(lat1, lng1, lat2, lng2) {\r\n        const R = 6371;\r\n        const dLat = (lat2 - lat1) * Math.PI \/ 180;\r\n        const dLng = (lng2 - lng1) * Math.PI \/ 180;\r\n        const a = Math.sin(dLat \/ 2) ** 2 +\r\n            Math.cos(lat1 * Math.PI \/ 180) * Math.cos(lat2 * Math.PI \/ 180) *\r\n            Math.sin(dLng \/ 2) ** 2;\r\n        return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n    }\r\n\r\n    \/\/ FIX: request the user's location once and cache it\r\n    let userCoords = null;\r\n    if (navigator.geolocation) {\r\n        navigator.geolocation.getCurrentPosition(pos => {\r\n            userCoords = { lat: pos.coords.latitude, lng: pos.coords.longitude };\r\n        });\r\n    }\r\n\r\n    var activeMarkerEl, activePopup;\r\n    \/\/ FIX: always initialised as array so .forEach never throws\r\n    var locationsMarkers = [];\r\n    var locations = [];\r\n\r\n    \/\/ FIX: track sidebar open state independently so search doesn't force it open\r\n    var sidebarOpen = false;\r\n\r\n    function forwardGeocoder(query) {\r\n        const matchingFeatures = [];\r\n        for (const feature of locations) {\r\n            if (feature.Name.toLowerCase().includes(query.toLowerCase())) {\r\n                matchingFeatures.push({\r\n                    text: feature.Name,\r\n                    place_name: `${feature.Name}, x-cube-location`,\r\n                    center: [parseFloat(feature.Longitude), parseFloat(feature.Latitude)],\r\n                    place_type: ['park'],\r\n                    location_type: 'x-cube-location'\r\n                });\r\n            }\r\n        }\r\n        return matchingFeatures;\r\n    }\r\n\r\n    const geocoder = new MapboxGeocoder({\r\n        accessToken: mapboxgl.accessToken,\r\n        mapboxgl: mapboxgl,\r\n        marker: false,\r\n        localGeocoder: forwardGeocoder\r\n    });\r\n\r\n    document.getElementById('geocoder').appendChild(geocoder.onAdd(map));\r\n\r\n    map.on(\"load\", () => {\r\n        getLocations();\r\n\r\n        document.getElementById(\"toggle-btn\").onclick = () => {\r\n            sidebarOpen = !sidebarOpen;\r\n            document.querySelector(\".location-list\").classList.toggle(\"show\", sidebarOpen);\r\n        };\r\n    });\r\n\r\n    function getTopDomain() {\r\n        const parts = window.location.hostname.split('.');\r\n        return parts[parts.length - 1];\r\n    }\r\n\r\n    function getPageURL() {\r\n        const parts = window.location.pathname.split('\/').filter(Boolean);\r\n        return parts[parts.length - 1];\r\n    }\r\n\r\n    function getLocations() {\r\n        Papa.parse(\"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vQd73rANFQawO5P82Rkk1SngvwJ2STRBri_aWCD7WRlYNhVhH-QCVRknwLa2mGQJKGhSbXActYpMIQx\/pub?gid=0&single=true&output=csv\", {\r\n            header: true,\r\n            download: true,\r\n            complete: function ({ data }) {\r\n                locations = [...data.filter(entry => entry.Latitude)];\r\n                const topDomain = getTopDomain();\r\n                const pageURL = getPageURL();\r\n\r\n                locations.sort((a, b) => {\r\n                    if (a.WebCode === topDomain) return -1;\r\n                    if (b.WebCode === topDomain) return 1;\r\n                    return 0;\r\n                });\r\n\r\n                if (pageURL !== \"locations\") {\r\n                    locations.sort((a, b) => {\r\n                        if (a.Country.toLowerCase() === pageURL) return -1;\r\n                        if (b.Country.toLowerCase() === pageURL) return 1;\r\n                        return 0;\r\n                    });\r\n                }\r\n\r\n                \/\/ FIX: added easing and padding to initial flyTo\r\n                map.flyTo({\r\n                    center: [parseFloat(locations[0].FocusLon), parseFloat(locations[0].FocusLat)],\r\n                    zoom: locations[0].FocusZoom,\r\n                    speed: 1.2,\r\n                    curve: 1.4,\r\n                    easing: t => t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t\r\n                });\r\n\r\n                renderMarkers(locations);\r\n                renderLocationList(locations);\r\n            }\r\n        });\r\n    }\r\n\r\n    function searchLocation(term) {\r\n        const filteredLocations = locations.filter(location =>\r\n            location.Name.toLowerCase().includes(term.toLowerCase()) ||\r\n            location.Country.toLowerCase().includes(term.toLowerCase()) ||\r\n            location.WebCode.toLowerCase().includes(term.toLowerCase()) ||\r\n            location.City.toLowerCase().includes(term.toLowerCase()) ||\r\n            location.Address.toLowerCase().includes(term.toLowerCase())\r\n        );\r\n        renderMarkers(filteredLocations);\r\n        renderLocationList(filteredLocations);\r\n    }\r\n\r\n    document.querySelector('.mapboxgl-ctrl-geocoder--input').addEventListener(\"input\", (e) => {\r\n        \/\/ FIX: only open the sidebar if the user has explicitly opened it before or is actively typing\r\n        if (e.target.value.length > 0 && sidebarOpen) {\r\n            document.querySelector('.location-list').classList.add('show');\r\n        } else if (e.target.value.length > 0) {\r\n            sidebarOpen = true;\r\n            document.querySelector('.location-list').classList.add('show');\r\n        }\r\n        searchLocation(e.target.value);\r\n    });\r\n\r\n    document.querySelector('.mapboxgl-ctrl-geocoder--button').addEventListener(\"click\", () => {\r\n        searchLocation(\"\");\r\n    });\r\n\r\n    function renderLocationList(items) {\r\n        const itemsContainer = document.querySelector(\".location-list\");\r\n        if (!itemsContainer) return;\r\n\r\n        const locationItems = items\r\n            .filter(entry => !entry.Name.includes('Display') && getBookingLink(entry))\r\n            .map(entry => `\r\n                <div class=\"location-item\" role=\"listitem\" tabindex=\"0\" data-name=\"${entry.Name}\" aria-label=\"${entry.Name}, ${entry.City}, ${entry.Country}\">\r\n                    <div class=\"location\">\r\n                        <h3>${entry.Name}<\/h3>\r\n                        <p>${entry.City}, ${entry.Country}<\/p>\r\n                    <\/div>\r\n                    <img decoding=\"async\" src=\"https:\/\/x-cube.nl\/wp-content\/plugins\/sitepress-multilingual-cms\/res\/flags\/${entry.CountryCode.toLowerCase()}.svg\" alt=\"${entry.Country} flag\" width=\"24\" height=\"16\">\r\n                <\/div>\r\n            `)\r\n            .join(\"\");\r\n\r\n        itemsContainer.innerHTML = locationItems;\r\n        fireClickListener();\r\n    }\r\n\r\n    function fireClickListener() {\r\n        document.querySelectorAll(\".location-item\").forEach(item => {\r\n            const name = item.getAttribute('data-name');\r\n\r\n            item.onclick = () => {\r\n                toggleMarkerByName(name);\r\n                if (isMobile) {\r\n                    sidebarOpen = false;\r\n                    document.querySelector(\".location-list\").classList.remove(\"show\");\r\n                }\r\n            };\r\n\r\n            \/\/ FIX: keyboard navigation \u2014 Enter and Space activate the item\r\n            item.onkeydown = (e) => {\r\n                if (e.key === 'Enter' || e.key === ' ') {\r\n                    e.preventDefault();\r\n                    toggleMarkerByName(name);\r\n                    if (isMobile) {\r\n                        sidebarOpen = false;\r\n                        document.querySelector(\".location-list\").classList.remove(\"show\");\r\n                    }\r\n                }\r\n                \/\/ Arrow key navigation through the list\r\n                if (e.key === 'ArrowDown') {\r\n                    e.preventDefault();\r\n                    const next = item.nextElementSibling;\r\n                    if (next) next.focus();\r\n                }\r\n                if (e.key === 'ArrowUp') {\r\n                    e.preventDefault();\r\n                    const prev = item.previousElementSibling;\r\n                    if (prev) prev.focus();\r\n                }\r\n            };\r\n        });\r\n    }\r\n\r\n    function toggleMarkerByName(name) {\r\n        const location = locations.find(entry => entry.Name === name);\r\n        if (!location) return;\r\n\r\n        locationsMarkers.forEach(marker => {\r\n            if (marker.title === name) {\r\n                const popup = marker.getPopup();\r\n                if (activePopup) activePopup.remove();\r\n                marker.togglePopup();\r\n                activeMarkerEl = marker.getElement();\r\n                activeMarkerEl.classList.add(\"active\");\r\n                activePopup = popup;\r\n\r\n                \/\/ FIX: smoother flyTo with easing and padding so popup isn't clipped\r\n                map.flyTo({\r\n                    center: [parseFloat(location.Longitude), parseFloat(location.Latitude)],\r\n                    zoom: 14,\r\n                    speed: 1.4,\r\n                    curve: 1.4,\r\n                    padding: { top: 60, bottom: 60, left: 320, right: 60 },\r\n                    easing: t => t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t\r\n                });\r\n            }\r\n        });\r\n    }\r\n\r\n    \/\/ FIX: remove old markers before creating new ones \u2014 prevents accumulation on every search\r\n    function renderMarkers(cities) {\r\n        locationsMarkers.forEach(marker => marker.remove());\r\n\r\n        locationsMarkers = cities\r\n            .filter(city => getBookingLink(city))\r\n            .map((city, i) => createMarker(city, i));\r\n    }\r\n\r\n    function createMarker(entry, i) {\r\n        const markerEl = document.createElement(\"div\");\r\n        markerEl.classList.add(\"div-marker\");\r\n        \/\/ FIX: accessible label on the marker element itself\r\n        markerEl.setAttribute(\"aria-label\", entry.Name);\r\n        markerEl.innerHTML += svgIcons;\r\n\r\n        const popup = createPopup(entry);\r\n        const marker = new mapboxgl.Marker({ element: markerEl });\r\n        marker.setLngLat([parseFloat(entry.Longitude), parseFloat(entry.Latitude)])\r\n              .setPopup(popup)\r\n              .addTo(map);\r\n        marker.title = entry.Name;\r\n\r\n        \/\/ FIX: null-guard prevents crash on first popup close\r\n        popup.on(\"close\", () => {\r\n            if (activeMarkerEl) {\r\n                activeMarkerEl.classList.remove(\"active\");\r\n            }\r\n        });\r\n\r\n        markerEl.addEventListener(\"click\", (e) => {\r\n            e.stopPropagation();\r\n            if (activeMarkerEl && activeMarkerEl !== e.currentTarget) {\r\n                activeMarkerEl.classList.remove(\"active\");\r\n                if (activePopup) activePopup.remove();\r\n            }\r\n            markerEl.classList.add(\"active\");\r\n            marker.togglePopup();\r\n            activeMarkerEl = markerEl;\r\n            activePopup = popup;\r\n        });\r\n\r\n        return marker;\r\n    }\r\n\r\n    function createPopup(entry) {\r\n        \/\/ FIX: compute and display distance from user if geolocation was granted\r\n        let distanceLabel = '';\r\n        if (userCoords) {\r\n            const km = getDistanceKm(\r\n                userCoords.lat, userCoords.lng,\r\n                parseFloat(entry.Latitude), parseFloat(entry.Longitude)\r\n            );\r\n            distanceLabel = km < 1000\r\n                ? `${Math.round(km)} km away`\r\n                : `${(km \/ 1000).toFixed(1)}k km away`;\r\n        }\r\n\r\n        const popupContent = `\r\n            <div class=\"popup-content\">\r\n                <h2>${entry.Name}${distanceLabel ? `<span class=\"popup-distance\">${distanceLabel}<\/span>` : ''}<\/h2>\r\n                <div>${entry.City}, ${entry.Country}<\/div>\r\n                <a href=\"${getBookingLink(entry)}\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n                    <div class=\"btn--pink\">FIND OUT MORE<\/div>\r\n                <\/a>\r\n            <\/div>\r\n        `;\r\n\r\n        return new mapboxgl.Popup({ focusAfterOpen: false, offset: [0, -10] }).setHTML(popupContent);\r\n    }\r\n<\/script><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":7,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"100-width.php","meta":{"footnotes":""},"class_list":["post-6866","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/x-cube.nl\/nl\/wp-json\/wp\/v2\/pages\/6866","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/x-cube.nl\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/x-cube.nl\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/x-cube.nl\/nl\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/x-cube.nl\/nl\/wp-json\/wp\/v2\/comments?post=6866"}],"version-history":[{"count":0,"href":"https:\/\/x-cube.nl\/nl\/wp-json\/wp\/v2\/pages\/6866\/revisions"}],"wp:attachment":[{"href":"https:\/\/x-cube.nl\/nl\/wp-json\/wp\/v2\/media?parent=6866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}