@tapni/auth 1.0.5 → 1.0.6-4.dev

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.
Files changed (78) hide show
  1. package/README.md +2 -0
  2. package/dist/.vite/manifest.json +16 -43
  3. package/dist/.well-known/assetlinks.json +10 -12
  4. package/dist/.well-known/microsoft-identity-association.json +5 -5
  5. package/dist/{Apps-DMds3Dv-.js → Apps-DRhdYq0_.js} +34 -34
  6. package/dist/Billing-DkXdzGvS.js +256 -0
  7. package/dist/CustomApp-Dw80xmqU.js +83 -0
  8. package/dist/QR-ByY4IUiV.js +41 -0
  9. package/dist/TapniAuth.es.js +1 -1
  10. package/dist/TapniAuth.umd.js +49 -23
  11. package/dist/{install-L-cxSovH.js → install-Cb6nCJn_.js} +6265 -4741
  12. package/dist/site.webmanifest +11 -1
  13. package/dist/style.css +1 -1
  14. package/dist/{web-IFGkBi0t.js → web-UrTMimK1.js} +2 -2
  15. package/package.json +66 -55
  16. package/src/.prettierrc.json +16 -0
  17. package/src/App.vue +326 -269
  18. package/src/eslint.config.js +15 -0
  19. package/src/index.js +4 -0
  20. package/src/install.js +9 -10
  21. package/src/main.js +54 -57
  22. package/src/mixins/apple.mixin.js +56 -54
  23. package/src/mixins/auth.mixin.js +3 -2
  24. package/src/mixins/global.mixin.js +3 -3
  25. package/src/mixins/google.mixin.js +53 -54
  26. package/src/mixins/microsoft.mixin.js +2 -5
  27. package/src/mixins/okta.mixin.js +1 -1
  28. package/src/mixins/qr-auth.mixin.js +111 -107
  29. package/src/mixins/saml.mixin.js +82 -45
  30. package/src/router/index.js +6 -6
  31. package/src/routes.js +1 -1
  32. package/src/services/Api.js +56 -58
  33. package/src/services/AuthService.js +7 -9
  34. package/src/services/CompanyService.js +10 -10
  35. package/src/services/DeviceService.js +3 -3
  36. package/src/services/UserService.js +48 -45
  37. package/src/services/UtilService.js +317 -225
  38. package/src/store/auth.js +485 -549
  39. package/src/store/constants.js +2 -2
  40. package/src/store/event-bus.js +22 -22
  41. package/src/store/locales/cn.js +476 -458
  42. package/src/store/locales/de.js +478 -517
  43. package/src/store/locales/en.js +454 -513
  44. package/src/store/locales/es.js +477 -524
  45. package/src/store/locales/fr.js +477 -516
  46. package/src/store/locales/it.js +477 -514
  47. package/src/store/locales/ja.js +488 -0
  48. package/src/store/locales/kr.js +477 -491
  49. package/src/store/locales/lang.js +51 -43
  50. package/src/store/locales/pt.js +488 -0
  51. package/src/store/locales/sr.js +477 -492
  52. package/src/store/locales/tr.js +477 -487
  53. package/src/store/store.js +6 -6
  54. package/src/views/Account.vue +36 -8
  55. package/src/views/Billing.vue +464 -34
  56. package/src/views/Callback.vue +36 -33
  57. package/src/views/General.vue +151 -185
  58. package/src/views/Login.vue +2 -25
  59. package/src/views/Register.vue +2 -12
  60. package/src/views/Reset.vue +132 -135
  61. package/src/views/Security.vue +13 -7
  62. package/src/views/Verify.vue +153 -151
  63. package/src/views/Welcome.vue +85 -71
  64. package/dist/Account-Cuz87g_8.js +0 -153
  65. package/dist/Billing-BXlQEuNy.js +0 -113
  66. package/dist/CustomApp-CLCMXmMO.js +0 -83
  67. package/dist/General-dW73bMoR.js +0 -479
  68. package/dist/QR-D6ZGcPM0.js +0 -41
  69. package/dist/index.css +0 -193
  70. package/dist/web-AXRKjAOB.js +0 -92
  71. package/src/components/DELETE_Language.vue +0 -168
  72. package/src/components/DELETE_LinkIcon.vue +0 -288
  73. package/src/components/DELETE_ModalOverlay.vue +0 -68
  74. package/src/components/DELETE_OTP.vue +0 -105
  75. package/src/components/DELETE_SSO.vue +0 -120
  76. package/src/components/DELETE_SSOPick.vue +0 -166
  77. package/src/mixins/DELETE_mfa-auth.mixin.js +0 -53
  78. package/src/mixins/facebook.mixin.js +0 -78
package/src/App.vue CHANGED
@@ -1,335 +1,392 @@
1
1
  <script setup>
2
- import { RouterView } from 'vue-router'
2
+ import { RouterView } from 'vue-router';
3
3
  // add Buffer globally
4
4
  import { Buffer } from 'buffer/';
5
5
  window.Buffer = Buffer;
6
- document.addEventListener('DOMContentLoaded', function() {
7
- const recaptchaScript = document.createElement('script');
8
- recaptchaScript.src = `https://www.google.com/recaptcha/api.js?render=${import.meta.env.VITE_GOOGLE_RECAPTCHA_SITE_KEY}`;
9
- document.head.appendChild(recaptchaScript);
6
+ document.addEventListener('DOMContentLoaded', function () {
7
+ const recaptchaScript = document.createElement('script');
8
+ recaptchaScript.src = `https://www.google.com/recaptcha/api.js?render=${import.meta.env.VITE_GOOGLE_RECAPTCHA_SITE_KEY}`;
9
+ document.head.appendChild(recaptchaScript);
10
10
  });
11
11
  </script>
12
12
 
13
-
14
13
  <template>
15
- <div id="ssoapp">
16
- <a v-if="display === 'redirect' || renderView.includes('Auth')" href="/" class="header-logo"><img src="data:image/png;base64,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" onerror="this.onerror=null;this.src='https://cdn.tapni.co/images/logo-dark.png';" class="header-logo-img"></a>
17
- <ModalOverlay />
18
- <Language v-if="!isModal" />
19
- <SSO v-if="!isModal" />
20
- <SSOPick v-if="!isModal" />
21
-
22
- <AuthWelcome v-if="initialized && renderView === 'AuthWelcome'" />
23
- <AuthLogin v-else-if="initialized && renderView === 'AuthLogin'" :isModal="isModal" />
24
- <AuthRegister v-else-if="initialized && renderView === 'AuthRegister'" :isModal="isModal" />
25
- <AuthVerify v-else-if="initialized && renderView === 'AuthVerify'" :isModal="isModal" />
26
- <AuthSecurity v-else-if="initialized && renderView === 'AuthSecurity'" :isModal="isModal" :payload="payload" />
27
- <AuthReset v-else-if="initialized && renderView === 'AuthReset'" />
28
- <AuthCallback v-else-if="initialized && renderView === 'AuthCallback'" />
29
- <RouterView v-else-if="display !== 'npm'" />
30
-
31
- <div class="snackbar snackbar-boxed" id="snackbar">
32
- <p class="snack-body" id="errorSnack">
33
- <span id="errorMessage"> {{ ssoLang[appLanguage].error }} </span>
34
- <a
35
- @click="closeSnacks"
36
- style="
37
- position: absolute;
38
- right: 10px;
39
- top: 10px;
40
- width: 50px;
41
- height: 50px;
42
- "
43
- >
44
- <img
45
- src="https://cdn.tapni.co/icons/notification-close.png"
46
- style="width: 100%;:"
47
- />
48
- </a>
49
- </p>
50
- <p class="snack-body" id="successSnack">
51
- <span id="successMessage"> {{ ssoLang[appLanguage].success }} </span>
52
- <a
53
- @click="closeSnacks"
54
- style="
55
- position: absolute;
56
- right: 10px;
57
- top: 10px;
58
- width: 50px;
59
- height: 50px;
60
- "
61
- >
62
- <img
63
- src="https://cdn.tapni.co/icons/notification-close.png"
64
- style="width: 100%"
65
- />
66
- </a>
67
- </p>
68
- </div>
69
- </div>
14
+ <div id="ssoapp" :style="containerStyle">
15
+ <a v-if="display === 'redirect' || renderView.includes('Auth')" href="/" class="header-logo"><img :src="headerLogoUrl" class="header-logo-img" /></a>
16
+
17
+ <AuthWelcome v-if="initialized && renderView === 'AuthWelcome'" />
18
+ <AuthLogin v-else-if="initialized && renderView === 'AuthLogin'" :isModal="isModal" />
19
+ <AuthGeneral v-else-if="initialized && renderView === 'AuthGeneral'" :isModal="isModal" @update:viewProp="setView" />
20
+ <AuthAccount v-else-if="initialized && renderView === 'AuthAccount'" :isModal="isModal" @update:viewProp="setView" />
21
+ <AuthRegister v-else-if="initialized && renderView === 'AuthRegister'" :isModal="isModal" />
22
+ <AuthVerify v-else-if="initialized && renderView === 'AuthVerify'" :isModal="isModal" />
23
+ <AuthSecurity v-else-if="initialized && renderView === 'AuthSecurity'" :isModal="isModal" :payload="payload" @update:viewProp="setView" />
24
+ <AuthReset v-else-if="initialized && renderView === 'AuthReset'" />
25
+ <AuthCallback v-else-if="initialized && renderView === 'AuthCallback'" />
26
+ <RouterView v-else-if="display !== 'npm'" />
27
+
28
+ <div class="snackbar snackbar-boxed" id="snackbar">
29
+ <p class="snack-body" id="errorSnack">
30
+ <span id="errorMessage"> {{ ssoLang[appLanguage].error }} </span>
31
+ <a @click="closeSnacks" style="position: absolute; right: 10px; top: 10px; width: 50px; height: 50px">
32
+ <img src="https://cdn.tapni.co/icons/notification-close.png" style="width: 100%" />
33
+ </a>
34
+ </p>
35
+ <p class="snack-body" id="successSnack">
36
+ <span id="successMessage"> {{ ssoLang[appLanguage].success }} </span>
37
+ <a @click="closeSnacks" style="position: absolute; right: 10px; top: 10px; width: 50px; height: 50px">
38
+ <img src="https://cdn.tapni.co/icons/notification-close.png" style="width: 100%" />
39
+ </a>
40
+ </p>
41
+ </div>
42
+ </div>
70
43
  </template>
71
44
 
72
45
  <script>
73
- import "../public/index.css";
74
- import AuthWelcome from "@/views/Welcome.vue";
75
- import AuthLogin from "@/views/Login.vue";
76
- import AuthRegister from "@/views/Register.vue";
77
- import AuthVerify from "@/views/Verify.vue";
78
- import AuthSecurity from "@/views/Security.vue";
79
- import AuthReset from "@/views/Reset.vue";
80
- import AuthCallback from "@/views/Callback.vue";
81
- import ModalOverlay from "@/components/DELETE_ModalOverlay.vue";
82
- import SSO from "@/components/DELETE_SSO.vue";
83
- import SSOPick from "@/components/DELETE_SSOPick.vue";
84
- import {EventBus} from "./store/event-bus.js";
85
- import AuthMixin from "@/mixins/auth.mixin.js";
86
- import Language from "@/components/DELETE_Language.vue";
87
- import ReactiveStorage from '@tapni/capacitor-reactive-localstorage-vue3'
46
+ import AuthWelcome from '@/views/Welcome.vue';
47
+ import AuthLogin from '@/views/Login.vue';
48
+ import AuthAccount from '@/views/Account.vue';
49
+ import AuthRegister from '@/views/Register.vue';
50
+ import AuthVerify from '@/views/Verify.vue';
51
+ import AuthSecurity from '@/views/Security.vue';
52
+ import AuthGeneral from '@/views/General.vue';
53
+ import AuthReset from '@/views/Reset.vue';
54
+ import AuthCallback from '@/views/Callback.vue';
55
+ import { EventBus } from './store/event-bus.js';
56
+ import AuthMixin from '@/mixins/auth.mixin.js';
57
+ import ReactiveStorage from '@tapni/capacitor-reactive-localstorage-vue3';
88
58
  import store from './store/auth.js';
59
+ import UtilService from './services/UtilService.js';
89
60
 
90
61
  export default {
91
- store,
92
- name: 'TapniAuth',
93
- mixins: [ReactiveStorage, AuthMixin],
94
- data () {
95
- return {
96
- storeInterval: null,
97
- isSetup: false
98
- }
99
- },
100
- components: {
101
- Language,
102
- SSOPick,
103
- SSO, ModalOverlay, AuthCallback, AuthReset, AuthVerify, AuthSecurity, AuthRegister, AuthLogin, AuthWelcome
104
- },
105
- props: {
106
- viewProp: {
107
- type: String,
108
- default: ''
109
- },
110
- isModal: {
111
- type: Boolean,
112
- default: false
113
- },
114
- payload: {
115
- type: Object,
116
- default: {}
117
- },
118
- options: {
119
- type: Object,
120
- default: {
121
- 'token': '',
122
- 'refreshTokens': '',
123
- 'username': '',
124
- 'UserId': '',
125
- 'verifyEmail': '',
126
- 'subdomain': '',
127
- 'localUser': ''
128
- }
129
- }
130
- },
131
- computed: {
132
- initialized () {
133
- return this.isSetup || this.isModal;
134
- }
135
- },
136
- async mounted() {
137
- this.applyBgStyle()
138
- this.setView(this.viewProp);
139
-
140
- EventBus.$on('ssoEvent', this.ssoOutgoingEvent)
141
- EventBus.$on('ssoLogout',(data) => this.logout(data))
142
- EventBus.$on('getLoggedInAccounts',() => this.getLoggedInAccounts())
143
- EventBus.$on('refreshTokenAction',(data) => this.refreshTokenAction({...data, storage: this.$storex}))
144
- EventBus.$on('switchAccount',(data) => this.switchAccount(data))
145
- EventBus.$on('setToken',(data) => this.setToken(data))
146
- EventBus.$on('setStorageItem',(data) => this.setStorageItem(data))
147
- },
148
- methods: {
149
- async init () {
150
- this.$store.commit('auth/setApiRoot', this.$apiRoot || process.env.VUE_APP_API_ROOT);
151
-
152
- // Set $storage into vuex $storex
153
- this.setStorage(this.strg);
154
-
155
- // Make sure the function is called just once
156
- if (this.isSetup) return;
157
- this.isSetup = true;
158
-
159
- await this.getLoggedInAccounts();
160
-
161
- // Let App know that the auth is ready
162
- this.$emit('ssoLibraryReady', this.$storex);
163
- },
164
- ssoOutgoingEvent (data) {
165
- this.$emit('ssoEvent', data)
166
- },
167
- ssoIncomingEvent (data) {
168
- EventBus.$emit(data.name, data.data)
169
- },
170
- applyBgStyle () {
171
- if (this.display === 'redirect') {
172
- document.getElementsByTagName("html")[0].style = "background: #dfeefe;"
173
- } else {
174
- document.getElementsByTagName("html")[0].style = ""
175
- }
176
- },
177
- },
178
- watch: {
179
- viewProp (nv) {
180
- this.setView(nv);
181
- },
182
- display () {
183
- this.applyBgStyle()
184
- },
185
- 'strgReady.value' (nv) {
186
- if (nv) {
187
- // Initialize Library after all event listeners & storage are set
188
- this.$nextTick(() => {
189
- this.init()
190
- })
191
- }
192
- },
193
- '$storex': {
194
- handler(nv) {
195
- clearInterval(this.storeInterval);
196
- this.storeInterval = setTimeout(() => {
197
- Object.keys(nv).forEach(key => {
198
- this.strg[key] = nv[key];
199
- });
200
- }, 250)
201
- },
202
- deep: true
62
+ store,
63
+ name: 'TapniAuth',
64
+ mixins: [ReactiveStorage, AuthMixin],
65
+ data() {
66
+ return {
67
+ storeInterval: null,
68
+ isSetup: false,
69
+ isTapstackOrigin: typeof window !== 'undefined' ? /(^|\.)tapstack\.com$/i.test(new URL(window.location.origin).hostname) : false
70
+ };
71
+ },
72
+ components: {
73
+ AuthCallback,
74
+ AuthReset,
75
+ AuthVerify,
76
+ AuthSecurity,
77
+ AuthRegister,
78
+ AuthLogin,
79
+ AuthAccount,
80
+ AuthWelcome,
81
+ AuthGeneral
82
+ },
83
+ props: {
84
+ viewProp: {
85
+ type: String,
86
+ default: ''
87
+ },
88
+ isModal: {
89
+ type: Boolean,
90
+ default: false
91
+ },
92
+ payload: {
93
+ type: Object,
94
+ default: {}
95
+ },
96
+ options: {
97
+ type: Object,
98
+ default: {
99
+ token: '',
100
+ refreshTokens: '',
101
+ username: '',
102
+ UserId: '',
103
+ verifyEmail: '',
104
+ subdomain: '',
105
+ localUser: ''
106
+ }
107
+ }
108
+ },
109
+ computed: {
110
+ initialized() {
111
+ return this.isSetup || this.isModal;
112
+ },
113
+ headerLogoUrl() {
114
+ return this.isTapstackOrigin ? 'https://cdn.tapni.co/company-media/e411a6e5-e8c1-40b3-aa4c-1214cfb43e8a/gallery/image/f910fa207addf7d3f7337faf098c4f82c79f755a3cf0032099655f2204e6a1e6.png' : 'https://cdn.tapni.co/images/logo-dark.png';
115
+ },
116
+ containerStyle() {
117
+ return {
118
+ maxHeight: this.isModal ? '90vh' : 'auto',
119
+ overflowY: this.isModal ? 'auto' : 'hidden'
120
+ };
121
+ }
122
+ },
123
+ async mounted() {
124
+ // Check for clean=true query parameter and clear storage if present
125
+ this.checkAndClearStorage();
126
+
127
+ this.applyBgStyle();
128
+ this.setView(this.viewProp);
129
+
130
+ // Update metadata based on platform
131
+ this.updateMetadata();
132
+
133
+ EventBus.$on('ssoEvent', this.ssoOutgoingEvent);
134
+ EventBus.$on('ssoLogout', (data) => this.logout(data));
135
+ EventBus.$on('getLoggedInAccounts', () => this.getLoggedInAccounts());
136
+ EventBus.$on('refreshTokenAction', (data) => this.refreshTokenAction({ ...data, storage: this.$storex }));
137
+ EventBus.$on('switchAccount', (data) => this.switchAccount(data));
138
+ EventBus.$on('setToken', (data) => this.setToken(data));
139
+ EventBus.$on('setStorageItem', (data) => this.setStorageItem(data));
140
+
141
+ if (import.meta.env.VITE_APP_COMPARE_LANGUAGE_KEYS === 'true') {
142
+ UtilService.compareLangKeys();
143
+ }
144
+
145
+ if (this.isNative) {
146
+ this.$store.auth.state.allowedOriginsAuth.push('capacitor://localhost');
203
147
  }
204
- }
205
- }
148
+ },
149
+ methods: {
150
+ checkAndClearStorage() {
151
+ const urlParams = new URLSearchParams(window.location.search);
152
+ if (urlParams.get('clean') === 'true') {
153
+ // Clear all localStorage
154
+ localStorage.clear();
155
+
156
+ // Clear sessionStorage as well
157
+ sessionStorage.clear();
158
+
159
+ // Remove the clean parameter from URL without page reload
160
+ urlParams.delete('clean');
161
+ const newUrl = window.location.pathname + (urlParams.toString() ? '?' + urlParams.toString() : '') + window.location.hash;
162
+ window.history.replaceState({}, '', newUrl);
163
+
164
+ console.log('Storage cleared due to clean=true parameter');
165
+ }
166
+ },
167
+ async init() {
168
+ this.$store.commit('auth/setApiRoot', this.$apiRoot || process.env.VITE_APP_API_ROOT);
169
+
170
+ // Set $storage into vuex $storex
171
+ this.setStorage(this.strg);
172
+
173
+ // Make sure the function is called just once
174
+ if (this.isSetup) return;
175
+ this.isSetup = true;
176
+
177
+ await this.getLoggedInAccounts();
178
+
179
+ // Let App know that the auth is ready
180
+ this.$emit('ssoLibraryReady', this.$storex);
181
+ },
182
+ ssoOutgoingEvent(data) {
183
+ this.$emit('ssoEvent', data);
184
+ },
185
+ ssoIncomingEvent(data) {
186
+ EventBus.$emit(data.name, data.data);
187
+ },
188
+ updateMetadata() {
189
+ if (typeof window === 'undefined') return;
190
+
191
+ if (this.isTapstackOrigin) {
192
+ // Tapstack metadata
193
+ document.title = 'Tapstack - The modern stack for interactive docs and tools';
194
+
195
+ // Update meta description
196
+ const metaDescription = document.querySelector('meta[name="description"]');
197
+ if (metaDescription) {
198
+ metaDescription.setAttribute('content', 'The modern stack for interactive docs and tools. Build better documentation and developer experiences with Tapstack.');
199
+ }
200
+
201
+ // Update Open Graph metadata
202
+ const ogTitle = document.querySelector('meta[property="og:title"]');
203
+ if (ogTitle) {
204
+ ogTitle.setAttribute('content', 'Tapstack - The modern stack for interactive docs and tools');
205
+ }
206
+
207
+ const ogDescription = document.querySelector('meta[property="og:description"]');
208
+ if (ogDescription) {
209
+ ogDescription.setAttribute('content', 'The modern stack for interactive docs and tools. Build better documentation and developer experiences.');
210
+ }
211
+
212
+ // Update Twitter metadata
213
+ const twitterTitle = document.querySelector('meta[property="twitter:title"]');
214
+ if (twitterTitle) {
215
+ twitterTitle.setAttribute('content', 'Tapstack - The modern stack for interactive docs and tools');
216
+ }
217
+
218
+ const twitterDescription = document.querySelector('meta[property="twitter:description"]');
219
+ if (twitterDescription) {
220
+ twitterDescription.setAttribute('content', 'The modern stack for interactive docs and tools. Build better documentation and developer experiences with Tapstack.');
221
+ }
222
+ } else {
223
+ // Default Tapni metadata (already set in HTML)
224
+ document.title = 'Tapni - Share everything with just a tap';
225
+ }
226
+ },
227
+ applyBgStyle() {
228
+ if (this.display === 'redirect') {
229
+ document.getElementsByTagName('html')[0].style = 'background: #dfeefe;';
230
+ } else {
231
+ document.getElementsByTagName('html')[0].style = '';
232
+ }
233
+ }
234
+ },
235
+ watch: {
236
+ viewProp(nv) {
237
+ this.setView(nv);
238
+ },
239
+ display() {
240
+ this.applyBgStyle();
241
+ },
242
+ 'strgReady.value'(nv) {
243
+ if (nv) {
244
+ // Initialize Library after all event listeners & storage are set
245
+ this.$nextTick(() => {
246
+ this.init();
247
+ });
248
+ }
249
+ },
250
+ $storex: {
251
+ handler(nv) {
252
+ clearInterval(this.storeInterval);
253
+ this.storeInterval = setTimeout(() => {
254
+ Object.keys(nv).forEach((key) => {
255
+ this.strg[key] = nv[key];
256
+ });
257
+ }, 250);
258
+ },
259
+ deep: true
260
+ }
261
+ }
262
+ };
206
263
  </script>
207
264
 
208
265
  <style>
209
266
  html * {
210
- font-family: "Inter", sans-serif;
267
+ font-family: 'Inter', sans-serif;
211
268
  }
212
269
 
213
270
  #bodyId {
214
- padding-top: 3%;
215
- max-width: 667px !important;
216
- margin: auto;
217
- height: 95%!important;
218
- margin-top: 1.5%;
219
- border-radius: 20px;
271
+ padding-top: 3%;
272
+ max-width: 667px !important;
273
+ margin: auto;
274
+ height: 95% !important;
275
+ margin-top: 1.5%;
276
+ border-radius: 20px;
220
277
  }
221
278
 
222
279
  .action-block-top .default-text,
223
280
  .action-block-top .default-text:after {
224
- border-radius: 50%;
225
- width: 10em !important;
226
- height: 10em !important;
281
+ border-radius: 50%;
282
+ width: 10em !important;
283
+ height: 10em !important;
227
284
  }
228
285
  .action-block-top .default-text {
229
- margin: 10px auto;
230
- font-size: 3px;
231
- position: relative;
232
- text-indent: -9999em;
233
- /*
286
+ margin: 10px auto;
287
+ font-size: 3px;
288
+ position: relative;
289
+ text-indent: -9999em;
290
+ /*
234
291
  border-left: 0.5em solid #ffffff;
235
292
  border-top: 0.5em solid rgba(255, 255, 255, 0.2);
236
293
  border-right: 0.5em solid rgba(255, 255, 255, 0.2);
237
294
  border-bottom: 0.5em solid rgba(255, 255, 255, 0.2);
238
295
  */
239
- border-left: 0.5em solid #000000;
240
- border-top: 0.5em solid rgba(0, 0, 0, 0.2);
241
- border-right: 0.5em solid rgba(0, 0, 0, 0.2);
242
- border-bottom: 0.5em solid rgba(0, 0, 0, 0.2);
243
- -webkit-transform: translateZ(0);
244
- -ms-transform: translateZ(0);
245
- transform: translateZ(0);
246
- -webkit-animation: load8 1.1s infinite linear;
247
- animation: load8 1.1s infinite linear;
296
+ border-left: 0.5em solid #000000;
297
+ border-top: 0.5em solid rgba(0, 0, 0, 0.2);
298
+ border-right: 0.5em solid rgba(0, 0, 0, 0.2);
299
+ border-bottom: 0.5em solid rgba(0, 0, 0, 0.2);
300
+ -webkit-transform: translateZ(0);
301
+ -ms-transform: translateZ(0);
302
+ transform: translateZ(0);
303
+ -webkit-animation: load8 1.1s infinite linear;
304
+ animation: load8 1.1s infinite linear;
248
305
  }
249
306
  @-webkit-keyframes load8 {
250
- 0% {
251
- -webkit-transform: rotate(0deg);
252
- transform: rotate(0deg);
253
- }
254
- 100% {
255
- -webkit-transform: rotate(360deg);
256
- transform: rotate(360deg);
257
- }
307
+ 0% {
308
+ -webkit-transform: rotate(0deg);
309
+ transform: rotate(0deg);
310
+ }
311
+ 100% {
312
+ -webkit-transform: rotate(360deg);
313
+ transform: rotate(360deg);
314
+ }
258
315
  }
259
316
  @keyframes load8 {
260
- 0% {
261
- -webkit-transform: rotate(0deg);
262
- transform: rotate(0deg);
263
- }
264
- 100% {
265
- -webkit-transform: rotate(360deg);
266
- transform: rotate(360deg);
267
- }
317
+ 0% {
318
+ -webkit-transform: rotate(0deg);
319
+ transform: rotate(0deg);
320
+ }
321
+ 100% {
322
+ -webkit-transform: rotate(360deg);
323
+ transform: rotate(360deg);
324
+ }
268
325
  }
269
326
  .smartbanner-ios {
270
- background: linear-gradient(to bottom, #f4f4f4, #f4f4f4);
271
- box-shadow: 0 0px 0px #ffffff;
272
- border-bottom: 1px solid #dddddd;
327
+ background: linear-gradient(to bottom, #f4f4f4, #f4f4f4);
328
+ box-shadow: 0 0px 0px #ffffff;
329
+ border-bottom: 1px solid #dddddd;
273
330
  }
274
331
  .smartbanner-icon {
275
- border-radius: 16px;
332
+ border-radius: 16px;
276
333
  }
277
334
  .smartbanner-ios .smartbanner-button {
278
- font-size: 13px;
279
- padding: 9px 0px;
280
- height: 40px;
281
- border-radius: 13px;
282
- background: #f4f4f4;
283
- color: #0a99d2;
284
- border: none;
285
- box-shadow: none;
286
- text-transform: uppercase;
335
+ font-size: 13px;
336
+ padding: 9px 0px;
337
+ height: 40px;
338
+ border-radius: 13px;
339
+ background: #f4f4f4;
340
+ color: #0a99d2;
341
+ border: none;
342
+ box-shadow: none;
343
+ text-transform: uppercase;
287
344
  }
288
345
 
289
346
  .snack-body {
290
- display: none;
291
- border-radius: 40px;
292
- font-size: 15px !important;
347
+ display: none;
348
+ border-radius: 40px;
349
+ font-size: 15px !important;
293
350
  }
294
351
 
295
352
  #errorSnack {
296
- background-color: #fee3e3 !important;
297
- border: 2px solid #edd9d9 !important;
298
- color: #000000;
353
+ background-color: #fee3e3 !important;
354
+ border: 2px solid #edd9d9 !important;
355
+ color: #000000;
299
356
  }
300
357
 
301
358
  #successSnack {
302
- background-color: #eff5eb !important;
303
- border: 2px solid #e3ecd7 !important;
304
- color: #000000;
359
+ background-color: #eff5eb !important;
360
+ border: 2px solid #e3ecd7 !important;
361
+ color: #000000;
305
362
  }
306
363
 
307
364
  .grecaptcha-badge {
308
- visibility: hidden;
365
+ visibility: hidden;
309
366
  }
310
367
 
311
368
  .header-logo {
312
- position: absolute;
313
- left: 50%;
314
- transform: translate(-50%, -50%);
315
- margin-top: 0px;
316
- z-index: 2;
369
+ position: absolute;
370
+ left: 50%;
371
+ transform: translate(-50%, -50%);
372
+ margin-top: 16px;
373
+ z-index: 2;
317
374
  }
318
375
 
319
376
  .header-logo-img {
320
- height: 40px;
321
- margin-top: 10px;
377
+ height: 40px;
378
+ margin-top: 10px;
322
379
  }
323
380
 
324
381
  @media (max-width: 768px) {
325
- #bodyId {
326
- margin-top: 0;
327
- border-radius: 0;
328
- height: 100%!important;
329
- }
330
-
331
- .header-logo {
332
- margin-top: 15px;
333
- }
382
+ #bodyId {
383
+ margin-top: 0;
384
+ border-radius: 0;
385
+ height: 100% !important;
386
+ }
387
+
388
+ .header-logo {
389
+ margin-top: 16px;
390
+ }
334
391
  }
335
392
  </style>