@everymatrix/casino-footer-v2 0.0.190 → 0.0.347

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,282 +1,656 @@
1
1
  <svelte:options tag={null} />
2
- <script lang="typescript">
3
- import '@everymatrix/casino-footer-section-v2';
4
2
 
5
- export let endpoint:String = '';
6
- export let clientstyling:String = '';
7
- export let target:String = '';
3
+ <script lang="ts">
4
+ import '@everymatrix/casino-footer-section';
5
+ import '@everymatrix/panic-button';
8
6
 
9
- let gameVendorsLinksTitle:String = '';
7
+ import moment from 'moment';
8
+ import { checkSession } from 'rvhelper';
9
+ import { _, addNewMessages, setLocale } from './i18n';
10
+ import { CasinoFooterTranslations } from './translations.js'
11
+
12
+ export let endpoint:string = '';
13
+ export let lang:string = 'en';
14
+ export let env:string = '';
15
+ export let clientstyling:string = '';
16
+ export let clientstylingurl:string = '';
17
+ export let target:string = '';
18
+
19
+ // Clock exposed attributes - If the clock is enabled, all attributes should be given a value, otherwise they can be ignored safely
20
+ export let clockenabled:string = ''; // "true" to enable, anything to disable
21
+ export let clocksecondsenabled:string = ''; // "true" to display seconds in our default format and to refresh the clock every 1000ms
22
+ export let clockcustomformat:string = ''; // "false" for defaulting to our format
23
+ export let clocktext:string = 'Time'; // string preceding clock
24
+
25
+ export let languageselectorenabled = 'true';
26
+ export let languageslist:string = 'en, ro';
27
+ export let languagedisplaytype = 'name';
28
+ export let session:string = '';
29
+ export let userid:string = '';
30
+ export let userendpoint:string = '';
31
+ export let panicbuttonenabled:string = 'true';
32
+ export let sessiontimerenabled = 'true'; // 'true' to enable, anything to disable
33
+
34
+ let gameVendorsLinksTitle:string = '';
10
35
  let gameVendorsRepeater:Array<Object> = [];
11
- let paymentLinksTitle:String = '';
36
+ let paymentLinksTitle:string = '';
12
37
  let paymentMethodsRepeater:Array<Object> = [];
13
- let sponsorsLinksTitle:String = '';
38
+ let sponsorsLinksTitle:string = '';
14
39
  let sponsorsRepeater:Array<Object> = [];
15
- let helpLinksTitle:String = '';
40
+ let helpLinksTitle:string = '';
16
41
  let helpLinksRepeater:Array<Object> = [];
17
- let licensesLinksTitle:String = '';
42
+ let licensesLinksTitle:string = '';
18
43
  let licensesRepeater:Array<Object> = [];
19
- let socialLinksTitle:String = '';
44
+ let socialLinksTitle:string = '';
20
45
  let socialLinksRepeater:Array<Object> = [];
21
- let copyright:String = '';
22
- let licenseDesc:String = '';
23
- let licenseContainer:HTMLElement;
24
- let copyrightContainer:HTMLElement;
25
- let footerWidget:HTMLElement;
26
- let hasErrors:Boolean = false;
46
+ let copyright:string = '';
47
+ let licenseDesc:string = '';
48
+ let hasErrors:boolean = false;
27
49
  let isLoading:boolean = false;
28
50
  let receivedFooterData:any;
29
51
  let customStyling:string = '';
52
+ let headScript:boolean = false;
53
+ let licenseScriptSrc:string = '';
54
+ let licenseScript:string = '';
55
+ let isLoggedIn:boolean = false;
56
+ let sessionID:string = '';
57
+ let playerID:string = '';
58
+ let selectedLanguage:string = 'hr';
59
+ let languages:Array<object> = [];
60
+
61
+ let time:string;
62
+ let refreshRate: number;
63
+
64
+ let languagesArray:Array<string> = [];
65
+ let languageDrawer: HTMLElement;
66
+ let languageDisplayName:string = '';
67
+ let currentLanguageFlag:string = '';
68
+ let languagePackLoaded:boolean = false;
69
+
70
+ let timeString:string = '';
71
+
72
+ let customStylingContainer:HTMLElement;
73
+
74
+ Object.keys(CasinoFooterTranslations).forEach((item:any) => {
75
+ addNewMessages(item, CasinoFooterTranslations[item]);
76
+ });
77
+
78
+ // needed for session timer
79
+ const setSession = ():void => {
80
+ checkSession(userendpoint, session).then((res:any) => {
81
+ sessionID = res.Guid;
82
+ playerID = res.UserID;
83
+ isLoggedIn = true;
84
+ }, (err:any) => {
85
+ isLoggedIn = false;
86
+ console.error('Error while checking the session - ', err)
87
+ });
88
+ }
89
+
90
+ const setSessionTimer = ():void => {
91
+ // using Date instead of moment because they recommend in their docs to stop using it for new projects
92
+ const sessionData = JSON.parse(localStorage.session);
93
+ const loginTime = new Date(sessionData.Login);
94
+ const timezoneOffsetHours = new Date().getTimezoneOffset() / 60;
95
+ let currentTime = new Date();
96
+ let milisecondDifference = currentTime.getTime() - loginTime.getTime();
97
+
98
+ let hours = Math.floor(milisecondDifference / 3600000) + timezoneOffsetHours;
99
+ let minutes = Math.floor(milisecondDifference % 3600000 / 60000);
100
+ let seconds = Math.floor(milisecondDifference % 60000 / 1000);
101
+
102
+ setInterval(() => {
103
+ hours = Math.floor(milisecondDifference / 3600000) + timezoneOffsetHours;
104
+ minutes = Math.floor(milisecondDifference % 3600000 / 60000);
105
+ seconds = Math.floor(milisecondDifference % 60000 / 1000);
106
+
107
+ timeString = `${hours > 9 ? hours : '0' + hours}:${minutes > 9 ? minutes : '0' + minutes}:${seconds > 9 ? seconds : '0' + seconds}`;
108
+
109
+ milisecondDifference += 1000;
110
+ },1000);
111
+ }
112
+
113
+ const refreshClock = ():void => {
114
+ setInterval(() => {
115
+ clockDisplay();
116
+ }, refreshRate);
117
+ }
118
+
119
+ const clockDisplay = ():void => {
120
+ const format = clockcustomformat != 'false' ? clockcustomformat : `hh:mm${clocksecondsenabled === "true" ? ':ss' : ''} (UTC Z)`;
121
+ time = moment().format(format);
122
+ }
123
+
124
+ const getCmsData = ():void => {
125
+ let url:URL = new URL(`${endpoint}/${lang}/footer-raw-data?env=${env}`);
30
126
 
31
- const getData = () => {
32
127
  isLoading = true;
33
128
 
34
- fetch(endpoint)
35
- .then((res:any) => res.json())
36
- .then((data:any) => {
37
- isLoading = false;
129
+ fetch(url.href)
130
+ .then((res:any) => res.json())
131
+ .then((data:any) => {
132
+ isLoading = false;
133
+ receivedFooterData = data;
134
+ let licenseHeadScriptSrc,
135
+ licenseScriptBody,
136
+ licenseEvent;
137
+ ({
138
+ gameVendorsLinksTitle,
139
+ gameVendorsRepeater,
140
+ paymentLinksTitle,
141
+ paymentMethodsRepeater,
142
+ sponsorsLinksTitle,
143
+ sponsorsRepeater,
144
+ helpLinksTitle,
145
+ helpLinksRepeater,
146
+ licensesLinksTitle,
147
+ licensesRepeater,
148
+ socialLinksTitle,
149
+ socialLinksRepeater,
150
+ copyright,
151
+ licenseDesc,
152
+ licenseHeadScriptSrc,
153
+ licenseScriptBody,
154
+ licenseEvent,
155
+ language : languages
156
+ } = receivedFooterData);
38
157
 
39
- receivedFooterData = data;
158
+ if (languages) {
159
+ languagePackLoaded = true;
160
+ updateLanguageDisplayName();
161
+ }
162
+
163
+ if (licenseHeadScriptSrc?.length > 0) {
164
+ headScript = true;
165
+ licenseScriptSrc = licenseHeadScriptSrc;
166
+ }
167
+
168
+ if (licenseScriptBody?.length > 0) {
169
+ licenseScript = licenseScriptBody;
170
+ }
40
171
 
41
- ({gameVendorsLinksTitle, gameVendorsRepeater, paymentLinksTitle, paymentMethodsRepeater, sponsorsLinksTitle, sponsorsRepeater, helpLinksTitle, helpLinksRepeater, licensesLinksTitle, licensesRepeater, socialLinksTitle, socialLinksRepeater, copyright, licenseDesc} = receivedFooterData);
172
+ window.postMessage({ type: licenseEvent }, window.location.href);
42
173
 
43
- window.postMessage({ type: 'FooterData', gameVendorsRepeater, paymentMethodsRepeater, sponsorsRepeater, helpLinksRepeater, licensesRepeater, socialLinksRepeater}, window.location.href);
44
- }).catch((err:any) => {
45
- hasErrors = true;
46
- isLoading = false;
174
+ window.postMessage({
175
+ type: 'FooterData',
176
+ gameVendorsRepeater,
177
+ paymentMethodsRepeater,
178
+ sponsorsRepeater,
179
+ helpLinksRepeater,
180
+ licensesRepeater,
181
+ socialLinksRepeater
182
+ }, window.location.href);
183
+ }).catch((err:any) => {
184
+ hasErrors = true;
185
+ isLoading = false;
47
186
 
48
- console.error(err);
49
- });
187
+ console.error(err);
188
+ });
50
189
  }
51
190
 
52
- const setContent = (element:HTMLElement, content:any) => {
191
+ const setContent = (element:HTMLElement, content:any):void => {
53
192
  let htmlContent = document.createElement("div");
54
193
  htmlContent.innerHTML = content;
55
194
  element.append(htmlContent);
56
195
  }
57
196
 
58
- const setClientStyling = () => {
197
+ const setClientStyling = ():void => {
59
198
  let sheet = document.createElement('style');
60
199
  sheet.innerHTML = clientstyling;
61
- footerWidget.appendChild(sheet);
200
+ if (customStylingContainer) {
201
+ customStylingContainer.appendChild(sheet);
202
+ }
203
+ }
204
+
205
+ const setClientStylingURL = ():void => {
206
+ let url:URL = new URL(clientstylingurl);
207
+ let cssFile:HTMLElement = document.createElement('style');
208
+
209
+ fetch(url.href)
210
+ .then((res:any) => res.text())
211
+ .then((data:any) => {
212
+ cssFile.innerHTML = data
213
+
214
+ if (customStylingContainer) {
215
+ setTimeout(() => { customStylingContainer.appendChild(cssFile) }, 1);
216
+ }
217
+ });
218
+ }
219
+
220
+ const changeLanguage = ():void => {
221
+ window.postMessage({type: 'LanguageChanged', selectedLanguage}, window.location.href);
222
+ };
223
+
224
+ const toggleLanguageDrawer = ():void => {
225
+ languageDrawer.classList.toggle('hidden');
226
+ }
227
+
228
+ const overlayOptionTrigger = (e):void => {
229
+ let option = e.target.closest('.overlayLanguageOption');
230
+ selectedLanguage = option.getAttribute('data-lang');
231
+ changeLanguage();
232
+ updateLanguageDisplayName();
233
+ languageDrawer.classList.toggle('hidden');
234
+ };
235
+
236
+ const updateLanguageDisplayName = ():void => {
237
+ let matchFound = false;
238
+
239
+ languages.forEach((l:any, i:number) => {
240
+ if (l.code == selectedLanguage.toLowerCase()) {
241
+ matchFound = true;
242
+ let langName:string = '';
243
+ currentLanguageFlag = l.flag_icon_editable;
244
+ switch (languagedisplaytype) {
245
+ case 'name':
246
+ langName = l.name;
247
+ break;
248
+
249
+ case 'translatedName':
250
+ langName = l.translated_name;
251
+ break;
252
+
253
+ default:
254
+ langName = l.code;
255
+ break;
256
+ }
257
+ languageDisplayName = langName;
258
+ }
259
+ });
260
+
261
+ if (!matchFound) {
262
+ languageDisplayName = selectedLanguage;
263
+ }
264
+ }
265
+
266
+ const setLanguagesArray = ():void => {
267
+ languagesArray = languageslist.replace(/ /g,'').split(',');
268
+ languagesArray = languagesArray.map((language:string) => language.toUpperCase());
62
269
  }
63
270
 
271
+ $: lang && setLocale(lang);
272
+ $: languageslist && setLanguagesArray();
273
+ $: session && userid && endpoint && setSession();
274
+ $: isLoggedIn && lang && setSessionTimer();
275
+ $: endpoint && lang && env && getCmsData();
276
+ $: clockenabled !== 'false' && clocksecondsenabled && clockcustomformat && clockDisplay();
277
+ $: clockenabled !== 'false' && clocksecondsenabled && (refreshRate = clocksecondsenabled == "true" ? 1000 : 60000) && refreshClock();
278
+ $: lang && (selectedLanguage = lang) && languages && (languages.length > 0) && updateLanguageDisplayName();
64
279
  $: clientstyling && setClientStyling();
65
- $: endpoint && getData();
280
+ $: clientstylingurl && setClientStylingURL();
281
+
66
282
  </script>
67
283
 
284
+ <svelte:head>
285
+ {#if headScript}
286
+ <script src={licenseScriptSrc}></script>
287
+ {/if}
288
+ </svelte:head>
289
+
68
290
  {#if hasErrors}
69
291
  <p class="SearchLoading">500 Error - Internal Server Error</p>
70
292
  {:else}
71
293
  {#if isLoading}
72
294
  <p class="SearchLoading">Loading ...</p>
73
295
  {:else}
74
- <div class="FooterGrid {sponsorsRepeater ? '' : 'NoSponsorSpacing'}" bind:this={footerWidget}>
75
- {#if socialLinksRepeater}
76
- <div class="GridRow">
77
- <!-- start social section -->
78
- {#if socialLinksRepeater}
79
- <div class="GridCol">
80
- {#if socialLinksTitle}
81
- <p class="FooterTitle">{socialLinksTitle}</p>
82
- {/if}
83
- <casino-footer-section-v2 class="FooterSection SocialSection" socialflag="1" clientstyling={customStyling} target={target}></casino-footer-section-v2>
84
- </div>
296
+
297
+ <div class="Footer" bind:this={customStylingContainer}>
298
+ <div class="FooterSide" >
299
+ <!-- start helper section -->
300
+ {#if helpLinksRepeater}
301
+ {#if helpLinksTitle}
302
+ <p class="FooterTitle">{helpLinksTitle}</p>
85
303
  {/if}
86
- <!-- end social section -->
87
- </div>
88
- {/if}
89
- {#if helpLinksRepeater}
90
- <div class="GridRow">
91
- <!-- start helper section -->
92
- {#if helpLinksRepeater}
93
- <div class="GridCol">
94
- {#if helpLinksTitle}
95
- <p class="FooterTitle">{helpLinksTitle}</p>
304
+ <casino-footer-section helperflag="1" clientstyling={customStyling} target={target} displaycolumn="true"></casino-footer-section>
305
+ {/if}
306
+ </div>
307
+
308
+ <div class="FooterGrid">
309
+ <!-- start vendors section -->
310
+ {#if gameVendorsRepeater}
311
+ <div class="GridRow">
312
+ <div>
313
+ {#if gameVendorsLinksTitle}
314
+ <p class="FooterTitle">{gameVendorsLinksTitle}</p>
96
315
  {/if}
97
- <casino-footer-section-v2 class="FooterSection" helperflag="1" clientstyling={customStyling} target={target}></casino-footer-section-v2>
316
+ <casino-footer-section vendorflag="1" clientstyling={customStyling} target={target}></casino-footer-section>
98
317
  </div>
99
- {/if}
100
- <!-- end helper section -->
101
- </div>
102
- {/if}
103
- {#if licensesRepeater}
104
- <div class="GridRow">
105
- <!-- start license section -->
106
- {#if licensesRepeater}
107
- <div class="GridCol">
108
- <casino-footer-section-v2 class="FooterSection" licenseFlag="1" clientstyling={customStyling} target={target}></casino-footer-section-v2>
109
- </div>
110
- {/if}
111
- <!-- end license section -->
112
- </div>
113
- {/if}
318
+ </div>
319
+ {/if}
320
+ <!-- end vendors section -->
321
+ <!-- start payments section -->
114
322
  {#if paymentMethodsRepeater}
115
323
  <div class="GridRow">
116
- <!-- start payments section -->
117
- {#if paymentMethodsRepeater}
118
- <div class="GridCol">
119
- {#if paymentLinksTitle}
120
- <p class="PaymentsTitle">{paymentLinksTitle}</p>
121
- {/if}
122
- <casino-footer-section-v2 class="FooterSection" paymentflag="1" clientstyling={customStyling} target={target}></casino-footer-section-v2>
123
- </div>
124
- {/if}
125
- <!-- end payments section -->
324
+ <div>
325
+ {#if paymentLinksTitle}
326
+ <p class="FooterTitle">{paymentLinksTitle}</p>
327
+ {/if}
328
+ <casino-footer-section paymentflag="1" clientstyling={customStyling} target={target}></casino-footer-section>
329
+ </div>
126
330
  </div>
127
331
  {/if}
128
- {#if gameVendorsRepeater}
332
+ <!-- end payments section -->
333
+
334
+ <!-- start panic button -->
335
+ {#if panicbuttonenabled === "true"}
336
+ <panic-button
337
+ customtext = "Hold the button for 3 seconds to take 24 hours instant lock"
338
+ alternativestyling="true"
339
+ {lang}
340
+ {clientstyling}
341
+ ></panic-button>
342
+ {/if}
343
+ <!-- end panic button -->
344
+ <!-- start license section -->
345
+ {#if licensesRepeater}
129
346
  <div class="GridRow">
130
- <!-- start vendors section -->
131
- {#if gameVendorsRepeater}
132
- <div class="GridCol">
133
- {#if gameVendorsLinksTitle}
134
- <p class="VendorsTitle">{gameVendorsLinksTitle}</p>
135
- {/if}
136
- <casino-footer-section-v2 class="FooterSection" vendorflag="1" clientstyling={customStyling} target={target}></casino-footer-section-v2>
137
- </div>
138
- {/if}
139
- <!-- end vendors section -->
347
+ <div class="LicenseLinks">
348
+ {#if licensesLinksTitle}
349
+ <p class="FooterTitle">{licensesLinksTitle}</p>
350
+ {/if}
351
+ <casino-footer-section licenseFlag="1" clientstyling={customStyling} target={target}></casino-footer-section>
352
+ </div>
353
+ <!-- start detailed licenses section -->
354
+ <div class="LicenseDesc">
355
+ {#if licenseDesc}
356
+ <div class="DetailedLicenses" use:setContent={licenseDesc}></div>
357
+ <div class="DetailedCustomLicenses" use:setContent={licenseScript}></div>
358
+ <div>
359
+ <!-- start clock section -->
360
+ {#if clockenabled==="true"}
361
+ <div class="ClockContainer">
362
+ <span class="ClockText">{clocktext}:</span>
363
+ <span class="ClockTime">{time}</span>
364
+ </div>
365
+ {/if}
366
+ <!-- end clock section -->
367
+ <!-- start session timer section -->
368
+
369
+ {#if sessiontimerenabled && localStorage.session}
370
+ <div class="sessionTimerContainer">
371
+ <span class="SessionText">{$_('casinoFooter.sessionTimer')} {timeString}</span>
372
+ </div>
373
+ {/if}
374
+ <!-- end session timer section -->
375
+ </div>
376
+ {/if}
377
+ </div>
378
+ <!-- end detailed licenses section -->
140
379
  </div>
141
380
  {/if}
381
+ <!-- end license section -->
382
+
383
+ <!-- start sponsors section -->
142
384
  {#if sponsorsRepeater}
143
385
  <div class="GridRow">
144
- <!-- start sponsors section -->
145
386
  {#if sponsorsRepeater}
146
- <div class="GridCol">
147
- {#if sponsorsLinksTitle}
148
- <p class="FooterTitle">{sponsorsLinksTitle}</p>
149
- {/if}
150
- <casino-footer-section-v2 class="FooterSection" sponsorflag="1" clientstyling={customStyling} target={target}></casino-footer-section-v2>
151
- </div>
387
+ <div>
388
+ {#if sponsorsLinksTitle}
389
+ <p class="FooterTitle">{sponsorsLinksTitle}</p>
390
+ {/if}
391
+ <casino-footer-section sponsorflag="1" clientstyling={customStyling} target={target}></casino-footer-section>
392
+ </div>
152
393
  {/if}
153
- <!-- end sponsors section -->
154
394
  </div>
155
395
  {/if}
156
- {#if licenseDesc || copyright}
157
- <div class="GridRow LicenseRow">
158
- <div class="GridCol">
159
- <!-- start detailed licenses section -->
160
- <div class="DetailedLicenses" bind:this={licenseContainer} use:setContent={licenseDesc}></div>
161
- <!-- end detailed licenses section -->
162
- <!-- start copyright section -->
163
- <div class="CopyrightAreaRights CopyrightArea" bind:this={copyrightContainer} use:setContent={copyright}></div>
164
- <!-- end copyright section -->
396
+ <!-- end sponsors section -->
397
+
398
+ <!-- start social section -->
399
+ {#if socialLinksRepeater}
400
+ <div class="GridRow">
401
+ {#if socialLinksTitle}
402
+ <p class="FooterTitle">{socialLinksTitle}</p>
403
+ {/if}
404
+ <casino-footer-section socialflag="1" clientstyling={customStyling} target={target}></casino-footer-section>
165
405
  </div>
166
- </div>
167
- {/if}
406
+ {/if}
407
+ <!-- end social section -->
408
+
409
+ <!-- start language selector -->
410
+ {#if (languageselectorenabled==="true" && languagePackLoaded && selectedLanguage)}
411
+ <div class="GridRow">
412
+ <div class="languageSelectorContainer">
413
+ <!-- traditional dropdown option for screenreader users. Works the same way as the old language selector. Display: none -->
414
+ <select bind:value={selectedLanguage} class="Item ItemLanguage" on:change={()=>changeLanguage()}>
415
+ {#each languagesArray as operatorLanguage}
416
+ <option value={operatorLanguage} selected>{operatorLanguage}</option>
417
+ {/each}
418
+ </select>
419
+
420
+ <!-- Custom dropdown in order to be able to display country flags -->
421
+ <div class="languageSelectorOverlay">
422
+ <button class="drawerButton" value="{selectedLanguage}" on:click={toggleLanguageDrawer}><img class="languageFlag" src={currentLanguageFlag}>{languageDisplayName}
423
+ <svg width="8" height="5" viewBox="0 0 8 5" fill="none" xmlns="http://www.w3.org/2000/svg">
424
+ <path opacity="0.4" d="M0.94 0L4.00067 3.05467L7.06 0L8 0.940667L4.00067 4.94133L0 0.940667L0.94 0Z" fill="black"/>
425
+ </svg>
426
+ </button>
427
+ <div bind:this={languageDrawer} class="languageDrawer hidden">
428
+ <ul id="languageList">
429
+ {#each languages as language}
430
+ <li class="overlayLanguageOption" data-lang={language.code} on:click={overlayOptionTrigger}><img class="languageFlag" src={language.flag_icon_editable}><a href="javascript:void(0)"><span>{language.name}</span></a></li>
431
+ {/each}
432
+ </ul>
433
+ </div>
434
+ </div>
435
+ </div>
436
+ </div>
437
+ {/if}
438
+ <!-- end language selector -->
439
+
440
+ {#if copyright}
441
+ <!-- start copyright section -->
442
+ <div class="CopyrightAreaRights CopyrightArea" use:setContent={copyright}></div>
443
+ <!-- end copyright section -->
444
+ {/if}
445
+
168
446
  </div>
447
+ </div>
169
448
  {/if}
170
449
  {/if}
171
450
 
451
+
172
452
  <style lang="scss">
173
- //This function does a multiplication
174
- // in order to work with px the
175
- // same way as working with em
176
- @function ttp($value) {
177
- $multiplicator: 16px;
178
- @return $value * $multiplicator;
453
+
454
+ :host {
455
+ font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';
179
456
  }
457
+ $color-white : #E8E9EB;
180
458
 
181
459
  .SearchLoading {
182
- color: #fff;
460
+ color: var(--emfe-w-color-white, #FFFFFF);
183
461
  text-align: center;
184
462
  }
463
+
464
+ .Footer {
465
+ background-color: $color-white;
466
+ position: relative;
467
+ }
468
+
469
+ .FooterSide {
470
+ display: flex;
471
+ flex-direction: column;
472
+ position: absolute;
473
+ background-color: $color-white;
474
+ .FooterTitle {
475
+ text-transform: uppercase;
476
+ font-size: 12px;
477
+ font-weight: 600;
478
+ margin: 24px 13px;
479
+ }
480
+ }
185
481
  .FooterGrid {
186
- font-family: 'Arial';
482
+ font-weight: 400;
187
483
  display: flex;
188
- padding: ttp(0.625) ttp(2.5);
189
- background-color: #212529;
190
- color: #fff;
484
+ padding: 100px 0;
485
+ max-width: 1200px;
486
+ margin: 0 auto;
487
+ background-color: $color-white;
191
488
  flex-direction: column;
192
489
  align-items: center;
193
490
  justify-content: center;
194
- &.NoSponsorSpacing {
195
- padding-top: ttp(1.875);
196
- }
197
491
  .GridRow {
198
492
  display: flex;
199
493
  flex-flow: row wrap;
200
494
  width: 100%;
201
- padding: ttp(1.25) 0;
202
495
  align-items: flex-start;
203
496
  justify-content: center;
204
- &:first-child {
205
- padding-top: 0;
206
- }
207
- &:not(:last-child) {
208
- border-bottom: 1px solid rgba(255, 255, 255, .1);
209
- }
210
- &.LicenseRow{
211
- border-bottom: 0;
212
- }
213
- .GridCol {
214
- width: 100%;
215
- flex:1;
216
- p {
497
+ align-items: center;
498
+ padding: 20px 0;
499
+ text-align: center;
500
+ max-width: 1100px;
501
+ p {
217
502
  text-align: center;
218
503
  &.FooterTitle {
219
- font-size: ttp(1);
504
+ font-size: 12px;
220
505
  font-weight: 700;
221
506
  }
222
- }
223
- .PaymentsTitle, .VendorsTitle {
224
- margin: 0 auto ttp(1.25);
225
- font-size: ttp(1);
226
- font-weight: 700;
507
+ }
508
+ .LicenseDesc {
509
+ flex: 1;
510
+ max-width: 575px;
511
+ line-height: 1.3;
512
+ display: flex;
513
+ flex-direction: column;
514
+ align-items: flex-start;
515
+ .DetailedLicenses {
516
+ font-size: 10px;
517
+ color: var(--emfe-w-color-gray-150, #828282);
518
+
519
+ div {
520
+ text-align: left;
521
+ white-space: pre-line;
227
522
  }
228
523
  }
229
- }
230
- .DetailedLicenses {
231
- margin: ttp(1.875) ttp(3.125) ttp(1.25);
232
- font-size: ttp(0.625);
233
- text-align: center;
234
- color: #828282;
524
+ }
235
525
  }
236
526
  .CopyrightAreaRights {
237
- margin-top: ttp(0.625);
527
+ margin-top: 10px;
238
528
  }
239
529
  .CopyrightTextArea p, .CopyrightArea p {
240
530
  margin: 0;
241
- color: #828282;
242
- font-size: ttp(0.563);
531
+ color: var(--emfe-w-color-gray-150, #828282);
532
+ font-size: 9px;
243
533
  }
244
534
  }
245
535
  @media only screen and (max-width: 768px) {
246
- .FooterGrid {
247
- padding: ttp(0.313) ttp(1.25);
248
- .FooterTitle {
249
- margin-top: 0;
536
+ .Footer {
537
+ display: flex;
538
+ flex-direction: column;
539
+ &Side {
540
+ position: relative;
541
+ margin-top: 66px;
542
+ margin-left: 14px;
250
543
  }
251
- .GridRow {
544
+ &Grid {
252
545
  padding: 0;
253
- &:not(:last-child) {
254
- border-bottom: 0;
255
- }
256
546
  &:last-child {
257
- .GridCol:last-child {
258
- border-bottom: 0;
259
- }
260
- }
261
- &.SplitRow {
262
- .GridCol:first-child, .GridCol:nth-child(2) {
263
- flex-basis: unset;
264
- }
265
- .GridCol:nth-child(2) {
266
- border-left: none;
267
- }
268
- }
269
- .GridCol {
270
- border-bottom: 1px solid rgba(255, 255, 255, .1);
271
- padding: ttp(0.938) 0;
272
- #DetailedLicenses {
273
- margin: ttp(0.625) auto ttp(1.563);
274
- }
275
- .PaymentsTitle, .VendorsTitle {
276
- margin: ttp(0.625) auto;
277
- }
547
+ padding-bottom: 50px;
278
548
  }
279
549
  }
280
550
  }
551
+ .GridRow {
552
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
553
+ gap: 15px;
554
+ &:last-child {
555
+ border: none;
556
+ }
557
+ }
558
+ }
559
+
560
+
561
+ .ClockContainer {
562
+ color: var(--emfe-w-color-gray-150, #828282);
563
+ font-size: 11px;
564
+ display: inline;
565
+ }
566
+ .sessionTimerContainer {
567
+ color: #828282;
568
+ font-size: 11px;
569
+ display: inline;
570
+ }
571
+
572
+ .ItemLanguage {
573
+ display: none;
574
+ }
575
+
576
+ #languageList {
577
+ padding: 0;
578
+ margin: 0;
579
+ }
580
+
581
+ .languageSelectorOverlay {
582
+ position: relative;
583
+ }
584
+
585
+ .drawerButton {
586
+ height: 30px;
587
+ width: 150px;
588
+ background: inherit;
589
+ color: inherit;
590
+ border: none;
591
+ padding: 0;
592
+ font: inherit;
593
+ cursor: pointer;
594
+ outline: inherit;
595
+
596
+ display: flex;
597
+ justify-content: space-evenly;
598
+ align-items: center;
599
+
600
+ border-radius: 0px;
601
+ border: 0;
602
+ }
603
+
604
+ .languageDrawer {
605
+ position:absolute;
606
+ background: $color-white;
607
+ width: 150px;
608
+ top: 30px;
609
+ padding: 6px 0;
610
+ left: 3.9px;
611
+
612
+ &.hidden {
613
+ display: none;
614
+ }
615
+ }
616
+
617
+ .languageFlag {
618
+ margin-right: 8px;
619
+ background: black;
620
+ border-radius: 50%;
621
+ width: 14px;
622
+ height: 14px;
623
+ }
624
+
625
+ .overlayLanguageOption {
626
+ list-style: none;
627
+ width: 24px;
628
+ position: relative;
629
+ padding: 0;
630
+ justify-content: center;
631
+
632
+ img {
633
+ position: absolute;
634
+ z-index: 0;
635
+ cursor: pointer;
636
+ top: 6px;
637
+ left: 12px;
638
+ }
639
+
640
+ a {
641
+ text-decoration: none;
642
+ color: black;
643
+ display: inline-block;
644
+
645
+ width: 150px;
646
+
647
+ span {
648
+ width: 100%;
649
+ display: flex;
650
+ justify-content: center;
651
+ margin: 4px 0;
652
+ }
281
653
  }
654
+ }
655
+
282
656
  </style>