@tapni/auth 1.0.4 → 1.0.6-3.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 (81) hide show
  1. package/README.md +2 -0
  2. package/dist/.vite/manifest.json +23 -40
  3. package/dist/.well-known/assetlinks.json +10 -12
  4. package/dist/.well-known/microsoft-identity-association.json +5 -5
  5. package/dist/Apps-XNA4_3B4.js +109 -0
  6. package/dist/Billing-Br0-fHed.js +256 -0
  7. package/dist/CustomApp-CrlbYDOm.js +83 -0
  8. package/dist/QR-Bvqb60-E.js +41 -0
  9. package/dist/TapniAuth.es.js +1 -1
  10. package/dist/TapniAuth.umd.js +49 -23
  11. package/dist/{install-BzPu9V_c.js → install-7FOVy8Ol.js} +6328 -4767
  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 +65 -55
  16. package/src/.prettierrc.json +16 -0
  17. package/src/App.vue +329 -259
  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 -58
  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 -8
  27. package/src/mixins/okta.mixin.js +2 -2
  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 +7 -1
  32. package/src/services/Api.js +56 -58
  33. package/src/services/AuthService.js +13 -9
  34. package/src/services/CompanyService.js +10 -10
  35. package/src/services/DeviceService.js +3 -3
  36. package/src/services/MetadataService.js +10 -0
  37. package/src/services/UserService.js +48 -45
  38. package/src/services/UtilService.js +317 -225
  39. package/src/store/auth.js +485 -549
  40. package/src/store/constants.js +2 -2
  41. package/src/store/event-bus.js +22 -22
  42. package/src/store/locales/cn.js +476 -458
  43. package/src/store/locales/de.js +478 -517
  44. package/src/store/locales/en.js +454 -512
  45. package/src/store/locales/es.js +477 -524
  46. package/src/store/locales/fr.js +477 -516
  47. package/src/store/locales/it.js +477 -514
  48. package/src/store/locales/ja.js +488 -0
  49. package/src/store/locales/kr.js +477 -491
  50. package/src/store/locales/lang.js +51 -43
  51. package/src/store/locales/pt.js +488 -0
  52. package/src/store/locales/sr.js +477 -492
  53. package/src/store/locales/tr.js +477 -487
  54. package/src/store/store.js +6 -6
  55. package/src/views/Account.vue +36 -8
  56. package/src/views/Apps.vue +17 -30
  57. package/src/views/Billing.vue +538 -0
  58. package/src/views/Callback.vue +36 -33
  59. package/src/views/CustomApp.vue +14 -39
  60. package/src/views/General.vue +151 -184
  61. package/src/views/Login.vue +173 -161
  62. package/src/views/Register.vue +2 -12
  63. package/src/views/Reset.vue +132 -135
  64. package/src/views/Security.vue +13 -7
  65. package/src/views/Verify.vue +153 -151
  66. package/src/views/Welcome.vue +85 -71
  67. package/dist/Account-zep_QUuI.js +0 -153
  68. package/dist/Apps-B9XB7Z7q.js +0 -112
  69. package/dist/CustomApp-BzUsyycz.js +0 -112
  70. package/dist/General-DkcdjPYQ.js +0 -477
  71. package/dist/QR-PW6cAG5j.js +0 -41
  72. package/dist/index.css +0 -193
  73. package/dist/web-AXRKjAOB.js +0 -92
  74. package/src/components/DELETE_Language.vue +0 -168
  75. package/src/components/DELETE_LinkIcon.vue +0 -288
  76. package/src/components/DELETE_ModalOverlay.vue +0 -68
  77. package/src/components/DELETE_OTP.vue +0 -105
  78. package/src/components/SSO.vue +0 -126
  79. package/src/components/SSOPick.vue +0 -166
  80. package/src/mixins/DELETE_mfa-auth.mixin.js +0 -53
  81. package/src/mixins/facebook.mixin.js +0 -78
package/src/App.vue CHANGED
@@ -1,322 +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 AuthWelcome from "@/views/Welcome.vue";
74
- import AuthLogin from "@/views/Login.vue";
75
- import AuthRegister from "@/views/Register.vue";
76
- import AuthVerify from "@/views/Verify.vue";
77
- import AuthSecurity from "@/views/Security.vue";
78
- import AuthReset from "@/views/Reset.vue";
79
- import AuthCallback from "@/views/Callback.vue";
80
- import ModalOverlay from "@/components/DELETE_ModalOverlay.vue";
81
- import SSO from "@/components/SSO.vue";
82
- import SSOPick from "@/components/SSOPick.vue";
83
- import {EventBus} from "./store/event-bus.js";
84
- import AuthMixin from "@/mixins/auth.mixin.js";
85
- import Language from "@/components/DELETE_Language.vue";
86
- 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';
87
58
  import store from './store/auth.js';
59
+ import UtilService from './services/UtilService.js';
88
60
 
89
61
  export default {
90
- store,
91
- name: 'TapniAuth',
92
- mixins: [ReactiveStorage, AuthMixin],
93
- data () {
94
- return {
95
- storeInterval: null,
96
- isSetup: false
97
- }
98
- },
99
- components: {
100
- Language,
101
- SSOPick,
102
- SSO, ModalOverlay, AuthCallback, AuthReset, AuthVerify, AuthSecurity, AuthRegister, AuthLogin, AuthWelcome
103
- },
104
- props: {
105
- viewProp: {
106
- type: String,
107
- default: ''
108
- },
109
- isModal: {
110
- type: Boolean,
111
- default: false
112
- },
113
- payload: {
114
- type: Object,
115
- default: {}
116
- },
117
- options: {
118
- type: Object,
119
- default: {
120
- 'token': '',
121
- 'refreshTokens': '',
122
- 'username': '',
123
- 'UserId': '',
124
- 'verifyEmail': '',
125
- 'subdomain': '',
126
- 'localUser': ''
127
- }
128
- }
129
- },
130
- computed: {
131
- initialized () {
132
- return this.isSetup || this.isModal;
133
- }
134
- },
135
- async mounted() {
136
- this.applyBgStyle()
137
- this.setView(this.viewProp);
138
-
139
- EventBus.$on('ssoEvent', this.ssoOutgoingEvent)
140
- EventBus.$on('ssoLogout',(data) => this.logout(data))
141
- EventBus.$on('getLoggedInAccounts',() => this.getLoggedInAccounts())
142
- EventBus.$on('refreshTokenAction',(data) => this.refreshTokenAction({...data, storage: this.$storex}))
143
- EventBus.$on('switchAccount',(data) => this.switchAccount(data))
144
- EventBus.$on('setToken',(data) => this.setToken(data))
145
- EventBus.$on('setStorageItem',(data) => this.setStorageItem(data))
146
- },
147
- methods: {
148
- async init () {
149
- this.$store.commit('auth/setApiRoot', this.$apiRoot || process.env.VUE_APP_API_ROOT);
150
-
151
- // Set $storage into vuex $storex
152
- this.setStorage(this.strg);
153
-
154
- // Make sure the function is called just once
155
- if (this.isSetup) return;
156
- this.isSetup = true;
157
-
158
- await this.getLoggedInAccounts();
159
-
160
- // Let App know that the auth is ready
161
- this.$emit('ssoLibraryReady', this.$storex);
162
- },
163
- ssoOutgoingEvent (data) {
164
- this.$emit('ssoEvent', data)
165
- },
166
- ssoIncomingEvent (data) {
167
- EventBus.$emit(data.name, data.data)
168
- },
169
- applyBgStyle () {
170
- if (this.display === 'redirect') {
171
- document.getElementsByTagName("html")[0].style = "background: #dfeefe;"
172
- } else {
173
- document.getElementsByTagName("html")[0].style = ""
174
- }
175
- },
176
- },
177
- watch: {
178
- viewProp (nv) {
179
- this.setView(nv);
180
- },
181
- display () {
182
- this.applyBgStyle()
183
- },
184
- 'strgReady.value' (nv) {
185
- if (nv) {
186
- // Initialize Library after all event listeners & storage are set
187
- this.$nextTick(() => {
188
- this.init()
189
- })
190
- }
191
- },
192
- '$storex': {
193
- handler(nv) {
194
- clearInterval(this.storeInterval);
195
- this.storeInterval = setTimeout(() => {
196
- Object.keys(nv).forEach(key => {
197
- this.strg[key] = nv[key];
198
- });
199
- }, 250)
200
- },
201
- 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');
202
147
  }
203
- }
204
- }
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
+ };
205
263
  </script>
206
264
 
207
265
  <style>
208
266
  html * {
209
- font-family: "Inter", sans-serif;
267
+ font-family: 'Inter', sans-serif;
210
268
  }
211
269
 
212
270
  #bodyId {
213
- padding-top: 3%;
214
- max-width: 667px !important;
215
- margin: auto;
216
- height: 95%!important;
217
- margin-top: 1.5%;
218
- 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;
219
277
  }
220
278
 
221
279
  .action-block-top .default-text,
222
280
  .action-block-top .default-text:after {
223
- border-radius: 50%;
224
- width: 10em !important;
225
- height: 10em !important;
281
+ border-radius: 50%;
282
+ width: 10em !important;
283
+ height: 10em !important;
226
284
  }
227
285
  .action-block-top .default-text {
228
- margin: 10px auto;
229
- font-size: 3px;
230
- position: relative;
231
- text-indent: -9999em;
232
- /*
286
+ margin: 10px auto;
287
+ font-size: 3px;
288
+ position: relative;
289
+ text-indent: -9999em;
290
+ /*
233
291
  border-left: 0.5em solid #ffffff;
234
292
  border-top: 0.5em solid rgba(255, 255, 255, 0.2);
235
293
  border-right: 0.5em solid rgba(255, 255, 255, 0.2);
236
294
  border-bottom: 0.5em solid rgba(255, 255, 255, 0.2);
237
295
  */
238
- border-left: 0.5em solid #000000;
239
- border-top: 0.5em solid rgba(0, 0, 0, 0.2);
240
- border-right: 0.5em solid rgba(0, 0, 0, 0.2);
241
- border-bottom: 0.5em solid rgba(0, 0, 0, 0.2);
242
- -webkit-transform: translateZ(0);
243
- -ms-transform: translateZ(0);
244
- transform: translateZ(0);
245
- -webkit-animation: load8 1.1s infinite linear;
246
- 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;
247
305
  }
248
306
  @-webkit-keyframes load8 {
249
- 0% {
250
- -webkit-transform: rotate(0deg);
251
- transform: rotate(0deg);
252
- }
253
- 100% {
254
- -webkit-transform: rotate(360deg);
255
- transform: rotate(360deg);
256
- }
307
+ 0% {
308
+ -webkit-transform: rotate(0deg);
309
+ transform: rotate(0deg);
310
+ }
311
+ 100% {
312
+ -webkit-transform: rotate(360deg);
313
+ transform: rotate(360deg);
314
+ }
257
315
  }
258
316
  @keyframes load8 {
259
- 0% {
260
- -webkit-transform: rotate(0deg);
261
- transform: rotate(0deg);
262
- }
263
- 100% {
264
- -webkit-transform: rotate(360deg);
265
- transform: rotate(360deg);
266
- }
317
+ 0% {
318
+ -webkit-transform: rotate(0deg);
319
+ transform: rotate(0deg);
320
+ }
321
+ 100% {
322
+ -webkit-transform: rotate(360deg);
323
+ transform: rotate(360deg);
324
+ }
267
325
  }
268
326
  .smartbanner-ios {
269
- background: linear-gradient(to bottom, #f4f4f4, #f4f4f4);
270
- box-shadow: 0 0px 0px #ffffff;
271
- 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;
272
330
  }
273
331
  .smartbanner-icon {
274
- border-radius: 16px;
332
+ border-radius: 16px;
275
333
  }
276
334
  .smartbanner-ios .smartbanner-button {
277
- font-size: 13px;
278
- padding: 9px 0px;
279
- height: 40px;
280
- border-radius: 13px;
281
- background: #f4f4f4;
282
- color: #0a99d2;
283
- border: none;
284
- box-shadow: none;
285
- 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;
286
344
  }
287
345
 
288
346
  .snack-body {
289
- display: none;
290
- border-radius: 40px;
291
- font-size: 15px !important;
347
+ display: none;
348
+ border-radius: 40px;
349
+ font-size: 15px !important;
292
350
  }
293
351
 
294
352
  #errorSnack {
295
- background-color: #fee3e3 !important;
296
- border: 2px solid #edd9d9 !important;
297
- color: #000000;
353
+ background-color: #fee3e3 !important;
354
+ border: 2px solid #edd9d9 !important;
355
+ color: #000000;
298
356
  }
299
357
 
300
358
  #successSnack {
301
- background-color: #eff5eb !important;
302
- border: 2px solid #e3ecd7 !important;
303
- color: #000000;
359
+ background-color: #eff5eb !important;
360
+ border: 2px solid #e3ecd7 !important;
361
+ color: #000000;
304
362
  }
305
363
 
306
364
  .grecaptcha-badge {
307
- visibility: hidden;
365
+ visibility: hidden;
308
366
  }
309
367
 
310
368
  .header-logo {
311
- position: absolute;
312
- left: 50%;
313
- transform: translate(-50%, -50%);
314
- margin-top: 0px;
315
- z-index: 2;
369
+ position: absolute;
370
+ left: 50%;
371
+ transform: translate(-50%, -50%);
372
+ margin-top: 16px;
373
+ z-index: 2;
316
374
  }
317
375
 
318
376
  .header-logo-img {
319
- height: 40px;
320
- margin-top: 10px;
377
+ height: 40px;
378
+ margin-top: 10px;
379
+ }
380
+
381
+ @media (max-width: 768px) {
382
+ #bodyId {
383
+ margin-top: 0;
384
+ border-radius: 0;
385
+ height: 100% !important;
386
+ }
387
+
388
+ .header-logo {
389
+ margin-top: 16px;
390
+ }
321
391
  }
322
392
  </style>