@passflow/react 0.9.1 → 0.10.0
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/CHANGELOG.md +19 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +132 -122
- package/dist/index.es.js.map +1 -1
- package/dist/src/components/provider/index.d.ts +2 -1
- package/dist/src/components/provider/index.d.ts.map +1 -1
- package/dist/src/components/provider/passflow-provider.d.ts +39 -5
- package/dist/src/components/provider/passflow-provider.d.ts.map +1 -1
- package/dist/src/components/provider/upgrade-provider.d.ts +49 -0
- package/dist/src/components/provider/upgrade-provider.d.ts.map +1 -0
- package/dist/src/components/ui/button/index.d.ts +12 -1
- package/dist/src/components/ui/button/index.d.ts.map +1 -1
- package/dist/src/components/ui/index.d.ts +2 -0
- package/dist/src/components/ui/index.d.ts.map +1 -1
- package/dist/src/components/ui/spinner/index.d.ts +23 -0
- package/dist/src/components/ui/spinner/index.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/challenge.d.ts +12 -0
- package/dist/src/components/ui/upgrade-dialog/challenge.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/factor-list.d.ts +20 -0
- package/dist/src/components/ui/upgrade-dialog/factor-list.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/index.d.ts +8 -0
- package/dist/src/components/ui/upgrade-dialog/index.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/state-mapping.d.ts +119 -0
- package/dist/src/components/ui/upgrade-dialog/state-mapping.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/status.d.ts +27 -0
- package/dist/src/components/ui/upgrade-dialog/status.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/types.d.ts +188 -0
- package/dist/src/components/ui/upgrade-dialog/types.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/upgrade-dialog.d.ts +13 -0
- package/dist/src/components/ui/upgrade-dialog/upgrade-dialog.d.ts.map +1 -0
- package/dist/src/context/index.d.ts +1 -0
- package/dist/src/context/index.d.ts.map +1 -1
- package/dist/src/context/upgrade-context.d.ts +85 -0
- package/dist/src/context/upgrade-context.d.ts.map +1 -0
- package/dist/src/hooks/index.d.ts +1 -0
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/use-upgrade.d.ts +43 -0
- package/dist/src/hooks/use-upgrade.d.ts.map +1 -0
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/upgrade-auth.d.ts +38 -0
- package/dist/src/utils/upgrade-auth.d.ts.map +1 -0
- package/dist/style.css +1 -1
- package/package.json +4 -4
- package/dist/src/components/flow/upgrade-required-placeholder.d.ts +0 -21
- package/dist/src/components/flow/upgrade-required-placeholder.d.ts.map +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { UpgradeDialogProps } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* The assurance-upgrade modal. A switch over `state.kind`, modelled on
|
|
5
|
+
* `LoginScreen`: one discriminated union, one view per state, no transitions of
|
|
6
|
+
* its own.
|
|
7
|
+
*
|
|
8
|
+
* Escape and an overlay click route to the state's cancel or dismiss callback,
|
|
9
|
+
* never to a bare close — cancellation must reach the controller or the
|
|
10
|
+
* caller's promise never settles (§8.1).
|
|
11
|
+
*/
|
|
12
|
+
export declare const UpgradeDialog: FC<UpgradeDialogProps>;
|
|
13
|
+
//# sourceMappingURL=upgrade-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/upgrade-dialog/upgrade-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAKhC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,sBAAsB,CAAC;AAI9B;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAwBhD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { AssuranceBar, UpgradeChallenge, UpgradeFactor, UpgradeFactorType } from '@passflow/core';
|
|
2
|
+
/** What a protected elevation can fail with, in the hook's vocabulary (§13.3's table). */
|
|
3
|
+
export type UpgradeErrorStatusKind = 'exhausted' | 'unsatisfiable' | 'unavailable' | 'transport';
|
|
4
|
+
/**
|
|
5
|
+
* The hook's observable state. Exactly one terminal state per flight, taken
|
|
6
|
+
* from the controller's outcome summary (§13.4).
|
|
7
|
+
*
|
|
8
|
+
* `idle` is also where a flight abandoned by a session change lands: nothing
|
|
9
|
+
* happened, and nothing is reported as though it had.
|
|
10
|
+
*/
|
|
11
|
+
export type UpgradeHookState = {
|
|
12
|
+
status: 'idle';
|
|
13
|
+
} | {
|
|
14
|
+
status: 'challenged';
|
|
15
|
+
challenge: UpgradeChallenge;
|
|
16
|
+
factors: UpgradeFactorType[];
|
|
17
|
+
} | {
|
|
18
|
+
status: 'submitting';
|
|
19
|
+
} | {
|
|
20
|
+
status: 'success';
|
|
21
|
+
} | {
|
|
22
|
+
status: 'insufficient';
|
|
23
|
+
obtained: AssuranceBar;
|
|
24
|
+
required: AssuranceBar;
|
|
25
|
+
} | {
|
|
26
|
+
status: 'error';
|
|
27
|
+
kind: UpgradeErrorStatusKind;
|
|
28
|
+
error: Error;
|
|
29
|
+
};
|
|
30
|
+
/** The states a flight can settle in. `null` alongside these is cancellation. */
|
|
31
|
+
export type UpgradeSettledState = Extract<UpgradeHookState, {
|
|
32
|
+
status: 'idle' | 'success' | 'insufficient' | 'error';
|
|
33
|
+
}>;
|
|
34
|
+
/** A bar a caller states for itself on the imperative seam (§13.2 T10 / H-6). */
|
|
35
|
+
export type UpgradeElevateOptions = {
|
|
36
|
+
acrValues?: string;
|
|
37
|
+
maxAge?: number;
|
|
38
|
+
};
|
|
39
|
+
/** The open prompt, as the dialog and the hook read it. */
|
|
40
|
+
export type UpgradePromptView = {
|
|
41
|
+
challenge: UpgradeChallenge;
|
|
42
|
+
/** Already ranked by `selectFactors`; index 0 is the suggested factor. */
|
|
43
|
+
factors: readonly UpgradeFactor[];
|
|
44
|
+
/** The previous attempt's failure, when the controller re-prompted. */
|
|
45
|
+
previousError?: Error;
|
|
46
|
+
};
|
|
47
|
+
export type UpgradeContextValue = {
|
|
48
|
+
/** True when the provider installed a prompt handler on this `Passflow` instance. */
|
|
49
|
+
enabled: boolean;
|
|
50
|
+
state: UpgradeHookState;
|
|
51
|
+
/** The open prompt, or `null` when no elevation is collecting an answer. */
|
|
52
|
+
prompt: UpgradePromptView | null;
|
|
53
|
+
selectedFactor: UpgradeFactorType | null;
|
|
54
|
+
/**
|
|
55
|
+
* The factor-selection signal. Reports the user's choice to the controller
|
|
56
|
+
* through `UpgradePromptRequest.onFactorSelected` the moment it is made and
|
|
57
|
+
* before any answer is submitted — §13.2's late-join boundary (T3), which is
|
|
58
|
+
* selection and not submission.
|
|
59
|
+
*/
|
|
60
|
+
selectFactor: (factor: UpgradeFactorType) => void;
|
|
61
|
+
/** Answers the open prompt. Resolves the controller's promise exactly once. */
|
|
62
|
+
submit: (code?: string) => void;
|
|
63
|
+
/** Declines the open prompt. Exactly once; never leaves the promise pending. */
|
|
64
|
+
cancel: () => void;
|
|
65
|
+
/** Acknowledges a terminal state, closing the dialog. Settles nothing. */
|
|
66
|
+
dismiss: () => void;
|
|
67
|
+
/**
|
|
68
|
+
* Drives an elevation directly — a "verify now" button, or a headless
|
|
69
|
+
* caller. Resolves **`null`** when the user cancelled, and otherwise the
|
|
70
|
+
* flight's terminal state; it never rejects, because the hook's contract is
|
|
71
|
+
* a rendered decision rather than a thrown transport outcome.
|
|
72
|
+
*/
|
|
73
|
+
elevate: (options?: UpgradeElevateOptions) => Promise<UpgradeSettledState | null>;
|
|
74
|
+
};
|
|
75
|
+
export declare const UpgradeContext: import('react').Context<UpgradeContextValue | undefined>;
|
|
76
|
+
/**
|
|
77
|
+
* What `useUpgrade` reads outside an `UpgradeProvider`: idle, inert, and it
|
|
78
|
+
* does not throw (§9.5 H8) — a component that merely wants to know whether an
|
|
79
|
+
* elevation is running is not a bug.
|
|
80
|
+
*
|
|
81
|
+
* `elevate` resolves `{ status: 'idle' }` rather than `null`: nothing was
|
|
82
|
+
* asked and nothing was declined, and `null` means the user declined.
|
|
83
|
+
*/
|
|
84
|
+
export declare const INERT_UPGRADE_CONTEXT: UpgradeContextValue;
|
|
85
|
+
//# sourceMappingURL=upgrade-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-context.d.ts","sourceRoot":"","sources":["../../../src/context/upgrade-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGvG,0FAA0F;AAC1F,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,eAAe,GAAG,aAAa,GAAG,WAAW,CAAC;AAEjG;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,GACnF;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GACxB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC1E;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpE,iFAAiF;AACjF,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,OAAO,CAAA;CAAE,CAAC,CAAC;AAEvH,iFAAiF;AACjF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,0EAA0E;IAC1E,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,uEAAuE;IACvE,aAAa,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,qFAAqF;IACrF,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,gBAAgB,CAAC;IACxB,4EAA4E;IAC5E,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC;;;;;OAKG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,+EAA+E;IAC/E,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,gFAAgF;IAChF,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;OAKG;IACH,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;CACnF,CAAC;AAEF,eAAO,MAAM,cAAc,0DAA4D,CAAC;AAIxF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,mBAUnC,CAAC"}
|
|
@@ -23,4 +23,5 @@ export { useTwoFactorMethods, type UseTwoFactorMethodsReturn } from './use-two-f
|
|
|
23
23
|
export { useSessionExpired, type UseSessionExpiredOptions, type UseSessionExpiredResult, type SessionExpiredReason, } from './use-session-expired';
|
|
24
24
|
export { useDeviceVerify, type UseDeviceVerifyProps, type DeviceVerifyStatus, type DeviceVerifyInfo, type DeviceUIMode, } from './use-device-verify';
|
|
25
25
|
export { useConsent, type UseConsentProps, type ConsentStatus, type ConsentInfo, type ConsentError, type ConsentScopeMetadata, } from './use-consent';
|
|
26
|
+
export { useUpgrade, type UseUpgradeResult } from './use-upgrade';
|
|
26
27
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,KAAK,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjH,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,KAAK,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AACtH,OAAO,EAAE,qBAAqB,EAAE,KAAK,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE/F,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,KAAK,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjH,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,KAAK,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AACtH,OAAO,EAAE,qBAAqB,EAAE,KAAK,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE/F,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { UpgradeElevateOptions, UpgradeErrorStatusKind, UpgradeHookState, UpgradeSettledState } from '../context/upgrade-context';
|
|
2
|
+
import { AssuranceBar, UpgradeChallenge, UpgradeFactor, UpgradeFactorType } from '@passflow/core';
|
|
3
|
+
export type UseUpgradeResult = {
|
|
4
|
+
/** True when an `UpgradeProvider` installed a prompt handler. */
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
/** The whole state, as the discriminated union (§13.5's `UpgradeHookState`). */
|
|
7
|
+
state: UpgradeHookState;
|
|
8
|
+
/** The discriminant, for the common `status === 'challenged'` read. */
|
|
9
|
+
status: UpgradeHookState['status'];
|
|
10
|
+
/** What the server demanded — the MERGED requirement when challenges joined. */
|
|
11
|
+
challenge: UpgradeChallenge | null;
|
|
12
|
+
/** Usable factors, already ranked; index 0 is the suggested one. */
|
|
13
|
+
factors: readonly UpgradeFactor[];
|
|
14
|
+
/** The ranked factor types, which is what `UpgradeHookState.challenged` carries. */
|
|
15
|
+
factorTypes: readonly UpgradeFactorType[];
|
|
16
|
+
selectedFactor: UpgradeFactorType | null;
|
|
17
|
+
/**
|
|
18
|
+
* Elevated, and still not enough: the replay was re-challenged (§13.4).
|
|
19
|
+
* Non-null **only** in the `insufficient` state, and it never coexists with
|
|
20
|
+
* `status === 'success'` — this must not read as success.
|
|
21
|
+
*/
|
|
22
|
+
insufficient: {
|
|
23
|
+
obtained: AssuranceBar;
|
|
24
|
+
required: AssuranceBar;
|
|
25
|
+
} | null;
|
|
26
|
+
/** The terminal failure, in the `error` state only. */
|
|
27
|
+
error: Error | null;
|
|
28
|
+
/** Which failure class, in the `error` state only. */
|
|
29
|
+
errorKind: UpgradeErrorStatusKind | null;
|
|
30
|
+
/** The previous attempt's failure while the prompt is re-shown (a wrong code). */
|
|
31
|
+
previousError: Error | null;
|
|
32
|
+
/** True while a ceremony is on the wire. */
|
|
33
|
+
busy: boolean;
|
|
34
|
+
/** The factor-selection signal — §13.2's late-join boundary (T3). */
|
|
35
|
+
selectFactor: (factor: UpgradeFactorType) => void;
|
|
36
|
+
submit: (code?: string) => void;
|
|
37
|
+
cancel: () => void;
|
|
38
|
+
dismiss: () => void;
|
|
39
|
+
/** Resolves `null` on cancellation; otherwise the flight's terminal state. */
|
|
40
|
+
elevate: (options?: UpgradeElevateOptions) => Promise<UpgradeSettledState | null>;
|
|
41
|
+
};
|
|
42
|
+
export declare const useUpgrade: () => UseUpgradeResult;
|
|
43
|
+
//# sourceMappingURL=use-upgrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-upgrade.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAErB,KAAK,mBAAmB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGvG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,KAAK,EAAE,gBAAgB,CAAC;IACxB,uEAAuE;IACvE,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACnC,gFAAgF;IAChF,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,oEAAoE;IACpE,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,oFAAoF;IACpF,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC1C,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC;;;;OAIG;IACH,YAAY,EAAE;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,uDAAuD;IACvD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,sDAAsD;IACtD,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACzC,kFAAkF;IAClF,aAAa,EAAE,KAAK,GAAG,IAAI,CAAC;IAC5B,4CAA4C;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8EAA8E;IAC9E,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;CACnF,CAAC;AAOF,eAAO,MAAM,UAAU,QAAO,gBA2B7B,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export * from './components/flow';
|
|
2
2
|
export * from './components/form';
|
|
3
3
|
export * from './components/ui';
|
|
4
|
-
export { PassflowProvider } from './components/provider';
|
|
4
|
+
export { PassflowProvider, UpgradeProvider } from './components/provider';
|
|
5
|
+
export type { UpgradeProviderProps, PassflowUpgradeOptions } from './components/provider';
|
|
6
|
+
export { UpgradeContext, INERT_UPGRADE_CONTEXT, type UpgradeContextValue, type UpgradeElevateOptions, type UpgradeErrorStatusKind, type UpgradeHookState, type UpgradePromptView, type UpgradeSettledState, } from './context/upgrade-context';
|
|
7
|
+
export { withAuth, attachAuth } from './utils/upgrade-auth';
|
|
5
8
|
export * from './hooks';
|
|
6
9
|
export * from '@passflow/core';
|
|
7
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,yBAAyB,CAAC;AAEjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,yBAAyB,CAAC;AAEjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE1F,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
|
|
@@ -13,4 +13,5 @@ export { classifyDeviceError, deviceErrorOfType, DeviceApiError } from './classi
|
|
|
13
13
|
export { authErrorFor, authRedirectErrorMessage, invitationLinkErrorMessage, verificationLinkErrorMessage, verificationRequestErrorMessage, } from './auth-error';
|
|
14
14
|
export { getInvitationAuthChrome, type InvitationAuthIntent } from './invitation-auth-chrome';
|
|
15
15
|
export { TwoFactorLoopPrevention } from './two-factor-loop-prevention';
|
|
16
|
+
export { withAuth, attachAuth, registerUpgradeAuthInstance, releaseUpgradeAuthInstance, upgradeAuthInstance, } from './upgrade-auth';
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EACL,QAAQ,EACR,UAAU,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { FetchLike, Passflow, ResponseInterceptorHost } from '@passflow/core';
|
|
2
|
+
/**
|
|
3
|
+
* Publishes the provider's `Passflow` instance to the free functions, and
|
|
4
|
+
* returns an unregister suitable as a React effect cleanup.
|
|
5
|
+
*
|
|
6
|
+
* Last registration wins, and the returned unregister is *deferred*: it clears
|
|
7
|
+
* the instance on a microtask, and only if nothing has registered in the
|
|
8
|
+
* meantime. See the module comment — that deferral is what keeps a Strict Mode
|
|
9
|
+
* mount → unmount → remount from leaving the free functions unbound, and it is
|
|
10
|
+
* why register and release are symmetric rather than one in render and one in a
|
|
11
|
+
* cleanup that nothing undoes.
|
|
12
|
+
*/
|
|
13
|
+
export declare const registerUpgradeAuthInstance: (instance: Passflow) => (() => void);
|
|
14
|
+
/**
|
|
15
|
+
* Clears `instance` if it is still the registered one, and does nothing
|
|
16
|
+
* otherwise. Idempotent, so an effect cleanup that runs after a newer provider
|
|
17
|
+
* has already published cannot unbind the live instance.
|
|
18
|
+
*/
|
|
19
|
+
export declare const releaseUpgradeAuthInstance: (instance: Passflow) => void;
|
|
20
|
+
/** The instance the free functions bind to, or `null` outside a provider. */
|
|
21
|
+
export declare const upgradeAuthInstance: () => Passflow | null;
|
|
22
|
+
/**
|
|
23
|
+
* Wraps a `fetch` and returns the wrapper. Installs nothing and touches no
|
|
24
|
+
* global — two verbs exist because the semantics genuinely differ: an axios
|
|
25
|
+
* interceptor mutates, a fetch wrapper returns.
|
|
26
|
+
*/
|
|
27
|
+
export declare const withAuth: (next?: FetchLike) => FetchLike;
|
|
28
|
+
/**
|
|
29
|
+
* Attaches step-up handling to an axios instance the caller already owns,
|
|
30
|
+
* **mutating** it, and returns the `detach()` disposer — which is exactly what
|
|
31
|
+
* a React effect needs.
|
|
32
|
+
*
|
|
33
|
+
* The parameter is typed structurally (duck-typed on
|
|
34
|
+
* `interceptors.response.use`), so this package's axios version is not a
|
|
35
|
+
* constraint on the caller's.
|
|
36
|
+
*/
|
|
37
|
+
export declare const attachAuth: (instance: ResponseInterceptorHost) => (() => void);
|
|
38
|
+
//# sourceMappingURL=upgrade-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-auth.d.ts","sourceRoot":"","sources":["../../../src/utils/upgrade-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAWnF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,GAAI,UAAU,QAAQ,KAAG,CAAC,MAAM,IAAI,CAY3E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GAAI,UAAU,QAAQ,KAAG,IAE/D,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,QAAO,QAAQ,GAAG,IAAsB,CAAC;AAWzE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,SAAS,KAAG,SAAuD,CAAC;AAEpG;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GAAI,UAAU,uBAAuB,KAAG,CAAC,MAAM,IAAI,CACtB,CAAC"}
|
package/dist/style.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import "https://fonts.googleapis.com/css2?family=Gasoek+One&family=Inter:opsz,wght@14..32,100..900&display=swap";[class*=passflow-]{box-sizing:border-box;font:inherit;vertical-align:baseline;border:0;margin:0;padding:0}.passflow-article,.passflow-aside,.passflow-details,.passflow-figcaption,.passflow-figure,.passflow-footer,.passflow-header,.passflow-hgroup,.passflow-menu,.passflow-nav,.passflow-section{display:block}html{scroll-behavior:smooth;font-size:16px}body{text-rendering:optimizespeed;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh;line-height:1.5}.passflow-list{list-style:none}.passflow-link{color:inherit;text-decoration:none}.passflow-canvas,.passflow-image,.passflow-picture,.passflow-svg,.passflow-video{max-width:100%;display:block}.passflow-button{background:0 0;border:none;padding:0}.passflow-button,.passflow-input,.passflow-select,.passflow-textarea{color:inherit;font:inherit}.passflow-table{border-collapse:collapse;border-spacing:0}@media (prefers-reduced-motion:reduce){[class*=passflow-]{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}body,html{box-sizing:border-box;margin:0;padding:0}:root{--passflow-primary:#0c59dd;--passflow-primary-dark:#0a47b1;--passflow-warning:#b42318;--passflow-warning-dark:#8f1f17;--passflow-dark:#1e1e1e;--passflow-dark-two:#2e2e2e;--passflow-dark-three:#3e3e3e;--passflow-white:#fff;--passflow-grey-one:#5f6368;--passflow-grey-two:#bfbfbf;--passflow-grey-three:#e9eaf0;--passflow-grey-four:#f3f5f7;--passflow-background:#f8f9fb;--passflow-success:#067647;--passflow-primary-color:var(--passflow-primary);--passflow-text-color:var(--passflow-dark);--passflow-secondary-text-color:var(--passflow-grey-one);--passflow-button-text-color:var(--passflow-white);--passflow-background-color:var(--passflow-white);--passflow-background-image:url();--passflow-card-color:var(--passflow-white);--passflow-branding-background-color:var(--passflow-background);--passflow-input-background-color:var(--passflow-grey-four);--passflow-input-border-color:var(--passflow-grey-four);--passflow-passkey-button-text-color:var(--passflow-white);--passflow-passkey-button-background-color:var(--passflow-dark);--passflow-divider-color:var(--passflow-grey-three);--passflow-federated_button_background_color:var(--passflow-background);--passflow-federated_button_text_color:var(--passflow-dark);--passflow-focus-color:var(--passflow-primary-color);--passflow-link-color:var(--passflow-primary-color);--passflow-h1:2rem;--passflow-h2:1.5rem;--passflow-body-1:1rem;--passflow-body-2:13px;--passflow-caption:12px;--passflow-normal:400;--passflow-medium:500;--passflow-semibold:600;--passflow-bold:700;--passflow-spacing-1:4px;--passflow-spacing-2:8px;--passflow-spacing-3:12px;--passflow-spacing-4:16px;--passflow-spacing-5:20px;--passflow-spacing-6:24px}.passflow-heading{color:var(--passflow-text-color);font-size:var(--passflow-h1);margin-bottom:var(--passflow-spacing-4);font-weight:600}.passflow-text{color:var(--passflow-text-color);font-size:var(--passflow-body-1);line-height:1.5}.passflow-secondary-text{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2)}.passflow-secondary-font{font-family:Gasoek One,sans-serif;font-style:normal}.passflow-button{cursor:pointer;font-size:var(--passflow-body-2);padding:var(--passflow-spacing-3) var(--passflow-spacing-6);border-radius:4px;justify-content:center;align-items:center;font-weight:500;transition:all .2s;display:inline-flex;position:relative;overflow:hidden}.passflow-button:focus-visible{outline:2px solid var(--passflow-focus-color);outline-offset:2px}.passflow-button--primary{background-color:var(--passflow-primary-color);color:var(--passflow-button-text-color);box-shadow:0 3px 15px #0c59dd59}.passflow-button--primary:focus-visible,.passflow-button--primary:hover{background-color:var(--passflow-primary-color)}.passflow-button--secondary{background-color:var(--passflow-white);border:1px solid var(--passflow-primary-color);color:var(--passflow-primary-color)}.passflow-button--secondary:focus-visible,.passflow-button--secondary:hover{border-color:var(--passflow-primary-color);color:var(--passflow-primary-color)}.passflow-button--outlined{background-color:var(--passflow-white);border:1px solid var(--passflow-grey-four);color:var(--passflow-dark)}.passflow-button--outlined:focus-visible,.passflow-button--outlined:hover{background-color:var(--passflow-grey-four)}.passflow-button--warning{background-color:var(--passflow-warning);color:var(--passflow-button-text-color);box-shadow:0 5px 9px #d85d5d40}.passflow-button--warning:focus-visible,.passflow-button--warning:hover{background-color:var(--passflow-warning-dark)}.passflow-button--clean{background-color:var(--passflow-white);border:none}.passflow-button--provider{background-color:var(--passflow-federated_button_background_color)}.passflow-button--provider:focus-visible,.passflow-button--provider:hover{background-color:var(--passflow-grey-four)}.passflow-button--dark{background-color:var(--passflow-dark-three);color:var(--passflow-button-text-color);box-shadow:0 3px 15px #1e1e1e59}.passflow-button--dark:focus-visible,.passflow-button--dark:hover{opacity:.9}.passflow-button--small{max-width:28px;height:28px;padding:var(--passflow-spacing-1);width:100%}.passflow-button--medium{font-size:var(--passflow-body-2);max-width:66px;height:32px;padding:7px var(--passflow-spacing-3);width:100%}.passflow-button--big{font-size:var(--passflow-body-2);min-width:40px;max-width:336px;height:48px;padding:15px var(--passflow-spacing-2);width:100%;font-weight:600}.passflow-button--dark:disabled,.passflow-button--primary:disabled,.passflow-button--warning:disabled{background-color:var(--passflow-grey-two);box-shadow:none;cursor:not-allowed}.passflow-button--outlined:disabled,.passflow-button--secondary:disabled{background-color:var(--passflow-white);border-color:var(--passflow-grey-four);color:var(--passflow-grey-two);cursor:not-allowed}.passflow-button--clean:disabled{cursor:not-allowed;opacity:.5;background-color:#0000}.passflow-button--with-icon{gap:var(--passflow-spacing-2)}.passflow-button--as-icon{width:max-content;height:max-content;padding:0}.passflow-button-go-back-error,.passflow-button-passkey,.passflow-button-passwordless,.passflow-button-resend-magic-link,.passflow-button-resend-reset-password,.passflow-button-reset-password,.passflow-button-send-reset-password,.passflow-button-signin,.passflow-button-signup{font-size:var(--passflow-body-2);font-weight:var(--passflow-semibold);margin:0 auto;line-height:18px}.passflow-button-passkey{background-color:var(--passflow-passkey-button-background-color);color:var(--passflow-passkey-button-text-color)}.passflow-button-passwordless--active{border:1px solid var(--passflow-primary-color);color:var(--passflow-primary-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-semibold);background-color:#0000;line-height:18px}.passflow-button-show-country{background-color:var(--passflow-input-background-color);border-radius:4px;gap:4px;width:56px;min-width:56px;margin-left:8px;padding:12px 4px}.passflow-button-display-password{background-color:#0000}.passflow-send-reset-wrapper{flex-direction:column;gap:24px;display:flex}.passflow-button-resend-magic-link,.passflow-button-resend-reset-password{font-weight:var(--passflow-medium);max-width:196px}.passflow-button-go-back-error{font-weight:var(--passflow-medium);width:196px;max-width:100%}.passflow-button-resend-magic-link:hover{background-color:var(--passflow-grey-four)}.passflow-button-timer{background-color:var(--passflow-background-color);font-weight:var(--passflow-semibold);max-width:max-content;padding:3px;display:inline-block}.passflow-button-timer--active{color:var(--passflow-secondary-text-color);opacity:1!important}.passflow-button-timer--inactive{color:var(--passflow-primary-color)}.passflow-field{background-color:var(--passflow-input-background-color);color:var(--passflow-dark);font-size:var(--passflow-body-2);outline:1px solid var(--passflow-input-border-color);min-height:48px;padding:11px var(--passflow-spacing-3);border-radius:4px;justify-content:flex-start;align-items:center;width:100%;display:flex}.passflow-field::placeholder{color:var(--passflow-secondary-text-color)}.passflow-field--focused:focus-visible,.passflow-field-otp--focused:focus-visible{outline:1px solid var(--passflow-primary-color)}.passflow-field--error,.passflow-field-otp--error{outline:1px solid var(--passflow-warning)!important}.passflow-field:disabled{border-color:var(--passflow-input-border-color);color:var(--passflow-secondary-text-color);cursor:not-allowed}.passflow-field-otp,.passflow-field:disabled{background-color:var(--passflow-input-background-color)}.passflow-field-otp{color:var(--passflow-dark);font-size:var(--passflow-body-2);outline:1px solid var(--passflow-input-border-color);text-align:center;border-radius:4px;width:48px;height:48px}.passflow-ripple{background-color:#ffffff4d;border-radius:50%;animation:.6s linear passflow-ripple;position:absolute;transform:scale(0)}@keyframes passflow-ripple{to{opacity:0;transform:scale(4)}}@media (prefers-reduced-motion:reduce){.passflow-ripple{animation:none;display:none}}.passflow-container{max-width:1200px;padding:0 var(--passflow-spacing-4);width:100%;margin:0 auto}.passflow-flex{display:flex}.passflow-flex-col{flex-direction:column}.passflow-items-center{align-items:center}.passflow-justify-center{justify-content:center}.passflow-justify-between{justify-content:space-between}.passflow-mt-4{margin-top:var(--passflow-spacing-4)}.passflow-mb-4{margin-bottom:var(--passflow-spacing-4)}.passflow-gap-4{gap:var(--passflow-spacing-4)}.passflow-form-subscriptions{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center;max-width:384px;margin:-24px auto 0;display:flex}.passflow-field-wrapper{width:100%;position:relative}.passflow-field-container{flex-direction:column;gap:6px;width:100%;display:flex}.passflow-field-label{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-medium);line-height:18px}.passflow-field-label--error{color:var(--passflow-warning)}.passflow-field-label-button{background-color:var(--passflow-card-color);color:var(--passflow-link-color);font-size:var(--passflow-caption);width:max-content;max-width:100%;text-decoration:none}.passflow-field-input,.passflow-field-label-button{font-weight:var(--passflow-medium);line-height:18px}.passflow-field-input{background-color:var(--passflow-input-background-color);color:var(--passflow-text-color);font-size:var(--passflow-body-2);outline:1px solid var(--passflow-input-border-color);min-height:48px;padding:11px var(--passflow-spacing-3);border-radius:4px;width:100%}.passflow-field-input--with-icon{padding-right:40px}.passflow-field-icon-button{width:28px;min-width:28px;height:28px;padding:6px;position:absolute;top:50%;right:0;transform:translate(-8px,-50%)}.passflow-field-error{justify-content:center;align-items:center;gap:4px;margin-top:4px;display:flex}.passflow-field-error-text{color:var(--passflow-warning);font-size:var(--passflow-caption);font-weight:var(--passflow-medium)}.passflow-field-phone-wrapper{background-color:var(--passflow-input-background-color);color:var(--passflow-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);outline:1px solid var(--passflow-input-border-color);border-radius:4px;justify-content:flex-start;align-items:center;width:100%;height:48px;display:flex;position:relative}.passflow-field-phone-wrapper--focus{outline:1px solid var(--passflow-primary-color)}.passflow-field-phone-wrapper--error{outline:1px solid var(--passflow-warning)}.passflow-field-phone-wrapper::placeholder{color:var(--passflow-secondary-text-color)}.passflow-field-phone-input{background-color:var(--passflow-input-background-color);color:var(--passflow-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);border-radius:4px;width:100%;height:48px;padding:0 8px}.passflow-field-phone-input:focus-within{outline:none}.passflow-field-country-search-wrapper{z-index:20;padding-left:28px;position:relative}.passflow-field-country-search,.passflow-field-country-search-wrapper{background-color:var(--passflow-input-background-color);border-radius:4px;width:100%}.passflow-field-country-search{color:var(--passflow-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);height:48px;padding:0 8px}.passflow-field-country-search::placeholder{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);line-height:18px}.passflow-field-country-search:focus-visible{outline:none}.passflow-field-country-search-icon{position:absolute;top:50%;left:12px;transform:translateY(-50%)}.passflow-password-validation{flex-direction:column;gap:4px;margin-top:4px;display:flex}.passflow-password-validation-item{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-medium);justify-content:flex-start;align-items:center;gap:4px;display:flex}.passflow-password-validation-item--success{color:var(--passflow-success)}.passflow-dialog-overlay{z-index:40;background-color:#1e1e1e80;position:fixed;inset:0}.passflow-dialog-content{z-index:50;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.passflow-dialog-header{text-align:center;flex-direction:column;gap:6px;display:flex}@media (width>=640px){.passflow-dialog-header{text-align:left}}.passflow-dialog-footer{flex-direction:column-reverse;gap:8px;display:flex}@media (width>=640px){.passflow-dialog-footer{flex-direction:row;justify-content:flex-end}}.passflow-dialog-title{font-size:var(--passflow-h2);font-weight:var(--passflow-semibold);letter-spacing:-.02em;line-height:1}.passflow-dialog-description{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2)}.passflow-popover-content{background-color:var(--passflow-white);z-index:10;border-radius:4px;box-shadow:0 5px 20px #0000000d}.passflow-popover-menu{flex-direction:column;align-items:flex-start;gap:4px;width:125px;padding:6px;display:flex}.passflow-popover-menu-item{justify-content:flex-start;gap:6px;width:100%;padding:6px}.passflow-popover-menu-item:hover{background-color:var(--passflow-background)}.passflow-popover-menu-item-text{color:var(--passflow-dark-three);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium)}.passflow-popover-menu-item-text--warning{color:var(--passflow-warning)}.passflow-switch-wrapper{cursor:pointer;align-items:center;gap:12px;display:inline-flex;position:relative}.passflow-switch-label{color:var(--passflow-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-medium)}.passflow-switch-input{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.passflow-switch-track{background-color:var(--passflow-grey-two);border-radius:9999px;width:28px;height:16px;transition:background-color .2s;position:relative}.passflow-switch-track:after{background-color:var(--passflow-white);content:"";border-radius:50%;width:12px;height:12px;transition:transform .2s;position:absolute;top:50%;right:14px;transform:translateY(-50%)}.passflow-switch-input:focus-visible+.passflow-switch-track{outline:2px solid var(--passflow-focus-color);outline-offset:2px}.passflow-switch-wrapper--disabled{cursor:not-allowed;opacity:.6}.passflow-switch-input:checked+.passflow-switch-track{background-color:var(--passflow-primary-color)}.passflow-switch-input:checked+.passflow-switch-track:after{transform:translate(12px,-50%)}[dir=rtl] .passflow-switch-input:checked+.passflow-switch-track:after{transform:translate(-14px,-50%)}.passflow-icon{background-color:#0000}.passflow-icon--small{width:16px;height:16px}.passflow-icon--medium{width:20px;height:20px}.passflow-icon--big{width:32px;height:32px}.passflow-icon--large{width:44px;height:44px}.passflow-icon--warning{stroke:var(--passflow-warning)}.passflow-icon--white{background-color:var(--passflow-white)}.passflow-icon--success{stroke:var(--passflow-primary-color)}.passflow-verify-otp{flex-direction:column;gap:32px;display:flex}.passflow-verify-otp-container{background-color:var(--passflow-card-color);border-radius:6px;flex-direction:column;gap:56px;padding:24px 24px 56px;display:flex;box-shadow:0 4px 15px #00000017}.passflow-verify-otp-button{background-color:var(--passflow-background);border:none;position:relative}.passflow-verify-otp-button-icon{position:absolute;top:50%;right:12px;transform:translateY(-50%)}.passflow-verify-otp-wrapper{flex-direction:column;justify-content:center;align-items:center;gap:6px;display:flex}.passflow-verify-otp-inputs{justify-content:center;align-items:center;gap:10px;display:flex}.passflow-verify-otp-error{justify-content:center;align-items:center;gap:4px;display:flex}.passflow-verify-otp-error-text{color:var(--passflow-warning);font-size:var(--passflow-caption);font-weight:var(--passflow-medium)}.passflow-verify-otp-resend{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.passflow-providers-box{flex-flow:wrap;justify-content:center;align-items:center;gap:8px;width:100%;display:flex}.passflow-providers-box--grid{grid-template-columns:repeat(auto-fit,minmax(49px,1fr));justify-content:stretch;align-items:stretch;gap:8px;display:grid}.passflow-provider-item{align-items:center;gap:8px;display:flex}.passflow-provider-text{color:var(--passflow-federated_button_text_color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-transform:capitalize}.passflow-ripple-container{position:absolute;inset:0;overflow:hidden}.passflow-ripple-effect{opacity:.6;background-color:currentColor}.passflow-form{flex-direction:column;gap:32px;width:100%;max-width:384px;display:flex}.passflow-form-switch{justify-content:center;align-items:center;width:100%;margin-bottom:-8px;display:flex}.passflow-form-container{background-color:var(--passflow-card-color);border-radius:6px;gap:24px;max-width:384px;padding:24px;box-shadow:0 4px 15px #00000017}.passflow-form-container,.passflow-form-field{flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;display:flex}.passflow-form-field{gap:6px}.passflow-form-field__header{justify-content:space-between;align-items:center;width:100%;max-height:18px;display:flex}.passflow-form-error{justify-content:center;align-items:center;gap:4px;margin-top:4px;display:flex}.passflow-form-error-text{color:var(--passflow-warning);font-size:var(--passflow-caption);font-weight:var(--passflow-medium)}.passflow-form-actions{justify-content:center;align-items:center;width:100%;max-width:336px;margin:0 auto;display:flex}.passflow-form-actions--top-space{margin-top:-8px}.passflow-form-divider{justify-content:space-between;align-items:center;width:100%;padding:9px 0;display:flex;position:relative}.passflow-form-divider__line-left,.passflow-form-divider__line-right{background-color:var(--passflow-divider-color);width:105px;height:1px}.passflow-form-divider__text{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-medium);background-color:#0000;padding:0 15px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.passflow-form-providers{flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:24px;width:100%;max-width:336px;margin:0 auto;display:flex}.passflow-link{color:var(--passflow-link-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-semibold);line-height:18px}.passflow-dont-have-account,.passflow-have-account,.passflow-remember-password{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center;line-height:18px}.passflow-country-search-wrapper{background-color:var(--passflow-card-color);scrollbar-color:var(--passflow-secondary-text-color) transparent;scrollbar-width:thin;z-index:10;border-bottom-right-radius:4px;border-bottom-left-radius:4px;width:100%;max-height:181px;position:absolute;top:2px;left:0;overflow-y:auto;transform:translateY(48px);box-shadow:0 4px 15px #00000017}.passflow-country-search-wrapper--without-preferred{max-height:170px}.passflow-country-search-wrapper::-webkit-scrollbar{width:6px}.passflow-country-search-wrapper::-webkit-scrollbar-track{background:0 0}.passflow-country-search-wrapper::-webkit-scrollbar-thumb{background-color:var(--passflow-secondary-text-color);border-radius:3px}.passflow-country-search-wrapper--show{opacity:1;visibility:visible;transition:opacity .2s,visibility .2s;display:block}.passflow-country-search-wrapper--hidden{opacity:0;visibility:hidden;display:none}.passflow-country-search-sticky-bottom,.passflow-country-search-sticky-top{background-color:var(--passflow-card-color);z-index:10;width:100%;height:10px;position:sticky;left:0;overflow-x:hidden}.passflow-country-search-sticky-top{top:0}.passflow-country-search-sticky-bottom{bottom:0}.passflow-country-search-item{background-color:var(--passflow-card-color);cursor:pointer;justify-content:flex-start;align-items:center;width:100%;max-height:32px;padding:7px 12px;transition:background-color .2s;display:flex}.passflow-country-search-item:focus,.passflow-country-search-item:hover{background-color:var(--passflow-background)}.passflow-country-search-flag{width:24px;height:18px}.passflow-country-search-name{color:var(--passflow-text-color);margin-left:8px}.passflow-country-search-code,.passflow-country-search-name{font-size:var(--passflow-body-2);font-weight:var(--passflow-medium)}.passflow-country-search-code{color:var(--passflow-secondary-text-color);margin-left:auto;transition:color .2s}.passflow-country-search-item:hover .passflow-country-search-code{color:var(--passflow-text-color)}.passflow-country-search-divider{border-bottom:1px solid var(--passflow-divider-color);font-size:var(--passflow-caption);margin:12px 12px 6px;padding-bottom:6px}.passflow-country-search-divider,.passflow-country-search-no-matches{color:var(--passflow-secondary-text-color);font-weight:var(--passflow-medium)}.passflow-country-search-no-matches{font-size:var(--passflow-body-2);text-align:center;width:100%;margin:0 auto;padding:15px;display:block}.passflow-forgot-password-success-wrapper{flex-direction:column;gap:24px;width:100%;display:flex}.passflow-forgot-password-success-container{flex-direction:column;gap:32px;width:100%;max-width:336px;margin-top:-8px;display:flex}.passflow-forgot-password-success-text{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.passflow-forgot-password-success-text--strong{font-weight:var(--passflow-bold)}.passflow-verify-challenge-magic-link-wrapper{flex-direction:column;width:100%;margin:0 auto;display:flex}.passflow-verify-challenge-magic-link-container{flex-direction:column;gap:32px;width:100%;max-width:336px;margin-top:-24px;display:flex}.passflow-verify-challenge-magic-link-text{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.passflow-verify-challenge-magic-link-text--strong{font-weight:var(--passflow-bold)}.passflow-verify-challenge-success-wrapper{gap:32px}.passflow-verify-challenge-success-container,.passflow-verify-challenge-success-wrapper{flex-direction:column;justify-content:flex-start;align-items:center;width:100%;display:flex}.passflow-verify-challenge-success-container{gap:8px}.passflow-verify-challenge-success-text{color:var(--passflow-text-color);font-size:var(--passflow-h2);font-weight:var(--passflow-bold);text-align:center}.passflow-reset-password-text,.passflow-verify-challenge-success-text-secondary{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.passflow-reset-password-text{margin-top:-32px;display:block}.passflow-form-error--critical,.passflow-form-error--persistent{text-align:center;background-color:#fef2f2;border:1px solid #fecaca;border-radius:12px;flex-direction:column;align-items:center;gap:12px;margin-top:16px;padding:20px 24px;display:flex}.passflow-form-error--critical .icon-warning,.passflow-form-error--persistent .icon-warning{color:#dc2626;flex-shrink:0;width:32px;height:32px}.passflow-form-error-content{flex-direction:column;align-items:center;gap:16px;width:100%;display:flex}.passflow-form-error--critical .passflow-form-error-text,.passflow-form-error--persistent .passflow-form-error-text{color:#991b1b;margin:0;font-size:14px;line-height:1.5}.passflow-form-error-actions{flex-direction:column;justify-content:center;align-items:center;gap:12px;width:100%;display:flex}.passflow-button-setup-2fa{white-space:nowrap;min-width:140px}.passflow-form-info{background-color:#eff6ff;border:1px solid #bfdbfe;border-radius:12px;align-items:flex-start;gap:12px;margin-top:16px;padding:16px;display:flex}.passflow-form-info .icon-info{color:#2563eb;flex-shrink:0;width:20px;height:20px;margin-top:2px}.passflow-form-info-text{color:#1e40af;font-size:14px;line-height:1.5}.passflow-field--disabled,.passflow-field-otp--disabled{cursor:not-allowed;opacity:.5;pointer-events:none}.passflow-button-back-to-signin{white-space:nowrap;min-width:140px}.icon-info{color:#2563eb}.passflow-country-flag{color:var(--passflow-secondary-text-color);font-size:9px;font-weight:var(--passflow-bold);text-transform:uppercase;background-repeat:no-repeat;background-size:408px 384px;border-radius:2px;flex:none;justify-content:center;align-items:center;width:24px;height:18px;line-height:1;display:inline-flex;overflow:hidden}.passflow-country-flag--fallback{background-color:var(--passflow-input-background-color);outline:1px solid var(--passflow-input-border-color)}.icon-warning{filter:brightness(0)saturate()invert(17%)sepia(98%)saturate(3037%)hue-rotate(354deg)brightness(87%)contrast(90%)}.icon-white{filter:brightness(0)saturate()invert()sepia(2%)saturate(7%)hue-rotate(80deg)brightness(103%)contrast()}.passflow-icon--match-text{-webkit-mask:var(--passflow-icon-mask) center /contain no-repeat;mask:var(--passflow-icon-mask) center /contain no-repeat;background-color:currentColor;flex:none;display:inline-block}.react-international-phone-country-selector{position:relative}.react-international-phone-country-selector-button{appearance:button;background-color:var(--react-international-phone-country-selector-background-color,var(--react-international-phone-background-color,#fff));border:1px solid var(--react-international-phone-country-selector-border-color,var(--react-international-phone-border-color,#dcdcdc));box-sizing:border-box;cursor:pointer;height:var(--react-international-phone-height,36px);text-transform:none;user-select:none;justify-content:center;align-items:center;margin:0;padding:0;display:flex}.react-international-phone-country-selector-button:hover{background-color:var(--react-international-phone-country-selector-background-color-hover,#f5f5f5)}.react-international-phone-country-selector-button--hide-dropdown{cursor:auto}.react-international-phone-country-selector-button--hide-dropdown:hover{background-color:#0000}.react-international-phone-country-selector-button__button-content{justify-content:center;align-items:center;display:flex}.react-international-phone-country-selector-button__flag-emoji{margin:0 4px}.react-international-phone-country-selector-button__flag-emoji--disabled{opacity:.75}.react-international-phone-country-selector-button__dropdown-arrow{border-left:var(--react-international-phone-country-selector-arrow-size,4px) solid transparent;border-right:var(--react-international-phone-country-selector-arrow-size,4px) solid transparent;border-top:var(--react-international-phone-country-selector-arrow-size,4px) solid var(--react-international-phone-country-selector-arrow-color,#777);margin-right:4px;transition:all .1s ease-out}.react-international-phone-country-selector-button__dropdown-arrow--active{transform:rotateX(180deg)}.react-international-phone-country-selector-button__dropdown-arrow--disabled{border-top-color:var(--react-international-phone-disabled-country-selector-arrow-color,#999)}.react-international-phone-country-selector-button--disabled{cursor:auto}.react-international-phone-country-selector-button--disabled,.react-international-phone-country-selector-button--disabled:hover{background-color:var(--react-international-phone-disabled-country-selector-background-color,var(--react-international-phone-disabled-background-color,#f5f5f5))}.react-international-phone-flag-emoji{box-sizing:border-box;height:var(--react-international-phone-flag-height,24px);width:var(--react-international-phone-flag-width,24px)}.react-international-phone-country-selector-dropdown{background-color:var(--react-international-phone-dropdown-item-background-color,var(--react-international-phone-background-color,#fff));box-shadow:var(--react-international-phone-dropdown-shadow,2px 2px 16px #00000040);color:var(--react-international-phone-dropdown-item-text-color,var(--react-international-phone-text-color,#222));left:var(--react-international-phone-dropdown-left,0);max-height:200px;top:var(--react-international-phone-dropdown-top,44px);z-index:1;flex-direction:column;width:300px;margin:0;padding:4px 0;list-style:none;display:flex;position:absolute;overflow-y:scroll}.react-international-phone-country-selector-dropdown__preferred-list-divider{background:var(--react-international-phone-dropdown-preferred-list-divider-color,var(--react-international-phone-border-color,#dcdcdc));height:1px;margin:var(--react-international-phone-dropdown-preferred-list-divider-margin,0);border:none}.react-international-phone-country-selector-dropdown__list-item{box-sizing:border-box;min-height:var(--react-international-phone-dropdown-item-height,28px);align-items:center;padding:2px 8px;display:flex}.react-international-phone-country-selector-dropdown__list-item-flag-emoji{margin-right:8px}.react-international-phone-country-selector-dropdown__list-item-country-name{font-size:var(--react-international-phone-dropdown-item-font-size,14px);text-overflow:ellipsis;white-space:nowrap;margin-right:8px;overflow:hidden}.react-international-phone-country-selector-dropdown__list-item-dial-code{color:var(--react-international-phone-dropdown-item-dial-code-color,gray);font-size:var(--react-international-phone-dropdown-item-font-size,14px)}.react-international-phone-country-selector-dropdown__list-item:hover{background-color:var(--react-international-phone-selected-dropdown-item-background-color,var(--react-international-phone-selected-dropdown-item-background-color,#f5f5f5));cursor:pointer}.react-international-phone-country-selector-dropdown__list-item--focused,.react-international-phone-country-selector-dropdown__list-item--selected{background-color:var(--react-international-phone-selected-dropdown-item-background-color,#f5f5f5);color:var(--react-international-phone-selected-dropdown-item-text-color,var(--react-international-phone-text-color,#222))}.react-international-phone-country-selector-dropdown__list-item--focused .react-international-phone-country-selector-dropdown__list-item-dial-code,.react-international-phone-country-selector-dropdown__list-item--selected .react-international-phone-country-selector-dropdown__list-item-dial-code{color:var(--react-international-phone-selected-dropdown-item-dial-code-color,var(--react-international-phone-dropdown-item-dial-code-color,gray))}.react-international-phone-country-selector-dropdown__list-item--focused{background-color:var(--react-international-phone-selected-dropdown-item-background-color,var(--react-international-phone-selected-dropdown-item-background-color,#f5f5f5))}.react-international-phone-dial-code-preview{background-color:var(--react-international-phone-dial-code-preview-background-color,var(--react-international-phone-background-color,#fff));border:1px solid var(--react-international-phone-dial-code-preview-border-color,var(--react-international-phone-border-color,#dcdcdc));color:var(--react-international-phone-dial-code-preview-text-color,var(--react-international-phone-text-color,#222));font-size:var(--react-international-phone-dial-code-preview-font-size,var(--react-international-phone-font-size,13px));justify-content:center;align-items:center;margin-right:-1px;padding:0 8px;display:flex}.react-international-phone-dial-code-preview--disabled{background-color:var(--react-international-phone-dial-code-preview-disabled-background-color,var(--react-international-phone-disabled-background-color,#f5f5f5));color:var(--react-international-phone-dial-code-preview-disabled-text-color,var(--react-international-phone-disabled-text-color,#666))}.react-international-phone-input-container{display:flex}.react-international-phone-input-container .react-international-phone-country-selector-button{border-radius:var(--react-international-phone-border-radius,4px);border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-1px}.react-international-phone-input-container .react-international-phone-input{background-color:var(--react-international-phone-background-color,#fff);border:1px solid var(--react-international-phone-border-color,#dcdcdc);border-radius:var(--react-international-phone-border-radius,4px);box-sizing:border-box;color:var(--react-international-phone-text-color,#222);font-family:inherit;font-size:var(--react-international-phone-font-size,13px);height:var(--react-international-phone-height,36px);border-top-left-radius:0;border-bottom-left-radius:0;margin:0;padding:0 8px;overflow:visible}.react-international-phone-input-container .react-international-phone-input:focus{outline:none}.react-international-phone-input-container .react-international-phone-input--disabled{background-color:var(--react-international-phone-disabled-background-color,#f5f5f5);color:var(--react-international-phone-disabled-text-color,#666)}#passflow-wrapper{box-sizing:border-box;-webkit-font-smoothing:antialiased;font-family:Inter,sans-serif;overflow-x:hidden}#passflow-wrapper,.passflow-wrapper{width:100%;min-height:100dvh}.passflow-wrapper{background-color:var(--passflow-background-color);background-image:var(--passflow-background-image);color:var(--passflow-text-color);background-position:50%;background-repeat:no-repeat;background-size:cover;flex-direction:column;display:flex}.passflow-branding{background-color:var(--passflow-branding-background-color);border-radius:4px;flex:none;justify-content:center;align-self:flex-end;align-items:center;gap:4px;margin:0 24px 24px;padding:7px 12px;display:flex}.passflow-branding-text{color:var(--passflow-secondary-text-color);font-size:11px;font-weight:var(--passflow-bold);line-height:18px}.passflow-branding-text-secondary{font-weight:var(--passflow-normal)}.passflow-form-main-wrapper{border-radius:6px;flex:1 0 auto;justify-content:safe center;gap:32px;padding:32px 24px}.passflow-form-main-container,.passflow-form-main-wrapper{flex-direction:column;align-items:center;width:100%;display:flex}.passflow-form-main-container{justify-content:center;gap:24px;max-width:384px;margin:0 auto}.passflow-form-header{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;display:flex}.passflow-form-title{color:var(--passflow-text-color);font-size:var(--passflow-h2);font-weight:var(--passflow-bold)}.passflow-form-subtitle{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.passflow-form-main-container-logo{object-fit:contain;object-position:center;border-radius:8px;width:auto;max-width:min(160px,100%);height:auto;max-height:44px}.passflow-error-container{gap:32px;margin-top:-8px}.passflow-error-container,.passflow-error-container-text-wrapper{flex-direction:column;justify-content:start;align-items:center;display:flex}.passflow-error-container-text-wrapper{gap:8px}.passflow-error-container-text{color:var(--passflow-warning);font-size:var(--passflow-h2);font-weight:var(--passflow-bold);text-align:center}.passflow-error-container-text-secondary{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.icon-success{filter:brightness(0)saturate()invert(35%)sepia(38%)saturate(1173%)hue-rotate(106deg)brightness(90%)contrast(95%)}.passflow-login-screen-actions{gap:var(--passflow-spacing-4);max-width:336px;margin:0 auto}.passflow-login-screen-actions,.passflow-login-screen-notice{flex-direction:column;align-items:center;width:100%;display:flex}.passflow-login-screen-notice{gap:var(--passflow-spacing-3);max-width:384px}.passflow-login-screen-code{background-color:var(--passflow-input-background-color);box-sizing:border-box;color:var(--passflow-text-color);font-size:var(--passflow-h1);font-weight:var(--passflow-bold);padding:var(--passflow-spacing-4);user-select:all;border-radius:6px;width:100%}.passflow-login-screen-code,.passflow-login-screen-code-input{letter-spacing:.12em;text-align:center;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}.passflow-login-screen-code-input{font-size:var(--passflow-body-1);text-transform:uppercase}.passflow-login-screen-text{color:var(--passflow-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-normal);line-height:1.5}.passflow-login-screen-centered-text{text-align:center}.passflow-login-screen-centered{text-align:center;align-items:center}.passflow-login-screen-hint{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-medium);text-align:center;line-height:1.5}.passflow-login-screen-app-name{color:var(--passflow-text-color);font-weight:var(--passflow-semibold)}.passflow-login-screen-success{align-items:center;gap:var(--passflow-spacing-1);justify-content:center;display:flex}.passflow-login-screen-success-text{color:var(--passflow-success);font-size:var(--passflow-caption);font-weight:var(--passflow-medium)}.passflow-login-screen-spinner{border:3px solid var(--passflow-grey-three);border-top-color:var(--passflow-primary-color);border-radius:50%;width:26px;height:26px;animation:.8s linear infinite passflow-login-screen-spin}.passflow-login-screen-spinner--small{border-width:2px;width:18px;height:18px}@keyframes passflow-login-screen-spin{to{transform:rotate(1turn)}}@media (width<=480px){.passflow-form-main-wrapper{padding:24px 16px}.passflow-branding{align-self:center;margin:0 16px 16px}}@media (prefers-reduced-motion:reduce){.passflow-login-screen-spinner{animation-duration:3s}}.passflow-login-screen-status{align-items:center;gap:var(--passflow-spacing-3);flex-direction:column;width:100%;display:flex}.passflow-consent-scopes{gap:var(--passflow-spacing-2);flex-direction:column;width:100%;max-width:384px;margin:0 auto;padding:0;list-style:none;display:flex}.passflow-consent-scope{background-color:var(--passflow-card-color);border:1px solid var(--passflow-divider-color);box-sizing:border-box;gap:var(--passflow-spacing-1);padding:var(--passflow-spacing-3) var(--passflow-spacing-4);text-align:left;border-radius:6px;flex-direction:column;display:flex}.passflow-consent-scope-description{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-normal);margin:0;line-height:1.5}.passflow-consent-actions{gap:var(--passflow-spacing-2);flex-direction:column;width:100%;max-width:336px;margin:0 auto;display:flex}
|
|
1
|
+
@import "https://fonts.googleapis.com/css2?family=Gasoek+One&family=Inter:opsz,wght@14..32,100..900&display=swap";[class*=passflow-]{box-sizing:border-box;font:inherit;vertical-align:baseline;border:0;margin:0;padding:0}.passflow-article,.passflow-aside,.passflow-details,.passflow-figcaption,.passflow-figure,.passflow-footer,.passflow-header,.passflow-hgroup,.passflow-menu,.passflow-nav,.passflow-section{display:block}html{scroll-behavior:smooth;font-size:16px}body{text-rendering:optimizespeed;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh;line-height:1.5}.passflow-list{list-style:none}.passflow-link{color:inherit;text-decoration:none}.passflow-canvas,.passflow-image,.passflow-picture,.passflow-svg,.passflow-video{max-width:100%;display:block}.passflow-button{background:0 0;border:none;padding:0}.passflow-button,.passflow-input,.passflow-select,.passflow-textarea{color:inherit;font:inherit}.passflow-table{border-collapse:collapse;border-spacing:0}@media (prefers-reduced-motion:reduce){[class*=passflow-]{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}body,html{box-sizing:border-box;margin:0;padding:0}:root{--passflow-primary:#0c59dd;--passflow-primary-dark:#0a47b1;--passflow-warning:#b42318;--passflow-warning-dark:#8f1f17;--passflow-dark:#1e1e1e;--passflow-dark-two:#2e2e2e;--passflow-dark-three:#3e3e3e;--passflow-white:#fff;--passflow-grey-one:#5f6368;--passflow-grey-two:#bfbfbf;--passflow-grey-three:#e9eaf0;--passflow-grey-four:#f3f5f7;--passflow-background:#f8f9fb;--passflow-success:#067647;--passflow-primary-color:var(--passflow-primary);--passflow-text-color:var(--passflow-dark);--passflow-secondary-text-color:var(--passflow-grey-one);--passflow-button-text-color:var(--passflow-white);--passflow-background-color:var(--passflow-white);--passflow-background-image:url();--passflow-card-color:var(--passflow-white);--passflow-branding-background-color:var(--passflow-background);--passflow-input-background-color:var(--passflow-grey-four);--passflow-input-border-color:var(--passflow-grey-four);--passflow-passkey-button-text-color:var(--passflow-white);--passflow-passkey-button-background-color:var(--passflow-dark);--passflow-divider-color:var(--passflow-grey-three);--passflow-federated_button_background_color:var(--passflow-background);--passflow-federated_button_text_color:var(--passflow-dark);--passflow-focus-color:var(--passflow-primary-color);--passflow-link-color:var(--passflow-primary-color);--passflow-font-family:"Inter",sans-serif;--passflow-h1:2rem;--passflow-h2:1.5rem;--passflow-body-1:1rem;--passflow-body-2:13px;--passflow-caption:12px;--passflow-normal:400;--passflow-medium:500;--passflow-semibold:600;--passflow-bold:700;--passflow-spacing-1:4px;--passflow-spacing-2:8px;--passflow-spacing-3:12px;--passflow-spacing-4:16px;--passflow-spacing-5:20px;--passflow-spacing-6:24px;--passflow-radius:4px;--passflow-surface-width:384px}.passflow-heading{color:var(--passflow-text-color);font-size:var(--passflow-h1);margin-bottom:var(--passflow-spacing-4);font-weight:600}.passflow-text{color:var(--passflow-text-color);font-size:var(--passflow-body-1);line-height:1.5}.passflow-secondary-text{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2)}.passflow-secondary-font{font-family:Gasoek One,sans-serif;font-style:normal}.passflow-button{cursor:pointer;font-size:var(--passflow-body-2);padding:var(--passflow-spacing-3) var(--passflow-spacing-6);border-radius:4px;justify-content:center;align-items:center;font-weight:500;transition:all .2s;display:inline-flex;position:relative;overflow:hidden}.passflow-button:focus-visible{outline:2px solid var(--passflow-focus-color);outline-offset:2px}.passflow-button--primary{background-color:var(--passflow-primary-color);color:var(--passflow-button-text-color);box-shadow:0 3px 15px #0c59dd59}.passflow-button--primary:focus-visible,.passflow-button--primary:hover{background-color:var(--passflow-primary-color)}.passflow-button--secondary{background-color:var(--passflow-white);border:1px solid var(--passflow-primary-color);color:var(--passflow-primary-color)}.passflow-button--secondary:focus-visible,.passflow-button--secondary:hover{border-color:var(--passflow-primary-color);color:var(--passflow-primary-color)}.passflow-button--outlined{background-color:var(--passflow-white);border:1px solid var(--passflow-grey-four);color:var(--passflow-dark)}.passflow-button--outlined:focus-visible,.passflow-button--outlined:hover{background-color:var(--passflow-grey-four)}.passflow-button--warning{background-color:var(--passflow-warning);color:var(--passflow-button-text-color);box-shadow:0 5px 9px #d85d5d40}.passflow-button--warning:focus-visible,.passflow-button--warning:hover{background-color:var(--passflow-warning-dark)}.passflow-button--clean{background-color:var(--passflow-white);border:none}.passflow-button--provider{background-color:var(--passflow-federated_button_background_color)}.passflow-button--provider:focus-visible,.passflow-button--provider:hover{background-color:var(--passflow-grey-four)}.passflow-button--dark{background-color:var(--passflow-dark-three);color:var(--passflow-button-text-color);box-shadow:0 3px 15px #1e1e1e59}.passflow-button--dark:focus-visible,.passflow-button--dark:hover{opacity:.9}.passflow-button--small{max-width:28px;height:28px;padding:var(--passflow-spacing-1);width:100%}.passflow-button--medium{font-size:var(--passflow-body-2);max-width:66px;height:32px;padding:7px var(--passflow-spacing-3);width:100%}.passflow-button--big{font-size:var(--passflow-body-2);min-width:40px;max-width:336px;height:48px;padding:15px var(--passflow-spacing-2);width:100%;font-weight:600}.passflow-button--dark:disabled,.passflow-button--primary:disabled,.passflow-button--warning:disabled{background-color:var(--passflow-grey-two);box-shadow:none;cursor:not-allowed}.passflow-button--outlined:disabled,.passflow-button--secondary:disabled{background-color:var(--passflow-white);border-color:var(--passflow-grey-four);color:var(--passflow-grey-two);cursor:not-allowed}.passflow-button--clean:disabled{cursor:not-allowed;opacity:.5;background-color:#0000}.passflow-button--with-icon{gap:var(--passflow-spacing-2)}.passflow-button--as-icon{width:max-content;height:max-content;padding:0}.passflow-button--option{background-color:var(--passflow-white);border:1px solid var(--passflow-grey-four);color:var(--passflow-text-color);align-items:flex-start;gap:var(--passflow-spacing-1);max-width:none;height:auto;padding:var(--passflow-spacing-3);text-align:left;flex-direction:column;width:100%}.passflow-button--option:focus-visible,.passflow-button--option:hover{background-color:var(--passflow-grey-four)}.passflow-button--option[aria-pressed=true]{border-color:var(--passflow-primary-color)}.passflow-button--option:disabled{background-color:var(--passflow-white);border-color:var(--passflow-grey-four);cursor:not-allowed}.passflow-button__option-label{color:var(--passflow-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium)}.passflow-button__option-hint{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-normal)}.passflow-button--option:disabled .passflow-button__option-hint,.passflow-button--option:disabled .passflow-button__option-label{color:var(--passflow-grey-two)}.passflow-button-go-back-error,.passflow-button-passkey,.passflow-button-passwordless,.passflow-button-resend-magic-link,.passflow-button-resend-reset-password,.passflow-button-reset-password,.passflow-button-send-reset-password,.passflow-button-signin,.passflow-button-signup{font-size:var(--passflow-body-2);font-weight:var(--passflow-semibold);margin:0 auto;line-height:18px}.passflow-button-passkey{background-color:var(--passflow-passkey-button-background-color);color:var(--passflow-passkey-button-text-color)}.passflow-button-passwordless--active{border:1px solid var(--passflow-primary-color);color:var(--passflow-primary-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-semibold);background-color:#0000;line-height:18px}.passflow-button-show-country{background-color:var(--passflow-input-background-color);border-radius:4px;gap:4px;width:56px;min-width:56px;margin-left:8px;padding:12px 4px}.passflow-button-display-password{background-color:#0000}.passflow-send-reset-wrapper{flex-direction:column;gap:24px;display:flex}.passflow-button-resend-magic-link,.passflow-button-resend-reset-password{font-weight:var(--passflow-medium);max-width:196px}.passflow-button-go-back-error{font-weight:var(--passflow-medium);width:196px;max-width:100%}.passflow-button-resend-magic-link:hover{background-color:var(--passflow-grey-four)}.passflow-button-timer{background-color:var(--passflow-background-color);font-weight:var(--passflow-semibold);max-width:max-content;padding:3px;display:inline-block}.passflow-button-timer--active{color:var(--passflow-secondary-text-color);opacity:1!important}.passflow-button-timer--inactive{color:var(--passflow-primary-color)}.passflow-field{background-color:var(--passflow-input-background-color);color:var(--passflow-dark);font-size:var(--passflow-body-2);outline:1px solid var(--passflow-input-border-color);min-height:48px;padding:11px var(--passflow-spacing-3);border-radius:4px;justify-content:flex-start;align-items:center;width:100%;display:flex}.passflow-field::placeholder{color:var(--passflow-secondary-text-color)}.passflow-field--focused:focus-visible,.passflow-field-otp--focused:focus-visible{outline:1px solid var(--passflow-primary-color)}.passflow-field--error,.passflow-field-otp--error{outline:1px solid var(--passflow-warning)!important}.passflow-field:disabled{border-color:var(--passflow-input-border-color);color:var(--passflow-secondary-text-color);cursor:not-allowed}.passflow-field-otp,.passflow-field:disabled{background-color:var(--passflow-input-background-color)}.passflow-field-otp{color:var(--passflow-dark);font-size:var(--passflow-body-2);outline:1px solid var(--passflow-input-border-color);text-align:center;border-radius:4px;width:48px;height:48px}.passflow-ripple{background-color:#ffffff4d;border-radius:50%;animation:.6s linear passflow-ripple;position:absolute;transform:scale(0)}@keyframes passflow-ripple{to{opacity:0;transform:scale(4)}}@media (prefers-reduced-motion:reduce){.passflow-ripple{animation:none;display:none}}.passflow-container{max-width:1200px;padding:0 var(--passflow-spacing-4);width:100%;margin:0 auto}.passflow-flex{display:flex}.passflow-flex-col{flex-direction:column}.passflow-items-center{align-items:center}.passflow-justify-center{justify-content:center}.passflow-justify-between{justify-content:space-between}.passflow-mt-4{margin-top:var(--passflow-spacing-4)}.passflow-mb-4{margin-bottom:var(--passflow-spacing-4)}.passflow-gap-4{gap:var(--passflow-spacing-4)}.passflow-form-subscriptions{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center;max-width:384px;margin:-24px auto 0;display:flex}.passflow-field-wrapper{width:100%;position:relative}.passflow-field-container{flex-direction:column;gap:6px;width:100%;display:flex}.passflow-field-label{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-medium);line-height:18px}.passflow-field-label--error{color:var(--passflow-warning)}.passflow-field-label-button{background-color:var(--passflow-card-color);color:var(--passflow-link-color);font-size:var(--passflow-caption);width:max-content;max-width:100%;text-decoration:none}.passflow-field-input,.passflow-field-label-button{font-weight:var(--passflow-medium);line-height:18px}.passflow-field-input{background-color:var(--passflow-input-background-color);color:var(--passflow-text-color);font-size:var(--passflow-body-2);outline:1px solid var(--passflow-input-border-color);min-height:48px;padding:11px var(--passflow-spacing-3);border-radius:4px;width:100%}.passflow-field-input--with-icon{padding-right:40px}.passflow-field-icon-button{width:28px;min-width:28px;height:28px;padding:6px;position:absolute;top:50%;right:0;transform:translate(-8px,-50%)}.passflow-field-error{justify-content:center;align-items:center;gap:4px;margin-top:4px;display:flex}.passflow-field-error-text{color:var(--passflow-warning);font-size:var(--passflow-caption);font-weight:var(--passflow-medium)}.passflow-field-phone-wrapper{background-color:var(--passflow-input-background-color);color:var(--passflow-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);outline:1px solid var(--passflow-input-border-color);border-radius:4px;justify-content:flex-start;align-items:center;width:100%;height:48px;display:flex;position:relative}.passflow-field-phone-wrapper--focus{outline:1px solid var(--passflow-primary-color)}.passflow-field-phone-wrapper--error{outline:1px solid var(--passflow-warning)}.passflow-field-phone-wrapper::placeholder{color:var(--passflow-secondary-text-color)}.passflow-field-phone-input{background-color:var(--passflow-input-background-color);color:var(--passflow-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);border-radius:4px;width:100%;height:48px;padding:0 8px}.passflow-field-phone-input:focus-within{outline:none}.passflow-field-country-search-wrapper{z-index:20;padding-left:28px;position:relative}.passflow-field-country-search,.passflow-field-country-search-wrapper{background-color:var(--passflow-input-background-color);border-radius:4px;width:100%}.passflow-field-country-search{color:var(--passflow-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);height:48px;padding:0 8px}.passflow-field-country-search::placeholder{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);line-height:18px}.passflow-field-country-search:focus-visible{outline:none}.passflow-field-country-search-icon{position:absolute;top:50%;left:12px;transform:translateY(-50%)}.passflow-password-validation{flex-direction:column;gap:4px;margin-top:4px;display:flex}.passflow-password-validation-item{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-medium);justify-content:flex-start;align-items:center;gap:4px;display:flex}.passflow-password-validation-item--success{color:var(--passflow-success)}.passflow-dialog-overlay{z-index:40;background-color:#1e1e1e80;position:fixed;inset:0}.passflow-dialog-content{z-index:50;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.passflow-dialog-header{text-align:center;flex-direction:column;gap:6px;display:flex}@media (width>=640px){.passflow-dialog-header{text-align:left}}.passflow-dialog-footer{flex-direction:column-reverse;gap:8px;display:flex}@media (width>=640px){.passflow-dialog-footer{flex-direction:row;justify-content:flex-end}}.passflow-dialog-title{font-size:var(--passflow-h2);font-weight:var(--passflow-semibold);letter-spacing:-.02em;line-height:1}.passflow-dialog-description{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2)}.passflow-popover-content{background-color:var(--passflow-white);z-index:10;border-radius:4px;box-shadow:0 5px 20px #0000000d}.passflow-popover-menu{flex-direction:column;align-items:flex-start;gap:4px;width:125px;padding:6px;display:flex}.passflow-popover-menu-item{justify-content:flex-start;gap:6px;width:100%;padding:6px}.passflow-popover-menu-item:hover{background-color:var(--passflow-background)}.passflow-popover-menu-item-text{color:var(--passflow-dark-three);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium)}.passflow-popover-menu-item-text--warning{color:var(--passflow-warning)}.passflow-switch-wrapper{cursor:pointer;align-items:center;gap:12px;display:inline-flex;position:relative}.passflow-switch-label{color:var(--passflow-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-medium)}.passflow-switch-input{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.passflow-switch-track{background-color:var(--passflow-grey-two);border-radius:9999px;width:28px;height:16px;transition:background-color .2s;position:relative}.passflow-switch-track:after{background-color:var(--passflow-white);content:"";border-radius:50%;width:12px;height:12px;transition:transform .2s;position:absolute;top:50%;right:14px;transform:translateY(-50%)}.passflow-switch-input:focus-visible+.passflow-switch-track{outline:2px solid var(--passflow-focus-color);outline-offset:2px}.passflow-switch-wrapper--disabled{cursor:not-allowed;opacity:.6}.passflow-switch-input:checked+.passflow-switch-track{background-color:var(--passflow-primary-color)}.passflow-switch-input:checked+.passflow-switch-track:after{transform:translate(12px,-50%)}[dir=rtl] .passflow-switch-input:checked+.passflow-switch-track:after{transform:translate(-14px,-50%)}.passflow-icon{background-color:#0000}.passflow-icon--small{width:16px;height:16px}.passflow-icon--medium{width:20px;height:20px}.passflow-icon--big{width:32px;height:32px}.passflow-icon--large{width:44px;height:44px}.passflow-icon--warning{stroke:var(--passflow-warning)}.passflow-icon--white{background-color:var(--passflow-white)}.passflow-icon--success{stroke:var(--passflow-primary-color)}.passflow-verify-otp{flex-direction:column;gap:32px;display:flex}.passflow-verify-otp-container{background-color:var(--passflow-card-color);border-radius:6px;flex-direction:column;gap:56px;padding:24px 24px 56px;display:flex;box-shadow:0 4px 15px #00000017}.passflow-verify-otp-button{background-color:var(--passflow-background);border:none;position:relative}.passflow-verify-otp-button-icon{position:absolute;top:50%;right:12px;transform:translateY(-50%)}.passflow-verify-otp-wrapper{flex-direction:column;justify-content:center;align-items:center;gap:6px;display:flex}.passflow-verify-otp-inputs{justify-content:center;align-items:center;gap:10px;display:flex}.passflow-verify-otp-error{justify-content:center;align-items:center;gap:4px;display:flex}.passflow-verify-otp-error-text{color:var(--passflow-warning);font-size:var(--passflow-caption);font-weight:var(--passflow-medium)}.passflow-verify-otp-resend{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.passflow-providers-box{flex-flow:wrap;justify-content:center;align-items:center;gap:8px;width:100%;display:flex}.passflow-providers-box--grid{grid-template-columns:repeat(auto-fit,minmax(49px,1fr));justify-content:stretch;align-items:stretch;gap:8px;display:grid}.passflow-provider-item{align-items:center;gap:8px;display:flex}.passflow-provider-text{color:var(--passflow-federated_button_text_color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-transform:capitalize}.passflow-ripple-container{position:absolute;inset:0;overflow:hidden}.passflow-ripple-effect{opacity:.6;background-color:currentColor}.passflow-form{flex-direction:column;gap:32px;width:100%;max-width:384px;display:flex}.passflow-form-switch{justify-content:center;align-items:center;width:100%;margin-bottom:-8px;display:flex}.passflow-form-container{background-color:var(--passflow-card-color);border-radius:6px;gap:24px;max-width:384px;padding:24px;box-shadow:0 4px 15px #00000017}.passflow-form-container,.passflow-form-field{flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;display:flex}.passflow-form-field{gap:6px}.passflow-form-field__header{justify-content:space-between;align-items:center;width:100%;max-height:18px;display:flex}.passflow-form-error{justify-content:center;align-items:center;gap:4px;margin-top:4px;display:flex}.passflow-form-error-text{color:var(--passflow-warning);font-size:var(--passflow-caption);font-weight:var(--passflow-medium)}.passflow-form-actions{justify-content:center;align-items:center;width:100%;max-width:336px;margin:0 auto;display:flex}.passflow-form-actions--top-space{margin-top:-8px}.passflow-form-divider{justify-content:space-between;align-items:center;width:100%;padding:9px 0;display:flex;position:relative}.passflow-form-divider__line-left,.passflow-form-divider__line-right{background-color:var(--passflow-divider-color);width:105px;height:1px}.passflow-form-divider__text{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-medium);background-color:#0000;padding:0 15px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.passflow-form-providers{flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:24px;width:100%;max-width:336px;margin:0 auto;display:flex}.passflow-link{color:var(--passflow-link-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-semibold);line-height:18px}.passflow-dont-have-account,.passflow-have-account,.passflow-remember-password{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center;line-height:18px}.passflow-country-search-wrapper{background-color:var(--passflow-card-color);scrollbar-color:var(--passflow-secondary-text-color) transparent;scrollbar-width:thin;z-index:10;border-bottom-right-radius:4px;border-bottom-left-radius:4px;width:100%;max-height:181px;position:absolute;top:2px;left:0;overflow-y:auto;transform:translateY(48px);box-shadow:0 4px 15px #00000017}.passflow-country-search-wrapper--without-preferred{max-height:170px}.passflow-country-search-wrapper::-webkit-scrollbar{width:6px}.passflow-country-search-wrapper::-webkit-scrollbar-track{background:0 0}.passflow-country-search-wrapper::-webkit-scrollbar-thumb{background-color:var(--passflow-secondary-text-color);border-radius:3px}.passflow-country-search-wrapper--show{opacity:1;visibility:visible;transition:opacity .2s,visibility .2s;display:block}.passflow-country-search-wrapper--hidden{opacity:0;visibility:hidden;display:none}.passflow-country-search-sticky-bottom,.passflow-country-search-sticky-top{background-color:var(--passflow-card-color);z-index:10;width:100%;height:10px;position:sticky;left:0;overflow-x:hidden}.passflow-country-search-sticky-top{top:0}.passflow-country-search-sticky-bottom{bottom:0}.passflow-country-search-item{background-color:var(--passflow-card-color);cursor:pointer;justify-content:flex-start;align-items:center;width:100%;max-height:32px;padding:7px 12px;transition:background-color .2s;display:flex}.passflow-country-search-item:focus,.passflow-country-search-item:hover{background-color:var(--passflow-background)}.passflow-country-search-flag{width:24px;height:18px}.passflow-country-search-name{color:var(--passflow-text-color);margin-left:8px}.passflow-country-search-code,.passflow-country-search-name{font-size:var(--passflow-body-2);font-weight:var(--passflow-medium)}.passflow-country-search-code{color:var(--passflow-secondary-text-color);margin-left:auto;transition:color .2s}.passflow-country-search-item:hover .passflow-country-search-code{color:var(--passflow-text-color)}.passflow-country-search-divider{border-bottom:1px solid var(--passflow-divider-color);font-size:var(--passflow-caption);margin:12px 12px 6px;padding-bottom:6px}.passflow-country-search-divider,.passflow-country-search-no-matches{color:var(--passflow-secondary-text-color);font-weight:var(--passflow-medium)}.passflow-country-search-no-matches{font-size:var(--passflow-body-2);text-align:center;width:100%;margin:0 auto;padding:15px;display:block}.passflow-forgot-password-success-wrapper{flex-direction:column;gap:24px;width:100%;display:flex}.passflow-forgot-password-success-container{flex-direction:column;gap:32px;width:100%;max-width:336px;margin-top:-8px;display:flex}.passflow-forgot-password-success-text{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.passflow-forgot-password-success-text--strong{font-weight:var(--passflow-bold)}.passflow-verify-challenge-magic-link-wrapper{flex-direction:column;width:100%;margin:0 auto;display:flex}.passflow-verify-challenge-magic-link-container{flex-direction:column;gap:32px;width:100%;max-width:336px;margin-top:-24px;display:flex}.passflow-verify-challenge-magic-link-text{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.passflow-verify-challenge-magic-link-text--strong{font-weight:var(--passflow-bold)}.passflow-verify-challenge-success-wrapper{gap:32px}.passflow-verify-challenge-success-container,.passflow-verify-challenge-success-wrapper{flex-direction:column;justify-content:flex-start;align-items:center;width:100%;display:flex}.passflow-verify-challenge-success-container{gap:8px}.passflow-verify-challenge-success-text{color:var(--passflow-text-color);font-size:var(--passflow-h2);font-weight:var(--passflow-bold);text-align:center}.passflow-reset-password-text,.passflow-verify-challenge-success-text-secondary{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.passflow-reset-password-text{margin-top:-32px;display:block}.passflow-form-error--critical,.passflow-form-error--persistent{text-align:center;background-color:#fef2f2;border:1px solid #fecaca;border-radius:12px;flex-direction:column;align-items:center;gap:12px;margin-top:16px;padding:20px 24px;display:flex}.passflow-form-error--critical .icon-warning,.passflow-form-error--persistent .icon-warning{color:#dc2626;flex-shrink:0;width:32px;height:32px}.passflow-form-error-content{flex-direction:column;align-items:center;gap:16px;width:100%;display:flex}.passflow-form-error--critical .passflow-form-error-text,.passflow-form-error--persistent .passflow-form-error-text{color:#991b1b;margin:0;font-size:14px;line-height:1.5}.passflow-form-error-actions{flex-direction:column;justify-content:center;align-items:center;gap:12px;width:100%;display:flex}.passflow-button-setup-2fa{white-space:nowrap;min-width:140px}.passflow-form-info{background-color:#eff6ff;border:1px solid #bfdbfe;border-radius:12px;align-items:flex-start;gap:12px;margin-top:16px;padding:16px;display:flex}.passflow-form-info .icon-info{color:#2563eb;flex-shrink:0;width:20px;height:20px;margin-top:2px}.passflow-form-info-text{color:#1e40af;font-size:14px;line-height:1.5}.passflow-field--disabled,.passflow-field-otp--disabled{cursor:not-allowed;opacity:.5;pointer-events:none}.passflow-button-back-to-signin{white-space:nowrap;min-width:140px}.icon-info{color:#2563eb}.passflow-country-flag{color:var(--passflow-secondary-text-color);font-size:9px;font-weight:var(--passflow-bold);text-transform:uppercase;background-repeat:no-repeat;background-size:408px 384px;border-radius:2px;flex:none;justify-content:center;align-items:center;width:24px;height:18px;line-height:1;display:inline-flex;overflow:hidden}.passflow-country-flag--fallback{background-color:var(--passflow-input-background-color);outline:1px solid var(--passflow-input-border-color)}.icon-warning{filter:brightness(0)saturate()invert(17%)sepia(98%)saturate(3037%)hue-rotate(354deg)brightness(87%)contrast(90%)}.icon-white{filter:brightness(0)saturate()invert()sepia(2%)saturate(7%)hue-rotate(80deg)brightness(103%)contrast()}.passflow-icon--match-text{-webkit-mask:var(--passflow-icon-mask) center /contain no-repeat;mask:var(--passflow-icon-mask) center /contain no-repeat;background-color:currentColor;flex:none;display:inline-block}.react-international-phone-country-selector{position:relative}.react-international-phone-country-selector-button{appearance:button;background-color:var(--react-international-phone-country-selector-background-color,var(--react-international-phone-background-color,#fff));border:1px solid var(--react-international-phone-country-selector-border-color,var(--react-international-phone-border-color,#dcdcdc));box-sizing:border-box;cursor:pointer;height:var(--react-international-phone-height,36px);text-transform:none;user-select:none;justify-content:center;align-items:center;margin:0;padding:0;display:flex}.react-international-phone-country-selector-button:hover{background-color:var(--react-international-phone-country-selector-background-color-hover,#f5f5f5)}.react-international-phone-country-selector-button--hide-dropdown{cursor:auto}.react-international-phone-country-selector-button--hide-dropdown:hover{background-color:#0000}.react-international-phone-country-selector-button__button-content{justify-content:center;align-items:center;display:flex}.react-international-phone-country-selector-button__flag-emoji{margin:0 4px}.react-international-phone-country-selector-button__flag-emoji--disabled{opacity:.75}.react-international-phone-country-selector-button__dropdown-arrow{border-left:var(--react-international-phone-country-selector-arrow-size,4px) solid transparent;border-right:var(--react-international-phone-country-selector-arrow-size,4px) solid transparent;border-top:var(--react-international-phone-country-selector-arrow-size,4px) solid var(--react-international-phone-country-selector-arrow-color,#777);margin-right:4px;transition:all .1s ease-out}.react-international-phone-country-selector-button__dropdown-arrow--active{transform:rotateX(180deg)}.react-international-phone-country-selector-button__dropdown-arrow--disabled{border-top-color:var(--react-international-phone-disabled-country-selector-arrow-color,#999)}.react-international-phone-country-selector-button--disabled{cursor:auto}.react-international-phone-country-selector-button--disabled,.react-international-phone-country-selector-button--disabled:hover{background-color:var(--react-international-phone-disabled-country-selector-background-color,var(--react-international-phone-disabled-background-color,#f5f5f5))}.react-international-phone-flag-emoji{box-sizing:border-box;height:var(--react-international-phone-flag-height,24px);width:var(--react-international-phone-flag-width,24px)}.react-international-phone-country-selector-dropdown{background-color:var(--react-international-phone-dropdown-item-background-color,var(--react-international-phone-background-color,#fff));box-shadow:var(--react-international-phone-dropdown-shadow,2px 2px 16px #00000040);color:var(--react-international-phone-dropdown-item-text-color,var(--react-international-phone-text-color,#222));left:var(--react-international-phone-dropdown-left,0);max-height:200px;top:var(--react-international-phone-dropdown-top,44px);z-index:1;flex-direction:column;width:300px;margin:0;padding:4px 0;list-style:none;display:flex;position:absolute;overflow-y:scroll}.react-international-phone-country-selector-dropdown__preferred-list-divider{background:var(--react-international-phone-dropdown-preferred-list-divider-color,var(--react-international-phone-border-color,#dcdcdc));height:1px;margin:var(--react-international-phone-dropdown-preferred-list-divider-margin,0);border:none}.react-international-phone-country-selector-dropdown__list-item{box-sizing:border-box;min-height:var(--react-international-phone-dropdown-item-height,28px);align-items:center;padding:2px 8px;display:flex}.react-international-phone-country-selector-dropdown__list-item-flag-emoji{margin-right:8px}.react-international-phone-country-selector-dropdown__list-item-country-name{font-size:var(--react-international-phone-dropdown-item-font-size,14px);text-overflow:ellipsis;white-space:nowrap;margin-right:8px;overflow:hidden}.react-international-phone-country-selector-dropdown__list-item-dial-code{color:var(--react-international-phone-dropdown-item-dial-code-color,gray);font-size:var(--react-international-phone-dropdown-item-font-size,14px)}.react-international-phone-country-selector-dropdown__list-item:hover{background-color:var(--react-international-phone-selected-dropdown-item-background-color,var(--react-international-phone-selected-dropdown-item-background-color,#f5f5f5));cursor:pointer}.react-international-phone-country-selector-dropdown__list-item--focused,.react-international-phone-country-selector-dropdown__list-item--selected{background-color:var(--react-international-phone-selected-dropdown-item-background-color,#f5f5f5);color:var(--react-international-phone-selected-dropdown-item-text-color,var(--react-international-phone-text-color,#222))}.react-international-phone-country-selector-dropdown__list-item--focused .react-international-phone-country-selector-dropdown__list-item-dial-code,.react-international-phone-country-selector-dropdown__list-item--selected .react-international-phone-country-selector-dropdown__list-item-dial-code{color:var(--react-international-phone-selected-dropdown-item-dial-code-color,var(--react-international-phone-dropdown-item-dial-code-color,gray))}.react-international-phone-country-selector-dropdown__list-item--focused{background-color:var(--react-international-phone-selected-dropdown-item-background-color,var(--react-international-phone-selected-dropdown-item-background-color,#f5f5f5))}.react-international-phone-dial-code-preview{background-color:var(--react-international-phone-dial-code-preview-background-color,var(--react-international-phone-background-color,#fff));border:1px solid var(--react-international-phone-dial-code-preview-border-color,var(--react-international-phone-border-color,#dcdcdc));color:var(--react-international-phone-dial-code-preview-text-color,var(--react-international-phone-text-color,#222));font-size:var(--react-international-phone-dial-code-preview-font-size,var(--react-international-phone-font-size,13px));justify-content:center;align-items:center;margin-right:-1px;padding:0 8px;display:flex}.react-international-phone-dial-code-preview--disabled{background-color:var(--react-international-phone-dial-code-preview-disabled-background-color,var(--react-international-phone-disabled-background-color,#f5f5f5));color:var(--react-international-phone-dial-code-preview-disabled-text-color,var(--react-international-phone-disabled-text-color,#666))}.react-international-phone-input-container{display:flex}.react-international-phone-input-container .react-international-phone-country-selector-button{border-radius:var(--react-international-phone-border-radius,4px);border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-1px}.react-international-phone-input-container .react-international-phone-input{background-color:var(--react-international-phone-background-color,#fff);border:1px solid var(--react-international-phone-border-color,#dcdcdc);border-radius:var(--react-international-phone-border-radius,4px);box-sizing:border-box;color:var(--react-international-phone-text-color,#222);font-family:inherit;font-size:var(--react-international-phone-font-size,13px);height:var(--react-international-phone-height,36px);border-top-left-radius:0;border-bottom-left-radius:0;margin:0;padding:0 8px;overflow:visible}.react-international-phone-input-container .react-international-phone-input:focus{outline:none}.react-international-phone-input-container .react-international-phone-input--disabled{background-color:var(--react-international-phone-disabled-background-color,#f5f5f5);color:var(--react-international-phone-disabled-text-color,#666)}.passflow-spinner{--passflow-spinner-diameter:26px;--passflow-spinner-stroke:3px;border:var(--passflow-spinner-stroke) solid var(--passflow-grey-three);border-top-color:var(--passflow-primary-color);height:var(--passflow-spinner-diameter);width:var(--passflow-spinner-diameter);border-radius:50%;flex:none;animation:.8s linear infinite passflow-spinner-spin}.passflow-spinner--small{--passflow-spinner-diameter:18px;--passflow-spinner-stroke:2px}@keyframes passflow-spinner-spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.passflow-spinner{animation-duration:3s}}#passflow-wrapper{box-sizing:border-box;-webkit-font-smoothing:antialiased;font-family:Inter,sans-serif;overflow-x:hidden}#passflow-wrapper,.passflow-wrapper{width:100%;min-height:100dvh}.passflow-wrapper{background-color:var(--passflow-background-color);background-image:var(--passflow-background-image);color:var(--passflow-text-color);background-position:50%;background-repeat:no-repeat;background-size:cover;flex-direction:column;display:flex}.passflow-branding{background-color:var(--passflow-branding-background-color);border-radius:4px;flex:none;justify-content:center;align-self:flex-end;align-items:center;gap:4px;margin:0 24px 24px;padding:7px 12px;display:flex}.passflow-branding-text{color:var(--passflow-secondary-text-color);font-size:11px;font-weight:var(--passflow-bold);line-height:18px}.passflow-branding-text-secondary{font-weight:var(--passflow-normal)}.passflow-form-main-wrapper{border-radius:6px;flex:1 0 auto;justify-content:safe center;gap:32px;padding:32px 24px}.passflow-form-main-container,.passflow-form-main-wrapper{flex-direction:column;align-items:center;width:100%;display:flex}.passflow-form-main-container{justify-content:center;gap:24px;max-width:384px;margin:0 auto}.passflow-form-header{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;display:flex}.passflow-form-title{color:var(--passflow-text-color);font-size:var(--passflow-h2);font-weight:var(--passflow-bold)}.passflow-form-subtitle{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.passflow-form-main-container-logo{object-fit:contain;object-position:center;border-radius:8px;width:auto;max-width:min(160px,100%);height:auto;max-height:44px}.passflow-error-container{gap:32px;margin-top:-8px}.passflow-error-container,.passflow-error-container-text-wrapper{flex-direction:column;justify-content:start;align-items:center;display:flex}.passflow-error-container-text-wrapper{gap:8px}.passflow-error-container-text{color:var(--passflow-warning);font-size:var(--passflow-h2);font-weight:var(--passflow-bold);text-align:center}.passflow-error-container-text-secondary{color:var(--passflow-secondary-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-medium);text-align:center}.icon-success{filter:brightness(0)saturate()invert(35%)sepia(38%)saturate(1173%)hue-rotate(106deg)brightness(90%)contrast(95%)}.passflow-login-screen-actions{gap:var(--passflow-spacing-4);max-width:336px;margin:0 auto}.passflow-login-screen-actions,.passflow-login-screen-notice{flex-direction:column;align-items:center;width:100%;display:flex}.passflow-login-screen-notice{gap:var(--passflow-spacing-3);max-width:384px}.passflow-login-screen-code{background-color:var(--passflow-input-background-color);box-sizing:border-box;color:var(--passflow-text-color);font-size:var(--passflow-h1);font-weight:var(--passflow-bold);padding:var(--passflow-spacing-4);user-select:all;border-radius:6px;width:100%}.passflow-login-screen-code,.passflow-login-screen-code-input{letter-spacing:.12em;text-align:center;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}.passflow-login-screen-code-input{font-size:var(--passflow-body-1);text-transform:uppercase}.passflow-login-screen-text{color:var(--passflow-text-color);font-size:var(--passflow-body-2);font-weight:var(--passflow-normal);line-height:1.5}.passflow-login-screen-centered-text{text-align:center}.passflow-login-screen-centered{text-align:center;align-items:center}.passflow-login-screen-hint{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-medium);text-align:center;line-height:1.5}.passflow-login-screen-app-name{color:var(--passflow-text-color);font-weight:var(--passflow-semibold)}.passflow-login-screen-success{align-items:center;gap:var(--passflow-spacing-1);justify-content:center;display:flex}.passflow-login-screen-success-text{color:var(--passflow-success);font-size:var(--passflow-caption);font-weight:var(--passflow-medium)}.passflow-login-screen-spinner{border:3px solid var(--passflow-grey-three);border-top-color:var(--passflow-primary-color);border-radius:50%;width:26px;height:26px;animation:.8s linear infinite passflow-login-screen-spin}.passflow-login-screen-spinner--small{border-width:2px;width:18px;height:18px}@keyframes passflow-login-screen-spin{to{transform:rotate(1turn)}}@media (width<=480px){.passflow-form-main-wrapper{padding:24px 16px}.passflow-branding{align-self:center;margin:0 16px 16px}}@media (prefers-reduced-motion:reduce){.passflow-login-screen-spinner{animation-duration:3s}}.passflow-login-screen-status{align-items:center;gap:var(--passflow-spacing-3);flex-direction:column;width:100%;display:flex}.passflow-consent-scopes{gap:var(--passflow-spacing-2);flex-direction:column;width:100%;max-width:384px;margin:0 auto;padding:0;list-style:none;display:flex}.passflow-consent-scope{background-color:var(--passflow-card-color);border:1px solid var(--passflow-divider-color);box-sizing:border-box;gap:var(--passflow-spacing-1);padding:var(--passflow-spacing-3) var(--passflow-spacing-4);text-align:left;border-radius:6px;flex-direction:column;display:flex}.passflow-consent-scope-description{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-normal);margin:0;line-height:1.5}.passflow-consent-actions{gap:var(--passflow-spacing-2);flex-direction:column;width:100%;max-width:336px;margin:0 auto;display:flex}.passflow-upgrade-dialog{background-color:var(--passflow-card-color);border-radius:var(--passflow-radius);box-sizing:border-box;color:var(--passflow-text-color);font-family:var(--passflow-font-family);gap:var(--passflow-spacing-6);max-height:calc(100dvh - var(--passflow-spacing-6)*2);padding:var(--passflow-spacing-6);width:min(var(--passflow-surface-width),calc(100vw - var(--passflow-spacing-6)*2));flex-direction:column;display:flex;overflow-y:auto}.passflow-upgrade-dialog__header{gap:var(--passflow-spacing-2);text-align:left;flex-direction:column;display:flex}.passflow-upgrade-dialog__form,.passflow-upgrade-dialog__status{gap:var(--passflow-spacing-4);flex-direction:column;width:100%;display:flex}.passflow-upgrade-dialog__factor{background-color:var(--passflow-input-background-color);border-radius:var(--passflow-radius);gap:var(--passflow-spacing-1);padding:var(--passflow-spacing-3);flex-direction:column;display:flex}.passflow-upgrade-dialog__factor-label{color:var(--passflow-text-color);font-size:var(--passflow-body-1);font-weight:var(--passflow-semibold)}.passflow-upgrade-dialog__factor-hint,.passflow-upgrade-dialog__status-detail{color:var(--passflow-secondary-text-color);font-size:var(--passflow-caption);font-weight:var(--passflow-normal);margin:0}.passflow-upgrade-dialog__actions,.passflow-upgrade-dialog__alternatives,.passflow-upgrade-dialog__field{gap:var(--passflow-spacing-2);flex-direction:column;width:100%;display:flex}.passflow-upgrade-dialog__alternatives{margin:0;padding:0;list-style:none}.passflow-upgrade-dialog__alternative{width:100%}.passflow-upgrade-dialog__status-head{align-items:center;gap:var(--passflow-spacing-2);display:flex}.passflow-upgrade-dialog__status-message{font-size:var(--passflow-body-1);font-weight:var(--passflow-medium)}.passflow-upgrade-dialog__status-head--success .passflow-upgrade-dialog__status-message{color:var(--passflow-success)}.passflow-upgrade-dialog__status-head--problem .passflow-upgrade-dialog__status-message{color:var(--passflow-warning)}.passflow-upgrade-dialog__status-head--neutral .passflow-upgrade-dialog__status-message,.passflow-upgrade-dialog__status-head--working .passflow-upgrade-dialog__status-message{color:var(--passflow-text-color)}.passflow-upgrade-dialog__bars{background-color:var(--passflow-input-background-color);border-radius:var(--passflow-radius);gap:var(--passflow-spacing-1);padding:var(--passflow-spacing-3);flex-direction:column;display:flex}.passflow-upgrade-dialog__bar{font-size:var(--passflow-caption);gap:var(--passflow-spacing-3);justify-content:space-between;display:flex}.passflow-upgrade-dialog__bar-term{color:var(--passflow-secondary-text-color);font-weight:var(--passflow-medium)}.passflow-upgrade-dialog__bar-value{color:var(--passflow-text-color);font-weight:var(--passflow-semibold)}
|
|
2
2
|
/*$vite$:1*/
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@passflow/react",
|
|
3
3
|
"description": "Passflow React UI Kit",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.10.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"format": "biome format src",
|
|
33
33
|
"format:fix": "biome format --write src",
|
|
34
34
|
"preview": "vite preview",
|
|
35
|
-
"test": "playwright test --config=playwright/playwright.config.ts",
|
|
36
|
-
"test:ui": "playwright test --config=playwright/playwright.ui.config.ts --ui",
|
|
35
|
+
"test": "playwright install chromium && playwright test --config=playwright/playwright.config.ts",
|
|
36
|
+
"test:ui": "playwright install chromium && playwright test --config=playwright/playwright.ui.config.ts --ui",
|
|
37
37
|
"test:unit": "vitest run",
|
|
38
38
|
"test:unit:watch": "vitest",
|
|
39
39
|
"test:coverage": "vitest run --coverage",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@passflow/core": "^0.
|
|
48
|
+
"@passflow/core": "^0.15.0",
|
|
49
49
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
50
50
|
"@radix-ui/react-popover": "^1.1.15",
|
|
51
51
|
"@simplewebauthn/browser": "^13.2.2",
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* Renders the "additional authentication required" UI shown when the
|
|
4
|
-
* server returns 403 `upgrade_required` from `/auth/session/exchange`.
|
|
5
|
-
*
|
|
6
|
-
* **Code path is unreachable today.** The server's `EvaluatePolicy`
|
|
7
|
-
* helper is a scaffolded no-op (returns Satisfied=true for every
|
|
8
|
-
* valid token). The placeholder is shipped now so it is already in
|
|
9
|
-
* place when Subtask E lands and the SDK begins routing the user to
|
|
10
|
-
* the augmented `/auth/refresh` flow with the `upgrade` field. See:
|
|
11
|
-
*
|
|
12
|
-
* - `docs/adr/0002-session-exchange-endpoint.md`
|
|
13
|
-
* (section "The EvaluatePolicy helper contract")
|
|
14
|
-
* - `docs/roadmap/auth-level-enforcement.md` (Subtasks D + E)
|
|
15
|
-
*
|
|
16
|
-
* Consumers can replace this component via the
|
|
17
|
-
* `<PassflowFlow upgradeRequiredPlaceholder={...} />` prop (TODO:
|
|
18
|
-
* wire the prop through once Subtask E activates the path).
|
|
19
|
-
*/
|
|
20
|
-
export declare const UpgradeRequiredPlaceholder: FC;
|
|
21
|
-
//# sourceMappingURL=upgrade-required-placeholder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade-required-placeholder.d.ts","sourceRoot":"","sources":["../../../../src/components/flow/upgrade-required-placeholder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,0BAA0B,EAAE,EAoBxC,CAAC"}
|