@zoreal/oauth2-js 0.1.12 → 0.1.14

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.
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ function unsafeClaims(idToken) {
14
14
 
15
15
  // src/wire.ts
16
16
  var WIRE_VERSION = 1;
17
- var SDK_VERSION = "0.1.12";
17
+ var SDK_VERSION = "0.1.14";
18
18
  var SDK_NAME = "@zoreal/oauth2-js";
19
19
  var DEFAULT_ISSUER = "https://id.zoreal.com";
20
20
  var POLL_INTERVAL_MS = 2e3;
@@ -143,9 +143,27 @@ function isMobileUserAgent() {
143
143
  return /android|iphone|ipad|ipod/i.test(navigator.userAgent);
144
144
  }
145
145
 
146
+ // src/intent.ts
147
+ var SIGN_IN_SCOPES = /* @__PURE__ */ new Set(["openid", "email", "profile.name"]);
148
+ function resolveIntent(intent, scope, acrValues) {
149
+ if (intent) return intent;
150
+ const scopes = (scope ?? "openid").split(/\s+/).filter(Boolean);
151
+ if (scopes.some((s) => !SIGN_IN_SCOPES.has(s))) return "identify";
152
+ const acr = typeof acrValues === "string" ? acrValues.split(/\s+/) : acrValues ?? [];
153
+ if (scopes.every((s) => s === "openid") && acr.includes("zoreal.live")) return "presence";
154
+ return "sign-in";
155
+ }
156
+ function titleFor(t, intent) {
157
+ if (intent === "identify") return t.titleIdentify;
158
+ if (intent === "presence") return t.titlePresence;
159
+ return t.title;
160
+ }
161
+
146
162
  // src/i18n.ts
147
163
  var en = {
148
164
  title: "Scan to sign in",
165
+ titleIdentify: "Scan to verify your identity",
166
+ titlePresence: "Scan to prove you are a real human",
149
167
  titleApprove: "Approve on your phone",
150
168
  bodyScan: "Scan with your phone camera or the ZOREAL ID app.",
151
169
  bodyApprove: "Approve the login in your ZOREAL ID app.",
@@ -158,12 +176,15 @@ var en = {
158
176
  noIdBody: "Scan the same code to download the app and create one for free. It only takes a minute.",
159
177
  cancel: "Cancel",
160
178
  close: "Close",
161
- qrAlt: "QR code to sign in with ZOREAL"
179
+ qrAlt: "QR code to sign in with ZOREAL",
180
+ buttonContinue: "Continue with ZOREAL"
162
181
  };
163
182
  var TRANSLATIONS = {
164
183
  en,
165
184
  sv: {
166
185
  title: "Skanna f\xF6r att logga in",
186
+ titleIdentify: "Skanna f\xF6r att verifiera din identitet",
187
+ titlePresence: "Skanna f\xF6r att bevisa att du \xE4r en riktig m\xE4nniska",
167
188
  titleApprove: "Godk\xE4nn p\xE5 telefonen",
168
189
  bodyScan: "Skanna med telefonens kamera eller ZOREAL ID-appen.",
169
190
  bodyApprove: "Godk\xE4nn inloggningen i ZOREAL ID-appen.",
@@ -176,10 +197,13 @@ var TRANSLATIONS = {
176
197
  noIdBody: "Skanna samma kod f\xF6r att ladda ner appen och skapa ett gratis. Det tar bara en minut.",
177
198
  cancel: "Avbryt",
178
199
  close: "St\xE4ng",
179
- qrAlt: "QR-kod f\xF6r att logga in med ZOREAL"
200
+ qrAlt: "QR-kod f\xF6r att logga in med ZOREAL",
201
+ buttonContinue: "Forts\xE4tt med ZOREAL"
180
202
  },
181
203
  es: {
182
204
  title: "Escanea para iniciar sesi\xF3n",
205
+ titleIdentify: "Escanea para verificar tu identidad",
206
+ titlePresence: "Escanea para demostrar que eres una persona real",
183
207
  titleApprove: "Apru\xE9balo en tu tel\xE9fono",
184
208
  bodyScan: "Escanea con la c\xE1mara de tu tel\xE9fono o con la app ZOREAL ID.",
185
209
  bodyApprove: "Aprueba el inicio de sesi\xF3n en tu app ZOREAL ID.",
@@ -192,10 +216,13 @@ var TRANSLATIONS = {
192
216
  noIdBody: "Escanea el mismo c\xF3digo para descargar la app y crear una gratis. Solo toma un minuto.",
193
217
  cancel: "Cancelar",
194
218
  close: "Cerrar",
195
- qrAlt: "C\xF3digo QR para iniciar sesi\xF3n con ZOREAL"
219
+ qrAlt: "C\xF3digo QR para iniciar sesi\xF3n con ZOREAL",
220
+ buttonContinue: "Continuar con ZOREAL"
196
221
  },
197
222
  pt: {
198
223
  title: "Digitalize para entrar",
224
+ titleIdentify: "Digitalize para verificar a sua identidade",
225
+ titlePresence: "Digitalize para provar que \xE9 uma pessoa real",
199
226
  titleApprove: "Aprove no seu telefone",
200
227
  bodyScan: "Digitalize com a c\xE2mara do seu telefone ou com a app ZOREAL ID.",
201
228
  bodyApprove: "Aprove o login no app ZOREAL ID.",
@@ -208,10 +235,13 @@ var TRANSLATIONS = {
208
235
  noIdBody: "Digitalize o mesmo c\xF3digo para baixar o app e criar uma conta gr\xE1tis. Leva s\xF3 um minuto.",
209
236
  cancel: "Cancelar",
210
237
  close: "Fechar",
211
- qrAlt: "C\xF3digo QR para entrar com ZOREAL"
238
+ qrAlt: "C\xF3digo QR para entrar com ZOREAL",
239
+ buttonContinue: "Continuar com ZOREAL"
212
240
  },
213
241
  fr: {
214
242
  title: "Scannez pour vous connecter",
243
+ titleIdentify: "Scannez pour v\xE9rifier votre identit\xE9",
244
+ titlePresence: "Scannez pour prouver que vous \xEAtes bien un humain",
215
245
  titleApprove: "Approuvez sur votre t\xE9l\xE9phone",
216
246
  bodyScan: "Scannez avec l'appareil photo de votre t\xE9l\xE9phone ou l'app ZOREAL ID.",
217
247
  bodyApprove: "Approuvez la connexion dans votre app ZOREAL ID.",
@@ -224,10 +254,13 @@ var TRANSLATIONS = {
224
254
  noIdBody: "Scannez le m\xEAme code pour t\xE9l\xE9charger l'app et en cr\xE9er un gratuitement. Cela prend une minute.",
225
255
  cancel: "Annuler",
226
256
  close: "Fermer",
227
- qrAlt: "Code QR pour se connecter avec ZOREAL"
257
+ qrAlt: "Code QR pour se connecter avec ZOREAL",
258
+ buttonContinue: "Continuer avec ZOREAL"
228
259
  },
229
260
  de: {
230
261
  title: "Zum Anmelden scannen",
262
+ titleIdentify: "Scannen, um Ihre Identit\xE4t zu verifizieren",
263
+ titlePresence: "Scannen, um zu beweisen, dass Sie ein echter Mensch sind",
231
264
  titleApprove: "Auf dem Handy best\xE4tigen",
232
265
  bodyScan: "Mit der Handykamera oder der ZOREAL ID App scannen.",
233
266
  bodyApprove: "Anmeldung in der ZOREAL ID App best\xE4tigen.",
@@ -240,10 +273,13 @@ var TRANSLATIONS = {
240
273
  noIdBody: "Denselben Code scannen, um die App zu laden und kostenlos eine zu erstellen. Dauert nur eine Minute.",
241
274
  cancel: "Abbrechen",
242
275
  close: "Schlie\xDFen",
243
- qrAlt: "QR-Code f\xFCr die Anmeldung mit ZOREAL"
276
+ qrAlt: "QR-Code f\xFCr die Anmeldung mit ZOREAL",
277
+ buttonContinue: "Weiter mit ZOREAL"
244
278
  },
245
279
  ru: {
246
280
  title: "\u041E\u0442\u0441\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0432\u043E\u0439\u0442\u0438",
281
+ titleIdentify: "\u041E\u0442\u0441\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C \u043B\u0438\u0447\u043D\u043E\u0441\u0442\u044C",
282
+ titlePresence: "\u041E\u0442\u0441\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u043A\u0430\u0437\u0430\u0442\u044C, \u0447\u0442\u043E \u0432\u044B \u0440\u0435\u0430\u043B\u044C\u043D\u044B\u0439 \u0447\u0435\u043B\u043E\u0432\u0435\u043A",
247
283
  titleApprove: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043D\u0430 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0435",
248
284
  bodyScan: "\u041E\u0442\u0441\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435 \u043A\u0430\u043C\u0435\u0440\u043E\u0439 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 \u0438\u043B\u0438 \u0447\u0435\u0440\u0435\u0437 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 ZOREAL ID.",
249
285
  bodyApprove: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0432\u0445\u043E\u0434 \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 ZOREAL ID.",
@@ -256,10 +292,13 @@ var TRANSLATIONS = {
256
292
  noIdBody: "\u041E\u0442\u0441\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435 \u0442\u043E\u0442 \u0436\u0435 \u043A\u043E\u0434, \u0447\u0442\u043E\u0431\u044B \u0441\u043A\u0430\u0447\u0430\u0442\u044C \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0438 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0435\u0433\u043E \u0431\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u043E. \u042D\u0442\u043E \u0437\u0430\u0439\u043C\u0451\u0442 \u043C\u0438\u043D\u0443\u0442\u0443.",
257
293
  cancel: "\u041E\u0442\u043C\u0435\u043D\u0430",
258
294
  close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C",
259
- qrAlt: "QR-\u043A\u043E\u0434 \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 ZOREAL"
295
+ qrAlt: "QR-\u043A\u043E\u0434 \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 ZOREAL",
296
+ buttonContinue: "\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0441 ZOREAL"
260
297
  },
261
298
  ja: {
262
299
  title: "\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u30ED\u30B0\u30A4\u30F3",
300
+ titleIdentify: "\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u672C\u4EBA\u78BA\u8A8D",
301
+ titlePresence: "\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u5B9F\u5728\u306E\u4EBA\u7269\u3067\u3042\u308B\u3053\u3068\u3092\u8A3C\u660E",
263
302
  titleApprove: "\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u3067\u627F\u8A8D",
264
303
  bodyScan: "\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u306E\u30AB\u30E1\u30E9\u307E\u305F\u306FZOREAL ID\u30A2\u30D7\u30EA\u3067\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
265
304
  bodyApprove: "ZOREAL ID\u30A2\u30D7\u30EA\u3067\u30ED\u30B0\u30A4\u30F3\u3092\u627F\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
@@ -272,10 +311,13 @@ var TRANSLATIONS = {
272
311
  noIdBody: "\u540C\u3058\u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u30A2\u30D7\u30EA\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3057\u3001\u7121\u6599\u3067\u4F5C\u6210\u3067\u304D\u307E\u3059\u30021\u5206\u307B\u3069\u3067\u5B8C\u4E86\u3057\u307E\u3059\u3002",
273
312
  cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
274
313
  close: "\u9589\u3058\u308B",
275
- qrAlt: "ZOREAL\u3067\u30ED\u30B0\u30A4\u30F3\u3059\u308B\u305F\u3081\u306EQR\u30B3\u30FC\u30C9"
314
+ qrAlt: "ZOREAL\u3067\u30ED\u30B0\u30A4\u30F3\u3059\u308B\u305F\u3081\u306EQR\u30B3\u30FC\u30C9",
315
+ buttonContinue: "ZOREAL\u3067\u7D9A\u884C"
276
316
  },
277
317
  hi: {
278
318
  title: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0947\u0902",
319
+ titleIdentify: "\u0905\u092A\u0928\u0940 \u092A\u0939\u091A\u093E\u0928 \u0938\u0924\u094D\u092F\u093E\u092A\u093F\u0924 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0947\u0902",
320
+ titlePresence: "\u092F\u0939 \u0938\u093E\u092C\u093F\u0924 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0947\u0902 \u0915\u093F \u0906\u092A \u090F\u0915 \u0935\u093E\u0938\u094D\u0924\u0935\u093F\u0915 \u0907\u0902\u0938\u093E\u0928 \u0939\u0948\u0902",
279
321
  titleApprove: "\u0905\u092A\u0928\u0947 \u092B\u094B\u0928 \u092A\u0930 \u0938\u094D\u0935\u0940\u0915\u0943\u0924 \u0915\u0930\u0947\u0902",
280
322
  bodyScan: "\u0905\u092A\u0928\u0947 \u092B\u094B\u0928 \u0915\u0947 \u0915\u0948\u092E\u0930\u0947 \u092F\u093E ZOREAL ID \u0910\u092A \u0938\u0947 \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0947\u0902\u0964",
281
323
  bodyApprove: "\u0905\u092A\u0928\u0947 ZOREAL ID \u0910\u092A \u092E\u0947\u0902 \u0932\u0949\u0917\u093F\u0928 \u0938\u094D\u0935\u0940\u0915\u0943\u0924 \u0915\u0930\u0947\u0902\u0964",
@@ -288,10 +330,13 @@ var TRANSLATIONS = {
288
330
  noIdBody: "\u0910\u092A \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0928\u0947 \u0914\u0930 \u092E\u0941\u092B\u094D\u0924 \u092E\u0947\u0902 \u090F\u0915 \u092C\u0928\u093E\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0935\u0939\u0940 \u0915\u094B\u0921 \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0947\u0902\u0964 \u0907\u0938\u092E\u0947\u0902 \u092C\u0938 \u090F\u0915 \u092E\u093F\u0928\u091F \u0932\u0917\u0924\u093E \u0939\u0948\u0964",
289
331
  cancel: "\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902",
290
332
  close: "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
291
- qrAlt: "ZOREAL \u0938\u0947 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F QR \u0915\u094B\u0921"
333
+ qrAlt: "ZOREAL \u0938\u0947 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F QR \u0915\u094B\u0921",
334
+ buttonContinue: "ZOREAL \u0915\u0947 \u0938\u093E\u0925 \u091C\u093E\u0930\u0940 \u0930\u0916\u0947\u0902"
292
335
  },
293
336
  zhs: {
294
337
  title: "\u626B\u7801\u767B\u5F55",
338
+ titleIdentify: "\u626B\u7801\u9A8C\u8BC1\u8EAB\u4EFD",
339
+ titlePresence: "\u626B\u7801\u8BC1\u660E\u60A8\u662F\u771F\u4EBA",
295
340
  titleApprove: "\u5728\u624B\u673A\u4E0A\u6279\u51C6",
296
341
  bodyScan: "\u4F7F\u7528\u624B\u673A\u76F8\u673A\u6216 ZOREAL ID \u5E94\u7528\u626B\u63CF\u3002",
297
342
  bodyApprove: "\u8BF7\u5728 ZOREAL ID \u5E94\u7528\u4E2D\u6279\u51C6\u767B\u5F55\u3002",
@@ -304,10 +349,13 @@ var TRANSLATIONS = {
304
349
  noIdBody: "\u626B\u63CF\u540C\u4E00\u4E2A\u4E8C\u7EF4\u7801\u5373\u53EF\u4E0B\u8F7D\u5E94\u7528\u5E76\u514D\u8D39\u521B\u5EFA\uFF0C\u53EA\u9700\u4E00\u5206\u949F\u3002",
305
350
  cancel: "\u53D6\u6D88",
306
351
  close: "\u5173\u95ED",
307
- qrAlt: "\u4F7F\u7528 ZOREAL \u767B\u5F55\u7684\u4E8C\u7EF4\u7801"
352
+ qrAlt: "\u4F7F\u7528 ZOREAL \u767B\u5F55\u7684\u4E8C\u7EF4\u7801",
353
+ buttonContinue: "\u4F7F\u7528 ZOREAL \u7EE7\u7EED"
308
354
  },
309
355
  zht: {
310
356
  title: "\u6383\u78BC\u767B\u5165",
357
+ titleIdentify: "\u6383\u78BC\u9A57\u8B49\u8EAB\u5206",
358
+ titlePresence: "\u6383\u78BC\u8B49\u660E\u60A8\u662F\u771F\u4EBA",
311
359
  titleApprove: "\u5728\u624B\u6A5F\u4E0A\u6838\u51C6",
312
360
  bodyScan: "\u4F7F\u7528\u624B\u6A5F\u76F8\u6A5F\u6216 ZOREAL ID \u61C9\u7528\u7A0B\u5F0F\u6383\u63CF\u3002",
313
361
  bodyApprove: "\u8ACB\u5728 ZOREAL ID \u61C9\u7528\u7A0B\u5F0F\u4E2D\u6838\u51C6\u767B\u5165\u3002",
@@ -320,10 +368,13 @@ var TRANSLATIONS = {
320
368
  noIdBody: "\u6383\u63CF\u540C\u4E00\u500B QR code \u5373\u53EF\u4E0B\u8F09\u61C9\u7528\u7A0B\u5F0F\u4E26\u514D\u8CBB\u5EFA\u7ACB\uFF0C\u53EA\u9700\u4E00\u5206\u9418\u3002",
321
369
  cancel: "\u53D6\u6D88",
322
370
  close: "\u95DC\u9589",
323
- qrAlt: "\u4F7F\u7528 ZOREAL \u767B\u5165\u7684 QR code"
371
+ qrAlt: "\u4F7F\u7528 ZOREAL \u767B\u5165\u7684 QR code",
372
+ buttonContinue: "\u4F7F\u7528 ZOREAL \u7E7C\u7E8C"
324
373
  },
325
374
  ar: {
326
375
  title: "\u0627\u0645\u0633\u062D \u0644\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644",
376
+ titleIdentify: "\u0627\u0645\u0633\u062D \u0644\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0647\u0648\u064A\u062A\u0643",
377
+ titlePresence: "\u0627\u0645\u0633\u062D \u0644\u0625\u062B\u0628\u0627\u062A \u0623\u0646\u0643 \u0625\u0646\u0633\u0627\u0646 \u062D\u0642\u064A\u0642\u064A",
327
378
  titleApprove: "\u0648\u0627\u0641\u0642 \u0639\u0644\u0649 \u0647\u0627\u062A\u0641\u0643",
328
379
  bodyScan: "\u0627\u0645\u0633\u062D \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0643\u0627\u0645\u064A\u0631\u0627 \u0647\u0627\u062A\u0641\u0643 \u0623\u0648 \u062A\u0637\u0628\u064A\u0642 ZOREAL ID.",
329
380
  bodyApprove: "\u0648\u0627\u0641\u0642 \u0639\u0644\u0649 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0641\u064A \u062A\u0637\u0628\u064A\u0642 ZOREAL ID.",
@@ -336,10 +387,13 @@ var TRANSLATIONS = {
336
387
  noIdBody: "\u0627\u0645\u0633\u062D \u0627\u0644\u0631\u0645\u0632 \u0646\u0641\u0633\u0647 \u0644\u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0648\u0625\u0646\u0634\u0627\u0621 \u062D\u0633\u0627\u0628 \u0645\u062C\u0627\u0646\u064A. \u064A\u0633\u062A\u063A\u0631\u0642 \u0627\u0644\u0623\u0645\u0631 \u062F\u0642\u064A\u0642\u0629 \u0648\u0627\u062D\u062F\u0629 \u0641\u0642\u0637.",
337
388
  cancel: "\u0625\u0644\u063A\u0627\u0621",
338
389
  close: "\u0625\u063A\u0644\u0627\u0642",
339
- qrAlt: "\u0631\u0645\u0632 QR \u0644\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 ZOREAL"
390
+ qrAlt: "\u0631\u0645\u0632 QR \u0644\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 ZOREAL",
391
+ buttonContinue: "\u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 ZOREAL"
340
392
  },
341
393
  ko: {
342
394
  title: "\uC2A4\uCE94\uD558\uC5EC \uB85C\uADF8\uC778",
395
+ titleIdentify: "\uC2A4\uCE94\uD558\uC5EC \uC2E0\uC6D0 \uD655\uC778",
396
+ titlePresence: "\uC2A4\uCE94\uD558\uC5EC \uC2E4\uC81C \uC0AC\uB78C\uC784\uC744 \uC99D\uBA85",
343
397
  titleApprove: "\uD734\uB300\uD3F0\uC5D0\uC11C \uC2B9\uC778",
344
398
  bodyScan: "\uD734\uB300\uD3F0 \uCE74\uBA54\uB77C \uB610\uB294 ZOREAL ID \uC571\uC73C\uB85C \uC2A4\uCE94\uD558\uC138\uC694.",
345
399
  bodyApprove: "ZOREAL ID \uC571\uC5D0\uC11C \uB85C\uADF8\uC778\uC744 \uC2B9\uC778\uD558\uC138\uC694.",
@@ -352,11 +406,14 @@ var TRANSLATIONS = {
352
406
  noIdBody: "\uAC19\uC740 \uCF54\uB4DC\uB97C \uC2A4\uCE94\uD574 \uC571\uC744 \uB0B4\uB824\uBC1B\uACE0 \uBB34\uB8CC\uB85C \uB9CC\uB4DC\uC138\uC694. 1\uBD84\uC774\uBA74 \uB429\uB2C8\uB2E4.",
353
407
  cancel: "\uCDE8\uC18C",
354
408
  close: "\uB2EB\uAE30",
355
- qrAlt: "ZOREAL\uB85C \uB85C\uADF8\uC778\uD558\uAE30 \uC704\uD55C QR \uCF54\uB4DC"
409
+ qrAlt: "ZOREAL\uB85C \uB85C\uADF8\uC778\uD558\uAE30 \uC704\uD55C QR \uCF54\uB4DC",
410
+ buttonContinue: "ZOREAL\uB85C \uACC4\uC18D"
356
411
  },
357
412
  // Български
358
413
  bg: {
359
414
  title: "\u0421\u043A\u0430\u043D\u0438\u0440\u0430\u0439\u0442\u0435 \u0437\u0430 \u0432\u0445\u043E\u0434",
415
+ titleIdentify: "\u0421\u043A\u0430\u043D\u0438\u0440\u0430\u0439\u0442\u0435, \u0437\u0430 \u0434\u0430 \u043F\u043E\u0442\u0432\u044A\u0440\u0434\u0438\u0442\u0435 \u0441\u0430\u043C\u043E\u043B\u0438\u0447\u043D\u043E\u0441\u0442\u0442\u0430 \u0441\u0438",
416
+ titlePresence: "\u0421\u043A\u0430\u043D\u0438\u0440\u0430\u0439\u0442\u0435, \u0437\u0430 \u0434\u0430 \u0434\u043E\u043A\u0430\u0436\u0435\u0442\u0435, \u0447\u0435 \u0441\u0442\u0435 \u0438\u0441\u0442\u0438\u043D\u0441\u043A\u0438 \u0447\u043E\u0432\u0435\u043A",
360
417
  titleApprove: "\u041F\u043E\u0442\u0432\u044A\u0440\u0434\u0435\u0442\u0435 \u043D\u0430 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 \u0441\u0438",
361
418
  bodyScan: "\u0421\u043A\u0430\u043D\u0438\u0440\u0430\u0439\u0442\u0435 \u0441 \u043A\u0430\u043C\u0435\u0440\u0430\u0442\u0430 \u043D\u0430 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 \u0438\u043B\u0438 \u0441 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0442\u043E ZOREAL ID.",
362
419
  bodyApprove: "\u041F\u043E\u0442\u0432\u044A\u0440\u0434\u0435\u0442\u0435 \u0432\u0445\u043E\u0434\u0430 \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0442\u043E ZOREAL ID.",
@@ -369,11 +426,14 @@ var TRANSLATIONS = {
369
426
  noIdBody: "\u0421\u043A\u0430\u043D\u0438\u0440\u0430\u0439\u0442\u0435 \u0441\u044A\u0449\u0438\u044F \u043A\u043E\u0434, \u0437\u0430 \u0434\u0430 \u0438\u0437\u0442\u0435\u0433\u043B\u0438\u0442\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0442\u043E \u0438 \u0434\u0430 \u0441\u0438 \u0441\u044A\u0437\u0434\u0430\u0434\u0435\u0442\u0435 \u0431\u0435\u0437\u043F\u043B\u0430\u0442\u0435\u043D \u0430\u043A\u0430\u0443\u043D\u0442. \u041E\u0442\u043D\u0435\u043C\u0430 \u0441\u0430\u043C\u043E \u043C\u0438\u043D\u0443\u0442\u0430.",
370
427
  cancel: "\u041E\u0442\u043A\u0430\u0437",
371
428
  close: "\u0417\u0430\u0442\u0432\u043E\u0440\u0438",
372
- qrAlt: "QR \u043A\u043E\u0434 \u0437\u0430 \u0432\u0445\u043E\u0434 \u0441\u044A\u0441 ZOREAL"
429
+ qrAlt: "QR \u043A\u043E\u0434 \u0437\u0430 \u0432\u0445\u043E\u0434 \u0441\u044A\u0441 ZOREAL",
430
+ buttonContinue: "\u041F\u0440\u043E\u0434\u044A\u043B\u0436\u0438 \u0441\u044A\u0441 ZOREAL"
373
431
  },
374
432
  // বাংলা
375
433
  bn: {
376
434
  title: "\u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u0995\u09B0\u09A4\u09C7 \u09B8\u09CD\u0995\u09CD\u09AF\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",
435
+ titleIdentify: "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09B0\u09BF\u099A\u09AF\u09BC \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09A4\u09C7 \u09B8\u09CD\u0995\u09CD\u09AF\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",
436
+ titlePresence: "\u0986\u09AA\u09A8\u09BF \u098F\u0995\u099C\u09A8 \u09AA\u09CD\u09B0\u0995\u09C3\u09A4 \u09AE\u09BE\u09A8\u09C1\u09B7 \u09A4\u09BE \u09AA\u09CD\u09B0\u09AE\u09BE\u09A3 \u0995\u09B0\u09A4\u09C7 \u09B8\u09CD\u0995\u09CD\u09AF\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",
377
437
  titleApprove: "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AB\u09CB\u09A8\u09C7 \u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09A8 \u0995\u09B0\u09C1\u09A8",
378
438
  bodyScan: "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AB\u09CB\u09A8\u09C7\u09B0 \u0995\u09CD\u09AF\u09BE\u09AE\u09C7\u09B0\u09BE \u09AC\u09BE ZOREAL ID \u0985\u09CD\u09AF\u09BE\u09AA \u09A6\u09BF\u09AF\u09BC\u09C7 \u09B8\u09CD\u0995\u09CD\u09AF\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8\u0964",
379
439
  bodyApprove: "\u0986\u09AA\u09A8\u09BE\u09B0 ZOREAL ID \u0985\u09CD\u09AF\u09BE\u09AA\u09C7 \u09B2\u0997\u0987\u09A8 \u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09A8 \u0995\u09B0\u09C1\u09A8\u0964",
@@ -386,11 +446,14 @@ var TRANSLATIONS = {
386
446
  noIdBody: "\u0985\u09CD\u09AF\u09BE\u09AA \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7 \u09AC\u09BF\u09A8\u09BE\u09AE\u09C2\u09B2\u09CD\u09AF\u09C7 \u098F\u0995\u099F\u09BF \u09A4\u09C8\u09B0\u09BF \u0995\u09B0\u09A4\u09C7 \u098F\u0995\u0987 \u0995\u09CB\u09A1 \u09B8\u09CD\u0995\u09CD\u09AF\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8\u0964 \u098F\u09A4\u09C7 \u09AE\u09BE\u09A4\u09CD\u09B0 \u098F\u0995 \u09AE\u09BF\u09A8\u09BF\u099F \u09B8\u09AE\u09AF\u09BC \u09B2\u09BE\u0997\u09C7\u0964",
387
447
  cancel: "\u09AC\u09BE\u09A4\u09BF\u09B2",
388
448
  close: "\u09AC\u09A8\u09CD\u09A7",
389
- qrAlt: "ZOREAL \u09A6\u09BF\u09AF\u09BC\u09C7 \u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u0995\u09B0\u09BE\u09B0 \u099C\u09A8\u09CD\u09AF QR \u0995\u09CB\u09A1"
449
+ qrAlt: "ZOREAL \u09A6\u09BF\u09AF\u09BC\u09C7 \u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u0995\u09B0\u09BE\u09B0 \u099C\u09A8\u09CD\u09AF QR \u0995\u09CB\u09A1",
450
+ buttonContinue: "ZOREAL \u09A6\u09BF\u09AF\u09BC\u09C7 \u099A\u09BE\u09B2\u09BF\u09AF\u09BC\u09C7 \u09AF\u09BE\u09A8"
390
451
  },
391
452
  // Bosanski
392
453
  bs: {
393
454
  title: "Skenirajte za prijavu",
455
+ titleIdentify: "Skenirajte da potvrdite svoj identitet",
456
+ titlePresence: "Skenirajte da doka\u017Eete da ste stvarna osoba",
394
457
  titleApprove: "Odobrite na svom telefonu",
395
458
  bodyScan: "Skenirajte kamerom svog telefona ili aplikacijom ZOREAL ID.",
396
459
  bodyApprove: "Odobrite prijavu u aplikaciji ZOREAL ID.",
@@ -403,11 +466,14 @@ var TRANSLATIONS = {
403
466
  noIdBody: "Skenirajte isti kod da preuzmete aplikaciju i besplatno ga napravite. Traje samo minutu.",
404
467
  cancel: "Otka\u017Ei",
405
468
  close: "Zatvori",
406
- qrAlt: "QR kod za prijavu putem ZOREAL-a"
469
+ qrAlt: "QR kod za prijavu putem ZOREAL-a",
470
+ buttonContinue: "Nastavi sa ZOREAL-om"
407
471
  },
408
472
  // Čeština
409
473
  cs: {
410
474
  title: "P\u0159ihlaste se naskenov\xE1n\xEDm",
475
+ titleIdentify: "Naskenujte pro ov\u011B\u0159en\xED toto\u017Enosti",
476
+ titlePresence: "Naskenujte a proka\u017Ete, \u017Ee jste skute\u010Dn\xFD \u010Dlov\u011Bk",
411
477
  titleApprove: "Potvr\u010Fte v telefonu",
412
478
  bodyScan: "Naskenujte fotoapar\xE1tem telefonu nebo aplikac\xED ZOREAL ID.",
413
479
  bodyApprove: "Potvr\u010Fte p\u0159ihl\xE1\u0161en\xED v aplikaci ZOREAL ID.",
@@ -420,11 +486,14 @@ var TRANSLATIONS = {
420
486
  noIdBody: "Naskenov\xE1n\xEDm stejn\xE9ho k\xF3du si st\xE1hnete aplikaci a zdarma vytvo\u0159\xEDte ZOREAL ID. Zabere to jen minutu.",
421
487
  cancel: "Zru\u0161it",
422
488
  close: "Zav\u0159\xEDt",
423
- qrAlt: "QR k\xF3d pro p\u0159ihl\xE1\u0161en\xED pomoc\xED ZOREAL"
489
+ qrAlt: "QR k\xF3d pro p\u0159ihl\xE1\u0161en\xED pomoc\xED ZOREAL",
490
+ buttonContinue: "Pokra\u010Dovat se ZOREAL"
424
491
  },
425
492
  // Dansk
426
493
  da: {
427
494
  title: "Scan for at logge ind",
495
+ titleIdentify: "Scan for at bekr\xE6fte din identitet",
496
+ titlePresence: "Scan for at bevise, at du er et rigtigt menneske",
428
497
  titleApprove: "Godkend p\xE5 din telefon",
429
498
  bodyScan: "Scan med telefonens kamera eller ZOREAL ID-appen.",
430
499
  bodyApprove: "Godkend login i din ZOREAL ID-app.",
@@ -437,11 +506,14 @@ var TRANSLATIONS = {
437
506
  noIdBody: "Scan den samme kode for at hente appen og oprette et gratis. Det tager kun et minut.",
438
507
  cancel: "Annuller",
439
508
  close: "Luk",
440
- qrAlt: "QR-kode til at logge ind med ZOREAL"
509
+ qrAlt: "QR-kode til at logge ind med ZOREAL",
510
+ buttonContinue: "Forts\xE6t med ZOREAL"
441
511
  },
442
512
  // Ελληνικά
443
513
  el: {
444
514
  title: "\u03A3\u03AC\u03C1\u03C9\u03C3\u03B7 \u03B3\u03B9\u03B1 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7",
515
+ titleIdentify: "\u03A3\u03AC\u03C1\u03C9\u03C3\u03B7 \u03B3\u03B9\u03B1 \u03B5\u03C0\u03B1\u03BB\u03AE\u03B8\u03B5\u03C5\u03C3\u03B7 \u03C4\u03B1\u03C5\u03C4\u03CC\u03C4\u03B7\u03C4\u03B1\u03C2",
516
+ titlePresence: "\u03A3\u03AC\u03C1\u03C9\u03C3\u03B7 \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B1\u03C0\u03BF\u03B4\u03B5\u03AF\u03BE\u03B5\u03C4\u03B5 \u03CC\u03C4\u03B9 \u03B5\u03AF\u03C3\u03C4\u03B5 \u03C0\u03C1\u03B1\u03B3\u03BC\u03B1\u03C4\u03B9\u03BA\u03CC\u03C2 \u03AC\u03BD\u03B8\u03C1\u03C9\u03C0\u03BF\u03C2",
445
517
  titleApprove: "\u0388\u03B3\u03BA\u03C1\u03B9\u03C3\u03B7 \u03B1\u03C0\u03CC \u03C4\u03BF \u03BA\u03B9\u03BD\u03B7\u03C4\u03CC \u03C3\u03B1\u03C2",
446
518
  bodyScan: "\u03A3\u03B1\u03C1\u03CE\u03C3\u03C4\u03B5 \u03BC\u03B5 \u03C4\u03B7\u03BD \u03BA\u03AC\u03BC\u03B5\u03C1\u03B1 \u03C4\u03BF\u03C5 \u03BA\u03B9\u03BD\u03B7\u03C4\u03BF\u03CD \u03C3\u03B1\u03C2 \u03AE \u03C4\u03B7\u03BD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE ZOREAL ID.",
447
519
  bodyApprove: "\u0395\u03B3\u03BA\u03C1\u03AF\u03BD\u03B5\u03C4\u03B5 \u03C4\u03B7 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 \u03C3\u03C4\u03B7\u03BD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE ZOREAL ID.",
@@ -454,11 +526,14 @@ var TRANSLATIONS = {
454
526
  noIdBody: "\u03A3\u03B1\u03C1\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF\u03BD \u03AF\u03B4\u03B9\u03BF \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03BA\u03B1\u03C4\u03B5\u03B2\u03AC\u03C3\u03B5\u03C4\u03B5 \u03C4\u03B7\u03BD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE \u03BA\u03B1\u03B9 \u03BD\u03B1 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03C3\u03B5\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03B4\u03C9\u03C1\u03B5\u03AC\u03BD. \u03A7\u03C1\u03B5\u03B9\u03AC\u03B6\u03B5\u03C4\u03B1\u03B9 \u03BC\u03CC\u03BD\u03BF \u03AD\u03BD\u03B1 \u03BB\u03B5\u03C0\u03C4\u03CC.",
455
527
  cancel: "\u0386\u03BA\u03C5\u03C1\u03BF",
456
528
  close: "\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF",
457
- qrAlt: "\u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 QR \u03B3\u03B9\u03B1 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 \u03BC\u03B5 ZOREAL"
529
+ qrAlt: "\u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 QR \u03B3\u03B9\u03B1 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 \u03BC\u03B5 ZOREAL",
530
+ buttonContinue: "\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1 \u03BC\u03B5 ZOREAL"
458
531
  },
459
532
  // Español (LA)
460
533
  "es-419": {
461
534
  title: "Escanea para iniciar sesi\xF3n",
535
+ titleIdentify: "Escanea para verificar tu identidad",
536
+ titlePresence: "Escanea para demostrar que eres una persona real",
462
537
  titleApprove: "Aprueba desde tu celular",
463
538
  bodyScan: "Escanea con la c\xE1mara de tu celular o con la app ZOREAL ID.",
464
539
  bodyApprove: "Aprueba el inicio de sesi\xF3n en tu app ZOREAL ID.",
@@ -471,11 +546,14 @@ var TRANSLATIONS = {
471
546
  noIdBody: "Escanea el mismo c\xF3digo para descargar la app y crear uno gratis. Solo toma un minuto.",
472
547
  cancel: "Cancelar",
473
548
  close: "Cerrar",
474
- qrAlt: "C\xF3digo QR para iniciar sesi\xF3n con ZOREAL"
549
+ qrAlt: "C\xF3digo QR para iniciar sesi\xF3n con ZOREAL",
550
+ buttonContinue: "Continuar con ZOREAL"
475
551
  },
476
552
  // Suomi
477
553
  fi: {
478
554
  title: "Kirjaudu sis\xE4\xE4n skannaamalla",
555
+ titleIdentify: "Vahvista henkil\xF6llisyytesi skannaamalla",
556
+ titlePresence: "Todista skannaamalla, ett\xE4 olet oikea ihminen",
479
557
  titleApprove: "Hyv\xE4ksy puhelimessasi",
480
558
  bodyScan: "Skannaa puhelimesi kameralla tai ZOREAL ID -sovelluksella.",
481
559
  bodyApprove: "Hyv\xE4ksy kirjautuminen ZOREAL ID -sovelluksessasi.",
@@ -488,11 +566,14 @@ var TRANSLATIONS = {
488
566
  noIdBody: "Skannaa sama koodi ladataksesi sovelluksen ja luodaksesi tunnuksen ilmaiseksi. Se vie vain minuutin.",
489
567
  cancel: "Peruuta",
490
568
  close: "Sulje",
491
- qrAlt: "QR-koodi ZOREAL-kirjautumista varten"
569
+ qrAlt: "QR-koodi ZOREAL-kirjautumista varten",
570
+ buttonContinue: "Jatka ZOREALilla"
492
571
  },
493
572
  // עברית
494
573
  he: {
495
574
  title: "\u05E1\u05E8\u05D5\u05E7 \u05DB\u05D3\u05D9 \u05DC\u05D4\u05EA\u05D7\u05D1\u05E8",
575
+ titleIdentify: "\u05E1\u05E8\u05D5\u05E7 \u05DB\u05D3\u05D9 \u05DC\u05D0\u05DE\u05EA \u05D0\u05EA \u05D6\u05D4\u05D5\u05EA\u05DA",
576
+ titlePresence: "\u05E1\u05E8\u05D5\u05E7 \u05DB\u05D3\u05D9 \u05DC\u05D4\u05D5\u05DB\u05D9\u05D7 \u05E9\u05D0\u05EA\u05D4 \u05D0\u05D3\u05DD \u05D0\u05DE\u05D9\u05EA\u05D9",
496
577
  titleApprove: "\u05D0\u05E9\u05E8 \u05D1\u05D8\u05DC\u05E4\u05D5\u05DF \u05E9\u05DC\u05DA",
497
578
  bodyScan: "\u05E1\u05E8\u05D5\u05E7 \u05D1\u05D0\u05DE\u05E6\u05E2\u05D5\u05EA \u05DE\u05E6\u05DC\u05DE\u05EA \u05D4\u05D8\u05DC\u05E4\u05D5\u05DF \u05E9\u05DC\u05DA \u05D0\u05D5 \u05D0\u05E4\u05DC\u05D9\u05E7\u05E6\u05D9\u05D9\u05EA ZOREAL ID.",
498
579
  bodyApprove: "\u05D0\u05E9\u05E8 \u05D0\u05EA \u05D4\u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05EA \u05D1\u05D0\u05E4\u05DC\u05D9\u05E7\u05E6\u05D9\u05D9\u05EA ZOREAL ID \u05E9\u05DC\u05DA.",
@@ -505,11 +586,14 @@ var TRANSLATIONS = {
505
586
  noIdBody: "\u05E1\u05E8\u05D5\u05E7 \u05D0\u05EA \u05D0\u05D5\u05EA\u05D5 \u05D4\u05E7\u05D5\u05D3 \u05DB\u05D3\u05D9 \u05DC\u05D4\u05D5\u05E8\u05D9\u05D3 \u05D0\u05EA \u05D4\u05D0\u05E4\u05DC\u05D9\u05E7\u05E6\u05D9\u05D4 \u05D5\u05DC\u05D9\u05E6\u05D5\u05E8 \u05D0\u05D7\u05D3 \u05D1\u05D7\u05D9\u05E0\u05DD. \u05D6\u05D4 \u05DC\u05D5\u05E7\u05D7 \u05E8\u05E7 \u05D3\u05E7\u05D4.",
506
587
  cancel: "\u05D1\u05D9\u05D8\u05D5\u05DC",
507
588
  close: "\u05E1\u05D2\u05D5\u05E8",
508
- qrAlt: "\u05E7\u05D5\u05D3 QR \u05DC\u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05EA \u05E2\u05DD ZOREAL"
589
+ qrAlt: "\u05E7\u05D5\u05D3 QR \u05DC\u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05EA \u05E2\u05DD ZOREAL",
590
+ buttonContinue: "\u05D4\u05DE\u05E9\u05DA \u05E2\u05DD ZOREAL"
509
591
  },
510
592
  // Hrvatski
511
593
  hr: {
512
594
  title: "Skenirajte za prijavu",
595
+ titleIdentify: "Skenirajte za potvrdu identiteta",
596
+ titlePresence: "Skenirajte kako biste dokazali da ste stvarna osoba",
513
597
  titleApprove: "Odobrite na svom mobitelu",
514
598
  bodyScan: "Skenirajte kamerom svog mobitela ili aplikacijom ZOREAL ID.",
515
599
  bodyApprove: "Odobrite prijavu u aplikaciji ZOREAL ID.",
@@ -522,11 +606,14 @@ var TRANSLATIONS = {
522
606
  noIdBody: "Skenirajte isti kod da preuzmete aplikaciju i besplatno ga izradite. Traje samo minutu.",
523
607
  cancel: "Odustani",
524
608
  close: "Zatvori",
525
- qrAlt: "QR kod za prijavu putem ZOREAL-a"
609
+ qrAlt: "QR kod za prijavu putem ZOREAL-a",
610
+ buttonContinue: "Nastavi sa ZOREAL-om"
526
611
  },
527
612
  // Magyar
528
613
  hu: {
529
614
  title: "Bejelentkez\xE9s beolvas\xE1ssal",
615
+ titleIdentify: "Olvassa be a szem\xE9lyazonoss\xE1ga igazol\xE1s\xE1hoz",
616
+ titlePresence: "Olvassa be annak igazol\xE1s\xE1hoz, hogy val\xF3di ember",
530
617
  titleApprove: "J\xF3v\xE1hagy\xE1s a telefonj\xE1n",
531
618
  bodyScan: "Olvassa be a telefonja kamer\xE1j\xE1val, vagy a ZOREAL ID alkalmaz\xE1ssal.",
532
619
  bodyApprove: "Hagyja j\xF3v\xE1 a bejelentkez\xE9st a ZOREAL ID alkalmaz\xE1sban.",
@@ -539,11 +626,14 @@ var TRANSLATIONS = {
539
626
  noIdBody: "Olvassa be ugyanazt a k\xF3dot az alkalmaz\xE1s let\xF6lt\xE9s\xE9hez, \xE9s hozzon l\xE9tre egyet ingyenesen. Mind\xF6ssze egy percet vesz ig\xE9nybe.",
540
627
  cancel: "M\xE9gse",
541
628
  close: "Bez\xE1r\xE1s",
542
- qrAlt: "QR-k\xF3d a ZOREAL-lal val\xF3 bejelentkez\xE9shez"
629
+ qrAlt: "QR-k\xF3d a ZOREAL-lal val\xF3 bejelentkez\xE9shez",
630
+ buttonContinue: "Folytat\xE1s a ZOREAL-lal"
543
631
  },
544
632
  // Bahasa Indonesia
545
633
  id: {
546
634
  title: "Pindai untuk masuk",
635
+ titleIdentify: "Pindai untuk memverifikasi identitas Anda",
636
+ titlePresence: "Pindai untuk membuktikan bahwa Anda manusia sungguhan",
547
637
  titleApprove: "Setujui di ponsel Anda",
548
638
  bodyScan: "Pindai dengan kamera ponsel atau aplikasi ZOREAL ID.",
549
639
  bodyApprove: "Setujui proses masuk di aplikasi ZOREAL ID Anda.",
@@ -556,11 +646,14 @@ var TRANSLATIONS = {
556
646
  noIdBody: "Pindai kode yang sama untuk mengunduh aplikasi dan membuat akun secara gratis. Hanya butuh waktu satu menit.",
557
647
  cancel: "Batal",
558
648
  close: "Tutup",
559
- qrAlt: "Kode QR untuk masuk dengan ZOREAL"
649
+ qrAlt: "Kode QR untuk masuk dengan ZOREAL",
650
+ buttonContinue: "Lanjutkan dengan ZOREAL"
560
651
  },
561
652
  // Italiano
562
653
  it: {
563
654
  title: "Scansiona per accedere",
655
+ titleIdentify: "Scansiona per verificare la tua identit\xE0",
656
+ titlePresence: "Scansiona per dimostrare di essere una persona reale",
564
657
  titleApprove: "Approva sul tuo telefono",
565
658
  bodyScan: "Scansiona con la fotocamera del telefono o con l'app ZOREAL ID.",
566
659
  bodyApprove: "Approva l'accesso nell'app ZOREAL ID.",
@@ -573,11 +666,14 @@ var TRANSLATIONS = {
573
666
  noIdBody: "Scansiona lo stesso codice per scaricare l'app e crearne uno gratis. Basta un minuto.",
574
667
  cancel: "Annulla",
575
668
  close: "Chiudi",
576
- qrAlt: "Codice QR per accedere con ZOREAL"
669
+ qrAlt: "Codice QR per accedere con ZOREAL",
670
+ buttonContinue: "Continua con ZOREAL"
577
671
  },
578
672
  // Bahasa Melayu
579
673
  ms: {
580
674
  title: "Imbas untuk log masuk",
675
+ titleIdentify: "Imbas untuk mengesahkan identiti anda",
676
+ titlePresence: "Imbas untuk membuktikan anda manusia sebenar",
581
677
  titleApprove: "Luluskan di telefon anda",
582
678
  bodyScan: "Imbas dengan kamera telefon atau aplikasi ZOREAL ID.",
583
679
  bodyApprove: "Luluskan log masuk dalam aplikasi ZOREAL ID anda.",
@@ -590,11 +686,14 @@ var TRANSLATIONS = {
590
686
  noIdBody: "Imbas kod yang sama untuk memuat turun aplikasi dan cipta satu secara percuma. Hanya mengambil masa seminit.",
591
687
  cancel: "Batal",
592
688
  close: "Tutup",
593
- qrAlt: "Kod QR untuk log masuk dengan ZOREAL"
689
+ qrAlt: "Kod QR untuk log masuk dengan ZOREAL",
690
+ buttonContinue: "Teruskan dengan ZOREAL"
594
691
  },
595
692
  // Nederlands
596
693
  nl: {
597
694
  title: "Scan om in te loggen",
695
+ titleIdentify: "Scan om je identiteit te verifi\xEBren",
696
+ titlePresence: "Scan om te bewijzen dat je een echt mens bent",
598
697
  titleApprove: "Keur goed op je telefoon",
599
698
  bodyScan: "Scan met de camera van je telefoon of de ZOREAL ID-app.",
600
699
  bodyApprove: "Keur de aanmelding goed in je ZOREAL ID-app.",
@@ -607,11 +706,14 @@ var TRANSLATIONS = {
607
706
  noIdBody: "Scan dezelfde code om de app te downloaden en gratis een account aan te maken. Dit duurt maar een minuut.",
608
707
  cancel: "Annuleren",
609
708
  close: "Sluiten",
610
- qrAlt: "QR-code om in te loggen met ZOREAL"
709
+ qrAlt: "QR-code om in te loggen met ZOREAL",
710
+ buttonContinue: "Doorgaan met ZOREAL"
611
711
  },
612
712
  // Norsk
613
713
  no: {
614
714
  title: "Skann for \xE5 logge inn",
715
+ titleIdentify: "Skann for \xE5 bekrefte identiteten din",
716
+ titlePresence: "Skann for \xE5 bevise at du er et ekte menneske",
615
717
  titleApprove: "Godkjenn p\xE5 telefonen din",
616
718
  bodyScan: "Skann med telefonens kamera eller ZOREAL ID-appen.",
617
719
  bodyApprove: "Godkjenn innloggingen i ZOREAL ID-appen din.",
@@ -624,11 +726,14 @@ var TRANSLATIONS = {
624
726
  noIdBody: "Skann den samme koden for \xE5 laste ned appen og opprette en gratis. Det tar bare et minutt.",
625
727
  cancel: "Avbryt",
626
728
  close: "Lukk",
627
- qrAlt: "QR-kode for \xE5 logge inn med ZOREAL"
729
+ qrAlt: "QR-kode for \xE5 logge inn med ZOREAL",
730
+ buttonContinue: "Fortsett med ZOREAL"
628
731
  },
629
732
  // Polski
630
733
  pl: {
631
734
  title: "Zeskanuj, aby si\u0119 zalogowa\u0107",
735
+ titleIdentify: "Zeskanuj, aby zweryfikowa\u0107 swoj\u0105 to\u017Csamo\u015B\u0107",
736
+ titlePresence: "Zeskanuj, aby udowodni\u0107, \u017Ce jeste\u015B prawdziwym cz\u0142owiekiem",
632
737
  titleApprove: "Zatwierd\u017A w telefonie",
633
738
  bodyScan: "Zeskanuj aparatem telefonu lub aplikacj\u0105 ZOREAL ID.",
634
739
  bodyApprove: "Zatwierd\u017A logowanie w aplikacji ZOREAL ID.",
@@ -641,11 +746,14 @@ var TRANSLATIONS = {
641
746
  noIdBody: "Zeskanuj ten sam kod, aby pobra\u0107 aplikacj\u0119 i bezp\u0142atnie utworzy\u0107 ZOREAL ID. Zajmie to tylko minut\u0119.",
642
747
  cancel: "Anuluj",
643
748
  close: "Zamknij",
644
- qrAlt: "Kod QR do logowania za pomoc\u0105 ZOREAL"
749
+ qrAlt: "Kod QR do logowania za pomoc\u0105 ZOREAL",
750
+ buttonContinue: "Kontynuuj z ZOREAL"
645
751
  },
646
752
  // Português (BR)
647
753
  "pt-br": {
648
754
  title: "Escaneie para entrar",
755
+ titleIdentify: "Escaneie para verificar sua identidade",
756
+ titlePresence: "Escaneie para provar que voc\xEA \xE9 uma pessoa real",
649
757
  titleApprove: "Aprove no seu celular",
650
758
  bodyScan: "Escaneie com a c\xE2mera do seu celular ou com o app ZOREAL ID.",
651
759
  bodyApprove: "Aprove o login no app ZOREAL ID.",
@@ -658,11 +766,14 @@ var TRANSLATIONS = {
658
766
  noIdBody: "Escaneie o mesmo c\xF3digo para baixar o app e criar um de gra\xE7a. Leva s\xF3 um minuto.",
659
767
  cancel: "Cancelar",
660
768
  close: "Fechar",
661
- qrAlt: "C\xF3digo QR para entrar com ZOREAL"
769
+ qrAlt: "C\xF3digo QR para entrar com ZOREAL",
770
+ buttonContinue: "Continuar com ZOREAL"
662
771
  },
663
772
  // Română
664
773
  ro: {
665
774
  title: "Scana\u021Bi pentru conectare",
775
+ titleIdentify: "Scana\u021Bi pentru a v\u0103 verifica identitatea",
776
+ titlePresence: "Scana\u021Bi pentru a dovedi c\u0103 sunte\u021Bi o persoan\u0103 real\u0103",
666
777
  titleApprove: "Aproba\u021Bi de pe telefon",
667
778
  bodyScan: "Scana\u021Bi cu camera telefonului sau cu aplica\u021Bia ZOREAL ID.",
668
779
  bodyApprove: "Aproba\u021Bi conectarea \xEEn aplica\u021Bia ZOREAL ID.",
@@ -675,11 +786,14 @@ var TRANSLATIONS = {
675
786
  noIdBody: "Scana\u021Bi acela\u0219i cod pentru a desc\u0103rca aplica\u021Bia \u0219i a crea unul gratuit. Dureaz\u0103 doar un minut.",
676
787
  cancel: "Anuleaz\u0103",
677
788
  close: "\xCEnchide",
678
- qrAlt: "Cod QR pentru conectare cu ZOREAL"
789
+ qrAlt: "Cod QR pentru conectare cu ZOREAL",
790
+ buttonContinue: "Continua\u021Bi cu ZOREAL"
679
791
  },
680
792
  // Српски
681
793
  sr: {
682
794
  title: "\u0421\u043A\u0435\u043D\u0438\u0440\u0430\u0458\u0442\u0435 \u0437\u0430 \u043F\u0440\u0438\u0458\u0430\u0432\u0443",
795
+ titleIdentify: "\u0421\u043A\u0435\u043D\u0438\u0440\u0430\u0458\u0442\u0435 \u0434\u0430 \u043F\u043E\u0442\u0432\u0440\u0434\u0438\u0442\u0435 \u0441\u0432\u043E\u0458 \u0438\u0434\u0435\u043D\u0442\u0438\u0442\u0435\u0442",
796
+ titlePresence: "\u0421\u043A\u0435\u043D\u0438\u0440\u0430\u0458\u0442\u0435 \u0434\u0430 \u0434\u043E\u043A\u0430\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0442\u0435 \u043F\u0440\u0430\u0432\u0430 \u043E\u0441\u043E\u0431\u0430",
683
797
  titleApprove: "\u041E\u0434\u043E\u0431\u0440\u0438\u0442\u0435 \u043D\u0430 \u0441\u0432\u043E\u043C \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0443",
684
798
  bodyScan: "\u0421\u043A\u0435\u043D\u0438\u0440\u0430\u0458\u0442\u0435 \u043A\u0430\u043C\u0435\u0440\u043E\u043C \u0441\u0432\u043E\u0433 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 \u0438\u043B\u0438 \u0430\u043F\u043B\u0438\u043A\u0430\u0446\u0438\u0458\u043E\u043C ZOREAL ID.",
685
799
  bodyApprove: "\u041E\u0434\u043E\u0431\u0440\u0438\u0442\u0435 \u043F\u0440\u0438\u0458\u0430\u0432\u0443 \u0443 \u0430\u043F\u043B\u0438\u043A\u0430\u0446\u0438\u0458\u0438 ZOREAL ID.",
@@ -692,11 +806,14 @@ var TRANSLATIONS = {
692
806
  noIdBody: "\u0421\u043A\u0435\u043D\u0438\u0440\u0430\u0458\u0442\u0435 \u0438\u0441\u0442\u0438 \u043A\u043E\u0434 \u0434\u0430 \u043F\u0440\u0435\u0443\u0437\u043C\u0435\u0442\u0435 \u0430\u043F\u043B\u0438\u043A\u0430\u0446\u0438\u0458\u0443 \u0438 \u0431\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u043E \u0433\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u0438\u0442\u0435. \u0422\u0440\u0430\u0458\u0435 \u0441\u0430\u043C\u043E \u043C\u0438\u043D\u0443\u0442.",
693
807
  cancel: "\u041E\u0442\u043A\u0430\u0436\u0438",
694
808
  close: "\u0417\u0430\u0442\u0432\u043E\u0440\u0438",
695
- qrAlt: "QR \u043A\u043E\u0434 \u0437\u0430 \u043F\u0440\u0438\u0458\u0430\u0432\u0443 \u043F\u0440\u0435\u043A\u043E ZOREAL-\u0430"
809
+ qrAlt: "QR \u043A\u043E\u0434 \u0437\u0430 \u043F\u0440\u0438\u0458\u0430\u0432\u0443 \u043F\u0440\u0435\u043A\u043E ZOREAL-\u0430",
810
+ buttonContinue: "\u041D\u0430\u0441\u0442\u0430\u0432\u0438 \u0441\u0430 ZOREAL-\u043E\u043C"
696
811
  },
697
812
  // ไทย
698
813
  th: {
699
814
  title: "\u0E2A\u0E41\u0E01\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A",
815
+ titleIdentify: "\u0E2A\u0E41\u0E01\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19\u0E15\u0E31\u0E27\u0E15\u0E19\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13",
816
+ titlePresence: "\u0E2A\u0E41\u0E01\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1E\u0E34\u0E2A\u0E39\u0E08\u0E19\u0E4C\u0E27\u0E48\u0E32\u0E04\u0E38\u0E13\u0E40\u0E1B\u0E47\u0E19\u0E21\u0E19\u0E38\u0E29\u0E22\u0E4C\u0E08\u0E23\u0E34\u0E07",
700
817
  titleApprove: "\u0E2D\u0E19\u0E38\u0E21\u0E31\u0E15\u0E34\u0E1A\u0E19\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13",
701
818
  bodyScan: "\u0E2A\u0E41\u0E01\u0E19\u0E14\u0E49\u0E27\u0E22\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E2B\u0E23\u0E37\u0E2D\u0E41\u0E2D\u0E1B ZOREAL ID",
702
819
  bodyApprove: "\u0E2D\u0E19\u0E38\u0E21\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E43\u0E19\u0E41\u0E2D\u0E1B ZOREAL ID \u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13",
@@ -709,11 +826,14 @@ var TRANSLATIONS = {
709
826
  noIdBody: "\u0E2A\u0E41\u0E01\u0E19\u0E42\u0E04\u0E49\u0E14\u0E40\u0E14\u0E35\u0E22\u0E27\u0E01\u0E31\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E14\u0E32\u0E27\u0E19\u0E4C\u0E42\u0E2B\u0E25\u0E14\u0E41\u0E2D\u0E1B\u0E41\u0E25\u0E30\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E1F\u0E23\u0E35 \u0E43\u0E0A\u0E49\u0E40\u0E27\u0E25\u0E32\u0E40\u0E1E\u0E35\u0E22\u0E07\u0E19\u0E32\u0E17\u0E35\u0E40\u0E14\u0E35\u0E22\u0E27",
710
827
  cancel: "\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01",
711
828
  close: "\u0E1B\u0E34\u0E14",
712
- qrAlt: "\u0E04\u0E34\u0E27\u0E2D\u0E32\u0E23\u0E4C\u0E42\u0E04\u0E49\u0E14\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E14\u0E49\u0E27\u0E22 ZOREAL"
829
+ qrAlt: "\u0E04\u0E34\u0E27\u0E2D\u0E32\u0E23\u0E4C\u0E42\u0E04\u0E49\u0E14\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E14\u0E49\u0E27\u0E22 ZOREAL",
830
+ buttonContinue: "\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23\u0E15\u0E48\u0E2D\u0E14\u0E49\u0E27\u0E22 ZOREAL"
713
831
  },
714
832
  // Tagalog
715
833
  tl: {
716
834
  title: "I-scan para mag-sign in",
835
+ titleIdentify: "I-scan para i-verify ang iyong pagkakakilanlan",
836
+ titlePresence: "I-scan para patunayang tunay kang tao",
717
837
  titleApprove: "I-approve sa iyong telepono",
718
838
  bodyScan: "I-scan gamit ang camera ng iyong telepono o ang ZOREAL ID app.",
719
839
  bodyApprove: "I-approve ang login sa iyong ZOREAL ID app.",
@@ -726,11 +846,14 @@ var TRANSLATIONS = {
726
846
  noIdBody: "I-scan ang parehong code para i-download ang app at gumawa ng iyong ZOREAL ID nang libre. Isang minuto lang ito.",
727
847
  cancel: "Kanselahin",
728
848
  close: "Isara",
729
- qrAlt: "QR code para mag-sign in gamit ang ZOREAL"
849
+ qrAlt: "QR code para mag-sign in gamit ang ZOREAL",
850
+ buttonContinue: "Magpatuloy gamit ang ZOREAL"
730
851
  },
731
852
  // Türkçe
732
853
  tr: {
733
854
  title: "Giri\u015F i\xE7in taray\u0131n",
855
+ titleIdentify: "Kimli\u011Finizi do\u011Frulamak i\xE7in taray\u0131n",
856
+ titlePresence: "Ger\xE7ek bir insan oldu\u011Funuzu kan\u0131tlamak i\xE7in taray\u0131n",
734
857
  titleApprove: "Telefonunuzdan onaylay\u0131n",
735
858
  bodyScan: "Telefonunuzun kameras\u0131yla veya ZOREAL ID uygulamas\u0131yla taray\u0131n.",
736
859
  bodyApprove: "Giri\u015Fi ZOREAL ID uygulaman\u0131zdan onaylay\u0131n.",
@@ -743,11 +866,14 @@ var TRANSLATIONS = {
743
866
  noIdBody: "Uygulamay\u0131 indirmek ve \xFCcretsiz bir tane olu\u015Fturmak i\xE7in ayn\u0131 kodu taray\u0131n. Sadece bir dakikan\u0131z\u0131 al\u0131r.",
744
867
  cancel: "\u0130ptal",
745
868
  close: "Kapat",
746
- qrAlt: "ZOREAL ile giri\u015F yapmak i\xE7in QR kodu"
869
+ qrAlt: "ZOREAL ile giri\u015F yapmak i\xE7in QR kodu",
870
+ buttonContinue: "ZOREAL ile devam et"
747
871
  },
748
872
  // Українська
749
873
  uk: {
750
874
  title: "\u0421\u043A\u0430\u043D\u0443\u0439\u0442\u0435 \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u0443",
875
+ titleIdentify: "\u0421\u043A\u0430\u043D\u0443\u0439\u0442\u0435, \u0449\u043E\u0431 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438 \u043E\u0441\u043E\u0431\u0443",
876
+ titlePresence: "\u0421\u043A\u0430\u043D\u0443\u0439\u0442\u0435, \u0449\u043E\u0431 \u0434\u043E\u0432\u0435\u0441\u0442\u0438, \u0449\u043E \u0432\u0438 \u0441\u043F\u0440\u0430\u0432\u0436\u043D\u044F \u043B\u044E\u0434\u0438\u043D\u0430",
751
877
  titleApprove: "\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u043D\u0430 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0456",
752
878
  bodyScan: "\u0421\u043A\u0430\u043D\u0443\u0439\u0442\u0435 \u043A\u0430\u043C\u0435\u0440\u043E\u044E \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0443 \u0430\u0431\u043E \u0434\u043E\u0434\u0430\u0442\u043A\u043E\u043C ZOREAL ID.",
753
879
  bodyApprove: "\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u0432\u0445\u0456\u0434 \u0443 \u0434\u043E\u0434\u0430\u0442\u043A\u0443 ZOREAL ID.",
@@ -760,11 +886,14 @@ var TRANSLATIONS = {
760
886
  noIdBody: "\u0421\u043A\u0430\u043D\u0443\u0439\u0442\u0435 \u0442\u043E\u0439 \u0441\u0430\u043C\u0438\u0439 \u043A\u043E\u0434, \u0449\u043E\u0431 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0434\u043E\u0434\u0430\u0442\u043E\u043A \u0456 \u0431\u0435\u0437\u043A\u043E\u0448\u0442\u043E\u0432\u043D\u043E \u0441\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u0439\u043E\u0433\u043E. \u0426\u0435 \u0437\u0430\u0439\u043C\u0435 \u043B\u0438\u0448\u0435 \u0445\u0432\u0438\u043B\u0438\u043D\u0443.",
761
887
  cancel: "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438",
762
888
  close: "\u0417\u0430\u043A\u0440\u0438\u0442\u0438",
763
- qrAlt: "QR-\u043A\u043E\u0434 \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u0443 \u0447\u0435\u0440\u0435\u0437 ZOREAL"
889
+ qrAlt: "QR-\u043A\u043E\u0434 \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u0443 \u0447\u0435\u0440\u0435\u0437 ZOREAL",
890
+ buttonContinue: "\u041F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438 \u0437 ZOREAL"
764
891
  },
765
892
  // اردو
766
893
  ur: {
767
894
  title: "\u0644\u0627\u06AF \u0627\u0650\u0646 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u06A9\u06CC\u0646 \u06A9\u0631\u06CC\u06BA",
895
+ titleIdentify: "\u0627\u067E\u0646\u06CC \u0634\u0646\u0627\u062E\u062A \u06A9\u06CC \u062A\u0635\u062F\u06CC\u0642 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u06A9\u06CC\u0646 \u06A9\u0631\u06CC\u06BA",
896
+ titlePresence: "\u06CC\u06C1 \u062B\u0627\u0628\u062A \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u06A9\u06CC\u0646 \u06A9\u0631\u06CC\u06BA \u06A9\u06C1 \u0622\u067E \u0627\u06CC\u06A9 \u062D\u0642\u06CC\u0642\u06CC \u0627\u0646\u0633\u0627\u0646 \u06C1\u06CC\u06BA",
768
897
  titleApprove: "\u0627\u067E\u0646\u06D2 \u0641\u0648\u0646 \u067E\u0631 \u0645\u0646\u0638\u0648\u0631\u06CC \u062F\u06CC\u06BA",
769
898
  bodyScan: "\u0627\u067E\u0646\u06D2 \u0641\u0648\u0646 \u06A9\u06D2 \u06A9\u06CC\u0645\u0631\u06D2 \u06CC\u0627 ZOREAL ID \u0627\u06CC\u067E \u0633\u06D2 \u0627\u0633\u06A9\u06CC\u0646 \u06A9\u0631\u06CC\u06BA\u06D4",
770
899
  bodyApprove: "\u0627\u067E\u0646\u06CC ZOREAL ID \u0627\u06CC\u067E \u0645\u06CC\u06BA \u0644\u0627\u06AF \u0627\u0650\u0646 \u06A9\u06CC \u0645\u0646\u0638\u0648\u0631\u06CC \u062F\u06CC\u06BA\u06D4",
@@ -777,11 +906,14 @@ var TRANSLATIONS = {
777
906
  noIdBody: "\u0627\u06CC\u067E \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06A9\u0631\u0646\u06D2 \u0627\u0648\u0631 \u0645\u0641\u062A \u0645\u06CC\u06BA \u0627\u06CC\u06A9 \u0628\u0646\u0627\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0648\u06C1\u06CC \u06A9\u0648\u0688 \u0627\u0633\u06A9\u06CC\u0646 \u06A9\u0631\u06CC\u06BA\u06D4 \u0627\u0633 \u0645\u06CC\u06BA \u0635\u0631\u0641 \u0627\u06CC\u06A9 \u0645\u0646\u0679 \u0644\u06AF\u062A\u0627 \u06C1\u06D2\u06D4",
778
907
  cancel: "\u0645\u0646\u0633\u0648\u062E \u06A9\u0631\u06CC\u06BA",
779
908
  close: "\u0628\u0646\u062F \u06A9\u0631\u06CC\u06BA",
780
- qrAlt: "ZOREAL \u06A9\u06D2 \u0633\u0627\u062A\u06BE \u0644\u0627\u06AF \u0627\u0650\u0646 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 QR \u06A9\u0648\u0688"
909
+ qrAlt: "ZOREAL \u06A9\u06D2 \u0633\u0627\u062A\u06BE \u0644\u0627\u06AF \u0627\u0650\u0646 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 QR \u06A9\u0648\u0688",
910
+ buttonContinue: "ZOREAL \u06A9\u06D2 \u0633\u0627\u062A\u06BE \u062C\u0627\u0631\u06CC \u0631\u06A9\u06BE\u06CC\u06BA"
781
911
  },
782
912
  // Tiếng Việt
783
913
  vi: {
784
914
  title: "Qu\xE9t \u0111\u1EC3 \u0111\u0103ng nh\u1EADp",
915
+ titleIdentify: "Qu\xE9t \u0111\u1EC3 x\xE1c minh danh t\xEDnh c\u1EE7a b\u1EA1n",
916
+ titlePresence: "Qu\xE9t \u0111\u1EC3 ch\u1EE9ng minh b\u1EA1n l\xE0 ng\u01B0\u1EDDi th\u1EADt",
785
917
  titleApprove: "Ph\xEA duy\u1EC7t tr\xEAn \u0111i\u1EC7n tho\u1EA1i c\u1EE7a b\u1EA1n",
786
918
  bodyScan: "Qu\xE9t b\u1EB1ng camera \u0111i\u1EC7n tho\u1EA1i ho\u1EB7c \u1EE9ng d\u1EE5ng ZOREAL ID.",
787
919
  bodyApprove: "Ph\xEA duy\u1EC7t \u0111\u0103ng nh\u1EADp trong \u1EE9ng d\u1EE5ng ZOREAL ID c\u1EE7a b\u1EA1n.",
@@ -794,7 +926,8 @@ var TRANSLATIONS = {
794
926
  noIdBody: "Qu\xE9t c\xF9ng m\xE3 n\xE0y \u0111\u1EC3 t\u1EA3i \u1EE9ng d\u1EE5ng v\xE0 t\u1EA1o t\xE0i kho\u1EA3n mi\u1EC5n ph\xED. Ch\u1EC9 m\u1EA5t m\u1ED9t ph\xFAt.",
795
927
  cancel: "H\u1EE7y",
796
928
  close: "\u0110\xF3ng",
797
- qrAlt: "M\xE3 QR \u0111\u1EC3 \u0111\u0103ng nh\u1EADp b\u1EB1ng ZOREAL"
929
+ qrAlt: "M\xE3 QR \u0111\u1EC3 \u0111\u0103ng nh\u1EADp b\u1EB1ng ZOREAL",
930
+ buttonContinue: "Ti\u1EBFp t\u1EE5c v\u1EDBi ZOREAL"
798
931
  }
799
932
  };
800
933
  var RTL = /* @__PURE__ */ new Set(["ar", "he", "iw", "ur"]);
@@ -886,8 +1019,20 @@ var LIGHT = `
886
1019
  --zrl-accent-ink: #04698a;
887
1020
  --zrl-urgent: #b4761a;
888
1021
  --zrl-qr-bg: #ffffff;
1022
+ --zrl-qr-filter: none;
1023
+ --zrl-qr-spent-filter: blur(3px);
1024
+ --zrl-qr-blend: normal;
889
1025
  --zrl-shadow: 0 1px 2px rgba(16, 18, 27, 0.06), 0 20px 50px -12px rgba(16, 18, 27, 0.3);
890
1026
  --zrl-ring: rgba(16, 18, 27, 0.07);
1027
+ /* The light on the QR well's edge. Brand blue on both grounds, a lighter
1028
+ tint at the head; only its strength is themed, see the dark block. */
1029
+ --zrl-beam: #00b4d9;
1030
+ --zrl-beam-head: #7fe0f4;
1031
+ --zrl-beam-line: 2px;
1032
+ --zrl-glow-core: 4px;
1033
+ --zrl-glow-reach: 24px;
1034
+ --zrl-glow-blur: 8px;
1035
+ --zrl-glow-opacity: 0.6;
891
1036
  `;
892
1037
  var DARK = `
893
1038
  --zrl-scrim: rgba(0, 0, 0, 0.62);
@@ -902,12 +1047,24 @@ var DARK = `
902
1047
  --zrl-accent-soft: #0d3b47;
903
1048
  --zrl-accent-ink: #7fdcf0;
904
1049
  --zrl-urgent: #e0a952;
905
- /* The QR well stays white in dark mode on purpose: a scanner needs the
906
- quiet-zone contrast, and an inverted QR fails on a good number of phone
907
- cameras. It reads as a deliberate light panel, not a theming miss. */
908
- --zrl-qr-bg: #ffffff;
1050
+ /* The code is drawn light on the dark surface: the panel is transparent
1051
+ and the image is inverted and screened, so only the modules and the
1052
+ mark show. */
1053
+ --zrl-qr-bg: transparent;
1054
+ --zrl-qr-filter: invert(1);
1055
+ --zrl-qr-spent-filter: invert(1) blur(3px);
1056
+ --zrl-qr-blend: screen;
909
1057
  --zrl-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 20px 50px -12px rgba(0, 0, 0, 0.65);
910
1058
  --zrl-ring: rgba(255, 255, 255, 0.1);
1059
+ /* A glow that reads on a white card disappears on a dark one: the light
1060
+ here is brighter and wider, and its halo reaches further out. */
1061
+ --zrl-beam: #22c8ec;
1062
+ --zrl-beam-head: #c2f3fc;
1063
+ --zrl-beam-line: 3px;
1064
+ --zrl-glow-core: 6px;
1065
+ --zrl-glow-reach: 32px;
1066
+ --zrl-glow-blur: 10px;
1067
+ --zrl-glow-opacity: 0.85;
911
1068
  `;
912
1069
  var CSS = `
913
1070
  .${PREFIX}-root { ${LIGHT} }
@@ -979,16 +1136,10 @@ var CSS = `
979
1136
  border: 1px solid var(--zrl-line);
980
1137
  border-radius: var(--zrl-radius);
981
1138
  background: var(--zrl-qr-bg);
982
- /* The light on the edge takes its shape and colour from here. The colour
983
- is fixed, not themed: the brand blue on both grounds, a lighter tint of
984
- it at the head, no other hue. */
1139
+ /* The light on the edge takes its shape from here and its colour and
1140
+ strength from the theme tokens above. One lap in 4s on every tier. */
985
1141
  --zrl-radius: 16px;
986
- --zrl-beam: #00b4d9;
987
- --zrl-beam-head: #7fe0f4;
988
- --zrl-beam-size: 100px;
989
1142
  --zrl-beam-time: 4s;
990
- --zrl-glow-reach: 20px;
991
- --zrl-glow-core: 3px;
992
1143
  }
993
1144
 
994
1145
  /* The light on the well's edge: a short comet running along the border, with
@@ -1001,7 +1152,7 @@ var CSS = `
1001
1152
  before 120 and Safari before 15.4; the unprefixed one, declared after it,
1002
1153
  wins everywhere else.
1003
1154
 
1004
- qr-beam keeps a 1px ring on the border line: the comet itself.
1155
+ qr-beam keeps a thin ring on the border line: the comet itself.
1005
1156
  qr-beam-glow is the glow: a wide band outside the well that blurs whatever
1006
1157
  is inside it, and inside it qr-beam-glow-band keeps a 3px ring with a
1007
1158
  second copy of the comet. The blur has to sit on the parent because a
@@ -1016,9 +1167,9 @@ var CSS = `
1016
1167
  .${PREFIX}-qr-beam-glow,
1017
1168
  .${PREFIX}-qr-beam-glow-band {
1018
1169
  position: absolute;
1019
- inset: -1px;
1020
- border: 1px solid transparent;
1021
- border-radius: var(--zrl-radius);
1170
+ inset: calc(0px - var(--zrl-beam-line));
1171
+ border: var(--zrl-beam-line) solid transparent;
1172
+ border-radius: calc(var(--zrl-radius) - 1px + var(--zrl-beam-line));
1022
1173
  pointer-events: none;
1023
1174
  -webkit-mask: linear-gradient(transparent, transparent), linear-gradient(#fff, #fff);
1024
1175
  -webkit-mask-clip: padding-box, border-box;
@@ -1031,8 +1182,9 @@ var CSS = `
1031
1182
  inset: calc(0px - var(--zrl-glow-reach));
1032
1183
  border-width: var(--zrl-glow-reach);
1033
1184
  border-radius: calc(var(--zrl-radius) - 1px + var(--zrl-glow-reach));
1034
- filter: blur(6px);
1035
- opacity: 0.7;
1185
+ filter: blur(var(--zrl-glow-blur));
1186
+ opacity: var(--zrl-glow-opacity);
1187
+ will-change: filter;
1036
1188
  }
1037
1189
  .${PREFIX}-qr-beam-glow-band {
1038
1190
  inset: calc(0px - var(--zrl-glow-core));
@@ -1055,20 +1207,24 @@ var CSS = `
1055
1207
  transition: opacity 400ms cubic-bezier(0.23, 1, 0.32, 1);
1056
1208
  }
1057
1209
 
1058
- /* The moving light. Declared bottom-up: the transform fallback here, and each
1059
- @supports block further down replaces it where the browser allows. */
1210
+ /* The moving light: an oversized square carrying a conic sweep, rotated
1211
+ whole. A transform animation runs on the compositor, so the light keeps
1212
+ moving while the page is busy; animating the gradient angle instead
1213
+ repaints every frame on the main thread and stutters. */
1060
1214
  .${PREFIX}-qr-beam::after,
1061
1215
  .${PREFIX}-qr-beam-glow-band::after {
1062
1216
  content: '';
1063
1217
  position: absolute;
1064
1218
  inset: -50%;
1065
1219
  background: conic-gradient(
1066
- from var(--zrl-angle, 0deg),
1067
- transparent 0deg 245deg,
1068
- var(--zrl-beam) 332deg 346deg,
1220
+ from 0deg,
1221
+ transparent 0deg 220deg,
1222
+ var(--zrl-beam) 330deg,
1223
+ var(--zrl-beam-head) 348deg,
1069
1224
  transparent 356deg 360deg
1070
1225
  );
1071
- animation: ${PREFIX}-orbit 3s linear infinite;
1226
+ animation: ${PREFIX}-orbit var(--zrl-beam-time) linear infinite;
1227
+ will-change: transform;
1072
1228
  transition: opacity 400ms cubic-bezier(0.23, 1, 0.32, 1);
1073
1229
  }
1074
1230
 
@@ -1088,6 +1244,8 @@ var CSS = `
1088
1244
  width: 100%;
1089
1245
  height: 100%;
1090
1246
  border-radius: 8px;
1247
+ filter: var(--zrl-qr-filter);
1248
+ mix-blend-mode: var(--zrl-qr-blend);
1091
1249
  transition: filter 300ms cubic-bezier(0.23, 1, 0.32, 1),
1092
1250
  opacity 300ms cubic-bezier(0.23, 1, 0.32, 1),
1093
1251
  transform 300ms cubic-bezier(0.23, 1, 0.32, 1);
@@ -1096,7 +1254,7 @@ var CSS = `
1096
1254
  /* Once the code is claimed the QR is spent. Blurring it out rather than
1097
1255
  swapping it keeps one object on screen through the state change, so the eye
1098
1256
  reads a transformation instead of two things trading places. */
1099
- .${PREFIX}-qr[data-spent="true"] { opacity: 0.2; filter: blur(3px); transform: scale(0.96); }
1257
+ .${PREFIX}-qr[data-spent="true"] { opacity: 0.2; filter: var(--zrl-qr-spent-filter); transform: scale(0.96); }
1100
1258
 
1101
1259
  .${PREFIX}-qr-overlay {
1102
1260
  position: absolute;
@@ -1189,7 +1347,11 @@ var CSS = `
1189
1347
  margin: 6px 0 0;
1190
1348
  font-size: 12px;
1191
1349
  color: var(--zrl-ink-mute);
1350
+ text-decoration: none;
1351
+ border-radius: 6px;
1352
+ transition: color 150ms ease-out;
1192
1353
  }
1354
+ .${PREFIX}-secured:hover { color: var(--zrl-ink); }
1193
1355
 
1194
1356
  .${PREFIX}-close {
1195
1357
  position: absolute;
@@ -1225,53 +1387,7 @@ var CSS = `
1225
1387
  70%, 100% { transform: scale(2.6); opacity: 0 }
1226
1388
  }
1227
1389
 
1228
- /* Three ways to move the light, one look at rest.
1229
- Where offset-path takes a rect() (Chrome 116, Firefox 122, Safari 18) the
1230
- comet rides the edge. Before that, a conic gradient turns inside the same
1231
- masks instead: on a registered custom property where @property exists, and
1232
- by rotating an oversized square where it does not, since an untyped custom
1233
- property cannot interpolate and the light would snap once a cycle.
1234
- There is no direct query for @property support. transition-behavior
1235
- shipped after it in every engine (Chrome 117 vs 85, Firefox 129 vs 128,
1236
- Safari 17.4 vs 16.4), so it stands in: a yes is never wrong, and a no only
1237
- sends a capable browser down the transform tier, which looks the same.
1238
- inherits: false so the angle stays on the element that animates it and
1239
- never reaches the host page or the well. */
1240
- @property --zrl-angle {
1241
- syntax: '<angle>';
1242
- inherits: false;
1243
- initial-value: 0deg;
1244
- }
1245
1390
  @keyframes ${PREFIX}-orbit { to { transform: rotate(360deg) } }
1246
- @keyframes ${PREFIX}-orbit-angle { to { --zrl-angle: 360deg } }
1247
- @keyframes ${PREFIX}-beam { to { offset-distance: 100% } }
1248
- @supports (transition-behavior: allow-discrete) {
1249
- .${PREFIX}-qr-beam::after {
1250
- inset: -1px;
1251
- animation-name: ${PREFIX}-orbit-angle;
1252
- }
1253
- .${PREFIX}-qr-beam-glow-band::after {
1254
- inset: calc(0px - var(--zrl-glow-core));
1255
- animation-name: ${PREFIX}-orbit-angle;
1256
- }
1257
- }
1258
- /* The comet: a square that rides the well's edge on a rounded-rect path, its
1259
- anchor a little ahead of centre, turned to face the way it travels, and
1260
- masked down to what its overlay allows. The gradient runs against the
1261
- direction of travel: a light head, the blue body, nothing behind. One lap
1262
- in 4s, linear: continuous motion has no ease. */
1263
- @supports (offset-path: rect(0 auto auto 0)) {
1264
- .${PREFIX}-qr-beam::after,
1265
- .${PREFIX}-qr-beam-glow-band::after {
1266
- inset: auto;
1267
- width: var(--zrl-beam-size);
1268
- height: var(--zrl-beam-size);
1269
- background: linear-gradient(to left, var(--zrl-beam-head), var(--zrl-beam), transparent);
1270
- offset-path: rect(0 auto auto 0 round calc(var(--zrl-radius) - 1px));
1271
- offset-anchor: 60% 50%;
1272
- animation: ${PREFIX}-beam var(--zrl-beam-time) linear infinite;
1273
- }
1274
- }
1275
1391
 
1276
1392
  @media (prefers-reduced-motion: reduce) {
1277
1393
  .${PREFIX}-scrim,
@@ -1420,7 +1536,10 @@ function mountPairingModal(state, options) {
1420
1536
  const footer = el("div", cx("footer"));
1421
1537
  const cancelBtn = el("button", cx("cancel"), t.cancel);
1422
1538
  cancelBtn.type = "button";
1423
- const secured = el("p", cx("secured"));
1539
+ const secured = el("a", cx("secured"));
1540
+ secured.href = "https://zoreal.com";
1541
+ secured.target = "_blank";
1542
+ secured.rel = "noopener";
1424
1543
  secured.append(strokeIcon(13, ["M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z", "m9 12 2 2 4-4"]), document.createTextNode(t.secured));
1425
1544
  footer.append(cancelBtn, secured);
1426
1545
  card.append(closeBtn, body, help, footer);
@@ -1452,7 +1571,7 @@ function mountPairingModal(state, options) {
1452
1571
  };
1453
1572
  const paint = (s) => {
1454
1573
  const settled = s.status === "claimed" || s.status === "enrolling";
1455
- title.textContent = settled ? t.titleApprove : t.title;
1574
+ title.textContent = settled ? t.titleApprove : titleFor(t, options.intent ?? "sign-in");
1456
1575
  bodyText.textContent = s.status === "enrolling" ? t.bodyEnrolling : settled ? t.bodyApprove : t.bodyScan;
1457
1576
  statusLabel.textContent = settled ? t.waitingApproval : t.waiting;
1458
1577
  qr.dataset.spent = String(settled);
@@ -1526,6 +1645,7 @@ function startLogin(options) {
1526
1645
  const issuer = options.issuer ?? DEFAULT_ISSUER;
1527
1646
  const controller = new AbortController();
1528
1647
  const useAppLink = options.display === "link" || options.display !== "qr" && isMobileUserAgent();
1648
+ const intent = resolveIntent(options.intent, options.scope, options.acr_values);
1529
1649
  const surface = {};
1530
1650
  const cancel = () => controller.abort();
1531
1651
  let modal = null;
@@ -1580,6 +1700,7 @@ function startLogin(options) {
1580
1700
  qrUrl: surface.qrUrl,
1581
1701
  qrRefreshSeconds,
1582
1702
  appLink: useAppLink,
1703
+ intent,
1583
1704
  cancel
1584
1705
  });
1585
1706
  let lastPolled = { status: "pending", expiresIn: started.expires_in };
@@ -1588,6 +1709,7 @@ function startLogin(options) {
1588
1709
  if ((options.pairingUI ?? "modal") === "modal" && !useAppLink) {
1589
1710
  modal = mountPairingModal(initial, {
1590
1711
  onCancel: cancel,
1712
+ intent,
1591
1713
  locale: options.locale,
1592
1714
  theme: options.theme,
1593
1715
  timeoutMs: options.pairingTimeoutMs
@@ -1714,6 +1836,7 @@ export {
1714
1836
  isMobileUserAgent,
1715
1837
  mountPairingModal,
1716
1838
  pollUntilApproved,
1839
+ resolveIntent,
1717
1840
  startLogin,
1718
1841
  startPairing,
1719
1842
  unsafeClaims