Book your stay today | - Visit Red Sea
Where to stay
Experience luxury and nature, residing in perfect harmony
RESORTS
Six Senses Southern Dunes, The Red Sea
Inspired by the Nabataean traders, the Six Senses Southern Dunes Resort echoes the shape of the desert to offer prime aspects over the inspiring landscape of the Hijaz Mountains. Venture to The Artisan Village to hear a story of cultural history and heritage, or under the canopy of the Oasis, the heart of the resort, where vibrant activities gather under one roof.
Book nowRESORTS
The St. Regis Red Sea Resort
Find your sanctuary on the secluded Ummahat Island at The St Regis Red Sea Resort, where 90 spectacular avant-garde villas dot the landscape. This vision of exquisite living is just a short boat – or seaplane – ride away. The resort includes high-tech fitness center, kids club, state-of-the-art spa and pool. Bespoke services and the St. Regis Butler Service ensures your needs are catered to, whilst three restaurants, each with its own distinct concept, artfully combine the spirit of the region with exceptional fine dining.
Book nowTHE RED SEA
Discover our luxury resorts
A handpicked selection of the best luxury hotels and resorts on the planet.
Inspired by the Nabataean traders, the Six Senses Southern Dunes Resort echoes the shape of the desert to offer prime aspects over the inspiring landscape of the Hijaz Mountains. Venture to The Artisan Village to hear a story of cultural history and heritage, or under the canopy of the Oasis, the heart of the resort, where vibrant activities gather under one roof.
Find your sanctuary on the secluded Ummahat Island at The St. Regis Red Sea Resort, where 90 spectacular avant- garde villas dot the landscape. Fringed by a thriving coral reef, and devoted to the preservation of a diverse ecosystem, this vision of exquisite living is just a short boat – or seaplane – ride away.
Transcend the ordinary, with a high-tech fitness center and kids club, or relax in our state-of-the-art spa and pool. Bespoke services and the St. Regis Butler Service ensures everyone’s needs are catered to, whilst three restaurants, each with its own distinct concept, artfully combine the spirit of the region with exceptional fine dining.
EXPLORING THE RED SEA
Pristine islands and breathtaking reefs
One of the world’s last true hidden treasures, The Red Sea is surrounded by the world’s fourth-largest barrier reef system and spans over 28,000-square-kilometer with an archipelago of more than 90 untouched island,dormant volcanos, sweeping desert dunes, mountain canyons and historical and cultural sites. The Red Sea will be ready to welcome the first guests in Winter 2024.
EXPLORING THE RED SEA
Majestic mountains and sprawling dunes
As the sun's gentle touch illuminates the rugged mountain peaks and the golden sands of the desert dunes, a world of opulence and elegance unfolds. Indulge in the finest accommodations, where modern comfort harmonizes with ancient landscapes, offering breathtaking views and unparalleled relaxation.
The following has evaluated to null or missing: ==> element.linkToPage [in template "20097#20123#378290" at line 73, column 62] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${element.linkToPage.getFriendlyUrl()} [in template "20097#20123#378290" at line 73, column 60] ----
1<div class="bgContainer bgContainer--shapeBottomStart bgContainer--white">
2 <#if (shapeBackgroundImage.getData())?? && shapeBackgroundImage.getData() != "">
3 <img class="bgContainer__shape bgContainer__shape--1" ale="background shape" width="417" height="1172" data-fileentryid="${shapeBackgroundImage.getAttribute("fileEntryId")}" src="${shapeBackgroundImage.getData()}" />
4 </#if>
5 <!-- begin sections/filteredGrid -->
6 <section
7 class="filteredGrid filteredGrid--transparent filteredGrid--smallPaddingTop filteredGrid--smallPaddingBottom">
8 <div class="filteredGrid__inner wrapper" data-scroll-anim="">
9
10 <!-- begin components/heading -->
11 <div class="heading heading--horizontal heading--horizontal11 filteredGrid__heading"
12 data-scroll-anim-item="fadeInStart;0;0.3;easeOutCubic" style="transform: translateX(0px); opacity: 1;">
13 <h2 class="heading__title"><#if (title.getData())??>
14 ${title.getData()}
15 </#if></h2>
16 <h3 class="heading__subtitle"><#if (subtitle.getData())??>
17 ${subtitle.getData()}
18 </#if></h3>
19 <p class="heading__text"><#if (lead.getData())??>
20 ${lead.getData()}
21 </#if></p>
22 </div>
23 <!-- end components/heading -->
24 <div class="filteredGrid__filters">
25 <div class="filteredGrid__label"><#if (searchText.getData())??>${searchText.getData()}</#if></div>
26 <div class="filteredGrid__fields">
27 <#if categoryGroup.getSiblings()?has_content>
28 <#assign seq = categoryGroup.getSiblings()>
29 <#list categoryGroup.getSiblings() as cur_category_group>
30 <div id="hotel-filter-${cur_category_group?index}" class="filteredGrid__field">
31
32 <!-- begin components/select -->
33
34 <div class="select select--skies select--placeholder" data-input-label="select--filled"
35 data-custom-select="" data-custom-select-theme="skies">
36 <select id="<#if (cur_category_group.category.getData())??>${cur_category_group.category.getData()}
37</#if>" name="<#if (cur_category_group.category.getData())??>${cur_category_group.category.getData()}</#if>" class="select__select select__input--hidden" data-input-label-input="" data-custom-select-input="">
38 <option value="" class="select__option" selected="selected"></option>
39 <#if cur_category_group.option.getSiblings()?has_content>
40 <#list cur_category_group.option.getSiblings() as cur_categoryGroup_option>
41 <#if (cur_categoryGroup_option.getData())??>
42 <option value="${cur_categoryGroup_option.getData()}"
43 class="select__option">${cur_categoryGroup_option.getData()}</option>
44
45 </#if>
46 </#list>
47 </#if>
48
49 </select>
50 <label for="<#if (cur_category_group.category.getData())??>${cur_category_group.category.getData()}</#if>" class="select__label"><#if (cur_category_group.category.getData())??>
51 ${cur_category_group.category.getData()}
52 </#if>
53 </label>
54 <span class="input__error"></span>
55 </div>
56
57 <!-- end components/select -->
58 </div>
59 </#list>
60 </#if>
61
62 </div>
63 </div>
64
65 <div class="filteredGrid__grid">
66
67 <#if card.getSiblings()?has_content>
68 <#list card.getSiblings() as element>
69 <#if (element.cardLink.getData()?has_content)>
70 <a href="<#if (element.cardLink.getData())??>${element.cardLink.getData()}</#if>" class="gridTile gridTile--default filteredGrid__item" data-card" <#if getterUtil.getBoolean(element.openInNewTab.getData())>target="_blank"</#if>
71 >
72 <#else>
73 <a data-senna-off="true" href="${element.linkToPage.getFriendlyUrl()}" class="gridTile gridTile--default filteredGrid__item" data-card" <#if getterUtil.getBoolean(element.openInNewTab.getData())>target="_blank"</#if>>
74 </#if>
75 <div class="gridTile__label gridTile__label--top"><#if getterUtil.getBoolean(element.opens.getData())>OPENS<#elseif getterUtil.getBoolean(element.planned.getData())><#else></#if></div>
76 <#if element.cardCategory.getSiblings()?has_content>
77 <#list element.cardCategory.getSiblings() as cur_card_category>
78 <input class="hidden-input" type="hidden"
79 data-select-id="${cur_card_category?index}"
80 data-input-id="${element_index}"
81 value="<#if (cur_card_category.categoryValue.getData())??>${cur_card_category.categoryValue.getData()}</#if>"
82 >
83 </#list>
84 </#if>
85 <div class="gridTile__logo">
86 <#if (element.cardDefaultImage.getData())?? && element.cardDefaultImage.getData() != "">
87 <img width="140" height="30" class="gridTile__logoImg gridTile__logoImg--default"
88 alt="${element.cardDefaultImage.getAttribute("alt")}"
89 data-fileentryid="${element.cardDefaultImage.getAttribute("fileEntryId")}"
90 src="${element.cardDefaultImage.getData()}"/>
91 </#if><#if (element.cardOverlayImage.getData())?? && element.cardOverlayImage.getData() != "">
92 <img width="140" height="30" class="gridTile__logoImg gridTile__logoImg--hover"
93 alt="${element.cardOverlayImage.getAttribute("alt")}"
94 data-fileentryid="${element.cardOverlayImage.getAttribute("fileEntryId")}"
95 src="${element.cardOverlayImage.getData()}"/>
96 </#if>
97 </div>
98 <div class="gridTile__label gridTile__label--bottom"><#if (element.date.getData())??>${element.date.getData()}</#if>
99 </div>
100
101 </a>
102 </#list>
103 </#if>
104
105 </div>
106 </div>
107 </section>
108 <!-- end sections/filteredGrid -->
109</div>
110<script>
111 function getValues(select) {
112 const newArray = []
113 var inputs = select.querySelector('.select__value');
114 inputs.forEach(function (input) {
115 if (!!input.innerHTML.trim()) {
116 newArray.push(input.innerHTML.trim());
117 }
118 })
119 return newArray;
120 }
121
122 function Listen() {
123 var filterSelects = document.querySelectorAll('.select');
124 const cards = document.querySelectorAll(`[data-card]`);
125 function getCardValues(card) {
126 const CardValueArray = []
127 var inputs = card.querySelectorAll('.hidden-input');
128 inputs.forEach(function (input) {
129 if (!!input.value.trim()) {
130 CardValueArray.push(input.value.trim());
131 }
132 })
133 return CardValueArray;
134 }
135 function updateCardVisibility() {
136 cards.forEach(function (card) {
137 const cardValues = Array.from(card.querySelectorAll('.hidden-input'));
138 const cardMatches = Array.from(filterSelects).every(function (filterSelect, selectIndex) {
139 const selectedValue = filterSelect.querySelector('.select__value').innerHTML;
140 console.log("selectedValue " + selectedValue);
141 const hasMatchingValue = cardValues.some(function (cardValue) {
142 console.log(cardValue.value);
143
144 return cardValue.dataset.selectId == selectIndex && cardValue.value.trim() == selectedValue.trim();
145 });
146 return selectedValue === '' || hasMatchingValue;
147 });
148 card.style.display = cardMatches ? 'flex' : 'none';
149 });
150 }
151 filterSelects.forEach(function (filterSelect) {
152 const selectInSelect = filterSelect.querySelector('select');
153 selectInSelect.addEventListener('blur', updateCardVisibility);
154 });
155 }
156 Listen();
157
158
159</script>