@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.
- package/LICENSE.md +176 -0
- package/README.md +171 -0
- package/THIRD_PARTY_NOTICES.md +44 -0
- package/dist/esm/baas-id-react.css +1 -0
- package/dist/esm/chunks/ContinueFlow-YFSpSOio.js +7500 -0
- package/dist/esm/continue.js +10 -0
- package/dist/esm/index.js +218 -0
- package/dist/esm/preview.js +368 -0
- package/dist/esm/workers/detector.worker-DtuL8TFY.js +22435 -0
- package/dist/types/continue.d.ts +3 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/preview.d.ts +5 -0
- package/dist/types/react/DocumentCapture.d.ts +27 -0
- package/dist/types/react/FaceCapture.d.ts +19 -0
- package/dist/types/react/capture/ProximityMeter.d.ts +9 -0
- package/dist/types/react/capture/TurnGauge.d.ts +12 -0
- package/dist/types/react/capture/YawDial.d.ts +6 -0
- package/dist/types/react/capture/api.d.ts +50 -0
- package/dist/types/react/capture/attestation.d.ts +32 -0
- package/dist/types/react/capture/binding.d.ts +51 -0
- package/dist/types/react/capture/camera.d.ts +4 -0
- package/dist/types/react/capture/chrome.d.ts +24 -0
- package/dist/types/react/capture/demo.d.ts +2 -0
- package/dist/types/react/capture/errors.d.ts +18 -0
- package/dist/types/react/capture/frames.d.ts +18 -0
- package/dist/types/react/capture/index.d.ts +15 -0
- package/dist/types/react/capture/integrity.d.ts +32 -0
- package/dist/types/react/capture/keyframes.d.ts +19 -0
- package/dist/types/react/capture/overlays.d.ts +10 -0
- package/dist/types/react/capture/run.d.ts +14 -0
- package/dist/types/react/capture/useCaptureRun.d.ts +4 -0
- package/dist/types/react/document/CardFrame.d.ts +10 -0
- package/dist/types/react/document/DocumentParts.d.ts +49 -0
- package/dist/types/react/document/advisory.d.ts +47 -0
- package/dist/types/react/document/bestFrames.d.ts +18 -0
- package/dist/types/react/document/cues.d.ts +28 -0
- package/dist/types/react/document/flow.d.ts +52 -0
- package/dist/types/react/document/gate.d.ts +114 -0
- package/dist/types/react/document/latch.d.ts +25 -0
- package/dist/types/react/document/mrz.d.ts +29 -0
- package/dist/types/react/document/overlay.d.ts +52 -0
- package/dist/types/react/document/quad.d.ts +5 -0
- package/dist/types/react/document/resolution.d.ts +42 -0
- package/dist/types/react/document/review.d.ts +50 -0
- package/dist/types/react/document/sideCheck.d.ts +32 -0
- package/dist/types/react/document/telemetry.d.ts +14 -0
- package/dist/types/react/document/track.d.ts +36 -0
- package/dist/types/react/document/useDocumentCapture.d.ts +78 -0
- package/dist/types/react/face/FaceGuide.d.ts +22 -0
- package/dist/types/react/face/FaceParts.d.ts +15 -0
- package/dist/types/react/face/faceMesh.d.ts +68 -0
- package/dist/types/react/face/faceRegion.d.ts +16 -0
- package/dist/types/react/face/faceView.d.ts +21 -0
- package/dist/types/react/face/meshBench.d.ts +7 -0
- package/dist/types/react/face/meshCanvas.d.ts +20 -0
- package/dist/types/react/face/qualityGate.d.ts +59 -0
- package/dist/types/react/face/runLiveness.d.ts +37 -0
- package/dist/types/react/face/scanState.d.ts +40 -0
- package/dist/types/react/face/upload.d.ts +14 -0
- package/dist/types/react/face/useFaceCapture.d.ts +45 -0
- package/dist/types/react/flows/ConsentStep.d.ts +8 -0
- package/dist/types/react/flows/EnrollmentFlow.d.ts +2 -0
- package/dist/types/react/flows/FlowResult.d.ts +13 -0
- package/dist/types/react/flows/FlowShell.d.ts +48 -0
- package/dist/types/react/flows/IdentifyFlow.d.ts +2 -0
- package/dist/types/react/flows/ReverificationFlow.d.ts +2 -0
- package/dist/types/react/flows/SignInFlow.d.ts +2 -0
- package/dist/types/react/flows/StepIntro.d.ts +10 -0
- package/dist/types/react/flows/VerificationFlow.d.ts +4 -0
- package/dist/types/react/flows/experience.d.ts +35 -0
- package/dist/types/react/flows/failureDetail.d.ts +12 -0
- package/dist/types/react/flows/index.d.ts +6 -0
- package/dist/types/react/flows/session.d.ts +5 -0
- package/dist/types/react/flows/state.d.ts +106 -0
- package/dist/types/react/flows/types.d.ts +255 -0
- package/dist/types/react/flows/useFlowSession.d.ts +21 -0
- package/dist/types/react/flows.d.ts +1 -0
- package/dist/types/react/handoff/ContinueFlow.d.ts +28 -0
- package/dist/types/react/handoff/ContinueOnPhone.d.ts +60 -0
- package/dist/types/react/handoff/api.d.ts +41 -0
- package/dist/types/react/handoff/qr.d.ts +9 -0
- package/dist/types/react/hooks.d.ts +7 -0
- package/dist/types/react/i18n/en.d.ts +3 -0
- package/dist/types/react/i18n/es-419.d.ts +3 -0
- package/dist/types/react/i18n/index.d.ts +10 -0
- package/dist/types/react/i18n/types.d.ts +250 -0
- package/dist/types/react/icons.d.ts +25 -0
- package/dist/types/react/liveness/challenges.d.ts +26 -0
- package/dist/types/react/liveness/framing.d.ts +33 -0
- package/dist/types/react/liveness/index.d.ts +8 -0
- package/dist/types/react/liveness/nod.d.ts +4 -0
- package/dist/types/react/liveness/scoring.d.ts +29 -0
- package/dist/types/react/liveness/script.d.ts +7 -0
- package/dist/types/react/liveness/signals.d.ts +38 -0
- package/dist/types/react/liveness/timing.d.ts +20 -0
- package/dist/types/react/liveness/turn.d.ts +18 -0
- package/dist/types/react/preview/FlowPreview.d.ts +34 -0
- package/dist/types/react/preview/contrast.d.ts +17 -0
- package/dist/types/react/preview/specimen.d.ts +35 -0
- package/dist/types/react/styles/index.d.ts +0 -0
- package/dist/types/react/telemetry/bus.d.ts +13 -0
- package/dist/types/react/telemetry/device.d.ts +66 -0
- package/dist/types/react/telemetry/reporter.d.ts +27 -0
- package/dist/types/react/theme/appearance.d.ts +22 -0
- package/dist/types/react/version.d.ts +1 -0
- package/dist/types/react/vision/authenticity.d.ts +43 -0
- package/dist/types/react/vision/authenticityPixels.d.ts +6 -0
- package/dist/types/react/vision/authenticitySpecular.d.ts +2 -0
- package/dist/types/react/vision/cardCorners.d.ts +21 -0
- package/dist/types/react/vision/cardDetector.d.ts +15 -0
- package/dist/types/react/vision/cornerGeometry.d.ts +10 -0
- package/dist/types/react/vision/cornerImage.d.ts +34 -0
- package/dist/types/react/vision/cornerLines.d.ts +12 -0
- package/dist/types/react/vision/cornerScore.d.ts +17 -0
- package/dist/types/react/vision/corners.d.ts +60 -0
- package/dist/types/react/vision/detector.worker.d.ts +1 -0
- package/dist/types/react/vision/document.d.ts +13 -0
- package/dist/types/react/vision/engine.d.ts +5 -0
- package/dist/types/react/vision/face.d.ts +17 -0
- package/dist/types/react/vision/index.d.ts +7 -0
- package/dist/types/react/vision/modelCache.d.ts +16 -0
- package/dist/types/react/vision/modelsCdn.d.ts +4 -0
- package/dist/types/react/vision/quality.d.ts +10 -0
- package/dist/types/react/vision/sideClassifier.d.ts +4 -0
- package/dist/types/react/vision/tinyCore.d.ts +21 -0
- package/dist/types/react/vision/tinyDetector.d.ts +36 -0
- package/dist/types/react/vision/types.d.ts +62 -0
- package/dist/types/react/vision/warp.d.ts +18 -0
- 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}
|