{"id":6858,"date":"2025-06-07T09:43:41","date_gmt":"2025-06-07T08:43:41","guid":{"rendered":"https:\/\/x-cube.nl\/locatie-delft\/"},"modified":"2026-02-24T13:24:06","modified_gmt":"2026-02-24T12:24:06","slug":"locatie-delft","status":"publish","type":"page","link":"https:\/\/x-cube.nl\/nl\/locatie-delft\/","title":{"rendered":"Locatie: Delft"},"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);\">Bleekemolens Race Planet<\/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);\">Delft<\/h3><\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-1 fusion-button-span-no fusion-button-default-type\" style=\"--button_accent_color:var(--awb-color7);--button_accent_hover_color:var(--awb-color7);--button_border_hover_color:var(--awb-color4);--button_gradient_top_color:var(--awb-custom_color_3);--button_gradient_bottom_color:var(--awb-custom_color_3);--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_font_size:20px;--button_typography-font-family:&quot;Bungee&quot;;--button_typography-font-style:normal;--button_typography-font-weight:400;\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https:\/\/reserveren-delft.raceplanet.nl\/products?activiteiten=x-cube&amp;utm_source=x-cube&amp;utm_medium=referral&amp;utm_campaign=locatie-delft\"><i class=\"fa-shopping-cart 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\">Nu boeken<\/span><\/a><\/div><div class=\"fusion-text fusion-text-1\" style=\"--awb-text-color:var(--awb-color7);--awb-margin-top:20px;\"><p data-start=\"1581\" data-end=\"1998\">Ben je op zoek naar een originele, spannende en interactieve activiteit in Delft? Dan is de X-Cube bij <strong data-start=\"1654\" data-end=\"1685\">Race Planet Delft<\/strong> precies wat je zoekt. De X-Cube is een innovatieve digitale escape room die je samen met vrienden, familie of collega&#8217;s speelt in een afgesloten ruimte met grote schermen, licht, geluid en tijdsdruk. Samen los je puzzels op, voer je minigames uit en werk je als team om het spel te verslaan. Elke missie zit vol humor, spanning en verrassingen.<\/p>\n<p data-start=\"2000\" data-end=\"2369\">Bij Race Planet Delft zijn <strong data-start=\"2034\" data-end=\"2049\">twee X-Cubes<\/strong> beschikbaar. Je kunt de X-Cube spelen met <strong data-start=\"2079\" data-end=\"2115\">2 tot 12 personen tegelijk<\/strong>, afhankelijk van het aantal beschikbare cabines. De X-Cubes bevinden zich op de eerste verdieping in een eigen afgesloten ruimte tegenover de bar. Omdat je geen omgevingsgeluid hebt, kun je je volledig focussen op de game en samenwerken met je team.<\/p>\n<p data-start=\"2371\" data-end=\"2775\">De spellen zijn geschikt voor jong en oud, van families met kinderen tot vriendengroepen en bedrijfsuitjes. Kies uit verschillende belevingen, zoals het oplossen van een moord in <em data-start=\"2555\" data-end=\"2578\">Murder at the Mansion<\/em>, het trainen als geheim agent in <em data-start=\"2607\" data-end=\"2621\">Spy Training<\/em> of de hilarische minigames van <em data-start=\"2655\" data-end=\"2675\">The Crazy Gameshow<\/em>. Combineer je bezoek aan de X-Cube met een potje karten of bowlen voor een compleet dagje uit.<\/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-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=\"1200\" height=\"630\" src=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/d5c423b33e1df6b5171a883a36fe8203e6c73d55.jpg\" class=\"attachment-full size-full\" alt=\"\" srcset=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/d5c423b33e1df6b5171a883a36fe8203e6c73d55-200x105.jpg 200w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/d5c423b33e1df6b5171a883a36fe8203e6c73d55-300x158.jpg 300w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/d5c423b33e1df6b5171a883a36fe8203e6c73d55-400x210.jpg 400w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/d5c423b33e1df6b5171a883a36fe8203e6c73d55-600x315.jpg 600w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/d5c423b33e1df6b5171a883a36fe8203e6c73d55-768x403.jpg 768w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/d5c423b33e1df6b5171a883a36fe8203e6c73d55-800x420.jpg 800w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/d5c423b33e1df6b5171a883a36fe8203e6c73d55-1024x538.jpg 1024w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/d5c423b33e1df6b5171a883a36fe8203e6c73d55.jpg 1200w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/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=\"1280\" height=\"720\" src=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/maxresdefault.jpg\" class=\"attachment-full size-full\" alt=\"\" srcset=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/maxresdefault-200x113.jpg 200w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/maxresdefault-300x169.jpg 300w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/maxresdefault-400x225.jpg 400w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/maxresdefault-600x338.jpg 600w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/maxresdefault-768x432.jpg 768w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/maxresdefault-800x450.jpg 800w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/maxresdefault-1024x576.jpg 1024w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/maxresdefault-1200x675.jpg 1200w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/maxresdefault.jpg 1280w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/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 ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-2 fusion-button-span-no fusion-button-default-type\" style=\"--button_accent_color:var(--awb-color7);--button_accent_hover_color:var(--awb-color7);--button_border_hover_color:var(--awb-color4);--button_gradient_top_color:var(--awb-custom_color_3);--button_gradient_bottom_color:var(--awb-custom_color_3);--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_font_size:20px;--button_typography-font-family:&quot;Bungee&quot;;--button_typography-font-style:normal;--button_typography-font-weight:400;\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https:\/\/reserveren-delft.raceplanet.nl\/products?activiteiten=x-cube&amp;utm_source=x-cube&amp;utm_medium=referral&amp;utm_campaign=locatie-delft\"><i class=\"fa-shopping-cart 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\">Ga naar Race Planet om te reserveren<\/span><\/a><\/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 ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-3 fusion-button-span-yes fusion-button-default-type\" style=\"--button_accent_color:var(--awb-color7);--button_accent_hover_color:var(--awb-color7);--button_border_hover_color:var(--awb-color4);--button_gradient_top_color:var(--awb-custom_color_3);--button_gradient_bottom_color:var(--awb-custom_color_3);--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_font_size:20px;--button_typography-font-family:&quot;Bungee&quot;;--button_typography-font-style:normal;--button_typography-font-weight:400;\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https:\/\/reserveren-delft.raceplanet.nl\/products?activiteiten=x-cube&amp;utm_source=x-cube&amp;utm_medium=referral&amp;utm_campaign=locatie-delft\"><i class=\"fa-shopping-cart 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\">Nu boeken<\/span><\/a><\/div><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=\"dag\">Woensdag <\/span><span class=\"tijd\">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; 22:00<\/span><\/div>\n<div><span class=\"dag\">Zaterdag <\/span><span class=\"tijd\">10:00 &#8211; 00:00<\/span><\/div>\n<div><span class=\"dag\">Zondag <\/span><span class=\"tijd\">10: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>Race Planet Delft<br \/>\n<\/strong>Kleveringweg 18<br \/>\n2616 LZ Delft<br \/>\n+31 (0)15 212 7125<\/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-4 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=Kleveringweg+18,+2616+LZ+Delft\"><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<p>&nbsp;<\/p>\n<div><strong>Steden dichtbij<\/strong><\/div>\n<div><span class=\"dag\">Den Haag<\/span><span class=\"tijd\">10,0 km<\/span><\/div>\n<div><span class=\"dag\">Rotterdam <\/span><span class=\"tijd\">15,0 km<\/span><\/div>\n<div><span class=\"dag\">Zoetermeer<\/span><span class=\"tijd\">20,0 km<\/span><\/div>\n<div><span class=\"dag\">Leiden<\/span><span class=\"tijd\">30,0 km<\/span><\/div>\n<div><span class=\"dag\">Dordrecht<\/span><span class=\"tijd\">35,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>Deze locatie beschikt over <strong data-start=\"2624\" data-end=\"2637\">2 X-Cubes<\/strong>, elk geschikt voor 6 spelers.<br data-start=\"2658\" data-end=\"2661\" \/>De X-Cubes bevinden zich op de <strong data-start=\"2692\" data-end=\"2707\">eerste verdieping<\/strong>, recht tegenover de bar.<br data-start=\"2743\" data-end=\"2746\" \/>Ze staan in een <strong data-start=\"2767\" data-end=\"2791\">afgesloten ruimte<\/strong>, zonder omgevingsgeluid \u2013 ideaal om je volledig op het spel te focussen.<br data-start=\"2855\" data-end=\"2858\" \/>Alle X-Cube spellen zijn hier beschikbaar.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"text-align:center;--awb-max-width:150px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-1 hover-type-none\"><img decoding=\"async\" width=\"300\" height=\"200\" title=\"X-Cube Amsterdam\" src=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/x-cube20.png\" alt class=\"img-responsive wp-image-6894\" srcset=\"https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/x-cube20-200x133.png 200w, https:\/\/x-cube.nl\/wp-content\/uploads\/2025\/06\/x-cube20.png 300w\" sizes=\"(max-width: 640px) 100vw, 300px\" \/><\/span><\/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    \/* General styles *\/\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    \/* Mapbox size *\/\r\n    .map-wrapper {\r\n        max-width: 100%;\r\n        width: 100%;\r\n        margin: 0 auto;\r\n    }\r\n\r\n    \/* Inner map *\/\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    \/* Sidebar section *\/\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    .geocoder {\r\n        width: 100%;\r\n    }\r\n\t\r\n\t\/* hide default suggestions\t *\/\r\n\t.suggestions-wrapper {\r\n\t\tdisplay: none;\r\n\t}\r\n\r\n    \/* Location list *\/\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\t\r\n\t.location-list::-webkit-scrollbar {\r\n\t\twidth: 8px;\r\n\t}\r\n\t\r\n\t.location-list::-webkit-scrollbar-thumb {\r\n  \t\tbackground: #9e9e9e;\r\n\t\tborder-radius: 8px;\r\n\t}\r\n\r\n\t.location-list::-webkit-scrollbar-thumb:hover {\r\n\t\tbackground: #767676;\r\n\t}\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\t\ttransition: 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\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\t\talign-items: center;\r\n    }\r\n\t\r\n\t.location-item .location {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t}\r\n\r\n    .location-item:hover {\r\n\t\tbackground-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\t\r\n\t.location-item h3 {\r\n\t\tcolor: #4A33C9 !important;\r\n\t\tfont-size: 20px !important;\r\n\t\tline-height: 24px !important;\r\n\t\tmargin: 0 !important;\r\n\t}\r\n\t\r\n\t.location-item p {\r\n\t\tline-height: 18px !important;\r\n\t\topacity: 0.75 !important;\r\n\t\tmargin: 0 !important;\r\n\t}\r\n\r\n    \/* Map *\/\r\n    #map {\r\n        width: 100%;\r\n        height: 70vh;\r\n        font-family: \"Montserrat\", sans-serif;\r\n    }\r\n\r\n    \/* Custom marker *\/\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    \/* Mapbox geocoder control *\/\r\n    .mapboxgl-ctrl-geocoder {\r\n        min-width: 100%;\r\n    }\r\n\r\n    \/*Spyglass icon*\/\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    \/* Mapbox popup content *\/\r\n    .mapboxgl-popup-content {\r\n        border-width: 0px;\r\n        --tw-border-opacity: 1;\r\n        border-color: rgb(79 84 95 \/ var(--tw-border-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: rgb(53 0 85 \/ var(--tw-text-opacity));\r\n        font-family: Rubik, Arial, sans-serif;\r\n        font-size: .875rem;\r\n        line-height: 1.25rem;\r\n        padding: 0;\r\n        height: auto;\r\n        width: -moz-fit-content;\r\n        width: fit-content;\r\n        max-width: 20rem;\r\n    }\r\n\r\n    \/* Mapbox popup close button *\/\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    \/* Mapbox popup content title *\/\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    \/* Mapbox popup content body *\/\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: 1rem;\r\n    }\r\n\r\n    \/* Mapbox popup content link *\/\r\n    .mapboxgl-popup-content a {\r\n        text-transform: uppercase;\r\n        text-decoration: none;\r\n        color: #fff;\r\n    }\r\n\r\n    \/* Button styles *\/\r\n    .mapboxgl-popup-content a .btn {\r\n        display: flex;\r\n        font-weight: 800;\r\n        align-items: center;\r\n        justify-content: center;\r\n        font-size: 1rem;\r\n        padding-left: 1.5rem;\r\n        padding-right: 1.5rem;\r\n        padding-top: 0.8125rem;\r\n        padding-bottom: 0.8125rem;\r\n        font-family: MADESoulmaze, sans-serif;\r\n        font-size: 1rem;\r\n        line-height: 1.25em;\r\n        --tw-text-opacity: 1;\r\n        color: rgb(255 255 255 \/ var(--tw-text-opacity));\r\n\/* \t\tbackground-color: #4A33C9; *\/\r\n    }\r\n\r\n    \/* Button glow effect *\/\r\n    .mapboxgl-popup-content a .btn {\r\n        --glow-color: white;\r\n        --inset-border-color: rgba(79, 0, 128, .25);\r\n        --shadow-color: rgba(0, 0, 0, .25);\r\n        transition-property: background-position, box-shadow;\r\n        transition-timing-function: cubic-bezier(.4, 0, .2, 1);\r\n        transition-duration: .15s;\r\n        transition-duration: 1.2s;\r\n        box-shadow: 0 0 0 0 inset transparent, 0 0 0 0 transparent, 0 0 0 transparent;\r\n    }\r\n\r\n    \/* Button color *\/\r\n    .mapboxgl-popup-content a .btn--pink {\r\n        --glow-color: #FF00B8;\r\n        --inset-border-color: rgba(255, 255, 255, .25);\r\n        --tw-bg-opacity: 1;\r\n        background-color: #4A33C9;\r\n    }\r\n\r\n    \/* Header section *\/\r\n    .header-section {\r\n        display: flex;\r\n        padding: 5px;\r\n    }\r\n\r\n    \/* Toggle button *\/\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    \/* Width for screens smaller than 700px*\/\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<!-- HTML structure -->\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                <button class=\"btn toggle-btn\" id=\"toggle-btn\">&#9776;<\/button>\r\n                <div id=\"geocoder\" class=\"geocoder\"><\/div>\r\n            <\/div>\r\n\r\n            <!-- Location list -->\r\n            <div class=\"location-list\">\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- Map container -->\r\n        <div id=\"map\"><\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<!-- Include PapaParse for CSV parsing -->\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<!-- JavaScript code -->\r\n<script>\r\n\r\n    \/\/ Mapbox access token\r\n    mapboxgl.accessToken = 'pk.eyJ1IjoieGN1YmV0ZWNoIiwiYSI6ImNsazB4aG85bTAwNWkzaW92cW4xejhkaHkifQ.Mr8oNwtF_lxKf9RWSrPDiA';\r\n\r\n    \/\/ Initialize Mapbox map\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    \/\/ Check if the device is mobile\r\n    const mobileCheck = function () {\r\n        \/\/ Regular expression to check for mobile devices\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    \/\/ SVG icons for markers\r\n    const svgIcons = `\r\n        <svg display=\"block\" height=\"41px\" width=\"27px\" viewBox=\"0 0 27 41\">\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        \/\/ SVG icons for markers\r\n        const svgIconsHidden = `\r\n        <svg display=\"none\">\r\n        <\/svg>\r\n    `;\r\n\r\n    \/\/ Initialize active marker and popup variables\r\n    var activeMarkerEl, activePopup, locationsMarkers, locations = [];\r\n    var popup = new mapboxgl.Popup();\r\n\r\n    \/\/ Forward geocoder function\r\n    function forwardGeocoder(query) {\r\n        const matchingFeatures = [];\r\n        for (const feature of locations) {\r\n            if (\r\n                feature.Name\r\n                    .toLowerCase()\r\n                    .includes(query.toLowerCase())\r\n            ) {\r\n                let locationFeature = {}\r\n                locationFeature['text'] = `${feature.Name}`;\r\n                locationFeature['place_name'] = `${feature.Name}, x-cube-location`;\r\n                locationFeature['center'] = [parseFloat(feature.Longitude), parseFloat(feature.Latitude)];\r\n                locationFeature['place_type'] = ['park'];\r\n                locationFeature['location_type'] = 'x-cube-location';\r\n                matchingFeatures.push(locationFeature);\r\n            }\r\n        }\r\n        return matchingFeatures;\r\n    }\r\n\r\n    \/\/ Add the control to the map.\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    \/\/ Add geocoder control to the map\r\n    document.getElementById('geocoder').appendChild(geocoder.onAdd(map));\r\n\r\n    \/\/ When the map is loaded\r\n    map.on(\"load\", (e) => {\r\n        \/\/ Get the locations\r\n        geocoder.on(\"result\", ({ result }) => {\r\n        })\r\n        getLocations();\r\n\r\n        \/\/ Toggle button click event\r\n        document.getElementById(\"toggle-btn\").onclick = (e) => {\r\n            document.querySelector(\".location-list\").classList.toggle(\"show\");\r\n        }\r\n    });\r\n    function getTopDomain() {\r\n        \/\/ Get the current URL\r\n        var url = document.URL;\r\n\r\n        \/\/ Extract the domain using a regular expression\r\n        var domain = url.match(\/^(?:https?:\\\/\\\/)?(?:[^@\\n]+@)?(?:www\\.)?([^:\\\/\\n]+)\/im)[1];\r\n\r\n        \/\/ Split the domain by '.' to get the top-level domain\r\n        var parts = domain.split('.');\r\n        var topLevelDomain = parts[parts.length - 1];\r\n        return topLevelDomain;\r\n    }\r\n    function getPageURL() {\r\n        \/\/ Get the current URL\r\n        var url = document.URL;\r\n        var parts = url.split('\/')\r\n        var getPageEndURL = parts[parts.length - 2];\r\n        return getPageEndURL;\r\n    }\r\n\r\n    \/\/ Get locations from Google document and add them as markers\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                let topDomain = getTopDomain();\r\n                let pageURL = getPageURL();\r\n                \/\/ Sorting function URL top level domain\r\n                locations.sort((a, b) => {\r\n                    if (a.WebCode === topDomain) {\r\n                        return -1; \/\/ a comes first\r\n                    } else if (b.WebCode === topDomain) {\r\n                        return 1; \/\/ b comes first\r\n                    } else {\r\n                        return 0; \/\/ no change in\u00a0order\r\n                    }\r\n                });\r\n                if (pageURL != \"locations\") {\r\n                    \/\/ Sorting function URL with \/\r\n                    locations.sort((a, b) => {\r\n                        if (a.Country.toLowerCase() === pageURL) {\r\n                            return -1; \/\/ a comes first\r\n                        } else if (b.Country.toLowerCase() === pageURL) {\r\n                            return 1; \/\/ b comes first\r\n                        } else {\r\n                            return 0; \/\/ no change in\u00a0order\r\n                        }\r\n                    })\r\n                };\r\n                map.flyTo({\r\n                    center: [parseFloat(locations[0].FocusLon), parseFloat(locations[0].FocusLat)],\r\n                    zoom: locations[0].FocusZoom\r\n                });;\r\n                renderMarkers(locations);\r\n                renderLocationList(locations);\r\n            }\r\n        })\r\n    }\r\n\t\r\n\t\/\/ \tFilter locations based off input\r\n\tfunction searchLocation(term) {\r\n\t\tlet filteredLocations = locations.filter(location => {\r\n\t\t  return location.Name.toLowerCase().includes(term.toLowerCase()) ||\r\n\t\t\tlocation.Country.toLowerCase().includes(term.toLowerCase()) ||\r\n\t\t\tlocation.WebCode.toLowerCase().includes(term.toLowerCase()) ||\r\n\t\t\tlocation.City.toLowerCase().includes(term.toLowerCase()) ||\r\n\t\t\tlocation.Address.toLowerCase().includes(term.toLowerCase());\r\n\t\t});\r\n\t\trenderMarkers(filteredLocations);\r\n\t\trenderLocationList(filteredLocations);\r\n\t  }\r\n\r\n\t  \/\/ Listen for input\r\n\t  document.querySelector('.mapboxgl-ctrl-geocoder--input').addEventListener(\"input\", (e) => {\r\n\t\t\r\n\t\tif (e.target.value.length > 0) {\r\n\t\t\tdocument.querySelector('.location-list').classList.add('show');\r\n\t\t}\r\n\t\t  \r\n\t\tsearchLocation(e.target.value);\r\n\t  })\r\n\t\r\n\t\/\/ Listen for input X\r\n\tdocument.querySelector('.mapboxgl-ctrl-geocoder--button').addEventListener(\"click\", (e) => {\r\n\t\tsearchLocation(\"\")\r\n\t  })\r\n\t\r\n\/\/ Render the location list\r\nfunction renderLocationList(items) {\r\n    const itemsContainer = document.querySelector(\".location-list\");\r\n    if (!itemsContainer) {\r\n        return;\r\n    }\r\n\r\n    const locationItems = items\r\n        .filter(entry => !entry.Name.includes('Display'))\r\n        .map(entry => `\r\n            <div class=\"location-item\" data-href=\"\" data-name=\"${entry.Name}\">\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=\"Country flag\">\r\n            <\/div>\r\n        `)\r\n        .join(\"\");\r\n\r\n    itemsContainer.innerHTML = locationItems;\r\n\r\n    fireClickListener(); \/\/ Make sure this function is defined elsewhere\r\n}\r\n\r\n  \/\/ Add click event listener to location items\r\n  function fireClickListener() {\r\n    let locationListItems = document.querySelectorAll(\".location-item\");\r\n    locationListItems.forEach(item => {\r\n      item.onclick = (e) => {\r\n        let name = item.getAttribute('data-name');\r\n        toggleMarkerByName(name);\r\n        if (mobileCheck()) {\r\n          document.querySelector(\".location-list\").classList.remove(\"show\");\r\n        }\r\n      }\r\n    });\r\n  }\r\n\t\r\n \/\/ Toggle marker by name\r\n  function toggleMarkerByName(name) {\r\n    let location = locations.find(entry => entry.Name === name);\r\n    locationsMarkers.forEach(marker => {\r\n      if (marker.title === name) {\r\n        let popup = marker.getPopup();\r\n        if (activePopup) {\r\n          activePopup.remove();\r\n        }\r\n        marker.togglePopup();\r\n        activeMarkerEl = marker.getElement();\r\n        activeMarkerEl.classList.add(\"active\");\r\n        activePopup = popup;\r\n        \/\/Set point of focus\r\n        map.flyTo({\r\n          center: [parseFloat(location.Longitude), parseFloat(location.Latitude)],\r\n          zoom: 15\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  \/\/Render the location markers\r\n  function renderMarkers(cities) {\r\n    locationsMarkers = cities.map((city, i) => {\r\n      let cityMarker = createMarker(city, i);\r\n      return cityMarker;\r\n    });\r\n  }\r\n\r\n  \/\/Marker logic\r\n  function createMarker(entry, i) {\r\n    let markerEl = document.createElement(\"div\");\r\n    markerEl.classList.add(\"div-marker\");\r\n    if (entry['Booking Link']) {\r\n      markerEl.innerHTML += svgIcons;\r\n    } else {\r\n      markerEl.innerHTML += svgIconsHidden;\r\n    }\r\n    let popup = createPopup(entry);\r\n    let marker = new mapboxgl.Marker({ element: markerEl })\r\n    marker.setLngLat([parseFloat(entry.Longitude), parseFloat(entry.Latitude)]).setPopup(popup).addTo(map);\r\n    marker.title = entry.Name;\r\n    popup.on(\"close\", (e) => {\r\n      activeMarkerEl.classList.remove(\"active\");\r\n    });\r\n    markerEl.addEventListener(\"click\", (e) => {\r\n      e.stopPropagation();\r\n      if (activeMarkerEl && activeMarkerEl != e.target) {\r\n        activeMarkerEl.classList.remove(\"active\");\r\n        activePopup.remove();\r\n      }\r\n      e.target.classList.add(\"active\");\r\n      marker.togglePopup();\r\n      activeMarkerEl = e.target;\r\n      activePopup = popup;\r\n    });\r\n    return marker;\r\n  }\r\n\r\n    \/\/Create popup window for marker\r\n    function createPopup(entry) {\r\n        let popupContent\r\n        if (entry['Booking Link']) {\r\n            popupContent = `\r\n            <div class=\"p-4 flex-1 popup-content\">\r\n                <h2 class=\"text-lg font-black italic\">${entry.Name}<span class=\"text-base font-body-ff font-light ml-1 text-normal not-italic normal-case text-pink-300\" data-distance=\"\"><\/span><\/h2>\r\n                <div class=\"mb-4\">${entry.Name}, ${entry.City}, ${entry.Country}<\/div>\r\n                <a href=\"${entry['Booking Link']}\" target=\"_blank\" class=\" uppercase before:bg-secondary\">\r\n                    <div class=\"btn btn--pink relative py-button-y px-button-x text-center\" data-map-select-location=\"\" data-cta-text=\"\">FIND OUT MORE<\/div>\r\n                <\/a>\r\n            <\/div>\r\n            `;\r\n        } else {\r\n            popupContent = `\r\n            <div class=\"p-4 flex-1 popup-content\" hidden>\r\n            <h2 class=\"text-lg font-black italic\">${entry.Name}<span class=\"text-base font-body-ff font-light ml-1 text-normal not-italic normal-case text-pink-300\" data-distance=\"\"><\/span><\/h2>\r\n            <div class=\"mb-4\">${entry.Name}, ${entry.City}, ${entry.Country}<\/div>\r\n            <a href=\"${entry['Booking Link']}\" class=\"uppercase before:bg-secondary\">\r\n                <div class=\"btn btn--pink relative py-button-y px-button-x text-center\" data-map-select-location=\"\" data-cta-text=\"\">FIND OUT MORE<\/div>\r\n        <\/a>\r\n        <\/div>\r\n            `;\r\n        }\r\n\r\n        let coordinates = [parseFloat(entry.Longitude), parseFloat(entry.Latitude)];\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-6858","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/x-cube.nl\/nl\/wp-json\/wp\/v2\/pages\/6858","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=6858"}],"version-history":[{"count":0,"href":"https:\/\/x-cube.nl\/nl\/wp-json\/wp\/v2\/pages\/6858\/revisions"}],"wp:attachment":[{"href":"https:\/\/x-cube.nl\/nl\/wp-json\/wp\/v2\/media?parent=6858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}