@baas-id/react 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/LICENSE.md +176 -0
  2. package/README.md +171 -0
  3. package/THIRD_PARTY_NOTICES.md +44 -0
  4. package/dist/esm/baas-id-react.css +1 -0
  5. package/dist/esm/chunks/ContinueFlow-YFSpSOio.js +7500 -0
  6. package/dist/esm/continue.js +10 -0
  7. package/dist/esm/index.js +218 -0
  8. package/dist/esm/preview.js +368 -0
  9. package/dist/esm/workers/detector.worker-DtuL8TFY.js +22435 -0
  10. package/dist/types/continue.d.ts +3 -0
  11. package/dist/types/index.d.ts +19 -0
  12. package/dist/types/preview.d.ts +5 -0
  13. package/dist/types/react/DocumentCapture.d.ts +27 -0
  14. package/dist/types/react/FaceCapture.d.ts +19 -0
  15. package/dist/types/react/capture/ProximityMeter.d.ts +9 -0
  16. package/dist/types/react/capture/TurnGauge.d.ts +12 -0
  17. package/dist/types/react/capture/YawDial.d.ts +6 -0
  18. package/dist/types/react/capture/api.d.ts +50 -0
  19. package/dist/types/react/capture/attestation.d.ts +32 -0
  20. package/dist/types/react/capture/binding.d.ts +51 -0
  21. package/dist/types/react/capture/camera.d.ts +4 -0
  22. package/dist/types/react/capture/chrome.d.ts +24 -0
  23. package/dist/types/react/capture/demo.d.ts +2 -0
  24. package/dist/types/react/capture/errors.d.ts +18 -0
  25. package/dist/types/react/capture/frames.d.ts +18 -0
  26. package/dist/types/react/capture/index.d.ts +15 -0
  27. package/dist/types/react/capture/integrity.d.ts +32 -0
  28. package/dist/types/react/capture/keyframes.d.ts +19 -0
  29. package/dist/types/react/capture/overlays.d.ts +10 -0
  30. package/dist/types/react/capture/run.d.ts +14 -0
  31. package/dist/types/react/capture/useCaptureRun.d.ts +4 -0
  32. package/dist/types/react/document/CardFrame.d.ts +10 -0
  33. package/dist/types/react/document/DocumentParts.d.ts +49 -0
  34. package/dist/types/react/document/advisory.d.ts +47 -0
  35. package/dist/types/react/document/bestFrames.d.ts +18 -0
  36. package/dist/types/react/document/cues.d.ts +28 -0
  37. package/dist/types/react/document/flow.d.ts +52 -0
  38. package/dist/types/react/document/gate.d.ts +114 -0
  39. package/dist/types/react/document/latch.d.ts +25 -0
  40. package/dist/types/react/document/mrz.d.ts +29 -0
  41. package/dist/types/react/document/overlay.d.ts +52 -0
  42. package/dist/types/react/document/quad.d.ts +5 -0
  43. package/dist/types/react/document/resolution.d.ts +42 -0
  44. package/dist/types/react/document/review.d.ts +50 -0
  45. package/dist/types/react/document/sideCheck.d.ts +32 -0
  46. package/dist/types/react/document/telemetry.d.ts +14 -0
  47. package/dist/types/react/document/track.d.ts +36 -0
  48. package/dist/types/react/document/useDocumentCapture.d.ts +78 -0
  49. package/dist/types/react/face/FaceGuide.d.ts +22 -0
  50. package/dist/types/react/face/FaceParts.d.ts +15 -0
  51. package/dist/types/react/face/faceMesh.d.ts +68 -0
  52. package/dist/types/react/face/faceRegion.d.ts +16 -0
  53. package/dist/types/react/face/faceView.d.ts +21 -0
  54. package/dist/types/react/face/meshBench.d.ts +7 -0
  55. package/dist/types/react/face/meshCanvas.d.ts +20 -0
  56. package/dist/types/react/face/qualityGate.d.ts +59 -0
  57. package/dist/types/react/face/runLiveness.d.ts +37 -0
  58. package/dist/types/react/face/scanState.d.ts +40 -0
  59. package/dist/types/react/face/upload.d.ts +14 -0
  60. package/dist/types/react/face/useFaceCapture.d.ts +45 -0
  61. package/dist/types/react/flows/ConsentStep.d.ts +8 -0
  62. package/dist/types/react/flows/EnrollmentFlow.d.ts +2 -0
  63. package/dist/types/react/flows/FlowResult.d.ts +13 -0
  64. package/dist/types/react/flows/FlowShell.d.ts +48 -0
  65. package/dist/types/react/flows/IdentifyFlow.d.ts +2 -0
  66. package/dist/types/react/flows/ReverificationFlow.d.ts +2 -0
  67. package/dist/types/react/flows/SignInFlow.d.ts +2 -0
  68. package/dist/types/react/flows/StepIntro.d.ts +10 -0
  69. package/dist/types/react/flows/VerificationFlow.d.ts +4 -0
  70. package/dist/types/react/flows/experience.d.ts +35 -0
  71. package/dist/types/react/flows/failureDetail.d.ts +12 -0
  72. package/dist/types/react/flows/index.d.ts +6 -0
  73. package/dist/types/react/flows/session.d.ts +5 -0
  74. package/dist/types/react/flows/state.d.ts +106 -0
  75. package/dist/types/react/flows/types.d.ts +255 -0
  76. package/dist/types/react/flows/useFlowSession.d.ts +21 -0
  77. package/dist/types/react/flows.d.ts +1 -0
  78. package/dist/types/react/handoff/ContinueFlow.d.ts +28 -0
  79. package/dist/types/react/handoff/ContinueOnPhone.d.ts +60 -0
  80. package/dist/types/react/handoff/api.d.ts +41 -0
  81. package/dist/types/react/handoff/qr.d.ts +9 -0
  82. package/dist/types/react/hooks.d.ts +7 -0
  83. package/dist/types/react/i18n/en.d.ts +3 -0
  84. package/dist/types/react/i18n/es-419.d.ts +3 -0
  85. package/dist/types/react/i18n/index.d.ts +10 -0
  86. package/dist/types/react/i18n/types.d.ts +250 -0
  87. package/dist/types/react/icons.d.ts +25 -0
  88. package/dist/types/react/liveness/challenges.d.ts +26 -0
  89. package/dist/types/react/liveness/framing.d.ts +33 -0
  90. package/dist/types/react/liveness/index.d.ts +8 -0
  91. package/dist/types/react/liveness/nod.d.ts +4 -0
  92. package/dist/types/react/liveness/scoring.d.ts +29 -0
  93. package/dist/types/react/liveness/script.d.ts +7 -0
  94. package/dist/types/react/liveness/signals.d.ts +38 -0
  95. package/dist/types/react/liveness/timing.d.ts +20 -0
  96. package/dist/types/react/liveness/turn.d.ts +18 -0
  97. package/dist/types/react/preview/FlowPreview.d.ts +34 -0
  98. package/dist/types/react/preview/contrast.d.ts +17 -0
  99. package/dist/types/react/preview/specimen.d.ts +35 -0
  100. package/dist/types/react/styles/index.d.ts +0 -0
  101. package/dist/types/react/telemetry/bus.d.ts +13 -0
  102. package/dist/types/react/telemetry/device.d.ts +66 -0
  103. package/dist/types/react/telemetry/reporter.d.ts +27 -0
  104. package/dist/types/react/theme/appearance.d.ts +22 -0
  105. package/dist/types/react/version.d.ts +1 -0
  106. package/dist/types/react/vision/authenticity.d.ts +43 -0
  107. package/dist/types/react/vision/authenticityPixels.d.ts +6 -0
  108. package/dist/types/react/vision/authenticitySpecular.d.ts +2 -0
  109. package/dist/types/react/vision/cardCorners.d.ts +21 -0
  110. package/dist/types/react/vision/cardDetector.d.ts +15 -0
  111. package/dist/types/react/vision/cornerGeometry.d.ts +10 -0
  112. package/dist/types/react/vision/cornerImage.d.ts +34 -0
  113. package/dist/types/react/vision/cornerLines.d.ts +12 -0
  114. package/dist/types/react/vision/cornerScore.d.ts +17 -0
  115. package/dist/types/react/vision/corners.d.ts +60 -0
  116. package/dist/types/react/vision/detector.worker.d.ts +1 -0
  117. package/dist/types/react/vision/document.d.ts +13 -0
  118. package/dist/types/react/vision/engine.d.ts +5 -0
  119. package/dist/types/react/vision/face.d.ts +17 -0
  120. package/dist/types/react/vision/index.d.ts +7 -0
  121. package/dist/types/react/vision/modelCache.d.ts +16 -0
  122. package/dist/types/react/vision/modelsCdn.d.ts +4 -0
  123. package/dist/types/react/vision/quality.d.ts +10 -0
  124. package/dist/types/react/vision/sideClassifier.d.ts +4 -0
  125. package/dist/types/react/vision/tinyCore.d.ts +21 -0
  126. package/dist/types/react/vision/tinyDetector.d.ts +36 -0
  127. package/dist/types/react/vision/types.d.ts +62 -0
  128. package/dist/types/react/vision/warp.d.ts +18 -0
  129. package/package.json +104 -0
package/LICENSE.md ADDED
@@ -0,0 +1,176 @@
1
+ # Licencia de @baas-id/react / @baas-id/react License
2
+
3
+ > **Borrador para revisión legal — no constituye asesoría legal. Draft for legal review — not legal advice.**
4
+ > Este texto aún no ha sido aprobado por asesoría legal y puede cambiar. This text has not yet been approved by counsel
5
+ > and may change.
6
+
7
+ Copyright © 2026 BaaS, S.A. Todos los derechos reservados. All rights reserved.
8
+
9
+ Licenciante / Licensor: **BaaS, S.A., operada por Reporting Pal / BaaS, S.A., operated by Reporting Pal** (Guatemala).
10
+
11
+ La versión en español prevalece en Guatemala. The Spanish version prevails in Guatemala; both versions are intended
12
+ to be equivalent.
13
+
14
+ ---
15
+
16
+ ## Español
17
+
18
+ **1. Definiciones.** "BaaS" o "el Licenciante": BaaS, S.A., operada por Reporting Pal. "SDK": el paquete
19
+ `@baas-id/react`, incluidos su código, estilos, textos, documentación y los modelos de aprendizaje automático y sus
20
+ pesos que descarga o incluye. "Servicio": el servicio de verificación de identidad de BaaS. "Usted" o "el
21
+ Licenciatario": la persona u organización que instala o usa el SDK. "Cuenta": una cuenta BaaS vigente, incluida la de
22
+ prueba o *sandbox*.
23
+
24
+ **2. Concesión de licencia.** Sujeto a estos términos, BaaS le otorga una licencia limitada, no exclusiva,
25
+ intransferible, no sublicenciable y revocable para usar el SDK únicamente con el fin de integrar el Servicio en las
26
+ aplicaciones web o móviles propias de su organización, mientras mantenga una Cuenta vigente y cumpla estos términos.
27
+
28
+ **3. Titularidad.** El SDK es software propietario; no es software de código abierto. BaaS, S.A. se reserva todos los
29
+ derechos sobre el SDK, los modelos y sus pesos, la documentación y sus marcas. No se otorga ninguna licencia
30
+ implícita, por preclusión ni de otro modo. Publicar el SDK en npm o en baaslatam.com no le otorga ningún derecho
31
+ distinto de los descritos aquí.
32
+
33
+ **4. Restricciones.** Usted no puede, ni puede permitir que un tercero:
34
+ 1. descompile, desensamble o aplique ingeniería inversa al SDK, salvo en la medida en que la ley aplicable lo permita
35
+ expresamente pese a esta restricción;
36
+ 2. extraiga, copie o reutilice los modelos o sus pesos fuera del SDK, incluida la extracción de modelos, la
37
+ destilación o el entrenamiento con sus resultados;
38
+ 3. use el SDK con un servicio distinto del Servicio BaaS, o sin él;
39
+ 4. use el SDK para construir, o ayudar a construir, un producto o servicio que compita con BaaS;
40
+ 5. redistribuya, sublicencie, venda, alquile o publique el SDK o sus partes, salvo integrado dentro de las aplicaciones
41
+ propias de su organización que usan el Servicio;
42
+ 6. retire u oculte avisos de derechos, de marca o de licencias de terceros;
43
+ 7. eluda o desactive controles de seguridad, de calidad o de prueba de vida, límites de uso o controles de licencia, ni
44
+ envíe al Servicio capturas que no provengan de la cámara de la persona que se verifica;
45
+ 8. use el SDK para vigilancia ilícita, o para verificar a personas sin la base legal o el consentimiento requeridos;
46
+ 9. publique resultados de pruebas comparativas o de rendimiento del SDK o del Servicio sin el consentimiento previo y
47
+ por escrito de BaaS, S.A.
48
+
49
+ **5. Datos y cumplimiento.** Usted es responsable de informar a las personas que verifica, de obtener su
50
+ consentimiento cuando la ley lo exija (incluidas las leyes sobre datos biométricos) y de cumplir la normativa que le
51
+ aplique. BaaS trata los datos personales conforme al contrato de servicio y a su aviso de privacidad.
52
+
53
+ **6. Componentes de terceros.** El SDK incluye componentes de terceros que se rigen por sus propias licencias (ver
54
+ `THIRD_PARTY_NOTICES.md`). Nada en esta licencia restringe los derechos que esas licencias le otorgan sobre dichos
55
+ componentes.
56
+
57
+ **7. Comentarios.** BaaS, S.A. puede usar libremente, sin obligación alguna hacia usted, los comentarios,
58
+ sugerencias o ideas que usted le envíe sobre el SDK o el Servicio.
59
+
60
+ **8. Confidencialidad.** Usted debe mantener confidenciales los materiales de BaaS que no sean públicos, así como
61
+ sus llaves de API, tokens y demás credenciales, y protegerlos con medidas razonables.
62
+
63
+ **9. Actualizaciones.** BaaS puede actualizar el SDK y estos términos. Los términos actualizados se aplican a las
64
+ versiones publicadas a partir de su fecha.
65
+
66
+ **10. Terminación.** Esta licencia termina automáticamente si usted incumple estos términos o si su Cuenta termina.
67
+ Al terminar, usted debe dejar de usar el SDK, retirarlo de sus aplicaciones y eliminar todas sus copias. Las secciones
68
+ 3, 4, 7, 8, 11, 12, 13 y 16 subsisten a la terminación.
69
+
70
+ **11. Sin garantías.** El SDK se proporciona "tal cual" y "según disponibilidad", sin garantías de ningún tipo,
71
+ expresas o implícitas, incluidas las de comerciabilidad, idoneidad para un fin particular y no infracción, en la
72
+ medida máxima permitida por la ley. Los niveles de servicio, si los hay, constan en el contrato de servicio.
73
+
74
+ **12. Limitación de responsabilidad.** En la medida máxima permitida por la ley, BaaS no responde por daños
75
+ indirectos, incidentales, especiales, consecuentes o punitivos, ni por lucro cesante o pérdida de datos. La
76
+ responsabilidad total de BaaS derivada de esta licencia no excederá los montos que usted haya pagado a BaaS en los
77
+ doce (12) meses anteriores al hecho que la origine.
78
+
79
+ **13. Indemnidad.** Usted mantendrá indemne a BaaS, S.A. y a quien la opera frente a reclamos, daños y gastos
80
+ (incluidos honorarios razonables de abogados) derivados del uso indebido del SDK o del Servicio, o de no haber
81
+ obtenido los consentimientos requeridos o cumplido la normativa que le aplica.
82
+
83
+ **14. Exportación y sanciones.** Usted cumplirá las leyes de control de exportaciones y los regímenes de sanciones
84
+ aplicables, y no usará ni permitirá el uso del SDK en países, por personas o para fines que esas normas prohíben.
85
+
86
+ **15. Verificación.** Previo aviso razonable, BaaS puede verificar el cumplimiento de estos términos, por ejemplo
87
+ mediante la información técnica de uso del Servicio o una declaración por escrito de su organización.
88
+
89
+ **16. Ley aplicable y jurisdicción.** Esta licencia se rige por las leyes de la República de Guatemala. Las partes se
90
+ someten a los tribunales competentes de la Ciudad de Guatemala.
91
+
92
+ **17. Orden de prelación.** Si su organización firmó un contrato de servicio con BaaS, ese contrato prevalece sobre
93
+ esta licencia en lo que se contradigan.
94
+
95
+ **18. Contacto.** Licencias y ventas: sales@reporting-pal.com · Soporte: support@reporting-pal.com ·
96
+ https://baaslatam.com/desarrolladores
97
+
98
+ ---
99
+
100
+ ## English
101
+
102
+ **1. Definitions.** "BaaS" or "the Licensor": BaaS, S.A., operated by Reporting Pal. "SDK": the `@baas-id/react`
103
+ package, including its code, styles, texts, documentation, and the machine-learning models and weights it downloads
104
+ or includes. "Service": the BaaS identity verification service. "You" or "the Licensee": the person or organization
105
+ that installs or uses the SDK. "Account": an active BaaS account, including a trial or sandbox account.
106
+
107
+ **2. License grant.** Subject to these terms, BaaS grants you a limited, non-exclusive, non-transferable,
108
+ non-sublicensable, revocable license to use the SDK solely to integrate the Service into your organization's own web
109
+ or mobile applications, while you hold an active Account and comply with these terms.
110
+
111
+ **3. Ownership.** The SDK is proprietary software; it is not open source. BaaS, S.A. reserves all rights in the SDK,
112
+ the models and their weights, the documentation and its trademarks. No license is granted by implication, estoppel or
113
+ otherwise. Publication of the SDK on npm or on baaslatam.com grants you no rights other than those described here.
114
+
115
+ **4. Restrictions.** You may not, and may not allow any third party to:
116
+ 1. decompile, disassemble or reverse engineer the SDK, except to the extent applicable law expressly permits it
117
+ despite this restriction;
118
+ 2. extract, copy or reuse the models or their weights outside the SDK, including model extraction, distillation, or
119
+ training on their outputs;
120
+ 3. use the SDK with any service other than the BaaS Service, or without it;
121
+ 4. use the SDK to build, or help build, a product or service that competes with BaaS;
122
+ 5. redistribute, sublicense, sell, rent or publish the SDK or any part of it, except bundled inside your
123
+ organization's own applications that use the Service;
124
+ 6. remove or obscure notices of rights, trademarks or third-party licenses;
125
+ 7. circumvent or disable security, quality or liveness controls, rate limits or license controls, or send the Service
126
+ captures that do not come from the camera of the person being verified;
127
+ 8. use the SDK for unlawful surveillance, or to verify people without the required legal basis or consent;
128
+ 9. publish benchmark or performance results about the SDK or the Service without the prior written consent of
129
+ BaaS, S.A.
130
+
131
+ **5. Data and compliance.** You are responsible for informing the people you verify, for obtaining their consent
132
+ where the law requires it (including biometric data laws), and for complying with the laws that apply to you. BaaS
133
+ processes personal data under the service agreement and its privacy notice.
134
+
135
+ **6. Third-party components.** The SDK includes third-party components governed by their own licenses (see
136
+ `THIRD_PARTY_NOTICES.md`). Nothing in this license restricts the rights those licenses grant you in those components.
137
+
138
+ **7. Feedback.** BaaS, S.A. may freely use, with no obligation to you, any comments, suggestions or ideas you send it
139
+ about the SDK or the Service.
140
+
141
+ **8. Confidentiality.** You must keep BaaS's non-public materials, and your API keys, tokens and other credentials,
142
+ confidential, and protect them with reasonable measures.
143
+
144
+ **9. Updates.** BaaS may update the SDK and these terms. Updated terms apply to versions released from their date.
145
+
146
+ **10. Termination.** This license ends automatically if you breach these terms or if your Account ends. On
147
+ termination you must stop using the SDK, remove it from your applications and delete all copies. Sections 3, 4, 7, 8,
148
+ 11, 12, 13 and 16 survive termination.
149
+
150
+ **11. No warranty.** The SDK is provided "as is" and "as available", without warranties of any kind, express or
151
+ implied, including merchantability, fitness for a particular purpose and non-infringement, to the fullest extent
152
+ permitted by law. Service levels, if any, are set out in the service agreement.
153
+
154
+ **12. Limitation of liability.** To the fullest extent permitted by law, BaaS is not liable for indirect,
155
+ incidental, special, consequential or punitive damages, or for lost profits or lost data. BaaS's total liability
156
+ arising from this license will not exceed the amounts you paid to BaaS in the twelve (12) months before the event
157
+ giving rise to it.
158
+
159
+ **13. Indemnity.** You will indemnify BaaS, S.A. and its operator against claims, damages and costs (including
160
+ reasonable attorneys' fees) arising from misuse of the SDK or the Service, or from your failure to obtain required
161
+ consents or to comply with the laws that apply to you.
162
+
163
+ **14. Export and sanctions.** You will comply with applicable export control laws and sanctions regimes, and will not
164
+ use or allow use of the SDK in countries, by persons or for purposes those rules prohibit.
165
+
166
+ **15. Verification.** On reasonable notice, BaaS may verify compliance with these terms, for example through technical
167
+ usage information from the Service or a written statement from your organization.
168
+
169
+ **16. Governing law and jurisdiction.** This license is governed by the laws of the Republic of Guatemala. The parties
170
+ submit to the competent courts of Guatemala City.
171
+
172
+ **17. Order of precedence.** If your organization has signed a service agreement with BaaS, that agreement prevails
173
+ over this license where they conflict.
174
+
175
+ **18. Contact.** Licensing and sales: sales@reporting-pal.com · Support: support@reporting-pal.com ·
176
+ https://baaslatam.com/desarrolladores
package/README.md ADDED
@@ -0,0 +1,171 @@
1
+ # @baas-id/react
2
+
3
+ Identity verification for React apps: a guided ID photo (front and back) and a live face check, with on-device
4
+ quality gating, a verdict decided on the server, and an optional handoff to a phone.
5
+ **Requires a BaaS account** — sign up at [baaslatam.com](https://baaslatam.com) (14-day trial, sandbox included).
6
+
7
+ Verificación de identidad para apps React: foto guiada del documento (frente y reverso) y prueba de rostro en vivo,
8
+ con control de calidad en el dispositivo, veredicto decidido en el servidor y paso opcional al teléfono.
9
+ **Requiere una cuenta BaaS** — regístrate en [baaslatam.com](https://baaslatam.com) (prueba de 14 días con sandbox).
10
+
11
+ [Español](#español) · [English](#english)
12
+
13
+ ---
14
+
15
+ ## English
16
+
17
+ ### Install
18
+
19
+ ```bash
20
+ npm install @baas-id/react
21
+ # or straight from BaaS:
22
+ npm install https://baaslatam.com/sdk/baas-id-react-0.2.2.tgz
23
+ ```
24
+
25
+ Peer dependencies: `react` and `react-dom` 18 or newer. TensorFlow.js is installed with the package.
26
+
27
+ ### Quick start
28
+
29
+ ```tsx
30
+ import { EnrollmentFlow } from "@baas-id/react"; // styles come with the import
31
+
32
+ export function Verify() {
33
+ return (
34
+ <EnrollmentFlow
35
+ apiUrl="https://api.baaslatam.com"
36
+ openSession={async (signal) => (await fetch("/api/baas/session", { method: "POST", signal })).json()}
37
+ onVerified={(result) => fetch("/api/baas/verified", { method: "POST", body: result.verification_token })}
38
+ onFailed={(reason, detail) => console.warn(reason, detail)}
39
+ />
40
+ );
41
+ }
42
+ ```
43
+
44
+ Your **backend** opens the session (it holds the API key, never the browser) and returns the API's body unchanged:
45
+
46
+ ```ts
47
+ const res = await fetch("https://api.baaslatam.com/v1/sessions", {
48
+ method: "POST",
49
+ headers: { "Content-Type": "application/json", "X-API-Key": process.env.BAAS_API_KEY },
50
+ body: JSON.stringify({ purpose: "enrollment", subject_ref: user.id, nonce: crypto.randomUUID() }),
51
+ });
52
+ return res.json(); // keep `flow` whole: it binds every capture to the session
53
+ ```
54
+
55
+ ### Sandbox keys
56
+
57
+ In the BaaS console → your tenant → **Integration**, copy the **sandbox** key. Sandbox sessions run the full flow
58
+ and never bill. Switch to the live key when you go to production.
59
+
60
+ ### Results
61
+
62
+ - `onVerified(result)`: the verdict was VERIFIED. Send `result.verification_token` (a signed JWS) to your backend
63
+ and verify it there, offline, against the public keys at `https://api.baaslatam.com/.well-known/jwks.json` (Ed25519).
64
+ Never trust a browser-side "verified" on its own.
65
+ - `onFailed(reason, detail)`: the flow ended without a verification. `reason` is a typed code; `detail` always
66
+ carries `reason_title` and `reason_description` (the server's words when it sent them, else the SDK's, in the
67
+ session's language), ready to show.
68
+ - `onEvent(event)`: progress events (`document.captured`, `face.captured`, `verification.completed`, …) for logging.
69
+
70
+ ### Phone handoff
71
+
72
+ On a computer, the flow can offer to continue on a phone (QR code + link) when your tenant turns it on. The phone page
73
+ is hosted by BaaS at `https://baaslatam.com/c/{code}`, or on your own origin with
74
+ `import { ContinueFlow, readHandoffCode } from "@baas-id/react/continue"`. The computer still receives `onVerified`.
75
+
76
+ ### Theming
77
+
78
+ Set any `--baas-id-*` CSS variable on a wrapping element: `--baas-id-accent`, `--baas-id-ink`,
79
+ `--baas-id-surface`, `--baas-id-radius`, `--baas-id-font`, … Derived shades follow your base colours automatically
80
+ (dark themes included). The look, step instructions and error wording can also be set per tenant in the console.
81
+
82
+ ### Models
83
+
84
+ The on-device detectors download from the BaaS CDN (`https://baaslatam.com/sdk-models/…`, versioned, cached for a
85
+ year). To serve them yourself, pass `modelsUrl="/your/path"`.
86
+
87
+ ### Other entries
88
+
89
+ - `@baas-id/react/continue` — the phone continue page only.
90
+ - `@baas-id/react/preview` — `FlowPreview`, a frozen screen for configuration UIs.
91
+ - `@baas-id/react/styles.css` — the stylesheet, if your setup needs it imported explicitly.
92
+
93
+ ### Links
94
+
95
+ Docs: [baaslatam.com/desarrolladores](https://baaslatam.com/desarrolladores) · Licence: proprietary (BaaS, S.A.), see
96
+ `LICENSE.md` · Third-party notices: `THIRD_PARTY_NOTICES.md` · Sales: sales@reporting-pal.com · Support:
97
+ support@reporting-pal.com · Developed by Reporting Pal.
98
+
99
+ ---
100
+
101
+ ## Español
102
+
103
+ ### Instalación
104
+
105
+ ```bash
106
+ npm install @baas-id/react
107
+ # o directamente desde BaaS:
108
+ npm install https://baaslatam.com/sdk/baas-id-react-0.2.2.tgz
109
+ ```
110
+
111
+ Dependencias *peer*: `react` y `react-dom` 18 o superior. TensorFlow.js se instala con el paquete.
112
+
113
+ ### Inicio rápido
114
+
115
+ ```tsx
116
+ import { EnrollmentFlow } from "@baas-id/react"; // los estilos vienen con el import
117
+
118
+ export function Verificar() {
119
+ return (
120
+ <EnrollmentFlow
121
+ apiUrl="https://api.baaslatam.com"
122
+ openSession={async (signal) => (await fetch("/api/baas/session", { method: "POST", signal })).json()}
123
+ onVerified={(r) => fetch("/api/baas/verificado", { method: "POST", body: r.verification_token })}
124
+ onFailed={(motivo, detalle) => console.warn(motivo, detalle)}
125
+ />
126
+ );
127
+ }
128
+ ```
129
+
130
+ Tu **backend** abre la sesión (guarda la clave de API; el navegador nunca la ve) y devuelve el cuerpo de la API sin
131
+ cambios: `POST https://api.baaslatam.com/v1/sessions` con el encabezado `X-API-Key`. Conserva `flow` completo: vincula
132
+ cada captura con la sesión.
133
+
134
+ ### Claves sandbox
135
+
136
+ En la consola de BaaS → tu tenant → **Integración**, copia la clave **sandbox**. Las sesiones sandbox recorren el
137
+ flujo completo y no se facturan. Cambia a la clave live al pasar a producción.
138
+
139
+ ### Resultados
140
+
141
+ - `onVerified(result)`: el veredicto fue VERIFIED. Envía `result.verification_token` (un JWS firmado) a tu backend y
142
+ verifícalo allí, sin conexión, con las claves públicas de `https://api.baaslatam.com/.well-known/jwks.json` (Ed25519).
143
+ No confíes solo en un "verificado" del navegador.
144
+ - `onFailed(motivo, detalle)`: el flujo terminó sin verificación. `motivo` es un código; `detalle` siempre trae
145
+ `reason_title` y `reason_description` (las palabras del servidor si las envió; si no, las del SDK, en el idioma de la
146
+ sesión), listas para mostrar.
147
+ - `onEvent(evento)`: eventos de progreso para tus registros.
148
+
149
+ ### Continuar en el teléfono
150
+
151
+ En una computadora, el flujo puede ofrecer continuar en el teléfono (código QR y enlace) si tu tenant lo activa. La
152
+ página del teléfono la aloja BaaS en `https://baaslatam.com/c/{code}`, o tu propio dominio con
153
+ `import { ContinueFlow, readHandoffCode } from "@baas-id/react/continue"`. La computadora recibe igual `onVerified`.
154
+
155
+ ### Apariencia
156
+
157
+ Define cualquier variable `--baas-id-*` en un elemento contenedor (`--baas-id-accent`, `--baas-id-ink`,
158
+ `--baas-id-surface`, `--baas-id-radius`, `--baas-id-font`, …). Los tonos derivados siguen tus colores base (también
159
+ en temas oscuros). La apariencia, las instrucciones por paso y los mensajes de error también se configuran por tenant
160
+ en la consola.
161
+
162
+ ### Modelos
163
+
164
+ Los detectores del dispositivo se descargan del CDN de BaaS (`https://baaslatam.com/sdk-models/…`, versionado, en
165
+ caché por un año). Para servirlos tú, pasa `modelsUrl="/tu/ruta"`.
166
+
167
+ ### Enlaces
168
+
169
+ Documentación: [baaslatam.com/desarrolladores](https://baaslatam.com/desarrolladores) · Licencia: propietaria (BaaS,
170
+ S.A.), ver `LICENSE.md` · Avisos de terceros: `THIRD_PARTY_NOTICES.md` · Ventas: sales@reporting-pal.com · Soporte:
171
+ support@reporting-pal.com · Desarrollado por Reporting Pal.
@@ -0,0 +1,44 @@
1
+ # Third-party notices / Avisos de terceros
2
+
3
+ `@baas-id/react` is proprietary (see `LICENSE.md`). It contains, or downloads at run time, the third-party components
4
+ below, which remain under their own licences. Their copyright and licence notices are preserved in the shipped files
5
+ (`@license` headers in `dist/esm/workers/*.js`).
6
+
7
+ `@baas-id/react` es propietario (ver `LICENSE.md`). Contiene, o descarga al ejecutarse, los componentes de terceros
8
+ siguientes, que conservan sus propias licencias. Sus avisos de copyright y licencia se conservan en los archivos
9
+ distribuidos.
10
+
11
+ ## Bundled code (in `dist/esm/workers/detector.worker-*.js`)
12
+
13
+ The document detector runs in a Web Worker, which cannot resolve your app's imports, so the worker file bundles its
14
+ own copy of TensorFlow.js:
15
+
16
+ | Package | Version | Licence | Copyright |
17
+ |---|---|---|---|
18
+ | @tensorflow/tfjs (core, converter, backend-cpu, backend-webgl, layers, data) | 4.22.0 | Apache-2.0 (tfjs-layers: Apache-2.0 AND MIT) | Google LLC |
19
+ | seedrandom | 3.0.5 | MIT | David Bau |
20
+ | long | 4.0.0 | Apache-2.0 | Daniel Wirtz |
21
+
22
+ Apache License 2.0: https://www.apache.org/licenses/LICENSE-2.0 — MIT License: https://opensource.org/licenses/MIT
23
+
24
+ ## Dependencies installed with the package (not bundled)
25
+
26
+ | Package | Licence |
27
+ |---|---|
28
+ | @tensorflow/tfjs ^4.22 | Apache-2.0 |
29
+ | @tensorflow-models/blazeface ^0.1 | Apache-2.0 |
30
+
31
+ Peer dependencies you provide: `react`, `react-dom` (MIT, Meta Platforms, Inc.).
32
+
33
+ ## Models downloaded at run time
34
+
35
+ Served from `https://baaslatam.com/sdk-models/<version>/` (or your own `modelsUrl`):
36
+
37
+ | Folder | What it is | Licence |
38
+ |---|---|---|
39
+ | `face-detector` | BlazeFace short-range face detector (TensorFlow.js models) | Apache-2.0, Google LLC |
40
+ | `card-detector-q` | ID-card detector, trained by BaaS | BaaS proprietary (LICENSE.md §4) — **legal review: confirm the licence of any pre-trained base weights** |
41
+ | `side-classifier-q` | ID-card front/back classifier, trained by BaaS | BaaS proprietary — **legal review: confirm the licence of any pre-trained base weights** |
42
+ | `card-tinydet-r4` | Card corner + side detector, own architecture trained from scratch by BaaS | BaaS proprietary |
43
+
44
+ > Borrador para revisión legal — draft for legal review.
@@ -0,0 +1 @@
1
+ :root{--baas-id-accent: #135E6E;--baas-id-ink: #16232C;--baas-id-muted: #5C6B74;--baas-id-surface: #FFFFFF;--baas-id-positive: #177E54;--baas-id-positive-bright: #6FD0A8;--baas-id-caution: #99671C;--baas-id-caution-bright: #EFC978;--baas-id-negative: #B2434E;--baas-id-radius: 12px;--baas-id-font: inherit;--baas-id-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--baas-id-radius-sm: 8px;--baas-id-radius-ctl: 4px;--baas-id-radius-pill: 999px;--baas-id-ease: cubic-bezier(.16, 1, .3, 1);--baas-id-ease-smooth: cubic-bezier(.4, 0, .2, 1);--baas-id-fast: .16s;--baas-id-slow: .24s;--baas-id-state: .3s;--baas-id-touch: 44px}.baas-id-scope ::selection{background:var(--baas-id-accent-soft, color-mix(in srgb, var(--baas-id-accent) 11%, var(--baas-id-surface)));color:var(--baas-id-ink)}.baas-id-scope{caret-color:var(--baas-id-accent);scrollbar-color:var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent)) transparent}.baas-id-scope ::-webkit-scrollbar{width:10px;height:10px}.baas-id-scope ::-webkit-scrollbar-track{background:transparent}.baas-id-scope ::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--baas-id-ink) 18%,transparent);border:3px solid transparent;border-radius:var(--baas-id-radius-pill);background-clip:content-box}.baas-id-scope ::-webkit-scrollbar-thumb:hover{background-color:color-mix(in srgb,var(--baas-id-ink) 32%,transparent)}.baas-id-scope :focus-visible{outline:2px solid var(--baas-id-accent);outline-offset:2px;border-radius:var(--baas-id-radius-sm)}.rpid-num,.rpid-telemetry{font-variant-numeric:tabular-nums}.rpid-retry,.rpid-action{margin-top:8px;width:100%;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--baas-id-touch);padding:12px 16px;border-radius:var(--baas-id-radius);border:1px solid color-mix(in srgb,var(--baas-id-accent) 40%,transparent);background:var(--baas-id-accent-soft, color-mix(in srgb, var(--baas-id-accent) 11%, var(--baas-id-surface)));color:var(--baas-id-accent);font:600 13.5px var(--baas-id-font);cursor:pointer;transition:border-color var(--baas-id-fast) var(--baas-id-ease),background-color var(--baas-id-fast) var(--baas-id-ease),transform .12s var(--baas-id-ease)}.rpid-retry:hover,.rpid-action:hover{border-color:var(--baas-id-accent);background:color-mix(in srgb,var(--baas-id-accent) 16%,var(--baas-id-surface))}.rpid-retry:active,.rpid-action:active{transform:translateY(1px)}.rpid-retry:disabled,.rpid-action:disabled{cursor:not-allowed;transform:none;border-color:var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));background:var(--baas-id-sunken, color-mix(in srgb, var(--baas-id-ink) 4%, var(--baas-id-surface)));color:color-mix(in srgb,var(--baas-id-muted) 70%,transparent)}.rpid-viewport{position:relative;border-radius:var(--baas-id-radius);overflow:hidden;background:radial-gradient(120% 90% at 50% 8%,#31434e 0,#1c2b34 55%,#141f26);aspect-ratio:4 / 3}.rpid-viewport video,.rpid-viewport canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.rpid-viewport video[data-rpid-mirror]{transform:scaleX(-1)}.rpid-guide{position:absolute;left:0;right:0;bottom:0;z-index:5;padding:30px 18px 11px;background:linear-gradient(to top,#090f13bd,#090f1370 46%,#090f1300);color:#fff;font:500 13px/1.35 var(--baas-id-font);text-align:center;text-wrap:balance;text-shadow:0 1px 3px rgba(0,0,0,.55);transition:color var(--baas-id-state) var(--baas-id-ease-smooth);pointer-events:none}.rpid-guide-ok{color:#cbf2de}.rpid-guide-warn{color:#f8e5bc}.rpid-flash{position:absolute;inset:0;background:#fff;opacity:0;pointer-events:none;z-index:4}.rpid-shutter .rpid-flash{animation:rpid-flash .3s ease}@keyframes rpid-flash{0%{opacity:0}25%{opacity:.45}to{opacity:0}}.rpid-chips{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}.rpid-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;border:1px solid rgba(22,35,44,.14);background:var(--baas-id-surface);font:600 10px var(--baas-id-mono);letter-spacing:.08em;color:var(--baas-id-muted);transition:border-color .3s,color .3s}.rpid-chip i{width:7px;height:7px;border-radius:50%;background:#16232c2e;transition:background-color .3s}.rpid-chip-pass{color:var(--baas-id-positive);border-color:#177e5459}.rpid-chip-pass i{background:var(--baas-id-positive)}.rpid-chip-fail{color:var(--baas-id-caution);border-color:#99671c59}.rpid-chip-fail i{background:var(--baas-id-caution)}.rpid-telemetry{margin-top:8px;padding:8px 11px;border:1px solid rgba(22,35,44,.13);border-radius:8px;background:var(--baas-id-surface);color:var(--baas-id-muted);font:10px/1.4 var(--baas-id-mono);letter-spacing:.05em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rpid-telemetry .ok{color:var(--baas-id-positive);font-weight:700}.rpid-challenge{display:flex;align-items:center;gap:10px;margin-top:8px;padding:11px 13px;border:1px solid rgba(22,35,44,.13);border-radius:var(--baas-id-radius);background:var(--baas-id-surface);color:var(--baas-id-ink);font:600 13.5px var(--baas-id-font);transition:border-color .3s}.rpid-challenge.pass{border-color:var(--baas-id-positive)}.rpid-challenge .n{width:24px;height:24px;border-radius:50%;flex:none;display:grid;place-items:center;background:var(--baas-id-accent-soft, color-mix(in srgb, var(--baas-id-accent) 11%, var(--baas-id-surface)));color:var(--baas-id-accent);font:700 11px var(--baas-id-mono);transition:background .3s,color .3s}.rpid-challenge.pass .n{background:var(--baas-id-positive);color:#fff}@media (prefers-reduced-motion: reduce){.rpid-flash{animation:none!important}.rpid-guide{transition:none}}.rpid-challenge.active{border-color:var(--baas-id-accent);background:var(--baas-id-accent-soft, color-mix(in srgb, var(--baas-id-accent) 11%, var(--baas-id-surface)))}.rpid-challenge.active .n{background:var(--baas-id-accent);color:#fff;animation:rpid-active-pulse 1.2s ease-in-out infinite}@keyframes rpid-active-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.12)}}@media (prefers-reduced-motion: reduce){.rpid-challenge.active .n{animation:none}}.rpid-mrz{display:flex;align-items:center;gap:8px;margin-top:8px;padding:7px 11px;border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));border-radius:var(--baas-id-radius-sm);background:var(--baas-id-surface);font:600 9.5px var(--baas-id-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--baas-id-muted);transition:border-color var(--baas-id-slow) var(--baas-id-ease)}.rpid-mrz-state{margin-left:auto}.rpid-mrz[data-state=verified]{border-color:color-mix(in srgb,var(--baas-id-positive) 45%,transparent)}.rpid-mrz[data-state=verified] .rpid-mrz-state{color:var(--baas-id-positive)}.rpid-mrz[data-state=unreadable] .rpid-mrz-state{color:var(--baas-id-caution)}.rpid-mrz[data-state=absent] .rpid-mrz-state{color:var(--baas-id-muted)}.rpid-mrz-digits{display:flex;gap:3px}.rpid-mrz-digits i{width:6px;height:6px;border-radius:1px;background:color-mix(in srgb,var(--baas-id-ink) 18%,transparent);transition:background-color var(--baas-id-slow) var(--baas-id-ease)}.rpid-mrz-digits i[data-ok=true]{background:var(--baas-id-positive)}.rpid-mrz-digits i[data-ok=false]{background:var(--baas-id-caution)}.rpid-attempts{margin:8px 0 0;font:600 12px/1.4 var(--baas-id-font);color:var(--baas-id-caution);text-align:center}.rpid-frame{position:absolute;inset:0;z-index:2;width:100%;height:100%;pointer-events:none;overflow:visible}.rpid-frame path{vector-effect:non-scaling-stroke}.rpid-frame-scrim{fill:#0a121775;transition:fill var(--baas-id-state) var(--baas-id-ease-smooth)}.rpid-frame-fill{fill:var(--baas-id-positive-bright);opacity:0;transition:opacity var(--baas-id-state) var(--baas-id-ease-smooth)}.rpid-frame-edge{fill:none;stroke:#ffffff8c;stroke-width:1.5;transition:stroke var(--baas-id-state) var(--baas-id-ease-smooth),opacity var(--baas-id-state)}.rpid-frame-sweep{fill:none;stroke:var(--baas-id-positive-bright);stroke-width:3.5;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:100;transition:stroke-dashoffset .34s linear,opacity var(--baas-id-fast)}.rpid-frame-corner{fill:none;stroke:#ffffffeb;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;transition:stroke var(--baas-id-fast) var(--baas-id-ease-smooth)}.rpid-frame[data-kind=target] .rpid-frame-edge{stroke:#ffffff52}.rpid-frame[data-kind=box] .rpid-frame-edge{stroke:#ffffff9e;stroke-dasharray:5 7}.rpid-frame[data-kind=box] .rpid-frame-corner{stroke:#fffc}.rpid-frame[data-kind=edges] .rpid-frame-fill{opacity:.08}.rpid-frame[data-kind=edges] .rpid-frame-edge{stroke:var(--baas-id-positive-bright);opacity:.8}.rpid-frame[data-kind=edges] .rpid-frame-corner[data-lock=on]{stroke:var(--baas-id-positive-bright)}.rpid-adjusting .rpid-frame[data-kind=edges] .rpid-frame-corner[data-lock=on],.rpid-adjusting .rpid-frame[data-kind=edges] .rpid-frame-edge,.rpid-adjusting .rpid-frame[data-kind=box] .rpid-frame-corner{stroke:var(--baas-id-caution-bright)}.rpid-adjusting .rpid-frame[data-kind=edges] .rpid-frame-fill{fill:var(--baas-id-caution-bright);opacity:.07}.rpid-frame[data-state=holding] .rpid-frame-fill{opacity:.14}.rpid-frame[data-state=holding] .rpid-frame-edge{stroke:#ffffff59}.rpid-frame[data-state=holding] .rpid-frame-corner{stroke:var(--baas-id-positive-bright)}.rpid-frame-flash{fill:#fff;opacity:0;pointer-events:none}.rpid-frame[data-state=locked] .rpid-frame-flash{animation:rpid-frame-flash .26s cubic-bezier(.2,0,0,1) both}@keyframes rpid-frame-flash{0%{opacity:0}22%{opacity:.5}to{opacity:0}}.rpid-frame[data-state=locked] .rpid-frame-scrim{fill:#0a121799}.rpid-frame[data-state=locked] .rpid-frame-fill{animation:rpid-frame-pulse .52s var(--baas-id-ease) both}.rpid-frame[data-state=locked] .rpid-frame-corner,.rpid-frame[data-state=locked] .rpid-frame-sweep{stroke:var(--baas-id-positive-bright)}.rpid-frame[data-state=locked] .rpid-frame-sweep{stroke-dashoffset:0!important;opacity:1!important}@keyframes rpid-frame-pulse{0%{opacity:.14}35%{opacity:.38}to{opacity:.16}}.rpid-frame-lock{animation:rpid-lock-in .42s var(--baas-id-ease) both}.rpid-frame-lock circle{fill:var(--baas-id-positive-bright)}.rpid-frame-lock path{fill:none;stroke:#0b2a1e;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}@keyframes rpid-lock-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}.rpid-snapshot{position:absolute;inset:0;z-index:7;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:18px;background:#0d161ccc;animation:rpid-readback-in .2s var(--baas-id-ease) both}.rpid-snapshot-card{width:min(66%,300px);border-radius:7px;overflow:hidden;box-shadow:0 10px 28px -12px #000c,0 0 0 1px #ffffff14}.rpid-snapshot-card img{display:block;width:100%;height:100%;object-fit:cover;will-change:transform}.rpid-snapshot .rpid-processing-label{margin:0}.rpid-guide-line{display:block}.rpid-guide-hint{display:block;margin-top:3px;font-size:12px;font-weight:400;color:#ffffffd1;animation:rpid-hint-in var(--baas-id-state) var(--baas-id-ease) both}@keyframes rpid-hint-in{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}.rpid-shutter-row{display:flex;align-items:center;gap:12px;margin-top:10px;animation:rpid-hint-in var(--baas-id-state) var(--baas-id-ease) both}.rpid-shutter-btn{display:inline-flex;align-items:center;gap:9px;flex:none;min-height:var(--baas-id-touch);padding:0 18px;border:1px solid var(--baas-id-accent);border-radius:var(--baas-id-radius-pill);background:var(--baas-id-surface);color:var(--baas-id-accent);font:600 14px var(--baas-id-font);cursor:pointer;transition:background-color var(--baas-id-fast) var(--baas-id-ease-smooth)}.rpid-shutter-btn:hover{background:var(--baas-id-accent-soft, color-mix(in srgb, var(--baas-id-accent) 11%, var(--baas-id-surface)))}.rpid-shutter-btn:focus-visible{outline:2px solid var(--baas-id-accent);outline-offset:2px}.rpid-shutter-dot{width:14px;height:14px;border-radius:50%;border:2px solid currentColor;box-shadow:inset 0 0 0 2px var(--baas-id-surface);background:currentColor}.rpid-shutter-note{font:12px/1.35 var(--baas-id-font);color:var(--baas-id-muted)}.rpid-readback{position:absolute;inset:0;z-index:8;display:flex;flex-direction:column;justify-content:space-between;gap:8px;padding:10px;background:radial-gradient(120% 90% at 50% 8%,#24343e 0,#141f26);animation:rpid-readback-in .3s var(--baas-id-ease) both}@keyframes rpid-readback-in{0%{opacity:0}to{opacity:1}}.rpid-readback-card{position:relative;flex:1 1 auto;min-height:0;max-width:100%;max-height:62%;margin:0 auto;border-radius:8px;overflow:hidden;box-shadow:0 8px 22px -12px #000000b3}.rpid-readback-card img{display:block;width:100%;height:100%;object-fit:fill}.rpid-readback-region{position:absolute;border-radius:6px;border:1.5px solid var(--baas-id-positive-bright);background:color-mix(in srgb,var(--baas-id-positive-bright) 16%,transparent);animation:rpid-region-in .38s var(--baas-id-ease) both}.rpid-readback-region em{position:absolute;left:-1px;bottom:calc(100% + 3px);padding:2px 7px;border-radius:var(--baas-id-radius-pill);background:var(--baas-id-positive-bright);color:#0b2a1e;font:600 10.5px/1.4 var(--baas-id-font);font-style:normal;white-space:nowrap}@keyframes rpid-region-in{0%{opacity:0;transform:scale(1.06)}to{opacity:1;transform:none}}.rpid-readback-sheet{flex:none;padding:10px 12px;border-radius:10px;background:color-mix(in srgb,var(--baas-id-surface) 96%,transparent);color:var(--baas-id-ink);animation:rpid-sheet-in .42s .18s var(--baas-id-ease) both}@keyframes rpid-sheet-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.rpid-readback-title{display:flex;align-items:center;gap:6px;margin:0 0 6px;font:600 13px var(--baas-id-font);color:var(--baas-id-positive)}.rpid-readback-note{margin:0;font:12px/1.4 var(--baas-id-font);color:var(--baas-id-muted)}.rpid-readback-fields{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;margin:0}.rpid-readback-fields div{min-width:0}.rpid-readback-fields dt{font:600 10.5px var(--baas-id-font);color:var(--baas-id-muted)}.rpid-readback-fields dd{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 6px;margin:1px 0 0;font:600 13px var(--baas-id-font);color:var(--baas-id-ink)}.rpid-readback-fields dd>span{min-width:0;overflow-wrap:anywhere}.rpid-readback-fields dd small{flex:none;padding:0 6px;border-radius:var(--baas-id-radius-pill);background:color-mix(in srgb,var(--baas-id-caution) 14%,transparent);color:var(--baas-id-caution);font:600 10px/1.6 var(--baas-id-font)}@media (prefers-reduced-motion: reduce){.rpid-frame-scrim,.rpid-frame-fill,.rpid-frame-edge,.rpid-frame-sweep,.rpid-frame-corner{transition-duration:.12s}.rpid-frame[data-state] .rpid-frame-corner,.rpid-frame-lock,.rpid-frame[data-state=locked] .rpid-frame-fill{animation:none}.rpid-frame[data-state=locked] .rpid-frame-flash{animation-name:rpid-frame-flash-soft}@keyframes rpid-frame-flash-soft{0%{opacity:0}30%{opacity:.18}to{opacity:0}}.rpid-frame[data-state=locked] .rpid-frame-fill{opacity:.3}.rpid-guide-hint,.rpid-shutter-row,.rpid-readback,.rpid-readback-region,.rpid-readback-sheet,.rpid-snapshot{animation:none}}@media (max-width: 640px){.rpid-viewport.rpid-doc{aspect-ratio:6 / 5}}.rpid-retake{margin-top:10px;padding:12px 14px;border-radius:var(--baas-id-radius);border:1px solid color-mix(in srgb,var(--baas-id-caution) 35%,transparent);background:color-mix(in srgb,var(--baas-id-caution) 8%,var(--baas-id-surface));color:var(--baas-id-ink)}.rpid-retake-hint{border-color:var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));background:var(--baas-id-surface)}.rpid-retake-title{display:flex;align-items:center;gap:8px;margin:0;font:650 14.5px/1.35 var(--baas-id-font);color:color-mix(in srgb,var(--baas-id-caution) 80%,var(--baas-id-ink))}.rpid-retake-hint .rpid-retake-title{color:var(--baas-id-ink)}.rpid-retake-title svg{flex:none}.rpid-retake-body{margin:5px 0 0;font:13.5px/1.45 var(--baas-id-font);color:var(--baas-id-ink)}.rpid-retake-fields{margin:5px 0 0;font:600 12.5px/1.4 var(--baas-id-font);color:var(--baas-id-muted)}.rpid-retake-actions{display:grid;gap:8px;margin-top:4px}.rpid-retake-actions .rpid-action{margin-top:6px}.rpid-action-quiet{background:transparent;border-color:var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));color:var(--baas-id-ink)}.rpid-readback-outline{position:absolute;pointer-events:none;border:2px solid var(--baas-id-positive-bright);border-radius:4.5%/7%;box-shadow:0 0 0 1px #00000059}.rpid-readback[data-rpid-confirm]{justify-content:center;padding:12px}.rpid-readback[data-rpid-confirm] .rpid-readback-card{max-height:100%}.rpid-readback-sheet-below{background:var(--baas-id-sunken, color-mix(in srgb, var(--baas-id-ink) 4%, var(--baas-id-surface)));border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));animation-delay:0s}.rpid-confirm-actions{display:grid;grid-template-columns:1fr 1.4fr;gap:10px}.rpid-confirm-actions .rpid-action{margin-top:0}@media (max-width: 340px){.rpid-confirm-actions{grid-template-columns:1fr}.rpid-confirm-actions .rpid-action-primary{order:-1}}@media (orientation: landscape) and (max-height: 500px){.rpid-flow[data-rpid-step=doc]{max-width:52rem}.rpid-doc-capture{display:grid;grid-template-columns:auto minmax(12rem,1fr);grid-template-rows:repeat(7,auto) 1fr;column-gap:16px;row-gap:8px;align-items:start}.rpid-doc-capture>.rpid-viewport.rpid-doc{grid-column:1;grid-row:1 / -1;aspect-ratio:4 / 3;width:min(58vw,calc((100svh - 2rem) * 4 / 3))}.rpid-doc-capture>:not(.rpid-viewport){grid-column:2;min-width:0}.rpid-doc-capture .rpid-confirm-actions{grid-template-columns:1fr}.rpid-doc-capture .rpid-confirm-actions .rpid-action-primary{order:-1}}.rpid-confirm-head{display:flex;flex-direction:column;gap:2px;margin:2px 0 10px}.rpid-confirm-title{margin:0;font:600 15px/1.3 var(--baas-id-font);color:var(--baas-id-ink);text-wrap:balance}.rpid-confirm-hint{margin:0;font:13px/1.4 var(--baas-id-font);color:var(--baas-id-muted)}@media (orientation: landscape) and (max-height: 500px){.rpid-doc-capture>.rpid-confirm-head{grid-column:2}}.rpid-flow{display:flex;flex-direction:column;gap:14px;width:100%;max-width:27rem;margin-inline:auto;color:var(--baas-id-ink);font-family:var(--baas-id-font)}.rpid-flow-title{margin:0;font:600 1.375rem/1.25 var(--baas-id-font);letter-spacing:-.02em;text-wrap:balance}.rpid-rail{display:flex;align-items:center;gap:0;margin:0;padding:0;list-style:none;counter-reset:none}.rpid-rail-item{display:flex;align-items:center;gap:6px;flex:none;font:500 12.5px/1 var(--baas-id-font);color:var(--baas-id-muted)}.rpid-rail-item+.rpid-rail-item:before{content:"";flex:none;width:clamp(10px,4vw,24px);height:1px;margin:0 8px;background:var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent))}.rpid-rail-item[data-state=done]+.rpid-rail-item:before{background:color-mix(in srgb,var(--baas-id-positive) 55%,transparent)}.rpid-rail-mark{display:grid;place-items:center;flex:none;width:20px;height:20px;border-radius:50%;border:1.5px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));font:600 11px/1 var(--baas-id-font);font-variant-numeric:tabular-nums;color:var(--baas-id-muted);transition:background-color var(--baas-id-slow) var(--baas-id-ease),border-color var(--baas-id-slow) var(--baas-id-ease),color var(--baas-id-slow) var(--baas-id-ease)}.rpid-rail-label{white-space:nowrap}.rpid-rail-item[data-state=active]{color:var(--baas-id-ink);font-weight:600}.rpid-rail-item[data-state=active] .rpid-rail-mark{border-color:var(--baas-id-ink);background:var(--baas-id-ink);color:var(--baas-id-surface)}.rpid-rail-item[data-state=done]{color:var(--baas-id-positive)}.rpid-rail-item[data-state=done] .rpid-rail-mark{border-color:var(--baas-id-positive);background:var(--baas-id-positive);color:#fff}.rpid-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.rpid-flow[data-rpid-step=doc],.rpid-flow[data-rpid-step=face]{gap:10px}.rpid-flow[data-rpid-step=doc] .rpid-flow-title{font-size:1.125rem}.rpid-flow[data-rpid-step=doc] .rpid-privacy{margin-top:2px}.rpid-flow{padding-inline:env(safe-area-inset-left,0px) env(safe-area-inset-right,0px)}.rpid-flow[data-rpid-step=doc] .rpid-evidence-slot{width:96px}.rpid-flow[data-rpid-step=doc] .rpid-evidence-label{padding:3px 4px;font-size:9px}.rpid-evidence{display:flex;gap:10px;margin:0;padding:0;list-style:none}.rpid-evidence-slot{width:124px;overflow:hidden;border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));border-radius:var(--baas-id-radius-sm);background:var(--baas-id-surface);transition:border-color var(--baas-id-slow) var(--baas-id-ease)}.rpid-evidence-slot[data-filled=false]{border-style:dashed;background:var(--baas-id-sunken, color-mix(in srgb, var(--baas-id-ink) 4%, var(--baas-id-surface)))}.rpid-evidence-slot[data-filled=true]{border-color:color-mix(in srgb,var(--baas-id-positive) 45%,transparent)}.rpid-evidence-slot img{display:block;width:100%;aspect-ratio:1.585;object-fit:cover}.rpid-evidence-empty{display:grid;place-items:center;width:100%;aspect-ratio:1.585;color:color-mix(in srgb,var(--baas-id-muted) 55%,transparent)}.rpid-evidence-label{display:flex;align-items:center;justify-content:center;gap:4px;padding:5px 6px;font:600 9.5px var(--baas-id-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--baas-id-muted)}.rpid-evidence-slot[data-filled=true] .rpid-evidence-label{color:var(--baas-id-positive);background:var(--baas-id-positive-soft, color-mix(in srgb, var(--baas-id-positive) 10%, var(--baas-id-surface)))}.rpid-preparing{display:flex;flex-direction:column;gap:10px}.rpid-preparing-viewport{position:relative;overflow:hidden;aspect-ratio:4 / 3;border-radius:var(--baas-id-radius);background:var(--baas-id-sunken, color-mix(in srgb, var(--baas-id-ink) 4%, var(--baas-id-surface)));border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent))}.rpid-preparing-sweep{position:absolute;inset:0;background:linear-gradient(100deg,transparent 20%,color-mix(in srgb,var(--baas-id-accent) 9%,transparent) 45%,transparent 70%);animation:rpid-sweep 1.5s var(--baas-id-ease) infinite}@keyframes rpid-sweep{0%{transform:translate(-70%)}to{transform:translate(70%)}}.rpid-preparing-label{margin:0;font-size:13.5px;color:var(--baas-id-ink)}.rpid-preparing-note{margin:0;font-size:11px;color:var(--baas-id-muted)}.rpid-verdict{display:flex;flex-direction:column;align-items:center;gap:12px;padding:22px 18px;border:1px solid color-mix(in srgb,var(--baas-id-positive) 40%,transparent);border-radius:var(--baas-id-radius);background:var(--baas-id-surface);box-shadow:0 10px 26px -18px color-mix(in srgb,var(--baas-id-ink) 60%,transparent)}.rpid-seal{display:grid;place-items:center;width:54px;height:54px;border-radius:50%;background:var(--baas-id-positive);color:#fff}.rpid-seal svg{stroke-dasharray:26;stroke-dashoffset:0;animation:rpid-draw .42s var(--baas-id-ease)}@keyframes rpid-draw{0%{stroke-dashoffset:26}to{stroke-dashoffset:0}}.rpid-verdict-title{margin:0;font:600 1.25rem/1.2 var(--baas-id-font);letter-spacing:-.02em;color:var(--baas-id-positive)}.rpid-verdict-facts{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 22px;margin:0}.rpid-verdict-facts div{text-align:center}.rpid-verdict-facts dt{font:600 9.5px var(--baas-id-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--baas-id-muted)}.rpid-verdict-facts dd{margin:2px 0 0;font-size:12.5px;font-weight:600}.rpid-failure{display:flex;flex-direction:column;gap:6px;padding:15px 16px;border:1px solid color-mix(in srgb,var(--baas-id-negative) 35%,transparent);border-radius:var(--baas-id-radius);background:var(--baas-id-negative-soft, color-mix(in srgb, var(--baas-id-negative) 9%, var(--baas-id-surface)))}.rpid-failure-message{display:flex;align-items:flex-start;gap:9px;margin:0;font:600 13.5px/1.45 var(--baas-id-font);color:color-mix(in srgb,var(--baas-id-negative) 82%,var(--baas-id-ink))}.rpid-failure-message svg{flex:none;margin-top:1px}.rpid-failure-note{margin:0;font-size:12px;color:var(--baas-id-muted)}.rpid-failure-code{margin:2px 0 0;font:10px var(--baas-id-mono);letter-spacing:.06em;color:color-mix(in srgb,var(--baas-id-muted) 80%,transparent)}.rpid-notice{margin:0;padding:9px 12px;border-radius:var(--baas-id-radius-sm);background:color-mix(in srgb,var(--baas-id-caution) 10%,var(--baas-id-surface));color:color-mix(in srgb,var(--baas-id-caution) 85%,var(--baas-id-ink));font:600 12.5px/1.45 var(--baas-id-font)}.rpid-lede{margin:0;font-size:12.5px;line-height:1.45;color:var(--baas-id-muted)}.rpid-outcome{display:flex;flex-direction:column;align-items:center;gap:8px;padding:20px 18px;text-align:center;border:1px solid color-mix(in srgb,var(--baas-id-muted) 30%,transparent);border-radius:var(--baas-id-radius);background:var(--baas-id-surface)}.rpid-outcome-mark{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;background:color-mix(in srgb,var(--baas-id-muted) 14%,var(--baas-id-surface));color:var(--baas-id-muted)}.rpid-outcome-title{margin:0;font:600 1.1rem/1.25 var(--baas-id-font);letter-spacing:-.01em;color:var(--baas-id-ink)}.rpid-outcome-note{margin:0;font-size:12.5px;line-height:1.45;color:var(--baas-id-muted)}.rpid-privacy{display:flex;align-items:flex-start;gap:7px;margin:2px 0 0;font-size:11px;line-height:1.5;color:var(--baas-id-muted)}.rpid-privacy svg{flex:none;margin-top:2px}.rpid-consent{display:flex;flex-direction:column;gap:12px}.rpid-consent-option{display:flex;align-items:flex-start;gap:10px;font-size:14px;line-height:1.5;cursor:pointer}.rpid-consent-option input{flex:none;width:18px;height:18px;margin-top:2px;accent-color:var(--baas-id-accent)}.rpid-consent-link{display:inline-flex;align-items:center;min-height:44px;margin-block:-12px;font-size:13px;color:inherit;text-decoration:underline;align-self:flex-start}@media (prefers-reduced-motion: reduce){.rpid-preparing-sweep{animation:none}.rpid-seal svg{animation:none}.rpid-rail-item,.rpid-evidence-slot,.rpid-retry,.rpid-action{transition:none}}.rpid-flow-title:focus{outline:none}.rpid-rail-mark{position:relative}.rpid-rail-warn{position:absolute;top:-3px;right:-3px;width:8px;height:8px;border-radius:50%;background:var(--baas-id-caution-bright, #E0A43A);box-shadow:0 0 0 2px var(--baas-id-surface)}.rpid-retake-notice{display:flex;align-items:flex-start;gap:8px;margin-bottom:8px;font-weight:500}.rpid-retake-notice svg{flex:none;margin-top:2px}.rpid-retake-notice strong{font-weight:650}.rpid-failure-title{margin:0 0 4px;font:650 14.5px/1.35 var(--baas-id-font);color:var(--baas-id-ink)}.rpid-engine{position:absolute;inset:0;z-index:6;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:24px;background:#0d161cd1;backdrop-filter:blur(3px);text-align:center}.rpid-engine-stage{margin:0;color:#fff;font:600 13.5px/1.35 var(--baas-id-font)}.rpid-engine-track{position:relative;overflow:hidden;width:min(200px,70%);height:4px;border-radius:999px;background:#ffffff2e}.rpid-engine-track i{display:block;height:100%;border-radius:999px;background:var(--baas-id-positive-bright);transition:width .24s var(--baas-id-ease)}.rpid-engine-indeterminate i{width:38%;animation:rpid-engine-slide 1.25s var(--baas-id-ease) infinite}@keyframes rpid-engine-slide{0%{transform:translate(-110%)}to{transform:translate(370%)}}.rpid-engine-note{display:flex;flex-direction:column;align-items:center;gap:3px;margin:0;color:#ffffffb8;font:10.5px/1.45 var(--baas-id-mono);letter-spacing:.04em;max-width:30ch}.rpid-engine-note .rpid-num{color:#fff;font-weight:700;font-size:12px}.rpid-meters{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px}@media (max-width: 359px){.rpid-meters{grid-template-columns:1fr}}.rpid-meter{padding:9px 11px;border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));border-radius:var(--baas-id-radius-sm);background:var(--baas-id-surface);transition:border-color var(--baas-id-slow) var(--baas-id-ease)}.rpid-meter[data-state=pass]{border-color:color-mix(in srgb,var(--baas-id-positive) 45%,transparent)}.rpid-meter-head{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:0 8px;min-height:2.1em;margin-bottom:6px}.rpid-meter-head .rpid-meter-value{white-space:nowrap}.rpid-meter-label{font:600 9px var(--baas-id-mono);letter-spacing:.13em;text-transform:uppercase;color:var(--baas-id-muted)}.rpid-meter-value{font:700 11.5px var(--baas-id-mono);color:var(--baas-id-ink)}.rpid-meter[data-state=pass] .rpid-meter-value{color:var(--baas-id-positive)}.rpid-meter-track{position:relative;height:4px;border-radius:999px;background:color-mix(in srgb,var(--baas-id-ink) 10%,transparent)}.rpid-meter-target{position:absolute;top:-2px;bottom:-2px;width:2px;border-radius:1px;background:color-mix(in srgb,var(--baas-id-ink) 34%,transparent)}.rpid-meter[data-state=pass] .rpid-meter-target{opacity:0}.rpid-meter-track i:first-child{border-radius:999px}.rpid-meter-track i{display:block;height:100%;border-radius:999px;background:var(--baas-id-accent);transition:width .18s var(--baas-id-ease),background-color var(--baas-id-slow) var(--baas-id-ease)}.rpid-meter[data-state=pass] .rpid-meter-track i{background:var(--baas-id-positive)}.rpid-band{position:relative;height:4px;border-radius:999px;background:color-mix(in srgb,var(--baas-id-ink) 10%,transparent)}.rpid-band-zone{position:absolute;top:0;bottom:0;border-radius:999px;background:color-mix(in srgb,var(--baas-id-positive) 30%,transparent)}.rpid-band-marker{position:absolute;top:50%;width:9px;height:9px;border-radius:50%;transform:translate(-50%,-50%);background:var(--baas-id-caution);border:2px solid var(--baas-id-surface);box-shadow:0 1px 3px #16232c4d;transition:left .18s var(--baas-id-ease),background-color var(--baas-id-slow) var(--baas-id-ease)}.rpid-band[data-hint=ideal] .rpid-band-marker{background:var(--baas-id-positive)}.rpid-band[data-blocking=true] .rpid-band-marker{background:var(--baas-id-negative)}.rpid-band-ends{display:flex;justify-content:space-between;margin-top:4px;font:8.5px var(--baas-id-mono);letter-spacing:.1em;text-transform:uppercase;color:color-mix(in srgb,var(--baas-id-muted) 75%,transparent)}.rpid-processing{position:absolute;inset:0;z-index:7;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;padding:24px;background:#0d161cc7;backdrop-filter:blur(3px);text-align:center}.rpid-processing-bar{position:relative;overflow:hidden;width:min(190px,66%);height:4px;border-radius:999px;background:#ffffff2e}.rpid-processing-bar i{display:block;width:40%;height:100%;border-radius:999px;background:var(--baas-id-positive-bright);animation:rpid-processing-slide 1.15s var(--baas-id-ease) infinite}@keyframes rpid-processing-slide{0%{transform:translate(-110%)}to{transform:translate(360%)}}.rpid-processing-label{margin:0;color:#fff;font:600 13.5px/1.35 var(--baas-id-font)}.rpid-processing-note{margin:0;max-width:30ch;color:#ffffffb3;font:11px/1.45 var(--baas-id-font)}@media (prefers-reduced-motion: reduce){.rpid-processing-bar i{animation:none;width:100%;opacity:.55}}.rpid-turn{display:flex;align-items:center;gap:11px;margin-top:8px;padding:10px 12px;border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));border-radius:var(--baas-id-radius);background:var(--baas-id-surface);transition:border-color var(--baas-id-slow) var(--baas-id-ease)}.rpid-turn[data-state=pass]{border-color:var(--baas-id-positive)}.rpid-turn[data-state=wrong]{border-color:color-mix(in srgb,var(--baas-id-caution) 55%,transparent)}.rpid-turn[data-dir=right]{flex-direction:row-reverse}.rpid-turn-arrows{display:flex;flex:none;color:var(--baas-id-accent)}.rpid-turn[data-state=pass] .rpid-turn-arrows{color:var(--baas-id-positive)}.rpid-turn[data-state=wrong] .rpid-turn-arrows{color:var(--baas-id-caution)}.rpid-turn[data-dir=right] .rpid-turn-arrows{flex-direction:row-reverse}.rpid-chevron{opacity:.22;transition:opacity .18s var(--baas-id-ease);margin-inline:-3px}.rpid-chevron.lit{opacity:1}.rpid-turn[data-state=active] .rpid-chevron:not(.lit){animation:rpid-beckon 1.4s var(--baas-id-ease) infinite}@keyframes rpid-beckon{0%,to{opacity:.18}50%{opacity:.5}}.rpid-turn-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}.rpid-turn-label{font:600 12.5px/1.3 var(--baas-id-font);color:var(--baas-id-ink);text-wrap:balance}.rpid-turn-track{height:4px;border-radius:999px;overflow:hidden;background:color-mix(in srgb,var(--baas-id-ink) 10%,transparent)}.rpid-turn-track i{display:block;height:100%;border-radius:999px;background:var(--baas-id-accent);transition:width .18s var(--baas-id-ease),background-color var(--baas-id-slow) var(--baas-id-ease)}.rpid-turn[data-state=pass] .rpid-turn-track i{background:var(--baas-id-positive)}.rpid-turn[data-state=wrong] .rpid-turn-track i{background:var(--baas-id-caution)}.rpid-turn-pct{flex:none;font:700 12px var(--baas-id-mono);color:var(--baas-id-muted)}.rpid-turn[data-state=pass] .rpid-turn-pct{color:var(--baas-id-positive)}@media (prefers-reduced-motion: reduce){.rpid-engine-indeterminate i{animation:none;width:100%;opacity:.5}.rpid-chevron,.rpid-turn[data-state=active] .rpid-chevron:not(.lit){animation:none}.rpid-engine-track i,.rpid-meter-track i,.rpid-turn-track i,.rpid-band-marker{transition:none}}.rpid-turn[data-state=unreadable]{border-color:color-mix(in srgb,var(--baas-id-muted) 40%,transparent)}.rpid-turn[data-state=unreadable] .rpid-turn-arrows{color:var(--baas-id-muted)}.rpid-turn[data-state=unreadable] .rpid-turn-track i{background:var(--baas-id-muted)}.rpid-turn-track{position:relative}.rpid-turn-mark{position:absolute;top:-2px;bottom:-2px;width:2px;border-radius:1px;background:color-mix(in srgb,var(--baas-id-ink) 22%,transparent)}.rpid-turn[data-state=pass] .rpid-turn-mark{opacity:0}.rpid-turn[data-state=pass]{animation:rpid-turn-accept var(--baas-id-state) var(--baas-id-ease)}@keyframes rpid-turn-accept{0%{transform:scale(1)}45%{transform:scale(1.018)}to{transform:scale(1)}}.rpid-turn-label{transition:color var(--baas-id-fast) var(--baas-id-ease-smooth)}@media (prefers-reduced-motion: reduce){.rpid-turn[data-state=pass]{animation:none}.rpid-turn-mark{transition:none}}.rpid-dial{position:absolute;inset:-6%;z-index:4;width:112%;height:112%;pointer-events:none;overflow:visible}.rpid-dial-tick{stroke:#ffffff42;stroke-width:1.6;stroke-linecap:round;vector-effect:non-scaling-stroke;transition:stroke var(--baas-id-fast) var(--baas-id-ease-smooth)}.rpid-dial-tick[data-axis=center]{stroke:#ffffff80;stroke-width:2}.rpid-dial-tick[data-state=lit]{stroke:#fff;stroke-width:2.2}.rpid-dial-tick[data-state=goal]{stroke:var(--baas-id-caution-bright);stroke-width:2.6}.rpid-dial-tick[data-state=done]{stroke:var(--baas-id-positive-bright);stroke-width:2.4}.rpid-dial[data-state=unreadable] .rpid-dial-tick{stroke:#ffffff29}.rpid-dial-cursor{stroke:#fff;stroke-width:3.4;stroke-linecap:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 4px rgba(255,255,255,.55));transition:all 90ms linear}.rpid-dial[data-state=done] .rpid-dial-cursor{stroke:var(--baas-id-positive-bright);filter:drop-shadow(0 0 6px rgba(111,208,168,.7))}.rpid-dial[data-state=done]{animation:rpid-dial-accept var(--baas-id-state) var(--baas-id-ease);transform-origin:50% 48%}@keyframes rpid-dial-accept{0%{transform:scale(1)}40%{transform:scale(1.035)}to{transform:scale(1)}}@media (prefers-reduced-motion: reduce){.rpid-dial[data-state=done]{animation:none}.rpid-dial-cursor,.rpid-dial-tick{transition:none}}.rpid-viewport.rpid-face{aspect-ratio:var(--rpid-video-ar, .5625);width:min(100%,calc(72vh * var(--rpid-video-ar, .5625)));width:min(100%,calc(var(--baas-id-face-max-h, 72svh) * var(--rpid-video-ar, .5625)));margin-inline:auto;background:#0e171c}.rpid-viewport.rpid-face video,.rpid-viewport.rpid-face canvas{object-fit:contain}@media (orientation: portrait){.rpid-viewport.rpid-face{width:min(100%,calc(var(--baas-id-face-max-h, max(18rem, min(72svh, 100svh - 20rem))) * var(--rpid-video-ar, .5625)))}}.rpid-face-guide{position:absolute;inset:0;z-index:2;pointer-events:none;--scan-ok: var(--baas-id-scan-ok, var(--baas-id-positive-bright));--scan-adjust: var(--baas-id-scan-adjust, var(--baas-id-caution-bright));--scan-idle: var(--baas-id-scan-idle, rgba(255, 255, 255, .72));--scan-spring-ms: 631ms}.rpid-viewport.rpid-face canvas.rpid-face-mesh,.rpid-face-under,.rpid-face-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}.rpid-face-tone{display:none;color:var(--baas-id-scan-mesh, #FFFFFF)}.rpid-face-guide[data-locked] .rpid-face-tone{color:color-mix(in srgb,var(--scan-ok) 45%,var(--baas-id-scan-mesh, #FFFFFF))}.rpid-viewport.rpid-face.rpid-uploading>canvas:not(.rpid-face-mesh){visibility:visible!important;transform:scaleX(-1)}.rpid-face-scrim{fill:var(--baas-id-scan-scrim, rgba(8, 13, 17, .55));transition:fill .4s var(--baas-id-ease-smooth)}.rpid-face-guide[data-light] .rpid-face-scrim{fill:var(--baas-id-face-fill-light, rgba(246, 248, 249, .94))}.rpid-face-guide[data-scan=done] .rpid-face-scrim,.rpid-face-guide[data-scan=error] .rpid-face-scrim{fill:var(--baas-id-scan-scrim, rgba(8, 13, 17, .62))}.rpid-face-oval{fill:none;stroke:var(--scan-idle);stroke-width:2;transition:stroke var(--baas-id-slow) var(--baas-id-ease-smooth)}.rpid-face-guide[data-scan=searching] .rpid-face-oval{stroke-width:1.5;stroke-linecap:round;animation:rpid-scan-drift 9s linear infinite}@keyframes rpid-scan-drift{to{stroke-dashoffset:-110}}.rpid-face-guide[data-scan=position] .rpid-face-oval,.rpid-face-guide[data-scan=distance] .rpid-face-oval,.rpid-face-guide[data-scan=error] .rpid-face-oval{stroke:var(--scan-adjust)}.rpid-face-guide[data-scan=light] .rpid-face-oval,.rpid-face-guide[data-scan=steady] .rpid-face-oval{stroke:#ffffffe6}.rpid-face-guide[data-light] .rpid-face-oval{stroke:#0e171c8c}.rpid-face-guide[data-locked] .rpid-face-oval{stroke:color-mix(in srgb,var(--scan-ok) 70%,transparent)}.rpid-face-halo{opacity:0;transform:scale(1.06);transition:opacity .16s ease-in,transform .16s ease-in}.rpid-face-guide[data-locked] .rpid-face-halo{opacity:1;transform:scale(1);transition:opacity .24s var(--baas-id-ease),transform var(--scan-spring-ms) var(--baas-id-ease);transition:opacity .24s var(--baas-id-ease),transform var(--scan-spring-ms) linear(0,.037,.129,.249,.38,.508,.626,.729,.815,.884,.937,.976,1.003,1.02,1.03,1.035,1.035,1.033,1.029,1.025,1.02,1.016,1.012,1.008,1.006,1.003,1.002,1,1)}.rpid-face-glow{fill:none;stroke:var(--scan-ok);stroke-width:10;opacity:.1;transition:opacity var(--baas-id-state) var(--baas-id-ease-smooth)}.rpid-face-guide[data-scan=done] .rpid-face-glow{opacity:.2}.rpid-face-seg-track,.rpid-face-seg,.rpid-face-glint{fill:none;stroke-linecap:round}.rpid-face-seg-track{stroke:#fff3;stroke-width:3.5}.rpid-face-seg{stroke:var(--scan-ok);stroke-width:3.5;transition:stroke-dasharray .22s var(--baas-id-ease),stroke-dashoffset .32s var(--baas-id-ease)}.rpid-face-glint{stroke:#fff;stroke-width:7;opacity:0;animation:rpid-scan-glint .64s var(--baas-id-ease) both}@keyframes rpid-scan-glint{0%{opacity:0}30%{opacity:.75}to{opacity:0}}.rpid-face-arc-track,.rpid-face-arc{fill:none;stroke-width:5;stroke-linecap:round}.rpid-face-arc-track{stroke:#ffffff38}.rpid-face-arc{stroke:var(--scan-ok);transition:stroke-dasharray .18s var(--baas-id-ease),stroke var(--baas-id-slow) var(--baas-id-ease-smooth)}.rpid-face-cue-turn[data-tone=wrong] .rpid-face-arc{stroke:var(--scan-adjust)}.rpid-face-cue-turn>g{transition:opacity var(--baas-id-slow) var(--baas-id-ease-smooth)}.rpid-face-chevron{fill:none;stroke:#fff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;animation:rpid-chevron 1.2s var(--baas-id-ease) infinite}.rpid-face-cue-turn[data-tone=wrong] .rpid-face-chevron{stroke:var(--scan-adjust)}@keyframes rpid-chevron{0%{opacity:.15;transform:translate(-3px)}45%{opacity:1;transform:translate(2px)}to{opacity:.15;transform:translate(6px)}}.rpid-face-ripple{fill:none;stroke:var(--scan-ok);stroke-width:1.5;opacity:0;animation:rpid-ripple 1.6s var(--baas-id-ease) infinite}.rpid-face-ripple-2{animation-delay:.8s}@keyframes rpid-ripple{0%{opacity:.55;transform:scale(1)}to{opacity:0;transform:scale(1.08)}}.rpid-face-done-disc{fill:var(--scan-ok)}.rpid-face-done-check{fill:none;stroke:#0b2a1e;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:0;animation:rpid-check-draw .28s var(--baas-id-ease) .16s both}@keyframes rpid-check-draw{0%{stroke-dashoffset:1}to{stroke-dashoffset:0}}.rpid-face-done{animation:rpid-done-in .52s var(--baas-id-ease) 60ms both;animation:rpid-done-in .52s linear(0,.037,.129,.249,.38,.508,.626,.729,.815,.884,.937,.976,1.003,1.02,1.03,1.035,1.035,1.033,1.029,1.025,1.02,1.016,1.012,1.008,1.006,1.003,1.002,1,1) 60ms both}@keyframes rpid-done-in{0%{opacity:0;transform:scale(.72)}to{opacity:1;transform:scale(1)}}.rpid-face-guide[data-scan=error] .rpid-face-shake{animation:rpid-scan-shake .42s var(--baas-id-ease-smooth) 1}@keyframes rpid-scan-shake{0%,to{transform:translate(0)}20%{transform:translate(-5px)}40%{transform:translate(4px)}60%{transform:translate(-2px)}80%{transform:translate(1px)}}@media (prefers-reduced-motion: reduce){.rpid-face-guide[data-scan=searching] .rpid-face-oval,.rpid-face-guide[data-scan=error] .rpid-face-shake,.rpid-face-chevron,.rpid-face-glint{animation:none}.rpid-face-chevron{opacity:1}.rpid-face-glint{display:none}.rpid-face-ripple{animation:none;opacity:.5;transform:scale(1.05)}.rpid-face-ripple-2{display:none}.rpid-face-halo,.rpid-face-guide[data-locked] .rpid-face-halo{transform:none;transition:opacity .15s var(--baas-id-ease-smooth)}.rpid-face-seg{transition:stroke-dasharray .12s linear,stroke-dashoffset .12s linear}.rpid-face-arc{transition:stroke-dasharray .12s linear}.rpid-face-done{animation:rpid-fade-in .15s var(--baas-id-ease-smooth) both}.rpid-face-done-check{animation:none}.rpid-face-oval,.rpid-face-scrim,.rpid-face-glow{transition-duration:.15s}}@keyframes rpid-fade-in{0%{opacity:0}to{opacity:1}}@media (orientation: landscape) and (max-height: 500px){.rpid-flow[data-rpid-step=face]:has(.rpid-viewport.rpid-face){display:grid;max-width:52rem;grid-template-columns:auto minmax(13rem,1fr);grid-template-rows:repeat(8,auto) 1fr;column-gap:16px;row-gap:8px;align-items:start}.rpid-flow[data-rpid-step=face]>.baas-id-scope:has(>.rpid-viewport.rpid-face){display:contents}.rpid-flow[data-rpid-step=face] .rpid-viewport.rpid-face{grid-column:1;grid-row:1 / -1;margin:0;width:min(56vw,calc(var(--baas-id-face-max-h, calc(100svh - 2rem) ) * var(--rpid-video-ar, .5625)))}.rpid-flow[data-rpid-step=face]:has(.rpid-viewport.rpid-face)>*:not(.baas-id-scope),.rpid-flow[data-rpid-step=face]>.baas-id-scope:has(>.rpid-viewport.rpid-face)>:not(.rpid-viewport){grid-column:2;min-width:0}}.rpid-flow[data-rpid-surface]{background:var(--baas-id-surface);padding:16px;border-radius:var(--baas-id-radius)}.rpid-logo{display:block;height:28px;width:auto;max-width:60%;object-fit:contain;object-position:left center}.rpid-intro{display:flex;flex-direction:column;gap:14px;animation:rpid-intro-in var(--baas-id-state) var(--baas-id-ease) both}@keyframes rpid-intro-in{0%{opacity:0;transform:translateY(6px)}}.rpid-intro-glyph{display:block;width:100%;height:auto;max-height:132px;aspect-ratio:160 / 96;padding:10px 0;border-radius:var(--baas-id-radius);background:var(--baas-id-sunken, color-mix(in srgb, var(--baas-id-ink) 4%, var(--baas-id-surface)));border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent))}.rpid-intro-card,.rpid-intro-frame{fill:var(--baas-id-surface);stroke:var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));stroke-width:1.5}.rpid-intro-fill{fill:color-mix(in srgb,var(--baas-id-ink) 14%,var(--baas-id-surface))}.rpid-intro-line,.rpid-intro-ink{fill:none;stroke:color-mix(in srgb,var(--baas-id-ink) 30%,var(--baas-id-surface));stroke-width:3;stroke-linecap:round}.rpid-intro-ink{fill:color-mix(in srgb,var(--baas-id-ink) 55%,var(--baas-id-surface));stroke:none}.rpid-intro-bracket,.rpid-intro-ring,.rpid-intro-cue{fill:none;stroke:var(--baas-id-accent);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}.rpid-intro-ring{stroke-dasharray:22 3;stroke-width:2;opacity:.85}.rpid-intro-cue{opacity:.55;stroke-width:2}.rpid-intro-lede{margin:0;font:400 14.5px/1.5 var(--baas-id-font);color:var(--baas-id-ink);text-wrap:pretty}.rpid-intro-needs{display:flex;flex-direction:column;gap:8px;padding:12px 14px;border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));border-radius:var(--baas-id-radius-sm);background:var(--baas-id-surface)}.rpid-intro-label{margin:0;font:600 11px/1.3 var(--baas-id-font);letter-spacing:.06em;text-transform:uppercase;color:var(--baas-id-muted)}.rpid-intro-needs ul{display:flex;flex-direction:column;gap:7px;margin:0;padding:0;list-style:none}.rpid-intro-needs li{display:grid;grid-template-columns:18px 1fr;align-items:start;gap:8px;font:500 13.5px/1.4 var(--baas-id-font);color:var(--baas-id-ink)}.rpid-intro-needs li svg{margin-top:2px;color:var(--baas-id-positive)}.rpid-intro-time{display:grid;grid-template-columns:18px 1fr;align-items:start;gap:8px;color:var(--baas-id-muted)}.rpid-intro-time svg{margin-top:2px}.rpid-intro-time p{margin:0;font:400 12.5px/1.45 var(--baas-id-font)}.rpid-action.rpid-action-primary{border-color:var(--baas-id-accent);background:var(--baas-id-accent);color:var(--baas-id-surface);font-size:14.5px}.rpid-action.rpid-action-primary:hover{border-color:color-mix(in srgb,var(--baas-id-accent) 82%,var(--baas-id-ink));background:color-mix(in srgb,var(--baas-id-accent) 82%,var(--baas-id-ink))}@media (prefers-reduced-motion: reduce){.rpid-intro{animation:none}}.rpid-handoff{display:flex;flex-direction:column;gap:14px;animation:rpid-intro-in var(--baas-id-state) var(--baas-id-ease) both}.rpid-handoff-why{display:flex;flex-direction:column;gap:7px;margin:0;padding:0;list-style:none}.rpid-handoff-why li{display:grid;grid-template-columns:18px 1fr;align-items:start;gap:8px;font:500 13.5px/1.4 var(--baas-id-font);color:var(--baas-id-ink)}.rpid-handoff-why li svg{margin-top:2px;color:var(--baas-id-positive)}.rpid-handoff-card{display:flex;flex-direction:column;align-items:stretch;gap:12px;padding:16px;border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));border-radius:var(--baas-id-radius);background:var(--baas-id-sunken, color-mix(in srgb, var(--baas-id-ink) 4%, var(--baas-id-surface)))}.rpid-handoff-qr{position:relative;margin:0 auto;display:flex;flex-direction:column;align-items:center;gap:8px;width:min(100%,13.5rem)}.rpid-handoff-qr svg{display:block;width:100%;height:auto;aspect-ratio:1;border-radius:var(--baas-id-radius-sm);background:#fff;box-shadow:0 0 0 1px var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));transition:opacity var(--baas-id-slow) var(--baas-id-ease),filter var(--baas-id-slow) var(--baas-id-ease)}.rpid-handoff-qr[data-expired] svg{opacity:.18;filter:blur(2px)}.rpid-handoff-qr figcaption{font:600 12.5px/1.35 var(--baas-id-font);color:var(--baas-id-ink);text-align:center;text-wrap:balance}.rpid-handoff-qr-placeholder{overflow:hidden;aspect-ratio:1;border-radius:var(--baas-id-radius-sm);background:var(--baas-id-surface);border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent))}.rpid-handoff-link{display:flex;flex-direction:column;gap:6px}.rpid-handoff-label{margin:0;font:600 11px/1.3 var(--baas-id-font);letter-spacing:.06em;text-transform:uppercase;color:var(--baas-id-muted)}.rpid-handoff-url{margin:0;padding:10px 12px;font:500 12.5px/1.45 var(--baas-id-mono);color:var(--baas-id-ink);background:var(--baas-id-surface);border:1px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 13%, transparent));border-radius:var(--baas-id-radius-ctl);overflow-wrap:anywhere;user-select:all;-webkit-user-select:all}.rpid-handoff-url code{font:inherit}.rpid-handoff-url[data-expired]{color:var(--baas-id-muted);text-decoration:line-through;user-select:none;-webkit-user-select:none}.rpid-handoff-copy{margin-top:0}.rpid-handoff-note{margin:0;min-height:1em;font:400 12px/1.45 var(--baas-id-font);color:var(--baas-id-muted)}.rpid-handoff-meta{display:flex;flex-direction:column;gap:3px}.rpid-handoff-meta p{margin:0;font:400 12.5px/1.45 var(--baas-id-font);color:var(--baas-id-muted)}.rpid-handoff-clock{display:flex;align-items:center;gap:6px;color:var(--baas-id-ink)!important;font-weight:600!important;font-variant-numeric:tabular-nums}.rpid-handoff-steps{display:flex;flex-direction:column;gap:6px;margin:0;padding:0;list-style:none}.rpid-handoff-steps li{display:grid;grid-template-columns:18px 1fr;align-items:center;gap:8px;font:500 13px/1.4 var(--baas-id-font);color:var(--baas-id-muted)}.rpid-handoff-steps-mark{display:grid;place-items:center;width:14px;height:14px;border-radius:50%;justify-self:center;border:1.5px solid var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 20%, transparent))}.rpid-handoff-steps li[data-state=active]{color:var(--baas-id-ink);font-weight:600}.rpid-handoff-steps li[data-state=active] .rpid-handoff-steps-mark{border-color:var(--baas-id-accent);background:var(--baas-id-accent);animation:rpid-handoff-breathe 1.6s var(--baas-id-ease-smooth) infinite}.rpid-handoff-steps li[data-state=done]{color:var(--baas-id-positive)}.rpid-handoff-steps li[data-state=done] .rpid-handoff-steps-mark{border-color:var(--baas-id-positive);background:var(--baas-id-positive);color:#fff}.rpid-handoff-status{display:flex;align-items:center;gap:8px;margin:0;font:600 13px/1.4 var(--baas-id-font);color:var(--baas-id-ink)}.rpid-handoff-dot{flex:none;width:9px;height:9px;border-radius:50%;background:var(--baas-id-muted)}.rpid-handoff-status[data-phase=waiting] .rpid-handoff-dot{background:var(--baas-id-accent);animation:rpid-handoff-breathe 1.6s var(--baas-id-ease-smooth) infinite}.rpid-handoff-status[data-phase=connected] .rpid-handoff-dot,.rpid-handoff-status[data-phase=capturing] .rpid-handoff-dot{background:var(--baas-id-positive)}.rpid-handoff-status[data-phase=capturing] .rpid-handoff-dot{animation:rpid-handoff-breathe 1.2s var(--baas-id-ease-smooth) infinite}.rpid-handoff-status[data-phase=finished] .rpid-handoff-dot{background:var(--baas-id-positive)}@keyframes rpid-handoff-breathe{50%{opacity:.35;transform:scale(.8)}}.rpid-handoff-phone{align-items:center;text-align:center;padding:22px 16px}.rpid-handoff-phone-mark{display:grid;place-items:center;width:52px;height:52px;border-radius:50%;margin-inline:auto;background:var(--baas-id-accent-soft, color-mix(in srgb, var(--baas-id-accent) 12%, var(--baas-id-surface)));color:var(--baas-id-accent)}.rpid-handoff-strong{margin:0;font:600 14.5px/1.4 var(--baas-id-font);color:var(--baas-id-ink)}.rpid-handoff-here{align-self:stretch;justify-content:center;margin-top:0}.rpid-handoff-continue{align-items:stretch}.rpid-handoff-continue .rpid-seal,.rpid-handoff-continue .rpid-handoff-phone-mark{align-self:center}.rpid-handoff-hint{margin:0;align-self:center;padding:8px 16px;font:700 22px/1 var(--baas-id-mono);letter-spacing:.32em;padding-left:calc(16px + .32em);color:var(--baas-id-ink);border:1px dashed var(--baas-id-line, color-mix(in srgb, var(--baas-id-ink) 25%, transparent));border-radius:var(--baas-id-radius-sm);background:var(--baas-id-surface)}.rpid-handoff-warning{display:flex;align-items:flex-start;gap:8px;font-weight:500}.rpid-handoff-warning svg{flex:none;margin-top:2px}.rpid-flow[data-rpid-screen=handoff]{max-width:46rem;container-type:inline-size}@container (min-width: 36rem){.rpid-handoff-card[data-rpid-handoff-code]{display:grid;grid-template-columns:13.5rem minmax(0,1fr);column-gap:20px;row-gap:12px;align-items:start}.rpid-handoff-card[data-rpid-handoff-code] .rpid-handoff-qr{grid-row:1 / span 3;margin:0}.rpid-handoff-card[data-rpid-handoff-code]>:not(.rpid-handoff-qr){grid-column:2}.rpid-handoff-why{flex-direction:row;flex-wrap:wrap;column-gap:18px}.rpid-handoff-steps{flex-direction:row;flex-wrap:wrap;column-gap:16px}.rpid-handoff-here{align-self:flex-start;width:auto;padding-inline:20px}}.rpid-flow[data-rpid-screen=handoff] .rpid-flow-title,.rpid-flow[data-rpid-screen=confirm] .rpid-flow-title{font-size:1.25rem}@media (prefers-reduced-motion: reduce){.rpid-handoff{animation:none}.rpid-handoff-status .rpid-handoff-dot,.rpid-handoff-steps-mark{animation:none!important}.rpid-handoff-qr svg{transition:none}}.rpid-handoff-continue[data-rpid-continue=done] .rpid-intro-lede{text-align:center}