@fileflow/sdk 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ImportWizard-Bl9foTic.mjs +2848 -0
- package/dist/ImportWizard-Bl9foTic.mjs.map +1 -0
- package/dist/ImportWizard-CptGek_O.js +73 -0
- package/dist/ImportWizard-CptGek_O.js.map +1 -0
- package/dist/KYCWizard-B73SHhAI.js +37 -0
- package/dist/KYCWizard-B73SHhAI.js.map +1 -0
- package/dist/KYCWizard-D4RKtikr.mjs +756 -0
- package/dist/KYCWizard-D4RKtikr.mjs.map +1 -0
- package/dist/import.js +1 -1
- package/dist/import.mjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +2 -2
- package/dist/kyc.js +1 -1
- package/dist/kyc.mjs +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/ImportWizard-CtAWJz5i.mjs +0 -2867
- package/dist/ImportWizard-CtAWJz5i.mjs.map +0 -1
- package/dist/ImportWizard-D7zGFzbo.js +0 -68
- package/dist/ImportWizard-D7zGFzbo.js.map +0 -1
- package/dist/KYCWizard-DpNw8vOY.mjs +0 -741
- package/dist/KYCWizard-DpNw8vOY.mjs.map +0 -1
- package/dist/KYCWizard-VcCyxPjW.js +0 -32
- package/dist/KYCWizard-VcCyxPjW.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KYCWizard-D4RKtikr.mjs","sources":["../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/car.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/clock.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/file-text.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/home.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/image.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/shield-check.js","../../../node_modules/.pnpm/lucide-react@0.321.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/shield.js","../src/store/kyc-store.ts","../src/kyc/components/DocumentUploader.tsx","../src/kyc/components/DocumentStatus.tsx","../src/kyc/components/KYCWizard.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Car = createLucideIcon(\"Car\", [\n [\n \"path\",\n {\n d: \"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2\",\n key: \"5owen\"\n }\n ],\n [\"circle\", { cx: \"7\", cy: \"17\", r: \"2\", key: \"u2ysq9\" }],\n [\"path\", { d: \"M9 17h6\", key: \"r8uit2\" }],\n [\"circle\", { cx: \"17\", cy: \"17\", r: \"2\", key: \"axvx0g\" }]\n]);\n\nexport { Car as default };\n//# sourceMappingURL=car.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Clock = createLucideIcon(\"Clock\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\n]);\n\nexport { Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileText = createLucideIcon(\"FileText\", [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n]);\n\nexport { FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Home = createLucideIcon(\"Home\", [\n [\"path\", { d: \"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\", key: \"y5dka4\" }],\n [\"polyline\", { points: \"9 22 9 12 15 12 15 22\", key: \"e2us08\" }]\n]);\n\nexport { Home as default };\n//# sourceMappingURL=home.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Image = createLucideIcon(\"Image\", [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n]);\n\nexport { Image as default };\n//# sourceMappingURL=image.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldCheck = createLucideIcon(\"ShieldCheck\", [\n [\"path\", { d: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10\", key: \"1irkt0\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { ShieldCheck as default };\n//# sourceMappingURL=shield-check.js.map\n","/**\n * @license lucide-react v0.321.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Shield = createLucideIcon(\"Shield\", [\n [\"path\", { d: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10\", key: \"1irkt0\" }]\n]);\n\nexport { Shield as default };\n//# sourceMappingURL=shield.js.map\n","import { create } from 'zustand';\nimport type { \n DocumentType, \n KYCDocument, \n DocumentStatus,\n FraudFlag,\n ExtractedData,\n} from '@fileflow/shared';\n\nexport type KYCStep = 'select' | 'upload' | 'processing' | 'review' | 'complete';\n\nexport interface DocumentState {\n id: string | null;\n type: DocumentType;\n status: DocumentStatus;\n file: File | null;\n previewUrl: string | null;\n extractedData: ExtractedData | null;\n confidence: number;\n fraudFlags: FraudFlag[];\n error: string | null;\n}\n\nexport interface KYCState {\n // Session\n sessionId: string | null;\n status: string;\n step: KYCStep;\n \n // Required documents\n requiredDocuments: DocumentType[];\n currentDocumentType: DocumentType | null;\n \n // Document states\n documents: Map<DocumentType, DocumentState>;\n \n // Verification\n isVerified: boolean;\n verificationStatus: object | null;\n \n // UI state\n isLoading: boolean;\n error: string | null;\n}\n\nexport interface KYCActions {\n // Initialize\n setSessionId: (sessionId: string) => void;\n setRequiredDocuments: (documents: DocumentType[]) => void;\n \n // Document management\n setCurrentDocumentType: (type: DocumentType) => void;\n setDocumentFile: (type: DocumentType, file: File) => void;\n setDocumentStatus: (type: DocumentType, status: DocumentStatus) => void;\n setDocumentData: (type: DocumentType, data: Partial<DocumentState>) => void;\n clearDocumentPreview: (type: DocumentType) => void;\n \n // Navigation\n setStep: (step: KYCStep) => void;\n nextDocument: () => void;\n \n // Verification\n setVerificationStatus: (status: object) => void;\n setVerified: (verified: boolean) => void;\n \n // Status\n setStatus: (status: string) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: string | null) => void;\n \n // Helpers\n getNextRequiredDocument: () => DocumentType | null;\n areAllDocumentsUploaded: () => boolean;\n areAllDocumentsProcessed: () => boolean;\n \n // Reset\n reset: () => void;\n}\n\nconst createEmptyDocumentState = (type: DocumentType): DocumentState => ({\n id: null,\n type,\n status: 'uploaded',\n file: null,\n previewUrl: null,\n extractedData: null,\n confidence: 0,\n fraudFlags: [],\n error: null,\n});\n\nconst initialState: KYCState = {\n sessionId: null,\n status: 'idle',\n step: 'select',\n requiredDocuments: [],\n currentDocumentType: null,\n documents: new Map(),\n isVerified: false,\n verificationStatus: null,\n isLoading: false,\n error: null,\n};\n\nexport const useKYCStore = create<KYCState & KYCActions>((set, get) => ({\n ...initialState,\n\n setSessionId: (sessionId) => set({ sessionId }),\n\n setRequiredDocuments: (documents) => {\n const docsMap = new Map<DocumentType, DocumentState>();\n for (const type of documents) {\n docsMap.set(type, createEmptyDocumentState(type));\n }\n set({ \n requiredDocuments: documents, \n documents: docsMap,\n currentDocumentType: documents[0] || null,\n });\n },\n\n setCurrentDocumentType: (type) => set({ currentDocumentType: type }),\n\n setDocumentFile: (type, file) => {\n const { documents } = get();\n const doc = documents.get(type) || createEmptyDocumentState(type);\n \n // Create preview URL\n const previewUrl = URL.createObjectURL(file);\n \n const updated = new Map(documents);\n updated.set(type, {\n ...doc,\n file,\n previewUrl,\n status: 'uploaded',\n error: null,\n });\n \n set({ documents: updated });\n },\n\n setDocumentStatus: (type, status) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc) {\n const updated = new Map(documents);\n updated.set(type, { ...doc, status });\n set({ documents: updated });\n }\n },\n\n setDocumentData: (type, data) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc) {\n const updated = new Map(documents);\n updated.set(type, { ...doc, ...data });\n set({ documents: updated });\n }\n },\n\n clearDocumentPreview: (type) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc?.previewUrl) {\n URL.revokeObjectURL(doc.previewUrl);\n }\n },\n\n setStep: (step) => set({ step }),\n\n nextDocument: () => {\n const { requiredDocuments, currentDocumentType, documents } = get();\n const currentIndex = currentDocumentType \n ? requiredDocuments.indexOf(currentDocumentType) \n : -1;\n \n // Find next document that needs upload\n for (let i = currentIndex + 1; i < requiredDocuments.length; i++) {\n const type = requiredDocuments[i];\n const doc = documents.get(type);\n if (!doc?.file) {\n set({ currentDocumentType: type });\n return;\n }\n }\n \n // All documents uploaded, move to processing/review\n set({ \n currentDocumentType: null,\n step: 'processing',\n });\n },\n\n setVerificationStatus: (status) => set({ verificationStatus: status }),\n \n setVerified: (verified) => set({ isVerified: verified }),\n\n setStatus: (status) => set({ status }),\n \n setLoading: (isLoading) => set({ isLoading }),\n \n setError: (error) => set({ error }),\n\n getNextRequiredDocument: () => {\n const { requiredDocuments, documents } = get();\n for (const type of requiredDocuments) {\n const doc = documents.get(type);\n if (!doc?.file) {\n return type;\n }\n }\n return null;\n },\n\n areAllDocumentsUploaded: () => {\n const { requiredDocuments, documents } = get();\n return requiredDocuments.every((type) => {\n const doc = documents.get(type);\n return doc?.file !== null;\n });\n },\n\n areAllDocumentsProcessed: () => {\n const { requiredDocuments, documents } = get();\n return requiredDocuments.every((type) => {\n const doc = documents.get(type);\n return doc?.status === 'completed' || doc?.status === 'requires_review';\n });\n },\n\n reset: () => {\n // Clean up preview URLs\n const { documents } = get();\n for (const doc of documents.values()) {\n if (doc.previewUrl) {\n URL.revokeObjectURL(doc.previewUrl);\n }\n }\n set(initialState);\n },\n}));\n","import React, { useCallback } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { Upload, FileText, Image, AlertCircle, X } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore } from '../../store/kyc-store';\nimport type { DocumentType } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface DocumentUploaderProps {\n documentType: DocumentType;\n onFileSelect?: (file: File) => void;\n}\n\nexport const DocumentUploader: React.FC<DocumentUploaderProps> = ({\n documentType,\n onFileSelect,\n}) => {\n const { documents, setDocumentFile, isLoading } = useKYCStore();\n const documentState = documents.get(documentType);\n const documentInfo = DOCUMENT_TYPES[documentType];\n\n const onDrop = useCallback(\n (acceptedFiles: File[], rejectedFiles: unknown[]) => {\n if (rejectedFiles.length > 0) {\n return;\n }\n\n if (acceptedFiles.length > 0) {\n const file = acceptedFiles[0];\n setDocumentFile(documentType, file);\n onFileSelect?.(file);\n }\n },\n [documentType, onFileSelect, setDocumentFile]\n );\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: {\n 'application/pdf': ['.pdf'],\n 'image/jpeg': ['.jpg', '.jpeg'],\n 'image/png': ['.png'],\n },\n maxSize: documentInfo.maxFileSize,\n multiple: false,\n disabled: isLoading,\n });\n\n const formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n };\n\n const getFileIcon = () => {\n if (documentState?.file?.type === 'application/pdf') {\n return <FileText className=\"ff-w-6 ff-h-6\" />;\n }\n return <Image className=\"ff-w-6 ff-h-6\" />;\n };\n\n const clearFile = (e: React.MouseEvent) => {\n e.stopPropagation();\n useKYCStore.getState().clearDocumentPreview(documentType);\n setDocumentFile(documentType, null as unknown as File);\n };\n\n // Show preview if file is selected\n if (documentState?.file && documentState.previewUrl) {\n return (\n <div className=\"ff-space-y-4\">\n {/* Document Info */}\n <div className=\"ff-p-4 ff-rounded-xl\" style={{ backgroundColor: 'var(--ff-primary-20)', border: '1px solid var(--ff-primary-50)' }}>\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-p-2 ff-rounded-lg\" style={{ backgroundColor: 'var(--ff-primary-30)' }}>\n <span style={{ color: 'var(--ff-primary-90)' }}>{getFileIcon()}</span>\n </div>\n <div className=\"ff-flex-1 ff-min-w-0\">\n <p className=\"ff-font-medium ff-truncate\" style={{ color: 'var(--ff-primary-110)' }}>\n {documentState.file.name}\n </p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-primary-90)' }}>\n {formatFileSize(documentState.file.size)}\n </p>\n </div>\n <button\n onClick={clearFile}\n className=\"ff-p-1.5 ff-rounded-full ff-transition-colors\"\n style={{ color: 'var(--ff-primary-90)' }}\n aria-label=\"Remove file\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n </div>\n\n {/* Preview */}\n <div className=\"ff-document-preview ff-aspect-[3/4] ff-max-h-96\">\n {documentState.file.type === 'application/pdf' ? (\n <iframe\n src={documentState.previewUrl}\n className=\"ff-w-full ff-h-full ff-rounded-xl\"\n title=\"Document preview\"\n />\n ) : (\n <img\n src={documentState.previewUrl}\n alt=\"Document preview\"\n className=\"ff-w-full ff-h-full ff-object-contain ff-rounded-xl\"\n />\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"ff-space-y-6\">\n {/* Document Type Info */}\n <div className=\"ff-text-center ff-mb-4\">\n <h3 className=\"ff-text-lg ff-font-semibold\" style={{ color: 'var(--ff-text-primary)' }}>{documentInfo.label}</h3>\n <p className=\"ff-text-sm ff-mt-1\" style={{ color: 'var(--ff-text-muted)' }}>{documentInfo.description}</p>\n </div>\n\n {/* Dropzone - Demo style */}\n <div\n {...getRootProps()}\n className={clsx(\n 'ff-dropzone',\n isDragActive && 'ff-dropzone-active',\n isLoading && 'ff-opacity-50 ff-cursor-not-allowed'\n )}\n >\n <input {...getInputProps()} />\n <div className=\"ff-dropzone-icon-wrapper\">\n <Upload className=\"ff-dropzone-icon\" />\n </div>\n <h3 className=\"ff-dropzone-text\">\n {isDragActive ? 'Drop your document here' : 'Upload your document'}\n </h3>\n <p className=\"ff-dropzone-hint\">Drag and drop or click to select</p>\n <label className=\"ff-inline-block\">\n <span className={clsx(\n 'ff-btn ff-btn-primary',\n isLoading && 'ff-opacity-50 ff-cursor-wait'\n )}>\n {isLoading ? 'Processing...' : 'Choose file'}\n </span>\n </label>\n <div className=\"ff-flex ff-flex-wrap ff-justify-center ff-gap-2 ff-mt-3\">\n {documentInfo.acceptedFormats.map((format) => (\n <span \n key={format} \n className=\"ff-px-2 ff-py-1 ff-rounded ff-text-xs\"\n style={{ backgroundColor: 'var(--ff-bg-tertiary)', color: 'var(--ff-text-muted)' }}\n >\n {format.toUpperCase()}\n </span>\n ))}\n <span className=\"ff-px-2 ff-py-1 ff-text-xs\" style={{ color: 'var(--ff-text-muted)' }}>\n Max {formatFileSize(documentInfo.maxFileSize)}\n </span>\n </div>\n </div>\n\n {/* Error */}\n {documentState?.error && (\n <div className=\"ff-flex ff-items-center ff-gap-2 ff-p-4 ff-rounded-lg ff-text-sm\" style={{ backgroundColor: 'var(--ff-error-light)', color: 'var(--ff-error)' }}>\n <AlertCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0\" />\n <p>{documentState.error}</p>\n </div>\n )}\n\n {/* Tips */}\n <div className=\"ff-rounded-xl ff-p-4\" style={{ backgroundColor: 'var(--ff-bg-secondary)' }}>\n <h4 className=\"ff-text-sm ff-font-medium ff-mb-2\" style={{ color: 'var(--ff-text-secondary)' }}>Tips for best results:</h4>\n <ul className=\"ff-text-sm ff-space-y-1 ff-list-disc ff-list-inside\" style={{ color: 'var(--ff-text-muted)' }}>\n <li>Ensure all text is clearly visible and readable</li>\n <li>Avoid glare, shadows, or blurry images</li>\n <li>Include all four corners of the document</li>\n <li>Use good lighting when taking photos</li>\n </ul>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { CheckCircle, XCircle, AlertTriangle, Loader2, Clock } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore } from '../../store/kyc-store';\nimport type { DocumentType, DocumentStatus as DocStatus } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface DocumentStatusProps {\n documentType: DocumentType;\n showDetails?: boolean;\n}\n\nexport const DocumentStatus: React.FC<DocumentStatusProps> = ({\n documentType,\n showDetails = true,\n}) => {\n const { documents } = useKYCStore();\n const documentState = documents.get(documentType);\n const documentInfo = DOCUMENT_TYPES[documentType];\n\n const getStatusConfig = (status?: DocStatus) => {\n switch (status) {\n case 'completed':\n return {\n icon: CheckCircle,\n iconColor: 'var(--ff-success)',\n bgColor: 'var(--ff-success-light)',\n label: 'Verified',\n labelColor: 'var(--ff-success)',\n description: 'Document successfully processed',\n };\n case 'requires_review':\n return {\n icon: AlertTriangle,\n iconColor: 'var(--ff-warning)',\n bgColor: 'var(--ff-warning-light)',\n label: 'Review Required',\n labelColor: 'var(--ff-warning)',\n description: 'Manual verification may be needed',\n };\n case 'failed':\n return {\n icon: XCircle,\n iconColor: 'var(--ff-error)',\n bgColor: 'var(--ff-error-light)',\n label: 'Failed',\n labelColor: 'var(--ff-error)',\n description: 'Unable to process document',\n };\n case 'processing':\n return {\n icon: Loader2,\n iconColor: 'var(--ff-primary-90)',\n bgColor: 'var(--ff-primary-20)',\n label: 'Processing',\n labelColor: 'var(--ff-primary-90)',\n description: 'Analyzing document...',\n };\n case 'uploaded':\n return {\n icon: Clock,\n iconColor: 'var(--ff-text-secondary)',\n bgColor: 'var(--ff-bg-tertiary)',\n label: 'Pending',\n labelColor: 'var(--ff-text-secondary)',\n description: 'Waiting to be processed',\n };\n default:\n return {\n icon: Clock,\n iconColor: 'var(--ff-text-muted)',\n bgColor: 'var(--ff-bg-tertiary)',\n label: 'Not Uploaded',\n labelColor: 'var(--ff-text-muted)',\n description: 'Upload document to continue',\n };\n }\n };\n\n const statusConfig = getStatusConfig(documentState?.status);\n const Icon = statusConfig.icon;\n\n const getConfidenceColor = (confidence: number) => {\n if (confidence >= 0.8) return 'var(--ff-success)';\n if (confidence >= 0.6) return 'var(--ff-warning)';\n return 'var(--ff-error)';\n };\n\n return (\n <div className=\"ff-space-y-3\">\n {/* Status Header */}\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-p-2 ff-rounded-xl\" style={{ backgroundColor: statusConfig.bgColor }}>\n <Icon\n className={clsx(\n 'ff-w-5 ff-h-5',\n documentState?.status === 'processing' && 'ff-animate-spin'\n )}\n style={{ color: statusConfig.iconColor }}\n />\n </div>\n <div>\n <p className=\"ff-font-medium\" style={{ color: 'var(--ff-text-primary)' }}>{documentInfo.label}</p>\n <p className=\"ff-text-sm\" style={{ color: statusConfig.labelColor }}>{statusConfig.label}</p>\n </div>\n </div>\n\n {/* Confidence Score */}\n {documentState?.confidence !== undefined && documentState.confidence > 0 && (\n <div className=\"ff-space-y-1\">\n <div className=\"ff-flex ff-items-center ff-justify-between ff-text-sm\">\n <span style={{ color: 'var(--ff-text-secondary)' }}>Confidence</span>\n <span className=\"ff-font-medium\" style={{ color: getConfidenceColor(documentState.confidence) }}>\n {Math.round(documentState.confidence * 100)}%\n </span>\n </div>\n <div className=\"ff-progress\">\n <div\n className=\"ff-progress-bar\"\n style={{ \n width: `${documentState.confidence * 100}%`,\n backgroundColor: getConfidenceColor(documentState.confidence)\n }}\n />\n </div>\n </div>\n )}\n\n {/* Fraud Flags */}\n {showDetails && documentState?.fraudFlags && documentState.fraudFlags.length > 0 && (\n <div className=\"ff-space-y-2\">\n <p className=\"ff-text-sm ff-font-medium\" style={{ color: 'var(--ff-text-secondary)' }}>Issues Detected</p>\n <div className=\"ff-space-y-1\">\n {documentState.fraudFlags.map((flag, index) => (\n <div\n key={index}\n className=\"ff-flex ff-items-start ff-gap-2 ff-p-2 ff-rounded-lg ff-text-sm\"\n style={{\n backgroundColor: flag.severity === 'high' ? 'var(--ff-error-light)' : flag.severity === 'medium' ? 'var(--ff-warning-light)' : 'var(--ff-bg-tertiary)',\n color: flag.severity === 'high' ? 'var(--ff-error)' : flag.severity === 'medium' ? 'var(--ff-warning)' : 'var(--ff-text-secondary)',\n }}\n >\n {flag.severity === 'high' ? (\n <XCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5\" />\n ) : (\n <AlertTriangle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5\" />\n )}\n <span>{flag.message}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Extracted Data Preview */}\n {showDetails &&\n documentState?.extractedData &&\n documentState.status === 'completed' && (\n <div className=\"ff-rounded-xl ff-p-3\" style={{ backgroundColor: 'var(--ff-bg-tertiary)' }}>\n <p className=\"ff-text-sm ff-font-medium ff-mb-2\" style={{ color: 'var(--ff-text-secondary)' }}>\n Extracted Information\n </p>\n <dl className=\"ff-space-y-1 ff-text-sm\">\n {'fullName' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Name</dt>\n <dd className=\"ff-font-medium\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.fullName}\n </dd>\n </div>\n )}\n {'dateOfBirth' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Date of Birth</dt>\n <dd style={{ color: 'var(--ff-text-primary)' }}>{documentState.extractedData.dateOfBirth}</dd>\n </div>\n )}\n {documentState.extractedData.documentType === 'passport' &&\n 'passportNumber' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Passport #</dt>\n <dd className=\"ff-font-mono\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.passportNumber}\n </dd>\n </div>\n )}\n {documentState.extractedData.documentType === 'drivers_license' &&\n 'licenseNumber' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>License #</dt>\n <dd className=\"ff-font-mono\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.licenseNumber}\n </dd>\n </div>\n )}\n {'address' in documentState.extractedData && documentState.extractedData.address && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Address</dt>\n <dd className=\"ff-text-right\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.address.city},{' '}\n {documentState.extractedData.address.province}\n </dd>\n </div>\n )}\n </dl>\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport {\n FileText,\n Car,\n Home,\n CheckCircle,\n X,\n Loader2,\n ChevronRight,\n ShieldCheck,\n Shield,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore, type KYCStep } from '../../store/kyc-store';\nimport { getClient } from '../../api/client';\nimport { DocumentUploader } from './DocumentUploader';\nimport { DocumentStatus } from './DocumentStatus';\nimport type { DocumentType, KYCSession, KYCDocument } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\n// KYC steps for the step indicator\nconst KYC_STEP_LABELS = ['select', 'upload', 'review', 'complete'] as const;\n\ninterface KYCWizardProps {\n requiredDocuments: DocumentType[];\n onComplete?: (session: KYCSession) => void;\n onCancel?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst DOCUMENT_ICONS: Record<DocumentType, React.ElementType> = {\n passport: FileText,\n drivers_license: Car,\n proof_of_address: Home,\n};\n\nexport const KYCWizard: React.FC<KYCWizardProps> = ({\n requiredDocuments,\n onComplete,\n onCancel,\n onError,\n}) => {\n const {\n sessionId,\n step,\n currentDocumentType,\n documents,\n isVerified,\n verificationStatus,\n isLoading,\n error,\n setSessionId,\n setRequiredDocuments,\n setCurrentDocumentType,\n setDocumentStatus,\n setDocumentData,\n setStep,\n nextDocument,\n setVerificationStatus,\n setVerified,\n setLoading,\n setError,\n areAllDocumentsUploaded,\n areAllDocumentsProcessed,\n reset,\n } = useKYCStore();\n\n const [pollingDocument, setPollingDocument] = useState<string | null>(null);\n\n // Initialize\n useEffect(() => {\n setRequiredDocuments(requiredDocuments);\n initializeSession();\n\n return () => {\n // Cleanup polling on unmount\n setPollingDocument(null);\n };\n }, [requiredDocuments]);\n\n const initializeSession = async () => {\n try {\n setLoading(true);\n const client = getClient();\n const result = await client.createKYCSession(requiredDocuments);\n setSessionId(result.sessionId);\n setStep('upload');\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleFileSelect = useCallback(\n async (file: File) => {\n if (!sessionId || !currentDocumentType) return;\n\n try {\n setLoading(true);\n setError(null);\n\n const client = getClient();\n const result = await client.uploadKYCDocument(sessionId, currentDocumentType, file);\n\n setDocumentData(currentDocumentType, {\n id: result.documentId,\n status: 'processing',\n });\n\n // Start polling for document status\n setPollingDocument(result.documentId);\n pollDocumentStatus(result.documentId);\n } catch (err) {\n const error = err as Error;\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: error.message,\n });\n onError?.(error);\n } finally {\n setLoading(false);\n }\n },\n [sessionId, currentDocumentType]\n );\n\n const pollDocumentStatus = async (documentId: string) => {\n const maxAttempts = 30;\n const maxConsecutiveErrors = 3; // Stop after 3 consecutive errors\n let attempts = 0;\n let consecutiveErrors = 0;\n\n const poll = async () => {\n if (attempts >= maxAttempts) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Processing timed out. Please try again.',\n });\n }\n return;\n }\n\n // Stop polling if we've had too many consecutive errors\n if (consecutiveErrors >= maxConsecutiveErrors) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Failed to check document status. Please refresh and try again.',\n });\n }\n return;\n }\n\n try {\n const client = getClient();\n const result = await client.getKYCDocument(documentId);\n const doc = result.document as KYCDocument;\n\n // Reset consecutive errors on success\n consecutiveErrors = 0;\n\n const docType = doc.type as DocumentType;\n setDocumentData(docType, {\n id: doc.id,\n status: doc.status,\n extractedData: doc.extractedData,\n confidence: doc.confidence,\n fraudFlags: doc.fraudFlags,\n error: null, // Clear any previous errors\n });\n\n if (doc.status === 'completed' || doc.status === 'requires_review' || doc.status === 'failed') {\n setPollingDocument(null);\n\n // Check if all documents are processed\n if (areAllDocumentsUploaded()) {\n const allProcessed = areAllDocumentsProcessed();\n if (allProcessed) {\n setStep('review');\n }\n } else {\n // Move to next document\n nextDocument();\n }\n return;\n }\n\n // Continue polling\n attempts++;\n setTimeout(poll, 2000);\n } catch (err) {\n const error = err as Error & { status?: number };\n consecutiveErrors++;\n attempts++;\n \n // On 404, stop immediately - the document doesn't exist\n if (error.status === 404 || error.message?.includes('not found')) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Session not found or invalid state',\n });\n }\n return;\n }\n\n // On other errors, retry with backoff (up to maxConsecutiveErrors times)\n if (consecutiveErrors < maxConsecutiveErrors) {\n setTimeout(poll, 3000 * consecutiveErrors); // Exponential backoff\n } else {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: error.message || 'Failed to process document',\n });\n }\n }\n }\n };\n\n poll();\n };\n\n const handleVerify = async () => {\n if (!sessionId) return;\n\n try {\n setLoading(true);\n setError(null);\n\n const client = getClient();\n const result = await client.verifyKYCSession(sessionId, true);\n\n setVerificationStatus(result.verificationStatus);\n const status = result.verificationStatus as { isVerified: boolean };\n setVerified(status.isVerified);\n setStep('complete');\n\n onComplete?.(result as unknown as KYCSession);\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleCancel = () => {\n reset();\n onCancel?.();\n };\n\n const selectDocument = (type: DocumentType) => {\n setCurrentDocumentType(type);\n setStep('upload');\n };\n\n const isDocumentComplete = (type: DocumentType) => {\n const doc = documents.get(type);\n return doc?.status === 'completed' || doc?.status === 'requires_review';\n };\n\n // Get step index for the step indicator\n const getDisplayStepIndex = () => {\n const currentStep = step === 'processing' ? 'upload' : step;\n return KYC_STEP_LABELS.indexOf(currentStep as typeof KYC_STEP_LABELS[number]);\n };\n\n return (\n <div className=\"ff-container ff-modal\">\n {/* Modal Header - Demo style */}\n <div className=\"ff-modal-header\">\n <div className=\"ff-modal-header-left\">\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-modal-icon\">\n <Shield />\n </div>\n <h2 className=\"ff-modal-title\">Identity Verification</h2>\n </div>\n {/* Step Indicator - Demo style */}\n <div className=\"ff-steps ff-ml-4\">\n {KYC_STEP_LABELS.map((s, i) => (\n <React.Fragment key={s}>\n <div\n className={clsx(\n 'ff-step',\n getDisplayStepIndex() === i && 'ff-step-active',\n getDisplayStepIndex() > i && 'ff-step-complete',\n getDisplayStepIndex() < i && 'ff-step-pending'\n )}\n >\n {getDisplayStepIndex() > i ? '✓' : i + 1}\n </div>\n {i < KYC_STEP_LABELS.length - 1 && (\n <div className={clsx(\n 'ff-step-connector',\n getDisplayStepIndex() > i && 'ff-step-connector-complete'\n )} />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n <button\n onClick={handleCancel}\n className=\"ff-modal-close\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n\n {/* Modal Body */}\n <div className=\"ff-modal-body\">\n {error && (\n <div className=\"ff-mb-4 ff-p-4 ff-rounded-lg ff-text-sm\" style={{ backgroundColor: 'var(--ff-error-light)', color: 'var(--ff-error)' }}>\n {error}\n </div>\n )}\n\n {/* Document Selection */}\n {step === 'select' && (\n <div className=\"ff-space-y-4\">\n <p className=\"ff-text-center ff-mb-6\" style={{ color: 'var(--ff-text-muted)' }}>\n Please upload the following documents to verify your identity\n </p>\n <div className=\"ff-grid ff-gap-3\">\n {requiredDocuments.map((type) => {\n const Icon = DOCUMENT_ICONS[type];\n const info = DOCUMENT_TYPES[type];\n const doc = documents.get(type);\n const isComplete = isDocumentComplete(type);\n\n return (\n <button\n key={type}\n onClick={() => selectDocument(type)}\n className={clsx(\n 'ff-flex ff-items-center ff-gap-4 ff-p-4 ff-rounded-xl ff-border-2 ff-text-left ff-transition-all ff-duration-150',\n isComplete\n ? 'ff-border-transparent'\n : 'ff-border-transparent hover:ff-border-transparent'\n )}\n style={{\n backgroundColor: isComplete ? 'var(--ff-success-light)' : 'var(--ff-bg-secondary)',\n borderColor: isComplete ? 'var(--ff-success)' : 'var(--ff-border-light)',\n }}\n >\n <div\n className=\"ff-p-3 ff-rounded-xl\"\n style={{\n backgroundColor: isComplete ? 'rgba(41, 142, 51, 0.15)' : 'var(--ff-bg-tertiary)',\n }}\n >\n {isComplete ? (\n <CheckCircle className=\"ff-w-6 ff-h-6\" style={{ color: 'var(--ff-success)' }} />\n ) : (\n <Icon className=\"ff-w-6 ff-h-6\" style={{ color: 'var(--ff-text-secondary)' }} />\n )}\n </div>\n <div className=\"ff-flex-1\">\n <p className=\"ff-font-medium\" style={{ color: 'var(--ff-text-primary)' }}>{info.label}</p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-text-muted)' }}>{info.description}</p>\n </div>\n <ChevronRight className=\"ff-w-5 ff-h-5\" style={{ color: 'var(--ff-text-muted)' }} />\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Document Upload */}\n {step === 'upload' && currentDocumentType && (\n <div className=\"ff-py-4\">\n <div className=\"ff-max-w-lg ff-mx-auto\">\n <DocumentUploader documentType={currentDocumentType} onFileSelect={handleFileSelect} />\n </div>\n </div>\n )}\n\n {/* Processing */}\n {step === 'processing' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12\">\n <Loader2 className=\"ff-w-12 ff-h-12 ff-animate-spin ff-mb-4\" style={{ color: 'var(--ff-primary-90)' }} />\n <h3 className=\"ff-text-lg ff-font-semibold ff-mb-2\" style={{ color: 'var(--ff-text-primary)' }}>\n Processing Documents\n </h3>\n <p style={{ color: 'var(--ff-text-muted)' }} className=\"ff-text-center\">\n We're analyzing your documents. This may take a moment...\n </p>\n </div>\n )}\n\n {/* Review */}\n {step === 'review' && (\n <div className=\"ff-space-y-6\">\n <div className=\"ff-text-center ff-mb-6\">\n <h3 className=\"ff-text-lg ff-font-semibold\" style={{ color: 'var(--ff-text-primary)' }}>Review Your Documents</h3>\n <p style={{ color: 'var(--ff-text-muted)' }}>\n Please review the extracted information before completing verification\n </p>\n </div>\n\n <div className=\"ff-grid ff-gap-4\">\n {requiredDocuments.map((type) => (\n <div\n key={type}\n className=\"ff-rounded-xl ff-p-4\"\n style={{ backgroundColor: 'var(--ff-bg-secondary)', border: '1px solid var(--ff-border-light)' }}\n >\n <DocumentStatus documentType={type} showDetails={true} />\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Complete */}\n {step === 'complete' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12\">\n <div\n className=\"ff-w-16 ff-h-16 ff-rounded-full ff-flex ff-items-center ff-justify-center ff-mb-4\"\n style={{ backgroundColor: isVerified ? 'var(--ff-success-light)' : 'var(--ff-warning-light)' }}\n >\n {isVerified ? (\n <CheckCircle className=\"ff-w-10 ff-h-10\" style={{ color: 'var(--ff-success)' }} />\n ) : (\n <ShieldCheck className=\"ff-w-10 ff-h-10\" style={{ color: 'var(--ff-warning)' }} />\n )}\n </div>\n <h3 className=\"ff-text-xl ff-font-semibold ff-mb-2\" style={{ color: 'var(--ff-text-primary)' }}>\n {isVerified ? 'Verification Complete!' : 'Review Required'}\n </h3>\n <p style={{ color: 'var(--ff-text-muted)' }} className=\"ff-text-center\">\n {isVerified\n ? 'Your identity has been successfully verified.'\n : 'Additional review may be required. We will contact you if needed.'}\n </p>\n </div>\n )}\n </div>\n\n {/* Modal Footer */}\n {step !== 'complete' && (\n <div className=\"ff-modal-footer\">\n <button\n onClick={() => {\n if (step === 'upload') {\n setStep('select');\n } else if (step === 'review') {\n setStep('select');\n }\n }}\n disabled={isLoading}\n className=\"ff-btn ff-btn-secondary\"\n >\n Back\n </button>\n\n {step === 'review' && (\n <button\n onClick={handleVerify}\n disabled={isLoading || !areAllDocumentsProcessed()}\n className=\"ff-btn ff-btn-primary\"\n >\n {isLoading ? (\n <>\n <Loader2 className=\"ff-w-4 ff-h-4 ff-animate-spin\" />\n Verifying...\n </>\n ) : (\n 'Complete Verification'\n )}\n </button>\n )}\n\n {step === 'select' && areAllDocumentsUploaded() && (\n <button\n onClick={() => setStep('review')}\n className=\"ff-btn ff-btn-primary\"\n >\n Review & Verify\n </button>\n )}\n </div>\n )}\n </div>\n );\n};\n"],"names":["Car","createLucideIcon","Clock","FileText","Home","Image","ShieldCheck","Shield","createEmptyDocumentState","type","initialState","useKYCStore","create","set","get","sessionId","documents","docsMap","file","doc","previewUrl","updated","status","data","step","requiredDocuments","currentDocumentType","currentIndex","i","verified","isLoading","error","DocumentUploader","documentType","onFileSelect","setDocumentFile","documentState","documentInfo","DOCUMENT_TYPES","onDrop","useCallback","acceptedFiles","rejectedFiles","getRootProps","getInputProps","isDragActive","useDropzone","formatFileSize","bytes","getFileIcon","_a","jsx","clearFile","e","jsxs","X","clsx","Upload","format","AlertCircle","DocumentStatus","showDetails","statusConfig","CheckCircle","AlertTriangle","XCircle","Loader2","Icon","getConfidenceColor","confidence","flag","index","KYC_STEP_LABELS","DOCUMENT_ICONS","KYCWizard","onComplete","onCancel","onError","isVerified","verificationStatus","setSessionId","setRequiredDocuments","setCurrentDocumentType","setDocumentStatus","setDocumentData","setStep","nextDocument","setVerificationStatus","setVerified","setLoading","setError","areAllDocumentsUploaded","areAllDocumentsProcessed","reset","pollingDocument","setPollingDocument","useState","useEffect","initializeSession","result","getClient","err","handleFileSelect","pollDocumentStatus","documentId","attempts","consecutiveErrors","poll","docType","handleVerify","handleCancel","selectDocument","isDocumentComplete","getDisplayStepIndex","currentStep","s","React","info","isComplete","ChevronRight","Fragment"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}
|
package/dist/import.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./ImportWizard-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./ImportWizard-CptGek_O.js");exports.ColumnMapper=r.ColumnMapper;exports.DataTable=r.DataTable;exports.FileUploader=r.FileUploader;exports.ImportWizard=r.ImportWizard;exports.ValidationSummary=r.ValidationSummary;exports.useImportStore=r.useImportStore;
|
|
2
2
|
//# sourceMappingURL=import.js.map
|
package/dist/import.mjs
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-VbMSbLb2.js"),t=require("./ImportWizard-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-VbMSbLb2.js"),t=require("./ImportWizard-CptGek_O.js"),a=require("./KYCWizard-B73SHhAI.js");exports.CANADIAN_PROVINCES=e.CANADIAN_PROVINCES;exports.DOCUMENT_TYPES=e.DOCUMENT_TYPES;exports.FileFlowClient=e.FileFlowClient;exports.FileFlowError=e.FileFlowError;exports.IMPORT_TEMPLATES=e.IMPORT_TEMPLATES;exports.VALID_TEMPLATE_IDS=e.VALID_TEMPLATE_IDS;exports.getAvailableTemplates=e.getAvailableTemplates;exports.getClient=e.getClient;exports.getTemplate=e.getTemplate;exports.getTemplateSchema=e.getTemplateSchema;exports.getTemplatesByCategory=e.getTemplatesByCategory;exports.initializeClient=e.initializeClient;exports.listTemplates=e.listTemplates;exports.templateExists=e.templateExists;exports.ColumnMapper=t.ColumnMapper;exports.DataTable=t.DataTable;exports.FileUploader=t.FileUploader;exports.ImportWizard=t.ImportWizard;exports.ValidationSummary=t.ValidationSummary;exports.useImportStore=t.useImportStore;exports.DocumentStatus=a.DocumentStatus;exports.DocumentUploader=a.DocumentUploader;exports.KYCWizard=a.KYCWizard;exports.useKYCStore=a.useKYCStore;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { C as s, D as t, F as l, a as o, I as r, V as i, d as m, g as p, b as T, c as C, e as D, i as u, l as E, t as I } from "./index-CEvc89fO.mjs";
|
|
2
|
-
import { C as n, D as g, F as A, I as F, V as d, u as M } from "./ImportWizard-
|
|
3
|
-
import { a as V, D as _, K as c, u as x } from "./KYCWizard-
|
|
2
|
+
import { C as n, D as g, F as A, I as F, V as d, u as M } from "./ImportWizard-Bl9foTic.mjs";
|
|
3
|
+
import { a as V, D as _, K as c, u as x } from "./KYCWizard-D4RKtikr.mjs";
|
|
4
4
|
export {
|
|
5
5
|
s as CANADIAN_PROVINCES,
|
|
6
6
|
n as ColumnMapper,
|
package/dist/kyc.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./KYCWizard-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./KYCWizard-B73SHhAI.js");exports.DocumentStatus=e.DocumentStatus;exports.DocumentUploader=e.DocumentUploader;exports.KYCWizard=e.KYCWizard;exports.useKYCStore=e.useKYCStore;
|
|
2
2
|
//# sourceMappingURL=kyc.js.map
|
package/dist/kyc.mjs
CHANGED
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,SF Mono,Monaco,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.ff-container{width:100%}@media (min-width: 640px){.ff-container{max-width:640px}}@media (min-width: 768px){.ff-container{max-width:768px}}@media (min-width: 1024px){.ff-container{max-width:1024px}}@media (min-width: 1280px){.ff-container{max-width:1280px}}@media (min-width: 1536px){.ff-container{max-width:1536px}}.ff-relative{position:relative}.ff-bottom-full{bottom:100%}.ff-left-1\/2{left:50%}.ff-mx-4{margin-left:1rem;margin-right:1rem}.ff-mx-auto{margin-left:auto;margin-right:auto}.ff-mb-2{margin-bottom:.5rem}.ff-mb-4{margin-bottom:1rem}.ff-mb-6{margin-bottom:1.5rem}.ff-mr-1{margin-right:.25rem}.ff-mr-2{margin-right:.5rem}.ff-mt-0\.5{margin-top:.125rem}.ff-mt-1{margin-top:.25rem}.ff-mt-2{margin-top:.5rem}.ff-block{display:block}.ff-flex{display:flex}.ff-table{display:table}.ff-grid{display:grid}.ff-aspect-\[3\/4\]{aspect-ratio:3/4}.ff-h-0\.5{height:.125rem}.ff-h-10{height:2.5rem}.ff-h-12{height:3rem}.ff-h-16{height:4rem}.ff-h-2{height:.5rem}.ff-h-3{height:.75rem}.ff-h-4{height:1rem}.ff-h-5{height:1.25rem}.ff-h-6{height:1.5rem}.ff-h-8{height:2rem}.ff-h-full{height:100%}.ff-max-h-96{max-height:24rem}.ff-max-h-\[500px\]{max-height:500px}.ff-max-h-\[90vh\]{max-height:90vh}.ff-min-h-0{min-height:0px}.ff-min-h-\[200px\]{min-height:200px}.ff-w-10{width:2.5rem}.ff-w-12{width:3rem}.ff-w-16{width:4rem}.ff-w-2{width:.5rem}.ff-w-3{width:.75rem}.ff-w-4{width:1rem}.ff-w-48{width:12rem}.ff-w-5{width:1.25rem}.ff-w-6{width:1.5rem}.ff-w-8{width:2rem}.ff-w-full{width:100%}.ff-min-w-0{min-width:0px}.ff-max-w-lg{max-width:32rem}.ff-max-w-md{max-width:28rem}.ff-max-w-xl{max-width:36rem}.ff-max-w-xs{max-width:20rem}.ff-flex-1{flex:1 1 0%}.ff-flex-shrink-0{flex-shrink:0}.ff--translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ff-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ff-animate-spin{animation:ff-spin 1s linear infinite}.ff-cursor-not-allowed{cursor:not-allowed}.ff-cursor-pointer{cursor:pointer}.ff-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ff-list-inside{list-style-position:inside}.ff-list-disc{list-style-type:disc}.ff-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ff-flex-col{flex-direction:column}.ff-flex-wrap{flex-wrap:wrap}.ff-items-start{align-items:flex-start}.ff-items-center{align-items:center}.ff-justify-center{justify-content:center}.ff-justify-between{justify-content:space-between}.ff-gap-1{gap:.25rem}.ff-gap-1\.5{gap:.375rem}.ff-gap-2{gap:.5rem}.ff-gap-3{gap:.75rem}.ff-gap-4{gap:1rem}.ff-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.ff-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.ff-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.ff-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.ff-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.ff-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.ff-divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(132 130 128 / var(--tw-divide-opacity, 1))}.ff-overflow-hidden{overflow:hidden}.ff-overflow-y-auto{overflow-y:auto}.ff-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ff-rounded{border-radius:.5rem}.ff-rounded-full{border-radius:9999px}.ff-rounded-lg{border-radius:.75rem}.ff-rounded-xl{border-radius:1rem}.ff-border{border-width:1px}.ff-border-2{border-width:2px}.ff-border-b{border-bottom-width:1px}.ff-border-t{border-top-width:1px}.ff-border-error-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.ff-border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.ff-border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.ff-border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.ff-border-primary-200{--tw-border-opacity: 1;border-color:rgb(227 235 246 / var(--tw-border-opacity, 1))}.ff-border-success-200{--tw-border-opacity: 1;border-color:rgb(184 225 174 / var(--tw-border-opacity, 1))}.ff-border-success-300{--tw-border-opacity: 1;border-color:rgb(138 204 122 / var(--tw-border-opacity, 1))}.ff-border-warning-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.ff-border-warning-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.ff-bg-error-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.ff-bg-error-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.ff-bg-error-50\/30{background-color:#fef2f24d}.ff-bg-error-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.ff-bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(132 130 128 / var(--tw-bg-opacity, 1))}.ff-bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.ff-bg-gray-30{--tw-bg-opacity: 1;background-color:rgb(240 239 237 / var(--tw-bg-opacity, 1))}.ff-bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.ff-bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(226 224 221 / var(--tw-bg-opacity, 1))}.ff-bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.ff-bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.ff-bg-primary-100{--tw-bg-opacity: 1;background-color:rgb(240 244 250 / var(--tw-bg-opacity, 1))}.ff-bg-primary-50{--tw-bg-opacity: 1;background-color:rgb(248 250 253 / var(--tw-bg-opacity, 1))}.ff-bg-success-100{--tw-bg-opacity: 1;background-color:rgb(208 235 201 / var(--tw-bg-opacity, 1))}.ff-bg-success-300{--tw-bg-opacity: 1;background-color:rgb(138 204 122 / var(--tw-bg-opacity, 1))}.ff-bg-success-50{--tw-bg-opacity: 1;background-color:rgb(231 245 228 / var(--tw-bg-opacity, 1))}.ff-bg-success-50\/50{background-color:#e7f5e480}.ff-bg-success-500{--tw-bg-opacity: 1;background-color:rgb(41 142 51 / var(--tw-bg-opacity, 1))}.ff-bg-warning-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.ff-bg-warning-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.ff-bg-warning-50\/50{background-color:#fffbeb80}.ff-bg-warning-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.ff-bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.ff-object-contain{-o-object-fit:contain;object-fit:contain}.ff-p-1{padding:.25rem}.ff-p-1\.5{padding:.375rem}.ff-p-2{padding:.5rem}.ff-p-3{padding:.75rem}.ff-p-4{padding:1rem}.ff-p-6{padding:1.5rem}.ff-px-2{padding-left:.5rem;padding-right:.5rem}.ff-px-3{padding-left:.75rem;padding-right:.75rem}.ff-px-4{padding-left:1rem;padding-right:1rem}.ff-px-6{padding-left:1.5rem;padding-right:1.5rem}.ff-py-1{padding-top:.25rem;padding-bottom:.25rem}.ff-py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.ff-py-12{padding-top:3rem;padding-bottom:3rem}.ff-py-3{padding-top:.75rem;padding-bottom:.75rem}.ff-py-4{padding-top:1rem;padding-bottom:1rem}.ff-py-8{padding-top:2rem;padding-bottom:2rem}.ff-text-left{text-align:left}.ff-text-center{text-align:center}.ff-text-right{text-align:right}.ff-font-mono{font-family:JetBrains Mono,SF Mono,Monaco,monospace}.ff-text-2xl{font-size:1.5rem;line-height:2rem}.ff-text-base{font-size:1rem;line-height:1.5rem}.ff-text-lg{font-size:1.125rem;line-height:1.75rem}.ff-text-sm{font-size:.875rem;line-height:1.25rem}.ff-text-xl{font-size:1.25rem;line-height:1.75rem}.ff-text-xs{font-size:.75rem;line-height:1rem}.ff-font-bold{font-weight:700}.ff-font-medium{font-weight:500}.ff-font-semibold{font-weight:600}.ff-text-error-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.ff-text-error-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.ff-text-error-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.ff-text-error-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.ff-text-gray-110{--tw-text-opacity: 1;color:rgb(101 100 97 / var(--tw-text-opacity, 1))}.ff-text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.ff-text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.ff-text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.ff-text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.ff-text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.ff-text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.ff-text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.ff-text-green-900{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity, 1))}.ff-text-primary-600{--tw-text-opacity: 1;color:rgb(143 168 217 / var(--tw-text-opacity, 1))}.ff-text-primary-900{--tw-text-opacity: 1;color:rgb(68 99 181 / var(--tw-text-opacity, 1))}.ff-text-success-600{--tw-text-opacity: 1;color:rgb(35 122 44 / var(--tw-text-opacity, 1))}.ff-text-success-700{--tw-text-opacity: 1;color:rgb(31 60 32 / var(--tw-text-opacity, 1))}.ff-text-success-800{--tw-text-opacity: 1;color:rgb(26 51 25 / var(--tw-text-opacity, 1))}.ff-text-warning-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.ff-text-warning-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.ff-text-warning-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.ff-text-warning-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.ff-text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.ff-opacity-0{opacity:0}.ff-opacity-50{opacity:.5}.ff-shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ff-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:root{--ff-primary-10: #f9fafb;--ff-primary-20: #eef0f6;--ff-primary-30: #e2e6f0;--ff-primary-40: #dce1ec;--ff-primary-50: #d7e1f2;--ff-primary-60: #c6d6f0;--ff-primary-70: #c0d0ed;--ff-primary-80: #b9cbeb;--ff-primary-90: #728ab3;--ff-primary-100: #6980a5;--ff-primary-110: #4f6180;--ff-primary-120: #132036;--ff-primary-500: #d7e1f2;--ff-primary-600: #c0d0ed;--ff-brown-10: #f0ece8;--ff-brown-20: #d4c4ba;--ff-brown-30: #b59f8c;--ff-brown-40: #a68c74;--ff-brown-50: #97795d;--ff-brown-60: #8a6447;--ff-brown-70: #7a522f;--ff-brown-80: #6b3f18;--ff-brown-90: #613916;--ff-brown-100: #563213;--ff-brown-110: #4b2c11;--ff-brown-120: #36200c;--ff-primary-text: #6b3f18;--ff-gray-white: #ffffff;--ff-gray-10: #fcfcfb;--ff-gray-20: #f9f9f7;--ff-gray-30: #f0efed;--ff-gray-40: #e9e8e4;--ff-gray-50: #e2e0dd;--ff-gray-60: #dadad5;--ff-gray-70: #cfceca;--ff-gray-80: #bcbbb7;--ff-gray-90: #8e8d89;--ff-gray-100: #848280;--ff-gray-110: #656461;--ff-gray-120: #21201d;--ff-bg-primary: var(--ff-gray-white);--ff-bg-secondary: var(--ff-gray-10);--ff-bg-tertiary: var(--ff-gray-30);--ff-bg-brand: var(--ff-primary-50);--ff-bg-brand-light: var(--ff-primary-20);--ff-text-primary: var(--ff-gray-120);--ff-text-secondary: var(--ff-gray-110);--ff-text-muted: var(--ff-gray-90);--ff-text-supportive: var(--ff-gray-80);--ff-text-inverse: var(--ff-gray-white);--ff-text-link: var(--ff-primary-90);--ff-text-brand: var(--ff-brown-80);--ff-border-light: var(--ff-gray-30);--ff-border-default: var(--ff-gray-40);--ff-border-dark: var(--ff-gray-70);--ff-border-brand: var(--ff-brown-80);--ff-border-focus: var(--ff-primary-70);--ff-icon-default: var(--ff-gray-90);--ff-icon-active: var(--ff-gray-120);--ff-icon-muted: var(--ff-gray-80);--ff-icon-brand: var(--ff-brown-80);--ff-icon-inverse: var(--ff-gray-white);--ff-success-light: #e7f5e4;--ff-success: #298e33;--ff-success-dark: #1f3c20;--ff-warning-light: #ffe6c1;--ff-warning: #a86807;--ff-warning-dark: #4a3723;--ff-error-light: #fcdede;--ff-error: #d43338;--ff-error-dark: #641a1a;--ff-focus-ring: rgba(192, 208, 237, .5);--ff-focus-ring-accent: rgba(168, 85, 247, .25);--ff-accent-50: #faf5ff;--ff-accent-100: #f3e8ff;--ff-accent-200: #e9d5ff;--ff-accent-300: #d8b4fe;--ff-accent-400: #c084fc;--ff-accent-500: #a855f7;--ff-accent-600: #9333ea;--ff-accent-700: #7c3aed;--ff-accent-800: #6b21a8;--ff-accent-900: #581c87;--ff-navy-950: #1a2029}.ff-container{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--ff-text-primary);font-feature-settings:"cv02","cv03","cv04","cv11"}.ff-table-container{position:relative;overflow:auto;border-radius:1rem;border-width:1px;border-color:var(--ff-border-light);background-color:var(--ff-bg-primary)}.ff-table{width:100%;font-size:.875rem;line-height:1.25rem}.ff-table thead{position:sticky;top:0;z-index:10;background-color:var(--ff-bg-secondary)}.ff-table th{padding:.75rem 1rem;text-align:left;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ff-text-secondary);border-bottom:2px solid var(--ff-border-light)}.ff-table td{padding:.75rem 1rem;color:var(--ff-text-primary);border-bottom:1px solid var(--ff-border-light)}.ff-table tbody tr{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-table tbody tr:hover{background-color:var(--ff-bg-secondary)}.ff-cell-error{border-left-width:4px;background-color:#fef2f2;border-left-color:#ef4444}.ff-cell-warning{border-left-width:4px;background-color:#fffbeb;border-left-color:#f59e0b}.ff-cell-editing{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);background-color:var(--ff-primary-50);--tw-ring-color: var(--ff-primary-400)}.ff-cell-success{background-color:#f0fdf4}.ff-input{width:100%;border-radius:.75rem;border-width:1px;padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary);color:var(--ff-text-primary);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.ff-input::-moz-placeholder{color:var(--ff-text-muted)}.ff-input::placeholder{color:var(--ff-text-muted)}.ff-input:hover{border-color:var(--ff-border-dark)}.ff-input:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);border-color:var(--ff-primary-500);--tw-ring-color: var(--ff-focus-ring)}.ff-input-error{border-color:#ef4444}.ff-input-error:focus{border-color:#ef4444;--tw-ring-color: rgba(239, 68, 68, .2)}.ff-select{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:2.5rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2378716c' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .75rem center;background-repeat:no-repeat;background-size:1.25em 1.25em}.ff-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border-radius:.75rem;padding:.625rem 1.25rem;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;border-width:1px;border-color:transparent}.ff-btn:disabled{cursor:not-allowed;opacity:.5}.ff-btn-primary{background-color:var(--ff-primary-500);color:var(--ff-primary-text);font-weight:600}.ff-btn-primary:hover:not(:disabled){background-color:var(--ff-primary-600);transform:translateY(-1px);box-shadow:0 4px 12px -2px #d7e1f280}.ff-btn-primary:active:not(:disabled){background-color:var(--ff-primary-700);transform:translateY(0)}.ff-btn-primary:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring)}.ff-btn-secondary{background-color:var(--ff-bg-primary);color:var(--ff-text-primary);border-color:var(--ff-border-default)}.ff-btn-secondary:hover:not(:disabled){background-color:var(--ff-bg-secondary);border-color:var(--ff-border-dark)}.ff-btn-secondary:active:not(:disabled){background-color:var(--ff-bg-tertiary)}.ff-btn-ghost{background-color:transparent;color:var(--ff-text-secondary)}.ff-btn-ghost:hover:not(:disabled){background-color:var(--ff-bg-secondary);color:var(--ff-text-primary)}.ff-btn-accent{background-color:var(--ff-accent-500);color:var(--ff-text-inverse)}.ff-btn-accent:hover:not(:disabled){background-color:var(--ff-accent-600);transform:translateY(-1px);box-shadow:0 4px 12px -2px #a855f74d}.ff-btn-accent:active:not(:disabled){background-color:var(--ff-accent-700);transform:translateY(0)}.ff-btn-accent:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring-accent)}.ff-btn-danger{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.ff-btn-danger:hover:not(:disabled){--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1));transform:translateY(-1px)}.ff-btn-link{background-color:transparent;color:var(--ff-primary-text);padding:.25rem .5rem}.ff-btn-link:hover:not(:disabled){color:#4a2a10;text-decoration:underline}.ff-btn-sm{border-radius:.375rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem}.ff-btn-lg{border-radius:1rem;padding:.75rem 1.5rem;font-size:1rem;line-height:1.5rem}.ff-checkbox{height:1.25rem;width:1.25rem;cursor:pointer;border-radius:.5rem;border-width:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary)}.ff-checkbox:hover{border-color:var(--ff-primary-400)}.ff-checkbox:checked{background-color:var(--ff-primary-500);border-color:var(--ff-primary-500);background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}.ff-checkbox:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring)}.ff-radio{height:1.25rem;width:1.25rem;cursor:pointer;border-radius:9999px;border-width:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary)}.ff-radio:checked{border-color:var(--ff-primary-500);border-width:6px}.ff-radio:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring)}.ff-toggle{position:relative;height:1.5rem;width:2.75rem;cursor:pointer;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:var(--ff-border-default)}.ff-toggle:after{position:absolute;top:.125rem;left:.125rem;height:1.25rem;width:1.25rem;border-radius:9999px;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;content:"";background-color:var(--ff-bg-primary);box-shadow:0 1px 3px #0000001a}.ff-toggle:checked{background-color:var(--ff-primary-500)}.ff-toggle:checked:after{transform:translate(1.25rem)}.ff-dropzone{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:1rem;border-width:2px;border-style:dashed;padding:2.5rem;cursor:pointer;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;border-color:var(--ff-border-default);background-color:var(--ff-bg-secondary)}.ff-dropzone *{pointer-events:none}.ff-dropzone input{pointer-events:auto}.ff-dropzone:hover{border-color:var(--ff-primary-400);background-color:var(--ff-primary-50)}.ff-dropzone-active{border-color:var(--ff-primary-500);background-color:var(--ff-primary-50);transform:scale(1.01)}.ff-dropzone-icon{margin-bottom:1rem;height:4rem;width:4rem;color:var(--ff-text-muted)}.ff-dropzone:hover .ff-dropzone-icon{color:var(--ff-primary-500)}.ff-dropzone-text{margin-bottom:.25rem;font-size:1rem;line-height:1.5rem;font-weight:500;color:var(--ff-text-primary)}.ff-dropzone-hint{font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}.ff-badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.25rem .625rem;font-size:.75rem;line-height:1rem;font-weight:600}.ff-badge-error{background-color:#fef2f2;color:#dc2626}.ff-badge-warning{background-color:#fffbeb;color:#d97706}.ff-badge-success{background-color:#f0fdf4;color:#16a34a}.ff-badge-info{background-color:#eff6ff;color:#2563eb}.ff-badge-neutral{background-color:var(--ff-bg-tertiary);color:var(--ff-text-secondary)}.ff-badge-primary{background-color:var(--ff-primary-100);color:var(--ff-primary-700)}.ff-badge-accent{background-color:var(--ff-accent-100);color:var(--ff-accent-700)}.ff-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:center;justify-content:center;background-color:#1c191780;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.ff-modal{max-height:90vh;width:100%;max-width:56rem;overflow:hidden;border-radius:1.25rem;margin-left:1rem;margin-right:1rem;background-color:var(--ff-bg-primary);box-shadow:0 25px 50px -12px #00000040;animation:modalSlideUp .3s ease-out}@keyframes modalSlideUp{0%{opacity:0;transform:translateY(20px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.ff-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid var(--ff-border-light)}.ff-modal-title{font-size:1.25rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.ff-modal-body{overflow:auto;padding:1.5rem}.ff-modal-footer{display:flex;align-items:center;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;background-color:var(--ff-bg-secondary);border-top:1px solid var(--ff-border-light)}.ff-progress{height:.5rem;overflow:hidden;border-radius:9999px;background-color:var(--ff-bg-tertiary)}.ff-progress-bar{height:100%;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.5s;transition-timing-function:cubic-bezier(0,0,.2,1);background-color:var(--ff-primary-500)}.ff-progress-bar-animated{background:linear-gradient(90deg,var(--ff-primary-400) 0%,var(--ff-primary-500) 50%,var(--ff-primary-400) 100%);background-size:200% 100%;animation:shimmer 2s linear infinite}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.ff-tooltip{position:absolute;z-index:50;border-radius:.75rem;padding:.5rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500;visibility:hidden;opacity:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:var(--ff-navy-950);color:var(--ff-text-inverse);box-shadow:0 4px 12px -2px #0003}.ff-tooltip-visible{visibility:visible;opacity:1}.ff-spinner{height:1.25rem;width:1.25rem}@keyframes ff-spin{to{transform:rotate(360deg)}}.ff-spinner{animation:ff-spin 1s linear infinite;border-radius:9999px;border-width:2px;border-color:var(--ff-border-light);border-top-color:var(--ff-primary-500)}.ff-spinner-lg{height:2rem;width:2rem;border-width:3px}.ff-document-preview{position:relative;overflow:hidden;border-radius:1rem;background-color:var(--ff-bg-tertiary)}.ff-document-preview img{height:auto;width:100%;-o-object-fit:contain;object-fit:contain}.ff-mapping-row{display:flex;align-items:center;gap:1rem;border-radius:1rem;border-width:1px;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:var(--ff-bg-primary);border-color:var(--ff-border-light)}.ff-mapping-row:hover{border-color:var(--ff-border-default);background-color:var(--ff-bg-secondary)}.ff-mapping-source{flex:1 1 0%;border-radius:.75rem;padding:.5rem 1rem;font-family:JetBrains Mono,SF Mono,Monaco,monospace;font-size:.875rem;line-height:1.25rem;background-color:var(--ff-bg-tertiary);color:var(--ff-text-secondary)}.ff-mapping-arrow{flex-shrink:0;color:var(--ff-text-muted)}.ff-mapping-target{flex:1 1 0%}.ff-confidence{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;line-height:1rem;font-weight:500}.ff-confidence-high{color:#16a34a}.ff-confidence-medium{color:#d97706}.ff-confidence-low{color:#dc2626}.ff-confidence-bar{height:.375rem;border-radius:9999px;background-color:var(--ff-bg-tertiary)}.ff-confidence-bar-fill{height:100%;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.ff-steps{display:flex;align-items:center;gap:.5rem}.ff-step{display:flex;height:2rem;width:2rem;align-items:center;justify-content:center;border-radius:9999px;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.ff-step-pending{background-color:var(--ff-bg-tertiary);color:var(--ff-text-muted)}.ff-step-active{background-color:var(--ff-primary-500);color:var(--ff-text-inverse)}.ff-step-complete{background-color:var(--ff-primary-600);color:var(--ff-text-inverse)}.ff-step-connector{height:.125rem;width:2rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;background-color:var(--ff-border-light)}.ff-step-connector-complete{background-color:var(--ff-primary-500)}.ff-validation-summary{border-radius:1rem;border-width:1px;padding:1rem}.ff-validation-summary-error{background-color:#fef2f2;border-color:#fecaca}.ff-validation-summary-warning{background-color:#fffbeb;border-color:#fde68a}.ff-validation-summary-success{background-color:#f0fdf4;border-color:#bbf7d0}.ff-card{border-radius:1rem;border-width:1px;background-color:var(--ff-bg-primary);border-color:var(--ff-border-light);box-shadow:0 2px 8px -2px #0000000a}.ff-card-hover{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.ff-card-hover:hover{border-color:var(--ff-border-default);box-shadow:0 8px 24px -4px #00000014;transform:translateY(-2px)}.ff-status{display:inline-flex;align-items:center;gap:.5rem}.ff-status-dot{height:.5rem;width:.5rem;border-radius:9999px}.ff-status-dot-success{background-color:#22c55e}.ff-status-dot-warning{background-color:#f59e0b}.ff-status-dot-error{background-color:#ef4444}.ff-status-dot-pending{background-color:var(--ff-text-muted)}.ff-status-dot-processing{animation:ff-pulse 2s cubic-bezier(.4,0,.6,1) infinite;background-color:#3b82f6}.ff-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:3rem;padding-bottom:3rem;text-align:center}.ff-empty-state-icon{margin-bottom:1rem;height:4rem;width:4rem;color:var(--ff-border-default)}.ff-empty-state-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.ff-empty-state-description{max-width:24rem;font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}@keyframes ff-pulse{50%{opacity:.5}}.ff-skeleton{animation:ff-pulse 2s cubic-bezier(.4,0,.6,1) infinite;border-radius:.5rem;background-color:var(--ff-bg-tertiary)}.ff-skeleton-text{height:1rem;border-radius:.5rem}.ff-skeleton-title{height:1.5rem;width:75%;border-radius:.5rem}.ff-skeleton-avatar{height:2.5rem;width:2.5rem;border-radius:9999px}.ff-pagination{display:flex;align-items:center;gap:.25rem}.ff-pagination-btn{display:flex;height:2.25rem;width:2.25rem;align-items:center;justify-content:center;border-radius:.75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;color:var(--ff-text-secondary)}.ff-pagination-btn:hover{background-color:var(--ff-bg-secondary);color:var(--ff-text-primary)}.ff-pagination-btn-active{background-color:var(--ff-primary-500);color:var(--ff-text-inverse)}.ff-pagination-btn-active:hover{background-color:var(--ff-primary-600);color:var(--ff-text-inverse)}.ff-selector-group{display:inline-flex;flex-wrap:wrap;gap:.5rem}.ff-selector-item{display:inline-flex;align-items:center;gap:.375rem;border-radius:9999px;padding:.375rem .75rem;cursor:pointer;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;background-color:var(--ff-bg-secondary);color:var(--ff-text-secondary);border:1px solid var(--ff-border-light)}.ff-selector-item:hover{background-color:var(--ff-bg-tertiary);border-color:var(--ff-border-default)}.ff-selector-item-active{background-color:var(--ff-primary-500);color:var(--ff-text-inverse);border-color:var(--ff-primary-500)}.ff-selector-item-active:hover{background-color:var(--ff-primary-600);border-color:var(--ff-primary-600)}.ff-fade-in{animation:fadeIn .3s ease-out}.ff-slide-up{animation:slideUp .3s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.ff-theme-accent{--ff-primary-50: var(--ff-accent-50);--ff-primary-100: var(--ff-accent-100);--ff-primary-200: var(--ff-accent-200);--ff-primary-300: var(--ff-accent-300);--ff-primary-400: var(--ff-accent-400);--ff-primary-500: var(--ff-accent-500);--ff-primary-600: var(--ff-accent-600);--ff-primary-700: var(--ff-accent-700);--ff-primary-800: var(--ff-accent-800);--ff-primary-900: var(--ff-accent-900);--ff-focus-ring: var(--ff-focus-ring-accent)}.hover\:ff-border-primary-300:hover{--tw-border-opacity: 1;border-color:rgb(215 225 242 / var(--tw-border-opacity, 1))}.hover\:ff-bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(132 130 128 / var(--tw-bg-opacity, 1))}.hover\:ff-bg-gray-40:hover{--tw-bg-opacity: 1;background-color:rgb(233 232 228 / var(--tw-bg-opacity, 1))}.hover\:ff-bg-green-100:hover{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.hover\:ff-bg-primary-100:hover{--tw-bg-opacity: 1;background-color:rgb(240 244 250 / var(--tw-bg-opacity, 1))}.hover\:ff-bg-primary-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 253 / var(--tw-bg-opacity, 1))}.hover\:ff-bg-success-600:hover{--tw-bg-opacity: 1;background-color:rgb(35 122 44 / var(--tw-bg-opacity, 1))}.hover\:ff-text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:ff-text-green-800:hover{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.hover\:ff-text-primary-800:hover{--tw-text-opacity: 1;color:rgb(93 122 193 / var(--tw-text-opacity, 1))}.ff-group:hover .group-hover\:ff-opacity-100{opacity:1}
|
|
1
|
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,SF Mono,Monaco,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.ff-container{width:100%}@media (min-width: 640px){.ff-container{max-width:640px}}@media (min-width: 768px){.ff-container{max-width:768px}}@media (min-width: 1024px){.ff-container{max-width:1024px}}@media (min-width: 1280px){.ff-container{max-width:1280px}}@media (min-width: 1536px){.ff-container{max-width:1536px}}.ff-relative{position:relative}.ff-bottom-full{bottom:100%}.ff-left-1\/2{left:50%}.ff-mx-auto{margin-left:auto;margin-right:auto}.ff-mb-2{margin-bottom:.5rem}.ff-mb-4{margin-bottom:1rem}.ff-mb-6{margin-bottom:1.5rem}.ff-ml-4{margin-left:1rem}.ff-mr-1{margin-right:.25rem}.ff-mt-0\.5{margin-top:.125rem}.ff-mt-1{margin-top:.25rem}.ff-mt-2{margin-top:.5rem}.ff-mt-3{margin-top:.75rem}.ff-block{display:block}.ff-inline-block{display:inline-block}.ff-flex{display:flex}.ff-table{display:table}.ff-grid{display:grid}.ff-aspect-\[3\/4\]{aspect-ratio:3/4}.ff-h-10{height:2.5rem}.ff-h-12{height:3rem}.ff-h-16{height:4rem}.ff-h-3{height:.75rem}.ff-h-4{height:1rem}.ff-h-5{height:1.25rem}.ff-h-6{height:1.5rem}.ff-h-8{height:2rem}.ff-h-full{height:100%}.ff-max-h-96{max-height:24rem}.ff-max-h-\[500px\]{max-height:500px}.ff-w-10{width:2.5rem}.ff-w-12{width:3rem}.ff-w-16{width:4rem}.ff-w-3{width:.75rem}.ff-w-4{width:1rem}.ff-w-48{width:12rem}.ff-w-5{width:1.25rem}.ff-w-6{width:1.5rem}.ff-w-8{width:2rem}.ff-w-full{width:100%}.ff-min-w-0{min-width:0px}.ff-max-w-lg{max-width:32rem}.ff-max-w-md{max-width:28rem}.ff-max-w-xl{max-width:36rem}.ff-max-w-xs{max-width:20rem}.ff-flex-1{flex:1 1 0%}.ff-flex-shrink-0{flex-shrink:0}.ff--translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ff-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ff-animate-spin{animation:ff-spin 1s linear infinite}.ff-cursor-not-allowed{cursor:not-allowed}.ff-cursor-pointer{cursor:pointer}.ff-cursor-wait{cursor:wait}.ff-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ff-list-inside{list-style-position:inside}.ff-list-disc{list-style-type:disc}.ff-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ff-flex-col{flex-direction:column}.ff-flex-wrap{flex-wrap:wrap}.ff-items-start{align-items:flex-start}.ff-items-center{align-items:center}.ff-justify-center{justify-content:center}.ff-justify-between{justify-content:space-between}.ff-gap-1{gap:.25rem}.ff-gap-2{gap:.5rem}.ff-gap-3{gap:.75rem}.ff-gap-4{gap:1rem}.ff-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.ff-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.ff-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.ff-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.ff-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.ff-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.ff-divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(132 130 128 / var(--tw-divide-opacity, 1))}.ff-overflow-hidden{overflow:hidden}.ff-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ff-rounded{border-radius:.5rem}.ff-rounded-full{border-radius:9999px}.ff-rounded-lg{border-radius:.75rem}.ff-rounded-xl{border-radius:1rem}.ff-border{border-width:1px}.ff-border-2{border-width:2px}.ff-border-b{border-bottom-width:1px}.ff-border-error-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.ff-border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.ff-border-success-200{--tw-border-opacity: 1;border-color:rgb(184 225 174 / var(--tw-border-opacity, 1))}.ff-border-transparent{border-color:transparent}.ff-border-warning-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.ff-bg-error-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.ff-bg-error-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.ff-bg-error-50\/30{background-color:#fef2f24d}.ff-bg-gray-30{--tw-bg-opacity: 1;background-color:rgb(240 239 237 / var(--tw-bg-opacity, 1))}.ff-bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(226 224 221 / var(--tw-bg-opacity, 1))}.ff-bg-success-50{--tw-bg-opacity: 1;background-color:rgb(231 245 228 / var(--tw-bg-opacity, 1))}.ff-bg-success-500{--tw-bg-opacity: 1;background-color:rgb(41 142 51 / var(--tw-bg-opacity, 1))}.ff-bg-warning-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.ff-bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.ff-object-contain{-o-object-fit:contain;object-fit:contain}.ff-p-1{padding:.25rem}.ff-p-1\.5{padding:.375rem}.ff-p-2{padding:.5rem}.ff-p-3{padding:.75rem}.ff-p-4{padding:1rem}.ff-p-6{padding:1.5rem}.ff-px-2{padding-left:.5rem;padding-right:.5rem}.ff-px-3{padding-left:.75rem;padding-right:.75rem}.ff-px-4{padding-left:1rem;padding-right:1rem}.ff-py-1{padding-top:.25rem;padding-bottom:.25rem}.ff-py-12{padding-top:3rem;padding-bottom:3rem}.ff-py-3{padding-top:.75rem;padding-bottom:.75rem}.ff-py-4{padding-top:1rem;padding-bottom:1rem}.ff-py-8{padding-top:2rem;padding-bottom:2rem}.ff-text-left{text-align:left}.ff-text-center{text-align:center}.ff-text-right{text-align:right}.ff-font-mono{font-family:JetBrains Mono,SF Mono,Monaco,monospace}.ff-text-2xl{font-size:1.5rem;line-height:2rem}.ff-text-lg{font-size:1.125rem;line-height:1.75rem}.ff-text-sm{font-size:.875rem;line-height:1.25rem}.ff-text-xl{font-size:1.25rem;line-height:1.75rem}.ff-text-xs{font-size:.75rem;line-height:1rem}.ff-font-bold{font-weight:700}.ff-font-medium{font-weight:500}.ff-font-semibold{font-weight:600}.ff-text-error-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.ff-text-error-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.ff-text-error-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.ff-text-error-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.ff-text-gray-110{--tw-text-opacity: 1;color:rgb(101 100 97 / var(--tw-text-opacity, 1))}.ff-text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.ff-text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.ff-text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.ff-text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.ff-text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.ff-text-primary-600{--tw-text-opacity: 1;color:rgb(143 168 217 / var(--tw-text-opacity, 1))}.ff-text-success-600{--tw-text-opacity: 1;color:rgb(35 122 44 / var(--tw-text-opacity, 1))}.ff-text-success-700{--tw-text-opacity: 1;color:rgb(31 60 32 / var(--tw-text-opacity, 1))}.ff-text-success-800{--tw-text-opacity: 1;color:rgb(26 51 25 / var(--tw-text-opacity, 1))}.ff-text-warning-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.ff-text-warning-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.ff-text-warning-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.ff-text-warning-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.ff-text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.ff-opacity-0{opacity:0}.ff-opacity-50{opacity:.5}.ff-shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ff-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-duration-150{transition-duration:.15s}:root{--ff-primary-10: #f9fafb;--ff-primary-20: #eef0f6;--ff-primary-30: #e2e6f0;--ff-primary-40: #dce1ec;--ff-primary-50: #d7e1f2;--ff-primary-60: #c6d6f0;--ff-primary-70: #c0d0ed;--ff-primary-80: #b9cbeb;--ff-primary-90: #728ab3;--ff-primary-100: #6980a5;--ff-primary-110: #4f6180;--ff-primary-120: #132036;--ff-primary-500: #d7e1f2;--ff-primary-600: #c0d0ed;--ff-brown-10: #f0ece8;--ff-brown-20: #d4c4ba;--ff-brown-30: #b59f8c;--ff-brown-40: #a68c74;--ff-brown-50: #97795d;--ff-brown-60: #8a6447;--ff-brown-70: #7a522f;--ff-brown-80: #6b3f18;--ff-brown-90: #613916;--ff-brown-100: #563213;--ff-brown-110: #4b2c11;--ff-brown-120: #36200c;--ff-primary-text: #6b3f18;--ff-gray-white: #ffffff;--ff-gray-10: #fcfcfb;--ff-gray-20: #f9f9f7;--ff-gray-30: #f0efed;--ff-gray-40: #e9e8e4;--ff-gray-50: #e2e0dd;--ff-gray-60: #dadad5;--ff-gray-70: #cfceca;--ff-gray-80: #bcbbb7;--ff-gray-90: #8e8d89;--ff-gray-100: #848280;--ff-gray-110: #656461;--ff-gray-120: #21201d;--ff-bg-primary: var(--ff-gray-white);--ff-bg-secondary: var(--ff-gray-10);--ff-bg-tertiary: var(--ff-gray-30);--ff-bg-brand: var(--ff-primary-50);--ff-bg-brand-light: var(--ff-primary-20);--ff-text-primary: var(--ff-gray-120);--ff-text-secondary: var(--ff-gray-110);--ff-text-muted: var(--ff-gray-90);--ff-text-supportive: var(--ff-gray-80);--ff-text-inverse: var(--ff-gray-white);--ff-text-link: var(--ff-primary-90);--ff-text-brand: var(--ff-brown-80);--ff-border-light: var(--ff-gray-30);--ff-border-default: var(--ff-gray-40);--ff-border-dark: var(--ff-gray-70);--ff-border-brand: var(--ff-brown-80);--ff-border-focus: var(--ff-primary-70);--ff-icon-default: var(--ff-gray-90);--ff-icon-active: var(--ff-gray-120);--ff-icon-muted: var(--ff-gray-80);--ff-icon-brand: var(--ff-brown-80);--ff-icon-inverse: var(--ff-gray-white);--ff-success-light: #e7f5e4;--ff-success: #298e33;--ff-success-dark: #1f3c20;--ff-warning-light: #ffe6c1;--ff-warning: #a86807;--ff-warning-dark: #4a3723;--ff-error-light: #fcdede;--ff-error: #d43338;--ff-error-dark: #641a1a;--ff-focus-ring: rgba(192, 208, 237, .5);--ff-focus-ring-accent: rgba(168, 85, 247, .25);--ff-accent-50: #faf5ff;--ff-accent-100: #f3e8ff;--ff-accent-200: #e9d5ff;--ff-accent-300: #d8b4fe;--ff-accent-400: #c084fc;--ff-accent-500: #a855f7;--ff-accent-600: #9333ea;--ff-accent-700: #7c3aed;--ff-accent-800: #6b21a8;--ff-accent-900: #581c87;--ff-navy-950: #1a2029}.ff-container{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--ff-text-primary);font-feature-settings:"cv02","cv03","cv04","cv11"}.ff-table-container{position:relative;overflow:auto;border-radius:1rem;border-width:1px;border-color:var(--ff-border-light);background-color:var(--ff-bg-primary)}.ff-table{width:100%;font-size:.875rem;line-height:1.25rem}.ff-table thead{position:sticky;top:0;z-index:10;background-color:var(--ff-bg-secondary)}.ff-table th{padding:.75rem 1rem;text-align:left;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ff-text-secondary);border-bottom:2px solid var(--ff-border-light)}.ff-table td{padding:.75rem 1rem;color:var(--ff-text-primary);border-bottom:1px solid var(--ff-border-light)}.ff-table tbody tr{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-table tbody tr:hover{background-color:var(--ff-bg-secondary)}.ff-cell-error{border-left-width:4px;background-color:#fef2f2;border-left-color:#ef4444}.ff-cell-warning{border-left-width:4px;background-color:#fffbeb;border-left-color:#f59e0b}.ff-cell-editing{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);background-color:var(--ff-primary-50);--tw-ring-color: var(--ff-primary-400)}.ff-cell-success{background-color:#f0fdf4}.ff-input{width:100%;border-radius:.75rem;border-width:1px;padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary);color:var(--ff-text-primary);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.ff-input::-moz-placeholder{color:var(--ff-text-muted)}.ff-input::placeholder{color:var(--ff-text-muted)}.ff-input:hover{border-color:var(--ff-border-dark)}.ff-input:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);border-color:var(--ff-primary-500);--tw-ring-color: var(--ff-focus-ring)}.ff-input-error{border-color:#ef4444}.ff-input-error:focus{border-color:#ef4444;--tw-ring-color: rgba(239, 68, 68, .2)}.ff-select{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:2.5rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2378716c' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .75rem center;background-repeat:no-repeat;background-size:1.25em 1.25em}.ff-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:600;padding:.625rem 1.25rem;border-radius:.75rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-width:1px;border-color:transparent;cursor:pointer}.ff-btn:focus{outline:2px solid transparent;outline-offset:2px}.ff-btn:disabled{cursor:not-allowed;opacity:.5}.ff-btn-primary{background-color:var(--ff-primary-50);color:var(--ff-primary-text)}.ff-btn-primary:hover:not(:disabled){background-color:var(--ff-primary-70)}.ff-btn-primary:active:not(:disabled){background-color:var(--ff-primary-80)}.ff-btn-primary:focus-visible{box-shadow:0 0 0 3px var(--ff-focus-ring)}.ff-btn-secondary{background-color:var(--ff-bg-primary);color:var(--ff-text-primary);border-color:var(--ff-border-default)}.ff-btn-secondary:hover:not(:disabled){background-color:var(--ff-bg-secondary);border-color:var(--ff-border-dark)}.ff-btn-secondary:active:not(:disabled){background-color:var(--ff-bg-tertiary)}.ff-btn-secondary:focus-visible{box-shadow:0 0 0 3px var(--ff-focus-ring)}.ff-btn-ghost{background-color:transparent;color:var(--ff-text-secondary)}.ff-btn-ghost:hover:not(:disabled){background-color:var(--ff-bg-secondary);color:var(--ff-text-primary)}.ff-btn-accent{background-color:var(--ff-accent-500);color:var(--ff-text-inverse)}.ff-btn-accent:hover:not(:disabled){background-color:var(--ff-accent-600);transform:translateY(-1px);box-shadow:0 4px 12px -2px #a855f74d}.ff-btn-accent:active:not(:disabled){background-color:var(--ff-accent-700);transform:translateY(0)}.ff-btn-accent:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring-accent)}.ff-btn-danger{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.ff-btn-danger:hover:not(:disabled){--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1));transform:translateY(-1px)}.ff-btn-link{background-color:transparent;color:var(--ff-primary-text);padding:.25rem .5rem}.ff-btn-link:hover:not(:disabled){color:#4a2a10;text-decoration:underline}.ff-btn-sm{border-radius:.375rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem}.ff-btn-lg{border-radius:1rem;padding:.75rem 1.5rem;font-size:1rem;line-height:1.5rem}.ff-checkbox{height:1.25rem;width:1.25rem;cursor:pointer;border-radius:.5rem;border-width:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary)}.ff-checkbox:hover{border-color:var(--ff-primary-400)}.ff-checkbox:checked{background-color:var(--ff-primary-500);border-color:var(--ff-primary-500);background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}.ff-checkbox:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring)}.ff-radio{height:1.25rem;width:1.25rem;cursor:pointer;border-radius:9999px;border-width:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary)}.ff-radio:checked{border-color:var(--ff-primary-500);border-width:6px}.ff-radio:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring)}.ff-toggle{position:relative;height:1.5rem;width:2.75rem;cursor:pointer;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:var(--ff-border-default)}.ff-toggle:after{position:absolute;top:.125rem;left:.125rem;height:1.25rem;width:1.25rem;border-radius:9999px;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;content:"";background-color:var(--ff-bg-primary);box-shadow:0 1px 3px #0000001a}.ff-toggle:checked{background-color:var(--ff-primary-500)}.ff-toggle:checked:after{transform:translate(1.25rem)}.ff-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;border-radius:1rem;border-width:2px;border-style:dashed;border-color:var(--ff-border-default);background-color:var(--ff-bg-secondary);cursor:pointer;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-dropzone *{pointer-events:none}.ff-dropzone input{pointer-events:auto}.ff-dropzone:hover{border-color:var(--ff-primary-70);background-color:var(--ff-primary-10)}.ff-dropzone-active{border-color:var(--ff-primary-90);background-color:var(--ff-primary-20);--tw-scale-x: 1.01;--tw-scale-y: 1.01;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ff-dropzone-icon-wrapper{margin-left:auto;margin-right:auto;margin-bottom:1rem;display:flex;height:3.5rem;width:3.5rem;align-items:center;justify-content:center;border-radius:1rem;background-color:var(--ff-primary-20);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-dropzone-active .ff-dropzone-icon-wrapper{background-color:var(--ff-primary-30)}.ff-dropzone-icon{height:1.75rem;width:1.75rem;color:var(--ff-primary-90);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-dropzone-active .ff-dropzone-icon{color:var(--ff-primary-110)}.ff-dropzone-text{margin-bottom:.25rem;font-size:1rem;line-height:1.5rem;font-weight:600;color:var(--ff-text-primary)}.ff-dropzone-hint{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}.ff-dropzone-formats{margin-top:.75rem;font-size:.75rem;line-height:1rem;color:var(--ff-text-muted)}.ff-badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.25rem .625rem;font-size:.75rem;line-height:1rem;font-weight:600}.ff-badge-error{background-color:#fef2f2;color:#dc2626}.ff-badge-warning{background-color:#fffbeb;color:#d97706}.ff-badge-success{background-color:#f0fdf4;color:#16a34a}.ff-badge-info{background-color:#eff6ff;color:#2563eb}.ff-badge-neutral{background-color:var(--ff-bg-tertiary);color:var(--ff-text-secondary)}.ff-badge-primary{background-color:var(--ff-primary-100);color:var(--ff-primary-700)}.ff-badge-accent{background-color:var(--ff-accent-100);color:var(--ff-accent-700)}.ff-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background-color:#1c191780;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:1rem;animation:ff-fade-in .2s ease-out;overflow-y:auto}@keyframes ff-fade-in{0%{opacity:0}to{opacity:1}}.ff-modal{background-color:var(--ff-bg-primary);border-radius:1.25rem;width:100%;max-width:56rem;display:flex;flex-direction:column;max-height:min(90vh,calc(100vh - 2rem));box-shadow:0 25px 50px -12px #00000040;animation:ff-scale-in .2s ease-out;margin-top:auto;margin-bottom:auto}@keyframes ff-scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.ff-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid var(--ff-border-light);flex-shrink:0}.ff-modal-header-left{display:flex;align-items:center;gap:1rem}.ff-modal-icon{display:flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:.75rem;background-color:var(--ff-primary-20)}.ff-modal-icon svg{height:1.25rem;width:1.25rem;color:var(--ff-primary-90)}.ff-modal-title{font-size:1.125rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.ff-modal-close{border-radius:.75rem;padding:.5rem;color:var(--ff-text-muted);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-modal-close:hover{color:var(--ff-text-primary);background-color:var(--ff-bg-tertiary)}.ff-modal-body{flex:1 1 0%;overflow-y:auto;padding:1.5rem}.ff-modal-footer{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background-color:var(--ff-bg-secondary);border-top:1px solid var(--ff-border-light);flex-shrink:0}.ff-step{display:flex;align-items:center;justify-content:center;height:2rem;width:2rem;border-radius:9999px;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-step-active{background-color:var(--ff-primary-50);color:var(--ff-primary-90);box-shadow:0 0 0 4px var(--ff-primary-20)}.ff-step-complete{background-color:var(--ff-success);color:#fff}.ff-step-connector{height:.125rem;width:2rem;background-color:var(--ff-border-default);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-step-connector-complete{background-color:var(--ff-success)}.ff-progress{height:.5rem;overflow:hidden;border-radius:9999px;background-color:var(--ff-bg-tertiary)}.ff-progress-bar{height:100%;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.5s;transition-timing-function:cubic-bezier(0,0,.2,1);background-color:var(--ff-primary-500)}.ff-progress-bar-animated{background:linear-gradient(90deg,var(--ff-primary-400) 0%,var(--ff-primary-500) 50%,var(--ff-primary-400) 100%);background-size:200% 100%;animation:shimmer 2s linear infinite}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.ff-tooltip{position:absolute;z-index:50;border-radius:.75rem;padding:.5rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500;visibility:hidden;opacity:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:var(--ff-navy-950);color:var(--ff-text-inverse);box-shadow:0 4px 12px -2px #0003}.ff-tooltip-visible{visibility:visible;opacity:1}.ff-spinner{height:1.25rem;width:1.25rem}@keyframes ff-spin{to{transform:rotate(360deg)}}.ff-spinner{animation:ff-spin 1s linear infinite;border-radius:9999px;border-width:2px;border-color:var(--ff-border-light);border-top-color:var(--ff-primary-500)}.ff-spinner-lg{height:2rem;width:2rem;border-width:3px}.ff-document-preview{position:relative;overflow:hidden;border-radius:1rem;background-color:var(--ff-bg-tertiary)}.ff-document-preview img{height:auto;width:100%;-o-object-fit:contain;object-fit:contain}.ff-mapping-header{margin-bottom:1rem;display:flex;align-items:center;justify-content:space-between}.ff-mapping-title{font-size:1.125rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.ff-mapping-subtitle{font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}.ff-mapping-legend{display:flex;align-items:center;gap:1rem;font-size:.875rem;line-height:1.25rem}.ff-mapping-legend-item{display:flex;align-items:center;gap:.375rem}.ff-mapping-legend-dot{height:.5rem;width:.5rem;border-radius:9999px}.ff-mapping-row{display:flex;align-items:center;gap:1rem;border-radius:1rem;border-width:1px;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;background-color:var(--ff-bg-primary);border-color:var(--ff-border-light)}.ff-mapping-row:hover{border-color:var(--ff-border-default);background-color:var(--ff-bg-secondary)}.ff-mapping-row-success{border-color:var(--ff-success-light);background-color:#e7f5e480}.ff-mapping-row-warning{border-color:var(--ff-warning-light);background-color:#ffe6c180}.ff-mapping-source{flex:1 1 0%;border-radius:.75rem;padding:.625rem 1rem;font-family:JetBrains Mono,SF Mono,Monaco,monospace;font-size:.875rem;line-height:1.25rem;background-color:var(--ff-bg-tertiary);color:var(--ff-text-secondary)}.ff-mapping-arrow{flex-shrink:0;color:var(--ff-text-muted)}.ff-mapping-target{flex:1 1 0%}.ff-mapping-status{display:flex;width:2rem;justify-content:center}.ff-confidence{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;line-height:1rem;font-weight:500}.ff-confidence-high{color:#16a34a}.ff-confidence-medium{color:#d97706}.ff-confidence-low{color:#dc2626}.ff-confidence-bar{height:.375rem;border-radius:9999px;background-color:var(--ff-bg-tertiary)}.ff-confidence-bar-fill{height:100%;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.ff-steps{display:flex;align-items:center;gap:.5rem}.ff-step{display:flex;height:2rem;width:2rem;align-items:center;justify-content:center;border-radius:9999px;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.ff-step-pending{background-color:var(--ff-bg-tertiary);color:var(--ff-text-muted)}.ff-step-active{background-color:var(--ff-primary-500);color:var(--ff-text-inverse)}.ff-step-complete{background-color:var(--ff-primary-600);color:var(--ff-text-inverse)}.ff-step-connector{height:.125rem;width:2rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;background-color:var(--ff-border-light)}.ff-step-connector-complete{background-color:var(--ff-primary-500)}.ff-validation-summary{border-radius:1rem;border-width:1px;padding:1rem}.ff-validation-summary-error{background-color:#fef2f2;border-color:#fecaca}.ff-validation-summary-warning{background-color:#fffbeb;border-color:#fde68a}.ff-validation-summary-success{background-color:#f0fdf4;border-color:#bbf7d0}.ff-card{border-radius:1rem;border-width:1px;background-color:var(--ff-bg-primary);border-color:var(--ff-border-light);box-shadow:0 2px 8px -2px #0000000a}.ff-card-hover{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.ff-card-hover:hover{border-color:var(--ff-border-default);box-shadow:0 8px 24px -4px #00000014;transform:translateY(-2px)}.ff-status{display:inline-flex;align-items:center;gap:.5rem}.ff-status-dot{height:.5rem;width:.5rem;border-radius:9999px}.ff-status-dot-success{background-color:#22c55e}.ff-status-dot-warning{background-color:#f59e0b}.ff-status-dot-error{background-color:#ef4444}.ff-status-dot-pending{background-color:var(--ff-text-muted)}.ff-status-dot-processing{animation:ff-pulse 2s cubic-bezier(.4,0,.6,1) infinite;background-color:#3b82f6}.ff-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:3rem;padding-bottom:3rem;text-align:center}.ff-empty-state-icon{margin-bottom:1rem;height:4rem;width:4rem;color:var(--ff-border-default)}.ff-empty-state-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.ff-empty-state-description{max-width:24rem;font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}@keyframes ff-pulse{50%{opacity:.5}}.ff-skeleton{animation:ff-pulse 2s cubic-bezier(.4,0,.6,1) infinite;border-radius:.5rem;background-color:var(--ff-bg-tertiary)}.ff-skeleton-text{height:1rem;border-radius:.5rem}.ff-skeleton-title{height:1.5rem;width:75%;border-radius:.5rem}.ff-skeleton-avatar{height:2.5rem;width:2.5rem;border-radius:9999px}.ff-pagination{display:flex;align-items:center;gap:.25rem}.ff-pagination-btn{display:flex;height:2.25rem;width:2.25rem;align-items:center;justify-content:center;border-radius:.75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;color:var(--ff-text-secondary)}.ff-pagination-btn:hover{background-color:var(--ff-bg-secondary);color:var(--ff-text-primary)}.ff-pagination-btn-active{background-color:var(--ff-primary-500);color:var(--ff-text-inverse)}.ff-pagination-btn-active:hover{background-color:var(--ff-primary-600);color:var(--ff-text-inverse)}.ff-selector-group{display:inline-flex;flex-wrap:wrap;gap:.5rem}.ff-selector-item{display:inline-flex;align-items:center;gap:.375rem;border-radius:9999px;padding:.375rem .75rem;cursor:pointer;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;background-color:var(--ff-bg-secondary);color:var(--ff-text-secondary);border:1px solid var(--ff-border-light)}.ff-selector-item:hover{background-color:var(--ff-bg-tertiary);border-color:var(--ff-border-default)}.ff-selector-item-active{background-color:var(--ff-primary-500);color:var(--ff-text-inverse);border-color:var(--ff-primary-500)}.ff-selector-item-active:hover{background-color:var(--ff-primary-600);border-color:var(--ff-primary-600)}.ff-fade-in{animation:fadeIn .3s ease-out}.ff-slide-up{animation:slideUp .3s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.ff-theme-accent{--ff-primary-50: var(--ff-accent-50);--ff-primary-100: var(--ff-accent-100);--ff-primary-200: var(--ff-accent-200);--ff-primary-300: var(--ff-accent-300);--ff-primary-400: var(--ff-accent-400);--ff-primary-500: var(--ff-accent-500);--ff-primary-600: var(--ff-accent-600);--ff-primary-700: var(--ff-accent-700);--ff-primary-800: var(--ff-accent-800);--ff-primary-900: var(--ff-accent-900);--ff-focus-ring: var(--ff-focus-ring-accent)}.hover\:ff-border-transparent:hover{border-color:transparent}.hover\:ff-bg-gray-40:hover{--tw-bg-opacity: 1;background-color:rgb(233 232 228 / var(--tw-bg-opacity, 1))}.hover\:ff-bg-success-600:hover{--tw-bg-opacity: 1;background-color:rgb(35 122 44 / var(--tw-bg-opacity, 1))}.hover\:ff-text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.ff-group:hover .group-hover\:ff-opacity-100{opacity:1}
|