@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.cjs CHANGED
@@ -37,6 +37,7 @@ __export(index_exports, {
37
37
  isMobileUserAgent: () => isMobileUserAgent,
38
38
  mountPairingModal: () => mountPairingModal,
39
39
  pollUntilApproved: () => pollUntilApproved,
40
+ resolveIntent: () => resolveIntent,
40
41
  startLogin: () => startLogin,
41
42
  startPairing: () => startPairing,
42
43
  unsafeClaims: () => unsafeClaims
@@ -59,7 +60,7 @@ function unsafeClaims(idToken) {
59
60
 
60
61
  // src/wire.ts
61
62
  var WIRE_VERSION = 1;
62
- var SDK_VERSION = "0.1.12";
63
+ var SDK_VERSION = "0.1.14";
63
64
  var SDK_NAME = "@zoreal/oauth2-js";
64
65
  var DEFAULT_ISSUER = "https://id.zoreal.com";
65
66
  var POLL_INTERVAL_MS = 2e3;
@@ -188,9 +189,27 @@ function isMobileUserAgent() {
188
189
  return /android|iphone|ipad|ipod/i.test(navigator.userAgent);
189
190
  }
190
191
 
192
+ // src/intent.ts
193
+ var SIGN_IN_SCOPES = /* @__PURE__ */ new Set(["openid", "email", "profile.name"]);
194
+ function resolveIntent(intent, scope, acrValues) {
195
+ if (intent) return intent;
196
+ const scopes = (scope ?? "openid").split(/\s+/).filter(Boolean);
197
+ if (scopes.some((s) => !SIGN_IN_SCOPES.has(s))) return "identify";
198
+ const acr = typeof acrValues === "string" ? acrValues.split(/\s+/) : acrValues ?? [];
199
+ if (scopes.every((s) => s === "openid") && acr.includes("zoreal.live")) return "presence";
200
+ return "sign-in";
201
+ }
202
+ function titleFor(t, intent) {
203
+ if (intent === "identify") return t.titleIdentify;
204
+ if (intent === "presence") return t.titlePresence;
205
+ return t.title;
206
+ }
207
+
191
208
  // src/i18n.ts
192
209
  var en = {
193
210
  title: "Scan to sign in",
211
+ titleIdentify: "Scan to verify your identity",
212
+ titlePresence: "Scan to prove you are a real human",
194
213
  titleApprove: "Approve on your phone",
195
214
  bodyScan: "Scan with your phone camera or the ZOREAL ID app.",
196
215
  bodyApprove: "Approve the login in your ZOREAL ID app.",
@@ -203,12 +222,15 @@ var en = {
203
222
  noIdBody: "Scan the same code to download the app and create one for free. It only takes a minute.",
204
223
  cancel: "Cancel",
205
224
  close: "Close",
206
- qrAlt: "QR code to sign in with ZOREAL"
225
+ qrAlt: "QR code to sign in with ZOREAL",
226
+ buttonContinue: "Continue with ZOREAL"
207
227
  };
208
228
  var TRANSLATIONS = {
209
229
  en,
210
230
  sv: {
211
231
  title: "Skanna f\xF6r att logga in",
232
+ titleIdentify: "Skanna f\xF6r att verifiera din identitet",
233
+ titlePresence: "Skanna f\xF6r att bevisa att du \xE4r en riktig m\xE4nniska",
212
234
  titleApprove: "Godk\xE4nn p\xE5 telefonen",
213
235
  bodyScan: "Skanna med telefonens kamera eller ZOREAL ID-appen.",
214
236
  bodyApprove: "Godk\xE4nn inloggningen i ZOREAL ID-appen.",
@@ -221,10 +243,13 @@ var TRANSLATIONS = {
221
243
  noIdBody: "Skanna samma kod f\xF6r att ladda ner appen och skapa ett gratis. Det tar bara en minut.",
222
244
  cancel: "Avbryt",
223
245
  close: "St\xE4ng",
224
- qrAlt: "QR-kod f\xF6r att logga in med ZOREAL"
246
+ qrAlt: "QR-kod f\xF6r att logga in med ZOREAL",
247
+ buttonContinue: "Forts\xE4tt med ZOREAL"
225
248
  },
226
249
  es: {
227
250
  title: "Escanea para iniciar sesi\xF3n",
251
+ titleIdentify: "Escanea para verificar tu identidad",
252
+ titlePresence: "Escanea para demostrar que eres una persona real",
228
253
  titleApprove: "Apru\xE9balo en tu tel\xE9fono",
229
254
  bodyScan: "Escanea con la c\xE1mara de tu tel\xE9fono o con la app ZOREAL ID.",
230
255
  bodyApprove: "Aprueba el inicio de sesi\xF3n en tu app ZOREAL ID.",
@@ -237,10 +262,13 @@ var TRANSLATIONS = {
237
262
  noIdBody: "Escanea el mismo c\xF3digo para descargar la app y crear una gratis. Solo toma un minuto.",
238
263
  cancel: "Cancelar",
239
264
  close: "Cerrar",
240
- qrAlt: "C\xF3digo QR para iniciar sesi\xF3n con ZOREAL"
265
+ qrAlt: "C\xF3digo QR para iniciar sesi\xF3n con ZOREAL",
266
+ buttonContinue: "Continuar con ZOREAL"
241
267
  },
242
268
  pt: {
243
269
  title: "Digitalize para entrar",
270
+ titleIdentify: "Digitalize para verificar a sua identidade",
271
+ titlePresence: "Digitalize para provar que \xE9 uma pessoa real",
244
272
  titleApprove: "Aprove no seu telefone",
245
273
  bodyScan: "Digitalize com a c\xE2mara do seu telefone ou com a app ZOREAL ID.",
246
274
  bodyApprove: "Aprove o login no app ZOREAL ID.",
@@ -253,10 +281,13 @@ var TRANSLATIONS = {
253
281
  noIdBody: "Digitalize o mesmo c\xF3digo para baixar o app e criar uma conta gr\xE1tis. Leva s\xF3 um minuto.",
254
282
  cancel: "Cancelar",
255
283
  close: "Fechar",
256
- qrAlt: "C\xF3digo QR para entrar com ZOREAL"
284
+ qrAlt: "C\xF3digo QR para entrar com ZOREAL",
285
+ buttonContinue: "Continuar com ZOREAL"
257
286
  },
258
287
  fr: {
259
288
  title: "Scannez pour vous connecter",
289
+ titleIdentify: "Scannez pour v\xE9rifier votre identit\xE9",
290
+ titlePresence: "Scannez pour prouver que vous \xEAtes bien un humain",
260
291
  titleApprove: "Approuvez sur votre t\xE9l\xE9phone",
261
292
  bodyScan: "Scannez avec l'appareil photo de votre t\xE9l\xE9phone ou l'app ZOREAL ID.",
262
293
  bodyApprove: "Approuvez la connexion dans votre app ZOREAL ID.",
@@ -269,10 +300,13 @@ var TRANSLATIONS = {
269
300
  noIdBody: "Scannez le m\xEAme code pour t\xE9l\xE9charger l'app et en cr\xE9er un gratuitement. Cela prend une minute.",
270
301
  cancel: "Annuler",
271
302
  close: "Fermer",
272
- qrAlt: "Code QR pour se connecter avec ZOREAL"
303
+ qrAlt: "Code QR pour se connecter avec ZOREAL",
304
+ buttonContinue: "Continuer avec ZOREAL"
273
305
  },
274
306
  de: {
275
307
  title: "Zum Anmelden scannen",
308
+ titleIdentify: "Scannen, um Ihre Identit\xE4t zu verifizieren",
309
+ titlePresence: "Scannen, um zu beweisen, dass Sie ein echter Mensch sind",
276
310
  titleApprove: "Auf dem Handy best\xE4tigen",
277
311
  bodyScan: "Mit der Handykamera oder der ZOREAL ID App scannen.",
278
312
  bodyApprove: "Anmeldung in der ZOREAL ID App best\xE4tigen.",
@@ -285,10 +319,13 @@ var TRANSLATIONS = {
285
319
  noIdBody: "Denselben Code scannen, um die App zu laden und kostenlos eine zu erstellen. Dauert nur eine Minute.",
286
320
  cancel: "Abbrechen",
287
321
  close: "Schlie\xDFen",
288
- qrAlt: "QR-Code f\xFCr die Anmeldung mit ZOREAL"
322
+ qrAlt: "QR-Code f\xFCr die Anmeldung mit ZOREAL",
323
+ buttonContinue: "Weiter mit ZOREAL"
289
324
  },
290
325
  ru: {
291
326
  title: "\u041E\u0442\u0441\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0432\u043E\u0439\u0442\u0438",
327
+ 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",
328
+ 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",
292
329
  titleApprove: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043D\u0430 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0435",
293
330
  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.",
294
331
  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.",
@@ -301,10 +338,13 @@ var TRANSLATIONS = {
301
338
  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.",
302
339
  cancel: "\u041E\u0442\u043C\u0435\u043D\u0430",
303
340
  close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C",
304
- qrAlt: "QR-\u043A\u043E\u0434 \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 ZOREAL"
341
+ qrAlt: "QR-\u043A\u043E\u0434 \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 ZOREAL",
342
+ buttonContinue: "\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0441 ZOREAL"
305
343
  },
306
344
  ja: {
307
345
  title: "\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u30ED\u30B0\u30A4\u30F3",
346
+ titleIdentify: "\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u672C\u4EBA\u78BA\u8A8D",
347
+ titlePresence: "\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u5B9F\u5728\u306E\u4EBA\u7269\u3067\u3042\u308B\u3053\u3068\u3092\u8A3C\u660E",
308
348
  titleApprove: "\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u3067\u627F\u8A8D",
309
349
  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",
310
350
  bodyApprove: "ZOREAL ID\u30A2\u30D7\u30EA\u3067\u30ED\u30B0\u30A4\u30F3\u3092\u627F\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
@@ -317,10 +357,13 @@ var TRANSLATIONS = {
317
357
  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",
318
358
  cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
319
359
  close: "\u9589\u3058\u308B",
320
- qrAlt: "ZOREAL\u3067\u30ED\u30B0\u30A4\u30F3\u3059\u308B\u305F\u3081\u306EQR\u30B3\u30FC\u30C9"
360
+ qrAlt: "ZOREAL\u3067\u30ED\u30B0\u30A4\u30F3\u3059\u308B\u305F\u3081\u306EQR\u30B3\u30FC\u30C9",
361
+ buttonContinue: "ZOREAL\u3067\u7D9A\u884C"
321
362
  },
322
363
  hi: {
323
364
  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",
365
+ 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",
366
+ 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",
324
367
  titleApprove: "\u0905\u092A\u0928\u0947 \u092B\u094B\u0928 \u092A\u0930 \u0938\u094D\u0935\u0940\u0915\u0943\u0924 \u0915\u0930\u0947\u0902",
325
368
  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",
326
369
  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",
@@ -333,10 +376,13 @@ var TRANSLATIONS = {
333
376
  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",
334
377
  cancel: "\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902",
335
378
  close: "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
336
- qrAlt: "ZOREAL \u0938\u0947 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F QR \u0915\u094B\u0921"
379
+ qrAlt: "ZOREAL \u0938\u0947 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F QR \u0915\u094B\u0921",
380
+ buttonContinue: "ZOREAL \u0915\u0947 \u0938\u093E\u0925 \u091C\u093E\u0930\u0940 \u0930\u0916\u0947\u0902"
337
381
  },
338
382
  zhs: {
339
383
  title: "\u626B\u7801\u767B\u5F55",
384
+ titleIdentify: "\u626B\u7801\u9A8C\u8BC1\u8EAB\u4EFD",
385
+ titlePresence: "\u626B\u7801\u8BC1\u660E\u60A8\u662F\u771F\u4EBA",
340
386
  titleApprove: "\u5728\u624B\u673A\u4E0A\u6279\u51C6",
341
387
  bodyScan: "\u4F7F\u7528\u624B\u673A\u76F8\u673A\u6216 ZOREAL ID \u5E94\u7528\u626B\u63CF\u3002",
342
388
  bodyApprove: "\u8BF7\u5728 ZOREAL ID \u5E94\u7528\u4E2D\u6279\u51C6\u767B\u5F55\u3002",
@@ -349,10 +395,13 @@ var TRANSLATIONS = {
349
395
  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",
350
396
  cancel: "\u53D6\u6D88",
351
397
  close: "\u5173\u95ED",
352
- qrAlt: "\u4F7F\u7528 ZOREAL \u767B\u5F55\u7684\u4E8C\u7EF4\u7801"
398
+ qrAlt: "\u4F7F\u7528 ZOREAL \u767B\u5F55\u7684\u4E8C\u7EF4\u7801",
399
+ buttonContinue: "\u4F7F\u7528 ZOREAL \u7EE7\u7EED"
353
400
  },
354
401
  zht: {
355
402
  title: "\u6383\u78BC\u767B\u5165",
403
+ titleIdentify: "\u6383\u78BC\u9A57\u8B49\u8EAB\u5206",
404
+ titlePresence: "\u6383\u78BC\u8B49\u660E\u60A8\u662F\u771F\u4EBA",
356
405
  titleApprove: "\u5728\u624B\u6A5F\u4E0A\u6838\u51C6",
357
406
  bodyScan: "\u4F7F\u7528\u624B\u6A5F\u76F8\u6A5F\u6216 ZOREAL ID \u61C9\u7528\u7A0B\u5F0F\u6383\u63CF\u3002",
358
407
  bodyApprove: "\u8ACB\u5728 ZOREAL ID \u61C9\u7528\u7A0B\u5F0F\u4E2D\u6838\u51C6\u767B\u5165\u3002",
@@ -365,10 +414,13 @@ var TRANSLATIONS = {
365
414
  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",
366
415
  cancel: "\u53D6\u6D88",
367
416
  close: "\u95DC\u9589",
368
- qrAlt: "\u4F7F\u7528 ZOREAL \u767B\u5165\u7684 QR code"
417
+ qrAlt: "\u4F7F\u7528 ZOREAL \u767B\u5165\u7684 QR code",
418
+ buttonContinue: "\u4F7F\u7528 ZOREAL \u7E7C\u7E8C"
369
419
  },
370
420
  ar: {
371
421
  title: "\u0627\u0645\u0633\u062D \u0644\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644",
422
+ titleIdentify: "\u0627\u0645\u0633\u062D \u0644\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0647\u0648\u064A\u062A\u0643",
423
+ titlePresence: "\u0627\u0645\u0633\u062D \u0644\u0625\u062B\u0628\u0627\u062A \u0623\u0646\u0643 \u0625\u0646\u0633\u0627\u0646 \u062D\u0642\u064A\u0642\u064A",
372
424
  titleApprove: "\u0648\u0627\u0641\u0642 \u0639\u0644\u0649 \u0647\u0627\u062A\u0641\u0643",
373
425
  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.",
374
426
  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.",
@@ -381,10 +433,13 @@ var TRANSLATIONS = {
381
433
  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.",
382
434
  cancel: "\u0625\u0644\u063A\u0627\u0621",
383
435
  close: "\u0625\u063A\u0644\u0627\u0642",
384
- 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"
436
+ 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",
437
+ buttonContinue: "\u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 ZOREAL"
385
438
  },
386
439
  ko: {
387
440
  title: "\uC2A4\uCE94\uD558\uC5EC \uB85C\uADF8\uC778",
441
+ titleIdentify: "\uC2A4\uCE94\uD558\uC5EC \uC2E0\uC6D0 \uD655\uC778",
442
+ titlePresence: "\uC2A4\uCE94\uD558\uC5EC \uC2E4\uC81C \uC0AC\uB78C\uC784\uC744 \uC99D\uBA85",
388
443
  titleApprove: "\uD734\uB300\uD3F0\uC5D0\uC11C \uC2B9\uC778",
389
444
  bodyScan: "\uD734\uB300\uD3F0 \uCE74\uBA54\uB77C \uB610\uB294 ZOREAL ID \uC571\uC73C\uB85C \uC2A4\uCE94\uD558\uC138\uC694.",
390
445
  bodyApprove: "ZOREAL ID \uC571\uC5D0\uC11C \uB85C\uADF8\uC778\uC744 \uC2B9\uC778\uD558\uC138\uC694.",
@@ -397,11 +452,14 @@ var TRANSLATIONS = {
397
452
  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.",
398
453
  cancel: "\uCDE8\uC18C",
399
454
  close: "\uB2EB\uAE30",
400
- qrAlt: "ZOREAL\uB85C \uB85C\uADF8\uC778\uD558\uAE30 \uC704\uD55C QR \uCF54\uB4DC"
455
+ qrAlt: "ZOREAL\uB85C \uB85C\uADF8\uC778\uD558\uAE30 \uC704\uD55C QR \uCF54\uB4DC",
456
+ buttonContinue: "ZOREAL\uB85C \uACC4\uC18D"
401
457
  },
402
458
  // Български
403
459
  bg: {
404
460
  title: "\u0421\u043A\u0430\u043D\u0438\u0440\u0430\u0439\u0442\u0435 \u0437\u0430 \u0432\u0445\u043E\u0434",
461
+ 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",
462
+ 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",
405
463
  titleApprove: "\u041F\u043E\u0442\u0432\u044A\u0440\u0434\u0435\u0442\u0435 \u043D\u0430 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 \u0441\u0438",
406
464
  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.",
407
465
  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.",
@@ -414,11 +472,14 @@ var TRANSLATIONS = {
414
472
  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.",
415
473
  cancel: "\u041E\u0442\u043A\u0430\u0437",
416
474
  close: "\u0417\u0430\u0442\u0432\u043E\u0440\u0438",
417
- qrAlt: "QR \u043A\u043E\u0434 \u0437\u0430 \u0432\u0445\u043E\u0434 \u0441\u044A\u0441 ZOREAL"
475
+ qrAlt: "QR \u043A\u043E\u0434 \u0437\u0430 \u0432\u0445\u043E\u0434 \u0441\u044A\u0441 ZOREAL",
476
+ buttonContinue: "\u041F\u0440\u043E\u0434\u044A\u043B\u0436\u0438 \u0441\u044A\u0441 ZOREAL"
418
477
  },
419
478
  // বাংলা
420
479
  bn: {
421
480
  title: "\u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u0995\u09B0\u09A4\u09C7 \u09B8\u09CD\u0995\u09CD\u09AF\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",
481
+ 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",
482
+ 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",
422
483
  titleApprove: "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AB\u09CB\u09A8\u09C7 \u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09A8 \u0995\u09B0\u09C1\u09A8",
423
484
  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",
424
485
  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",
@@ -431,11 +492,14 @@ var TRANSLATIONS = {
431
492
  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",
432
493
  cancel: "\u09AC\u09BE\u09A4\u09BF\u09B2",
433
494
  close: "\u09AC\u09A8\u09CD\u09A7",
434
- 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"
495
+ 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",
496
+ buttonContinue: "ZOREAL \u09A6\u09BF\u09AF\u09BC\u09C7 \u099A\u09BE\u09B2\u09BF\u09AF\u09BC\u09C7 \u09AF\u09BE\u09A8"
435
497
  },
436
498
  // Bosanski
437
499
  bs: {
438
500
  title: "Skenirajte za prijavu",
501
+ titleIdentify: "Skenirajte da potvrdite svoj identitet",
502
+ titlePresence: "Skenirajte da doka\u017Eete da ste stvarna osoba",
439
503
  titleApprove: "Odobrite na svom telefonu",
440
504
  bodyScan: "Skenirajte kamerom svog telefona ili aplikacijom ZOREAL ID.",
441
505
  bodyApprove: "Odobrite prijavu u aplikaciji ZOREAL ID.",
@@ -448,11 +512,14 @@ var TRANSLATIONS = {
448
512
  noIdBody: "Skenirajte isti kod da preuzmete aplikaciju i besplatno ga napravite. Traje samo minutu.",
449
513
  cancel: "Otka\u017Ei",
450
514
  close: "Zatvori",
451
- qrAlt: "QR kod za prijavu putem ZOREAL-a"
515
+ qrAlt: "QR kod za prijavu putem ZOREAL-a",
516
+ buttonContinue: "Nastavi sa ZOREAL-om"
452
517
  },
453
518
  // Čeština
454
519
  cs: {
455
520
  title: "P\u0159ihlaste se naskenov\xE1n\xEDm",
521
+ titleIdentify: "Naskenujte pro ov\u011B\u0159en\xED toto\u017Enosti",
522
+ titlePresence: "Naskenujte a proka\u017Ete, \u017Ee jste skute\u010Dn\xFD \u010Dlov\u011Bk",
456
523
  titleApprove: "Potvr\u010Fte v telefonu",
457
524
  bodyScan: "Naskenujte fotoapar\xE1tem telefonu nebo aplikac\xED ZOREAL ID.",
458
525
  bodyApprove: "Potvr\u010Fte p\u0159ihl\xE1\u0161en\xED v aplikaci ZOREAL ID.",
@@ -465,11 +532,14 @@ var TRANSLATIONS = {
465
532
  noIdBody: "Naskenov\xE1n\xEDm stejn\xE9ho k\xF3du si st\xE1hnete aplikaci a zdarma vytvo\u0159\xEDte ZOREAL ID. Zabere to jen minutu.",
466
533
  cancel: "Zru\u0161it",
467
534
  close: "Zav\u0159\xEDt",
468
- qrAlt: "QR k\xF3d pro p\u0159ihl\xE1\u0161en\xED pomoc\xED ZOREAL"
535
+ qrAlt: "QR k\xF3d pro p\u0159ihl\xE1\u0161en\xED pomoc\xED ZOREAL",
536
+ buttonContinue: "Pokra\u010Dovat se ZOREAL"
469
537
  },
470
538
  // Dansk
471
539
  da: {
472
540
  title: "Scan for at logge ind",
541
+ titleIdentify: "Scan for at bekr\xE6fte din identitet",
542
+ titlePresence: "Scan for at bevise, at du er et rigtigt menneske",
473
543
  titleApprove: "Godkend p\xE5 din telefon",
474
544
  bodyScan: "Scan med telefonens kamera eller ZOREAL ID-appen.",
475
545
  bodyApprove: "Godkend login i din ZOREAL ID-app.",
@@ -482,11 +552,14 @@ var TRANSLATIONS = {
482
552
  noIdBody: "Scan den samme kode for at hente appen og oprette et gratis. Det tager kun et minut.",
483
553
  cancel: "Annuller",
484
554
  close: "Luk",
485
- qrAlt: "QR-kode til at logge ind med ZOREAL"
555
+ qrAlt: "QR-kode til at logge ind med ZOREAL",
556
+ buttonContinue: "Forts\xE6t med ZOREAL"
486
557
  },
487
558
  // Ελληνικά
488
559
  el: {
489
560
  title: "\u03A3\u03AC\u03C1\u03C9\u03C3\u03B7 \u03B3\u03B9\u03B1 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7",
561
+ 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",
562
+ 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",
490
563
  titleApprove: "\u0388\u03B3\u03BA\u03C1\u03B9\u03C3\u03B7 \u03B1\u03C0\u03CC \u03C4\u03BF \u03BA\u03B9\u03BD\u03B7\u03C4\u03CC \u03C3\u03B1\u03C2",
491
564
  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.",
492
565
  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.",
@@ -499,11 +572,14 @@ var TRANSLATIONS = {
499
572
  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.",
500
573
  cancel: "\u0386\u03BA\u03C5\u03C1\u03BF",
501
574
  close: "\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF",
502
- qrAlt: "\u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 QR \u03B3\u03B9\u03B1 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 \u03BC\u03B5 ZOREAL"
575
+ qrAlt: "\u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 QR \u03B3\u03B9\u03B1 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 \u03BC\u03B5 ZOREAL",
576
+ buttonContinue: "\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1 \u03BC\u03B5 ZOREAL"
503
577
  },
504
578
  // Español (LA)
505
579
  "es-419": {
506
580
  title: "Escanea para iniciar sesi\xF3n",
581
+ titleIdentify: "Escanea para verificar tu identidad",
582
+ titlePresence: "Escanea para demostrar que eres una persona real",
507
583
  titleApprove: "Aprueba desde tu celular",
508
584
  bodyScan: "Escanea con la c\xE1mara de tu celular o con la app ZOREAL ID.",
509
585
  bodyApprove: "Aprueba el inicio de sesi\xF3n en tu app ZOREAL ID.",
@@ -516,11 +592,14 @@ var TRANSLATIONS = {
516
592
  noIdBody: "Escanea el mismo c\xF3digo para descargar la app y crear uno gratis. Solo toma un minuto.",
517
593
  cancel: "Cancelar",
518
594
  close: "Cerrar",
519
- qrAlt: "C\xF3digo QR para iniciar sesi\xF3n con ZOREAL"
595
+ qrAlt: "C\xF3digo QR para iniciar sesi\xF3n con ZOREAL",
596
+ buttonContinue: "Continuar con ZOREAL"
520
597
  },
521
598
  // Suomi
522
599
  fi: {
523
600
  title: "Kirjaudu sis\xE4\xE4n skannaamalla",
601
+ titleIdentify: "Vahvista henkil\xF6llisyytesi skannaamalla",
602
+ titlePresence: "Todista skannaamalla, ett\xE4 olet oikea ihminen",
524
603
  titleApprove: "Hyv\xE4ksy puhelimessasi",
525
604
  bodyScan: "Skannaa puhelimesi kameralla tai ZOREAL ID -sovelluksella.",
526
605
  bodyApprove: "Hyv\xE4ksy kirjautuminen ZOREAL ID -sovelluksessasi.",
@@ -533,11 +612,14 @@ var TRANSLATIONS = {
533
612
  noIdBody: "Skannaa sama koodi ladataksesi sovelluksen ja luodaksesi tunnuksen ilmaiseksi. Se vie vain minuutin.",
534
613
  cancel: "Peruuta",
535
614
  close: "Sulje",
536
- qrAlt: "QR-koodi ZOREAL-kirjautumista varten"
615
+ qrAlt: "QR-koodi ZOREAL-kirjautumista varten",
616
+ buttonContinue: "Jatka ZOREALilla"
537
617
  },
538
618
  // עברית
539
619
  he: {
540
620
  title: "\u05E1\u05E8\u05D5\u05E7 \u05DB\u05D3\u05D9 \u05DC\u05D4\u05EA\u05D7\u05D1\u05E8",
621
+ titleIdentify: "\u05E1\u05E8\u05D5\u05E7 \u05DB\u05D3\u05D9 \u05DC\u05D0\u05DE\u05EA \u05D0\u05EA \u05D6\u05D4\u05D5\u05EA\u05DA",
622
+ 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",
541
623
  titleApprove: "\u05D0\u05E9\u05E8 \u05D1\u05D8\u05DC\u05E4\u05D5\u05DF \u05E9\u05DC\u05DA",
542
624
  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.",
543
625
  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.",
@@ -550,11 +632,14 @@ var TRANSLATIONS = {
550
632
  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.",
551
633
  cancel: "\u05D1\u05D9\u05D8\u05D5\u05DC",
552
634
  close: "\u05E1\u05D2\u05D5\u05E8",
553
- qrAlt: "\u05E7\u05D5\u05D3 QR \u05DC\u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05EA \u05E2\u05DD ZOREAL"
635
+ qrAlt: "\u05E7\u05D5\u05D3 QR \u05DC\u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05EA \u05E2\u05DD ZOREAL",
636
+ buttonContinue: "\u05D4\u05DE\u05E9\u05DA \u05E2\u05DD ZOREAL"
554
637
  },
555
638
  // Hrvatski
556
639
  hr: {
557
640
  title: "Skenirajte za prijavu",
641
+ titleIdentify: "Skenirajte za potvrdu identiteta",
642
+ titlePresence: "Skenirajte kako biste dokazali da ste stvarna osoba",
558
643
  titleApprove: "Odobrite na svom mobitelu",
559
644
  bodyScan: "Skenirajte kamerom svog mobitela ili aplikacijom ZOREAL ID.",
560
645
  bodyApprove: "Odobrite prijavu u aplikaciji ZOREAL ID.",
@@ -567,11 +652,14 @@ var TRANSLATIONS = {
567
652
  noIdBody: "Skenirajte isti kod da preuzmete aplikaciju i besplatno ga izradite. Traje samo minutu.",
568
653
  cancel: "Odustani",
569
654
  close: "Zatvori",
570
- qrAlt: "QR kod za prijavu putem ZOREAL-a"
655
+ qrAlt: "QR kod za prijavu putem ZOREAL-a",
656
+ buttonContinue: "Nastavi sa ZOREAL-om"
571
657
  },
572
658
  // Magyar
573
659
  hu: {
574
660
  title: "Bejelentkez\xE9s beolvas\xE1ssal",
661
+ titleIdentify: "Olvassa be a szem\xE9lyazonoss\xE1ga igazol\xE1s\xE1hoz",
662
+ titlePresence: "Olvassa be annak igazol\xE1s\xE1hoz, hogy val\xF3di ember",
575
663
  titleApprove: "J\xF3v\xE1hagy\xE1s a telefonj\xE1n",
576
664
  bodyScan: "Olvassa be a telefonja kamer\xE1j\xE1val, vagy a ZOREAL ID alkalmaz\xE1ssal.",
577
665
  bodyApprove: "Hagyja j\xF3v\xE1 a bejelentkez\xE9st a ZOREAL ID alkalmaz\xE1sban.",
@@ -584,11 +672,14 @@ var TRANSLATIONS = {
584
672
  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.",
585
673
  cancel: "M\xE9gse",
586
674
  close: "Bez\xE1r\xE1s",
587
- qrAlt: "QR-k\xF3d a ZOREAL-lal val\xF3 bejelentkez\xE9shez"
675
+ qrAlt: "QR-k\xF3d a ZOREAL-lal val\xF3 bejelentkez\xE9shez",
676
+ buttonContinue: "Folytat\xE1s a ZOREAL-lal"
588
677
  },
589
678
  // Bahasa Indonesia
590
679
  id: {
591
680
  title: "Pindai untuk masuk",
681
+ titleIdentify: "Pindai untuk memverifikasi identitas Anda",
682
+ titlePresence: "Pindai untuk membuktikan bahwa Anda manusia sungguhan",
592
683
  titleApprove: "Setujui di ponsel Anda",
593
684
  bodyScan: "Pindai dengan kamera ponsel atau aplikasi ZOREAL ID.",
594
685
  bodyApprove: "Setujui proses masuk di aplikasi ZOREAL ID Anda.",
@@ -601,11 +692,14 @@ var TRANSLATIONS = {
601
692
  noIdBody: "Pindai kode yang sama untuk mengunduh aplikasi dan membuat akun secara gratis. Hanya butuh waktu satu menit.",
602
693
  cancel: "Batal",
603
694
  close: "Tutup",
604
- qrAlt: "Kode QR untuk masuk dengan ZOREAL"
695
+ qrAlt: "Kode QR untuk masuk dengan ZOREAL",
696
+ buttonContinue: "Lanjutkan dengan ZOREAL"
605
697
  },
606
698
  // Italiano
607
699
  it: {
608
700
  title: "Scansiona per accedere",
701
+ titleIdentify: "Scansiona per verificare la tua identit\xE0",
702
+ titlePresence: "Scansiona per dimostrare di essere una persona reale",
609
703
  titleApprove: "Approva sul tuo telefono",
610
704
  bodyScan: "Scansiona con la fotocamera del telefono o con l'app ZOREAL ID.",
611
705
  bodyApprove: "Approva l'accesso nell'app ZOREAL ID.",
@@ -618,11 +712,14 @@ var TRANSLATIONS = {
618
712
  noIdBody: "Scansiona lo stesso codice per scaricare l'app e crearne uno gratis. Basta un minuto.",
619
713
  cancel: "Annulla",
620
714
  close: "Chiudi",
621
- qrAlt: "Codice QR per accedere con ZOREAL"
715
+ qrAlt: "Codice QR per accedere con ZOREAL",
716
+ buttonContinue: "Continua con ZOREAL"
622
717
  },
623
718
  // Bahasa Melayu
624
719
  ms: {
625
720
  title: "Imbas untuk log masuk",
721
+ titleIdentify: "Imbas untuk mengesahkan identiti anda",
722
+ titlePresence: "Imbas untuk membuktikan anda manusia sebenar",
626
723
  titleApprove: "Luluskan di telefon anda",
627
724
  bodyScan: "Imbas dengan kamera telefon atau aplikasi ZOREAL ID.",
628
725
  bodyApprove: "Luluskan log masuk dalam aplikasi ZOREAL ID anda.",
@@ -635,11 +732,14 @@ var TRANSLATIONS = {
635
732
  noIdBody: "Imbas kod yang sama untuk memuat turun aplikasi dan cipta satu secara percuma. Hanya mengambil masa seminit.",
636
733
  cancel: "Batal",
637
734
  close: "Tutup",
638
- qrAlt: "Kod QR untuk log masuk dengan ZOREAL"
735
+ qrAlt: "Kod QR untuk log masuk dengan ZOREAL",
736
+ buttonContinue: "Teruskan dengan ZOREAL"
639
737
  },
640
738
  // Nederlands
641
739
  nl: {
642
740
  title: "Scan om in te loggen",
741
+ titleIdentify: "Scan om je identiteit te verifi\xEBren",
742
+ titlePresence: "Scan om te bewijzen dat je een echt mens bent",
643
743
  titleApprove: "Keur goed op je telefoon",
644
744
  bodyScan: "Scan met de camera van je telefoon of de ZOREAL ID-app.",
645
745
  bodyApprove: "Keur de aanmelding goed in je ZOREAL ID-app.",
@@ -652,11 +752,14 @@ var TRANSLATIONS = {
652
752
  noIdBody: "Scan dezelfde code om de app te downloaden en gratis een account aan te maken. Dit duurt maar een minuut.",
653
753
  cancel: "Annuleren",
654
754
  close: "Sluiten",
655
- qrAlt: "QR-code om in te loggen met ZOREAL"
755
+ qrAlt: "QR-code om in te loggen met ZOREAL",
756
+ buttonContinue: "Doorgaan met ZOREAL"
656
757
  },
657
758
  // Norsk
658
759
  no: {
659
760
  title: "Skann for \xE5 logge inn",
761
+ titleIdentify: "Skann for \xE5 bekrefte identiteten din",
762
+ titlePresence: "Skann for \xE5 bevise at du er et ekte menneske",
660
763
  titleApprove: "Godkjenn p\xE5 telefonen din",
661
764
  bodyScan: "Skann med telefonens kamera eller ZOREAL ID-appen.",
662
765
  bodyApprove: "Godkjenn innloggingen i ZOREAL ID-appen din.",
@@ -669,11 +772,14 @@ var TRANSLATIONS = {
669
772
  noIdBody: "Skann den samme koden for \xE5 laste ned appen og opprette en gratis. Det tar bare et minutt.",
670
773
  cancel: "Avbryt",
671
774
  close: "Lukk",
672
- qrAlt: "QR-kode for \xE5 logge inn med ZOREAL"
775
+ qrAlt: "QR-kode for \xE5 logge inn med ZOREAL",
776
+ buttonContinue: "Fortsett med ZOREAL"
673
777
  },
674
778
  // Polski
675
779
  pl: {
676
780
  title: "Zeskanuj, aby si\u0119 zalogowa\u0107",
781
+ titleIdentify: "Zeskanuj, aby zweryfikowa\u0107 swoj\u0105 to\u017Csamo\u015B\u0107",
782
+ titlePresence: "Zeskanuj, aby udowodni\u0107, \u017Ce jeste\u015B prawdziwym cz\u0142owiekiem",
677
783
  titleApprove: "Zatwierd\u017A w telefonie",
678
784
  bodyScan: "Zeskanuj aparatem telefonu lub aplikacj\u0105 ZOREAL ID.",
679
785
  bodyApprove: "Zatwierd\u017A logowanie w aplikacji ZOREAL ID.",
@@ -686,11 +792,14 @@ var TRANSLATIONS = {
686
792
  noIdBody: "Zeskanuj ten sam kod, aby pobra\u0107 aplikacj\u0119 i bezp\u0142atnie utworzy\u0107 ZOREAL ID. Zajmie to tylko minut\u0119.",
687
793
  cancel: "Anuluj",
688
794
  close: "Zamknij",
689
- qrAlt: "Kod QR do logowania za pomoc\u0105 ZOREAL"
795
+ qrAlt: "Kod QR do logowania za pomoc\u0105 ZOREAL",
796
+ buttonContinue: "Kontynuuj z ZOREAL"
690
797
  },
691
798
  // Português (BR)
692
799
  "pt-br": {
693
800
  title: "Escaneie para entrar",
801
+ titleIdentify: "Escaneie para verificar sua identidade",
802
+ titlePresence: "Escaneie para provar que voc\xEA \xE9 uma pessoa real",
694
803
  titleApprove: "Aprove no seu celular",
695
804
  bodyScan: "Escaneie com a c\xE2mera do seu celular ou com o app ZOREAL ID.",
696
805
  bodyApprove: "Aprove o login no app ZOREAL ID.",
@@ -703,11 +812,14 @@ var TRANSLATIONS = {
703
812
  noIdBody: "Escaneie o mesmo c\xF3digo para baixar o app e criar um de gra\xE7a. Leva s\xF3 um minuto.",
704
813
  cancel: "Cancelar",
705
814
  close: "Fechar",
706
- qrAlt: "C\xF3digo QR para entrar com ZOREAL"
815
+ qrAlt: "C\xF3digo QR para entrar com ZOREAL",
816
+ buttonContinue: "Continuar com ZOREAL"
707
817
  },
708
818
  // Română
709
819
  ro: {
710
820
  title: "Scana\u021Bi pentru conectare",
821
+ titleIdentify: "Scana\u021Bi pentru a v\u0103 verifica identitatea",
822
+ titlePresence: "Scana\u021Bi pentru a dovedi c\u0103 sunte\u021Bi o persoan\u0103 real\u0103",
711
823
  titleApprove: "Aproba\u021Bi de pe telefon",
712
824
  bodyScan: "Scana\u021Bi cu camera telefonului sau cu aplica\u021Bia ZOREAL ID.",
713
825
  bodyApprove: "Aproba\u021Bi conectarea \xEEn aplica\u021Bia ZOREAL ID.",
@@ -720,11 +832,14 @@ var TRANSLATIONS = {
720
832
  noIdBody: "Scana\u021Bi acela\u0219i cod pentru a desc\u0103rca aplica\u021Bia \u0219i a crea unul gratuit. Dureaz\u0103 doar un minut.",
721
833
  cancel: "Anuleaz\u0103",
722
834
  close: "\xCEnchide",
723
- qrAlt: "Cod QR pentru conectare cu ZOREAL"
835
+ qrAlt: "Cod QR pentru conectare cu ZOREAL",
836
+ buttonContinue: "Continua\u021Bi cu ZOREAL"
724
837
  },
725
838
  // Српски
726
839
  sr: {
727
840
  title: "\u0421\u043A\u0435\u043D\u0438\u0440\u0430\u0458\u0442\u0435 \u0437\u0430 \u043F\u0440\u0438\u0458\u0430\u0432\u0443",
841
+ 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",
842
+ 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",
728
843
  titleApprove: "\u041E\u0434\u043E\u0431\u0440\u0438\u0442\u0435 \u043D\u0430 \u0441\u0432\u043E\u043C \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0443",
729
844
  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.",
730
845
  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.",
@@ -737,11 +852,14 @@ var TRANSLATIONS = {
737
852
  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.",
738
853
  cancel: "\u041E\u0442\u043A\u0430\u0436\u0438",
739
854
  close: "\u0417\u0430\u0442\u0432\u043E\u0440\u0438",
740
- qrAlt: "QR \u043A\u043E\u0434 \u0437\u0430 \u043F\u0440\u0438\u0458\u0430\u0432\u0443 \u043F\u0440\u0435\u043A\u043E ZOREAL-\u0430"
855
+ qrAlt: "QR \u043A\u043E\u0434 \u0437\u0430 \u043F\u0440\u0438\u0458\u0430\u0432\u0443 \u043F\u0440\u0435\u043A\u043E ZOREAL-\u0430",
856
+ buttonContinue: "\u041D\u0430\u0441\u0442\u0430\u0432\u0438 \u0441\u0430 ZOREAL-\u043E\u043C"
741
857
  },
742
858
  // ไทย
743
859
  th: {
744
860
  title: "\u0E2A\u0E41\u0E01\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A",
861
+ 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",
862
+ 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",
745
863
  titleApprove: "\u0E2D\u0E19\u0E38\u0E21\u0E31\u0E15\u0E34\u0E1A\u0E19\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13",
746
864
  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",
747
865
  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",
@@ -754,11 +872,14 @@ var TRANSLATIONS = {
754
872
  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",
755
873
  cancel: "\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01",
756
874
  close: "\u0E1B\u0E34\u0E14",
757
- 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"
875
+ 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",
876
+ buttonContinue: "\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23\u0E15\u0E48\u0E2D\u0E14\u0E49\u0E27\u0E22 ZOREAL"
758
877
  },
759
878
  // Tagalog
760
879
  tl: {
761
880
  title: "I-scan para mag-sign in",
881
+ titleIdentify: "I-scan para i-verify ang iyong pagkakakilanlan",
882
+ titlePresence: "I-scan para patunayang tunay kang tao",
762
883
  titleApprove: "I-approve sa iyong telepono",
763
884
  bodyScan: "I-scan gamit ang camera ng iyong telepono o ang ZOREAL ID app.",
764
885
  bodyApprove: "I-approve ang login sa iyong ZOREAL ID app.",
@@ -771,11 +892,14 @@ var TRANSLATIONS = {
771
892
  noIdBody: "I-scan ang parehong code para i-download ang app at gumawa ng iyong ZOREAL ID nang libre. Isang minuto lang ito.",
772
893
  cancel: "Kanselahin",
773
894
  close: "Isara",
774
- qrAlt: "QR code para mag-sign in gamit ang ZOREAL"
895
+ qrAlt: "QR code para mag-sign in gamit ang ZOREAL",
896
+ buttonContinue: "Magpatuloy gamit ang ZOREAL"
775
897
  },
776
898
  // Türkçe
777
899
  tr: {
778
900
  title: "Giri\u015F i\xE7in taray\u0131n",
901
+ titleIdentify: "Kimli\u011Finizi do\u011Frulamak i\xE7in taray\u0131n",
902
+ titlePresence: "Ger\xE7ek bir insan oldu\u011Funuzu kan\u0131tlamak i\xE7in taray\u0131n",
779
903
  titleApprove: "Telefonunuzdan onaylay\u0131n",
780
904
  bodyScan: "Telefonunuzun kameras\u0131yla veya ZOREAL ID uygulamas\u0131yla taray\u0131n.",
781
905
  bodyApprove: "Giri\u015Fi ZOREAL ID uygulaman\u0131zdan onaylay\u0131n.",
@@ -788,11 +912,14 @@ var TRANSLATIONS = {
788
912
  noIdBody: "Uygulamay\u0131 indirmek ve \xFCcretsiz bir tane olu\u015Fturmak i\xE7in ayn\u0131 kodu taray\u0131n. Sadece bir dakikan\u0131z\u0131 al\u0131r.",
789
913
  cancel: "\u0130ptal",
790
914
  close: "Kapat",
791
- qrAlt: "ZOREAL ile giri\u015F yapmak i\xE7in QR kodu"
915
+ qrAlt: "ZOREAL ile giri\u015F yapmak i\xE7in QR kodu",
916
+ buttonContinue: "ZOREAL ile devam et"
792
917
  },
793
918
  // Українська
794
919
  uk: {
795
920
  title: "\u0421\u043A\u0430\u043D\u0443\u0439\u0442\u0435 \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u0443",
921
+ 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",
922
+ 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",
796
923
  titleApprove: "\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u043D\u0430 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0456",
797
924
  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.",
798
925
  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.",
@@ -805,11 +932,14 @@ var TRANSLATIONS = {
805
932
  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.",
806
933
  cancel: "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438",
807
934
  close: "\u0417\u0430\u043A\u0440\u0438\u0442\u0438",
808
- qrAlt: "QR-\u043A\u043E\u0434 \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u0443 \u0447\u0435\u0440\u0435\u0437 ZOREAL"
935
+ qrAlt: "QR-\u043A\u043E\u0434 \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u0443 \u0447\u0435\u0440\u0435\u0437 ZOREAL",
936
+ buttonContinue: "\u041F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438 \u0437 ZOREAL"
809
937
  },
810
938
  // اردو
811
939
  ur: {
812
940
  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",
941
+ 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",
942
+ 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",
813
943
  titleApprove: "\u0627\u067E\u0646\u06D2 \u0641\u0648\u0646 \u067E\u0631 \u0645\u0646\u0638\u0648\u0631\u06CC \u062F\u06CC\u06BA",
814
944
  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",
815
945
  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",
@@ -822,11 +952,14 @@ var TRANSLATIONS = {
822
952
  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",
823
953
  cancel: "\u0645\u0646\u0633\u0648\u062E \u06A9\u0631\u06CC\u06BA",
824
954
  close: "\u0628\u0646\u062F \u06A9\u0631\u06CC\u06BA",
825
- 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"
955
+ 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",
956
+ buttonContinue: "ZOREAL \u06A9\u06D2 \u0633\u0627\u062A\u06BE \u062C\u0627\u0631\u06CC \u0631\u06A9\u06BE\u06CC\u06BA"
826
957
  },
827
958
  // Tiếng Việt
828
959
  vi: {
829
960
  title: "Qu\xE9t \u0111\u1EC3 \u0111\u0103ng nh\u1EADp",
961
+ titleIdentify: "Qu\xE9t \u0111\u1EC3 x\xE1c minh danh t\xEDnh c\u1EE7a b\u1EA1n",
962
+ titlePresence: "Qu\xE9t \u0111\u1EC3 ch\u1EE9ng minh b\u1EA1n l\xE0 ng\u01B0\u1EDDi th\u1EADt",
830
963
  titleApprove: "Ph\xEA duy\u1EC7t tr\xEAn \u0111i\u1EC7n tho\u1EA1i c\u1EE7a b\u1EA1n",
831
964
  bodyScan: "Qu\xE9t b\u1EB1ng camera \u0111i\u1EC7n tho\u1EA1i ho\u1EB7c \u1EE9ng d\u1EE5ng ZOREAL ID.",
832
965
  bodyApprove: "Ph\xEA duy\u1EC7t \u0111\u0103ng nh\u1EADp trong \u1EE9ng d\u1EE5ng ZOREAL ID c\u1EE7a b\u1EA1n.",
@@ -839,7 +972,8 @@ var TRANSLATIONS = {
839
972
  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.",
840
973
  cancel: "H\u1EE7y",
841
974
  close: "\u0110\xF3ng",
842
- qrAlt: "M\xE3 QR \u0111\u1EC3 \u0111\u0103ng nh\u1EADp b\u1EB1ng ZOREAL"
975
+ qrAlt: "M\xE3 QR \u0111\u1EC3 \u0111\u0103ng nh\u1EADp b\u1EB1ng ZOREAL",
976
+ buttonContinue: "Ti\u1EBFp t\u1EE5c v\u1EDBi ZOREAL"
843
977
  }
844
978
  };
845
979
  var RTL = /* @__PURE__ */ new Set(["ar", "he", "iw", "ur"]);
@@ -931,8 +1065,20 @@ var LIGHT = `
931
1065
  --zrl-accent-ink: #04698a;
932
1066
  --zrl-urgent: #b4761a;
933
1067
  --zrl-qr-bg: #ffffff;
1068
+ --zrl-qr-filter: none;
1069
+ --zrl-qr-spent-filter: blur(3px);
1070
+ --zrl-qr-blend: normal;
934
1071
  --zrl-shadow: 0 1px 2px rgba(16, 18, 27, 0.06), 0 20px 50px -12px rgba(16, 18, 27, 0.3);
935
1072
  --zrl-ring: rgba(16, 18, 27, 0.07);
1073
+ /* The light on the QR well's edge. Brand blue on both grounds, a lighter
1074
+ tint at the head; only its strength is themed, see the dark block. */
1075
+ --zrl-beam: #00b4d9;
1076
+ --zrl-beam-head: #7fe0f4;
1077
+ --zrl-beam-line: 2px;
1078
+ --zrl-glow-core: 4px;
1079
+ --zrl-glow-reach: 24px;
1080
+ --zrl-glow-blur: 8px;
1081
+ --zrl-glow-opacity: 0.6;
936
1082
  `;
937
1083
  var DARK = `
938
1084
  --zrl-scrim: rgba(0, 0, 0, 0.62);
@@ -947,12 +1093,24 @@ var DARK = `
947
1093
  --zrl-accent-soft: #0d3b47;
948
1094
  --zrl-accent-ink: #7fdcf0;
949
1095
  --zrl-urgent: #e0a952;
950
- /* The QR well stays white in dark mode on purpose: a scanner needs the
951
- quiet-zone contrast, and an inverted QR fails on a good number of phone
952
- cameras. It reads as a deliberate light panel, not a theming miss. */
953
- --zrl-qr-bg: #ffffff;
1096
+ /* The code is drawn light on the dark surface: the panel is transparent
1097
+ and the image is inverted and screened, so only the modules and the
1098
+ mark show. */
1099
+ --zrl-qr-bg: transparent;
1100
+ --zrl-qr-filter: invert(1);
1101
+ --zrl-qr-spent-filter: invert(1) blur(3px);
1102
+ --zrl-qr-blend: screen;
954
1103
  --zrl-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 20px 50px -12px rgba(0, 0, 0, 0.65);
955
1104
  --zrl-ring: rgba(255, 255, 255, 0.1);
1105
+ /* A glow that reads on a white card disappears on a dark one: the light
1106
+ here is brighter and wider, and its halo reaches further out. */
1107
+ --zrl-beam: #22c8ec;
1108
+ --zrl-beam-head: #c2f3fc;
1109
+ --zrl-beam-line: 3px;
1110
+ --zrl-glow-core: 6px;
1111
+ --zrl-glow-reach: 32px;
1112
+ --zrl-glow-blur: 10px;
1113
+ --zrl-glow-opacity: 0.85;
956
1114
  `;
957
1115
  var CSS = `
958
1116
  .${PREFIX}-root { ${LIGHT} }
@@ -1024,16 +1182,10 @@ var CSS = `
1024
1182
  border: 1px solid var(--zrl-line);
1025
1183
  border-radius: var(--zrl-radius);
1026
1184
  background: var(--zrl-qr-bg);
1027
- /* The light on the edge takes its shape and colour from here. The colour
1028
- is fixed, not themed: the brand blue on both grounds, a lighter tint of
1029
- it at the head, no other hue. */
1185
+ /* The light on the edge takes its shape from here and its colour and
1186
+ strength from the theme tokens above. One lap in 4s on every tier. */
1030
1187
  --zrl-radius: 16px;
1031
- --zrl-beam: #00b4d9;
1032
- --zrl-beam-head: #7fe0f4;
1033
- --zrl-beam-size: 100px;
1034
1188
  --zrl-beam-time: 4s;
1035
- --zrl-glow-reach: 20px;
1036
- --zrl-glow-core: 3px;
1037
1189
  }
1038
1190
 
1039
1191
  /* The light on the well's edge: a short comet running along the border, with
@@ -1046,7 +1198,7 @@ var CSS = `
1046
1198
  before 120 and Safari before 15.4; the unprefixed one, declared after it,
1047
1199
  wins everywhere else.
1048
1200
 
1049
- qr-beam keeps a 1px ring on the border line: the comet itself.
1201
+ qr-beam keeps a thin ring on the border line: the comet itself.
1050
1202
  qr-beam-glow is the glow: a wide band outside the well that blurs whatever
1051
1203
  is inside it, and inside it qr-beam-glow-band keeps a 3px ring with a
1052
1204
  second copy of the comet. The blur has to sit on the parent because a
@@ -1061,9 +1213,9 @@ var CSS = `
1061
1213
  .${PREFIX}-qr-beam-glow,
1062
1214
  .${PREFIX}-qr-beam-glow-band {
1063
1215
  position: absolute;
1064
- inset: -1px;
1065
- border: 1px solid transparent;
1066
- border-radius: var(--zrl-radius);
1216
+ inset: calc(0px - var(--zrl-beam-line));
1217
+ border: var(--zrl-beam-line) solid transparent;
1218
+ border-radius: calc(var(--zrl-radius) - 1px + var(--zrl-beam-line));
1067
1219
  pointer-events: none;
1068
1220
  -webkit-mask: linear-gradient(transparent, transparent), linear-gradient(#fff, #fff);
1069
1221
  -webkit-mask-clip: padding-box, border-box;
@@ -1076,8 +1228,9 @@ var CSS = `
1076
1228
  inset: calc(0px - var(--zrl-glow-reach));
1077
1229
  border-width: var(--zrl-glow-reach);
1078
1230
  border-radius: calc(var(--zrl-radius) - 1px + var(--zrl-glow-reach));
1079
- filter: blur(6px);
1080
- opacity: 0.7;
1231
+ filter: blur(var(--zrl-glow-blur));
1232
+ opacity: var(--zrl-glow-opacity);
1233
+ will-change: filter;
1081
1234
  }
1082
1235
  .${PREFIX}-qr-beam-glow-band {
1083
1236
  inset: calc(0px - var(--zrl-glow-core));
@@ -1100,20 +1253,24 @@ var CSS = `
1100
1253
  transition: opacity 400ms cubic-bezier(0.23, 1, 0.32, 1);
1101
1254
  }
1102
1255
 
1103
- /* The moving light. Declared bottom-up: the transform fallback here, and each
1104
- @supports block further down replaces it where the browser allows. */
1256
+ /* The moving light: an oversized square carrying a conic sweep, rotated
1257
+ whole. A transform animation runs on the compositor, so the light keeps
1258
+ moving while the page is busy; animating the gradient angle instead
1259
+ repaints every frame on the main thread and stutters. */
1105
1260
  .${PREFIX}-qr-beam::after,
1106
1261
  .${PREFIX}-qr-beam-glow-band::after {
1107
1262
  content: '';
1108
1263
  position: absolute;
1109
1264
  inset: -50%;
1110
1265
  background: conic-gradient(
1111
- from var(--zrl-angle, 0deg),
1112
- transparent 0deg 245deg,
1113
- var(--zrl-beam) 332deg 346deg,
1266
+ from 0deg,
1267
+ transparent 0deg 220deg,
1268
+ var(--zrl-beam) 330deg,
1269
+ var(--zrl-beam-head) 348deg,
1114
1270
  transparent 356deg 360deg
1115
1271
  );
1116
- animation: ${PREFIX}-orbit 3s linear infinite;
1272
+ animation: ${PREFIX}-orbit var(--zrl-beam-time) linear infinite;
1273
+ will-change: transform;
1117
1274
  transition: opacity 400ms cubic-bezier(0.23, 1, 0.32, 1);
1118
1275
  }
1119
1276
 
@@ -1133,6 +1290,8 @@ var CSS = `
1133
1290
  width: 100%;
1134
1291
  height: 100%;
1135
1292
  border-radius: 8px;
1293
+ filter: var(--zrl-qr-filter);
1294
+ mix-blend-mode: var(--zrl-qr-blend);
1136
1295
  transition: filter 300ms cubic-bezier(0.23, 1, 0.32, 1),
1137
1296
  opacity 300ms cubic-bezier(0.23, 1, 0.32, 1),
1138
1297
  transform 300ms cubic-bezier(0.23, 1, 0.32, 1);
@@ -1141,7 +1300,7 @@ var CSS = `
1141
1300
  /* Once the code is claimed the QR is spent. Blurring it out rather than
1142
1301
  swapping it keeps one object on screen through the state change, so the eye
1143
1302
  reads a transformation instead of two things trading places. */
1144
- .${PREFIX}-qr[data-spent="true"] { opacity: 0.2; filter: blur(3px); transform: scale(0.96); }
1303
+ .${PREFIX}-qr[data-spent="true"] { opacity: 0.2; filter: var(--zrl-qr-spent-filter); transform: scale(0.96); }
1145
1304
 
1146
1305
  .${PREFIX}-qr-overlay {
1147
1306
  position: absolute;
@@ -1234,7 +1393,11 @@ var CSS = `
1234
1393
  margin: 6px 0 0;
1235
1394
  font-size: 12px;
1236
1395
  color: var(--zrl-ink-mute);
1396
+ text-decoration: none;
1397
+ border-radius: 6px;
1398
+ transition: color 150ms ease-out;
1237
1399
  }
1400
+ .${PREFIX}-secured:hover { color: var(--zrl-ink); }
1238
1401
 
1239
1402
  .${PREFIX}-close {
1240
1403
  position: absolute;
@@ -1270,53 +1433,7 @@ var CSS = `
1270
1433
  70%, 100% { transform: scale(2.6); opacity: 0 }
1271
1434
  }
1272
1435
 
1273
- /* Three ways to move the light, one look at rest.
1274
- Where offset-path takes a rect() (Chrome 116, Firefox 122, Safari 18) the
1275
- comet rides the edge. Before that, a conic gradient turns inside the same
1276
- masks instead: on a registered custom property where @property exists, and
1277
- by rotating an oversized square where it does not, since an untyped custom
1278
- property cannot interpolate and the light would snap once a cycle.
1279
- There is no direct query for @property support. transition-behavior
1280
- shipped after it in every engine (Chrome 117 vs 85, Firefox 129 vs 128,
1281
- Safari 17.4 vs 16.4), so it stands in: a yes is never wrong, and a no only
1282
- sends a capable browser down the transform tier, which looks the same.
1283
- inherits: false so the angle stays on the element that animates it and
1284
- never reaches the host page or the well. */
1285
- @property --zrl-angle {
1286
- syntax: '<angle>';
1287
- inherits: false;
1288
- initial-value: 0deg;
1289
- }
1290
1436
  @keyframes ${PREFIX}-orbit { to { transform: rotate(360deg) } }
1291
- @keyframes ${PREFIX}-orbit-angle { to { --zrl-angle: 360deg } }
1292
- @keyframes ${PREFIX}-beam { to { offset-distance: 100% } }
1293
- @supports (transition-behavior: allow-discrete) {
1294
- .${PREFIX}-qr-beam::after {
1295
- inset: -1px;
1296
- animation-name: ${PREFIX}-orbit-angle;
1297
- }
1298
- .${PREFIX}-qr-beam-glow-band::after {
1299
- inset: calc(0px - var(--zrl-glow-core));
1300
- animation-name: ${PREFIX}-orbit-angle;
1301
- }
1302
- }
1303
- /* The comet: a square that rides the well's edge on a rounded-rect path, its
1304
- anchor a little ahead of centre, turned to face the way it travels, and
1305
- masked down to what its overlay allows. The gradient runs against the
1306
- direction of travel: a light head, the blue body, nothing behind. One lap
1307
- in 4s, linear: continuous motion has no ease. */
1308
- @supports (offset-path: rect(0 auto auto 0)) {
1309
- .${PREFIX}-qr-beam::after,
1310
- .${PREFIX}-qr-beam-glow-band::after {
1311
- inset: auto;
1312
- width: var(--zrl-beam-size);
1313
- height: var(--zrl-beam-size);
1314
- background: linear-gradient(to left, var(--zrl-beam-head), var(--zrl-beam), transparent);
1315
- offset-path: rect(0 auto auto 0 round calc(var(--zrl-radius) - 1px));
1316
- offset-anchor: 60% 50%;
1317
- animation: ${PREFIX}-beam var(--zrl-beam-time) linear infinite;
1318
- }
1319
- }
1320
1437
 
1321
1438
  @media (prefers-reduced-motion: reduce) {
1322
1439
  .${PREFIX}-scrim,
@@ -1465,7 +1582,10 @@ function mountPairingModal(state, options) {
1465
1582
  const footer = el("div", cx("footer"));
1466
1583
  const cancelBtn = el("button", cx("cancel"), t.cancel);
1467
1584
  cancelBtn.type = "button";
1468
- const secured = el("p", cx("secured"));
1585
+ const secured = el("a", cx("secured"));
1586
+ secured.href = "https://zoreal.com";
1587
+ secured.target = "_blank";
1588
+ secured.rel = "noopener";
1469
1589
  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));
1470
1590
  footer.append(cancelBtn, secured);
1471
1591
  card.append(closeBtn, body, help, footer);
@@ -1497,7 +1617,7 @@ function mountPairingModal(state, options) {
1497
1617
  };
1498
1618
  const paint = (s) => {
1499
1619
  const settled = s.status === "claimed" || s.status === "enrolling";
1500
- title.textContent = settled ? t.titleApprove : t.title;
1620
+ title.textContent = settled ? t.titleApprove : titleFor(t, options.intent ?? "sign-in");
1501
1621
  bodyText.textContent = s.status === "enrolling" ? t.bodyEnrolling : settled ? t.bodyApprove : t.bodyScan;
1502
1622
  statusLabel.textContent = settled ? t.waitingApproval : t.waiting;
1503
1623
  qr.dataset.spent = String(settled);
@@ -1571,6 +1691,7 @@ function startLogin(options) {
1571
1691
  const issuer = options.issuer ?? DEFAULT_ISSUER;
1572
1692
  const controller = new AbortController();
1573
1693
  const useAppLink = options.display === "link" || options.display !== "qr" && isMobileUserAgent();
1694
+ const intent = resolveIntent(options.intent, options.scope, options.acr_values);
1574
1695
  const surface = {};
1575
1696
  const cancel = () => controller.abort();
1576
1697
  let modal = null;
@@ -1625,6 +1746,7 @@ function startLogin(options) {
1625
1746
  qrUrl: surface.qrUrl,
1626
1747
  qrRefreshSeconds,
1627
1748
  appLink: useAppLink,
1749
+ intent,
1628
1750
  cancel
1629
1751
  });
1630
1752
  let lastPolled = { status: "pending", expiresIn: started.expires_in };
@@ -1633,6 +1755,7 @@ function startLogin(options) {
1633
1755
  if ((options.pairingUI ?? "modal") === "modal" && !useAppLink) {
1634
1756
  modal = mountPairingModal(initial, {
1635
1757
  onCancel: cancel,
1758
+ intent,
1636
1759
  locale: options.locale,
1637
1760
  theme: options.theme,
1638
1761
  timeoutMs: options.pairingTimeoutMs
@@ -1760,6 +1883,7 @@ function startLogin(options) {
1760
1883
  isMobileUserAgent,
1761
1884
  mountPairingModal,
1762
1885
  pollUntilApproved,
1886
+ resolveIntent,
1763
1887
  startLogin,
1764
1888
  startPairing,
1765
1889
  unsafeClaims