@tn3w/openage 1.0.5 → 1.0.6
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/README.md +22 -6
- package/dist/openage.esm.js +144 -18
- package/dist/openage.esm.js.map +1 -1
- package/dist/openage.min.js +1 -1
- package/dist/openage.min.js.map +1 -1
- package/dist/openage.umd.js +144 -18
- package/dist/openage.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/challenge.js +25 -6
- package/src/constants.js +1 -2
- package/src/index.d.ts +1 -0
- package/src/index.js +17 -0
- package/src/ui.js +14 -0
- package/src/widget.d.ts +1 -0
- package/src/widget.js +87 -10
package/dist/openage.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openage.esm.js","sources":["../src/ui.js","../src/constants.js","../src/widget.js","../src/face-tracker.js","../src/positioning.js","../src/age-estimator.js","../src/liveness.js","../src/transport.js","../src/vm-client.js","../src/challenge.js","../src/index.js"],"sourcesContent":["export const FACE_SVG = `<svg viewBox=\"0 0 100 120\"\n fill=\"none\" class=\"oa-face-svg\">\n <ellipse cx=\"50\" cy=\"55\" rx=\"35\" ry=\"45\"\n stroke=\"currentColor\" stroke-width=\"1.8\"/>\n <ellipse cx=\"36\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <ellipse cx=\"64\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <line x1=\"50\" y1=\"52\" x2=\"48\" y2=\"62\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"/>\n <path d=\"M40 72 Q50 79 60 72\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" fill=\"none\"/>\n</svg>`;\n\nexport const FACE_ICON_SVG = `<svg viewBox=\"0 0 100 120\"\n fill=\"none\" class=\"oa-face-icon-svg\">\n <ellipse cx=\"50\" cy=\"55\" rx=\"35\" ry=\"45\"\n stroke=\"currentColor\" stroke-width=\"2\"/>\n <ellipse cx=\"36\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <ellipse cx=\"64\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <line x1=\"50\" y1=\"52\" x2=\"48\" y2=\"62\"\n stroke=\"currentColor\" stroke-width=\"1.65\"\n stroke-linecap=\"round\"/>\n <path d=\"M40 72 Q50 79 60 72\"\n stroke=\"currentColor\" stroke-width=\"1.65\"\n stroke-linecap=\"round\" fill=\"none\"/>\n</svg>`;\n\nexport const FACE_GUIDE_SVG = `<svg viewBox=\"0 0 100 120\"\n fill=\"none\" class=\"oa-face-svg\">\n <ellipse cx=\"50\" cy=\"55\" rx=\"35\" ry=\"45\"\n stroke=\"currentColor\" stroke-width=\"1.8\"\n stroke-dasharray=\"6 4\"/>\n <ellipse cx=\"36\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <ellipse cx=\"64\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <line x1=\"50\" y1=\"52\" x2=\"48\" y2=\"62\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"/>\n <path d=\"M40 72 Q50 79 60 72\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" fill=\"none\"/>\n</svg>`;\n\nexport const CHECK_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\"/>\n</svg>`;\n\nexport const CLOSE_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n</svg>`;\n\nexport const RETRY_SVG = `<svg viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\">\n <path d=\"m14.955 7.986.116.01a1 1 0 0 1 .85 1.13 8 8 0 0 1-13.374 4.728l-.84.84c-.63.63-1.707.184-1.707-.707V10h3.987c.89 0 1.337 1.077.707 1.707l-.731.731a6 6 0 0 0 8.347-.264 6 6 0 0 0 1.63-3.33 1 1 0 0 1 1.131-.848zM11.514.813a8 8 0 0 1 1.942 1.336l.837-.837c.63-.63 1.707-.184 1.707.707V6h-3.981c-.89 0-1.337-1.077-.707-1.707l.728-.729a6 6 0 0 0-9.98 3.591 1 1 0 1 1-1.98-.281A8 8 0 0 1 11.514.813\"/>\n</svg>`;\n\nexport const SPINNER_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" opacity=\"0.2\"/>\n <path d=\"M12 2 A10 10 0 0 1 22 12\"\n stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\"\n type=\"rotate\" from=\"0 12 12\" to=\"360 12 12\"\n dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n</svg>`;\n\nexport const SHIELD_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M12 2l8 4v6c0 5.5-3.8 10-8 12\n C7.8 22 4 17.5 4 12V6l8-4z\"/>\n <path d=\"M9 12l2 2 4-4\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>`;\n\nexport function resolveTheme(theme) {\n if (theme === 'light' || theme === 'dark') return theme;\n return resolveAutoTheme();\n}\n\nexport function watchTheme(host, theme) {\n if (theme === 'light' || theme === 'dark') return;\n if (typeof window === 'undefined') return;\n\n const update = () => {\n host.setAttribute('data-theme', resolveAutoTheme());\n };\n\n const cleanups = [];\n\n for (const query of ['(prefers-color-scheme: dark)', '(prefers-color-scheme: light)']) {\n const cleanup = watchMediaQuery(query, update);\n if (cleanup) cleanups.push(cleanup);\n }\n\n if (typeof MutationObserver === 'function') {\n const observer = new MutationObserver(update);\n const options = {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'style'],\n };\n\n if (document.documentElement) {\n observer.observe(document.documentElement, options);\n }\n\n if (document.body) {\n observer.observe(document.body, options);\n }\n\n cleanups.push(() => observer.disconnect());\n }\n\n return () => {\n for (const cleanup of cleanups) {\n cleanup();\n }\n };\n}\n\nfunction resolveAutoTheme() {\n if (typeof window === 'undefined') return 'dark';\n\n const documentTheme = resolveDocumentTheme();\n if (documentTheme) return documentTheme;\n\n const systemTheme = resolveSystemTheme();\n if (systemTheme) return systemTheme;\n\n return 'dark';\n}\n\nfunction resolveSystemTheme() {\n if (typeof window.matchMedia !== 'function') {\n return null;\n }\n\n if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n\n if (window.matchMedia('(prefers-color-scheme: light)').matches) {\n return 'light';\n }\n\n return null;\n}\n\nfunction resolveDocumentTheme() {\n if (typeof document === 'undefined') return null;\n\n for (const element of [document.documentElement, document.body]) {\n const theme = readThemeHint(element);\n if (theme) return theme;\n }\n\n return null;\n}\n\nfunction readThemeHint(element) {\n if (!element || typeof window.getComputedStyle !== 'function') {\n return null;\n }\n\n const explicit = readExplicitTheme(element);\n if (explicit) return explicit;\n\n const styles = window.getComputedStyle(element);\n const scheme = parseColorScheme(styles.colorScheme);\n if (scheme) return scheme;\n\n return parseBackgroundTheme(styles.backgroundColor);\n}\n\nfunction readExplicitTheme(element) {\n const attrTheme = element.getAttribute('data-theme');\n if (attrTheme === 'light' || attrTheme === 'dark') {\n return attrTheme;\n }\n\n const className = element.className;\n if (typeof className !== 'string') return null;\n\n if (/\\bdark\\b|theme-dark|dark-theme/i.test(className)) {\n return 'dark';\n }\n\n if (/\\blight\\b|theme-light|light-theme/i.test(className)) {\n return 'light';\n }\n\n return null;\n}\n\nfunction parseColorScheme(value) {\n if (!value || value === 'normal') return null;\n\n const normalized = value.toLowerCase();\n const hasDark = normalized.includes('dark');\n const hasLight = normalized.includes('light');\n\n if (hasDark && !hasLight) return 'dark';\n if (hasLight && !hasDark) return 'light';\n\n return null;\n}\n\nfunction parseBackgroundTheme(value) {\n if (!value || value === 'transparent') return null;\n\n const match = value.match(/rgba?\\(([^)]+)\\)/i);\n if (!match) return null;\n\n const parts = match[1]\n .split(',')\n .slice(0, 3)\n .map((part) => Number.parseFloat(part.trim()));\n\n if (parts.length !== 3 || parts.some(Number.isNaN)) {\n return null;\n }\n\n const [red, green, blue] = parts;\n const brightness = (red * 299 + green * 587 + blue * 114) / 1000;\n\n if (brightness <= 140) return 'dark';\n if (brightness >= 180) return 'light';\n\n return null;\n}\n\nfunction watchMediaQuery(query, listener) {\n if (typeof window.matchMedia !== 'function') {\n return null;\n }\n\n const mediaQuery = window.matchMedia(query);\n\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', listener);\n return () => {\n mediaQuery.removeEventListener('change', listener);\n };\n }\n\n if (typeof mediaQuery.addListener === 'function') {\n mediaQuery.addListener(listener);\n return () => {\n mediaQuery.removeListener(listener);\n };\n }\n\n return null;\n}\n\nexport const STYLES = `\n:host {\n --oa-bg: #0b0d11;\n --oa-surface: #14161d;\n --oa-border: #1f2230;\n --oa-text: #e8e8ed;\n --oa-text-muted: #7a7d8c;\n --oa-accent: #4ae68a;\n --oa-accent-dim: rgba(74, 230, 138, 0.12);\n --oa-danger: #ef4444;\n --oa-warn: #f59e0b;\n --oa-radius: 16px;\n --oa-font: 'DM Sans', system-ui, -apple-system,\n sans-serif;\n --oa-mono: 'Space Mono', monospace;\n\n display: block;\n font-family: var(--oa-font);\n color: var(--oa-text);\n line-height: 1.4;\n}\n\n:host([data-theme=\"light\"]) {\n --oa-bg: #f8f9fb;\n --oa-surface: #ffffff;\n --oa-border: #e2e4ea;\n --oa-text: #1a1c24;\n --oa-text-muted: #6b6e7b;\n --oa-accent: #22c55e;\n --oa-accent-dim: rgba(34, 197, 94, 0.1);\n}\n\n* { box-sizing: border-box; margin: 0; padding: 0; }\n\n/* ── Checkbox ────────────────────────────────── */\n\n.oa-checkbox {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n background: var(--oa-surface);\n border: 2px solid var(--oa-border);\n border-radius: var(--oa-radius);\n cursor: pointer;\n user-select: none;\n transition: border-color 0.2s, box-shadow 0.2s;\n}\n\n.oa-checkbox:hover {\n border-color: var(--oa-text-muted);\n}\n\n.oa-checkbox.oa-verified {\n border-color: var(--oa-accent);\n cursor: default;\n}\n\n.oa-checkbox.oa-failed {\n border-color: var(--oa-danger);\n}\n\n.oa-checkbox.oa-retry {\n border-color: var(--oa-danger);\n}\n\n.oa-checkbox.oa-expired {\n border-color: var(--oa-warn);\n}\n\n.oa-checkbox.oa-loading {\n align-items: center;\n}\n\n.oa-check-box {\n width: 24px;\n height: 24px;\n border: 2px solid var(--oa-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.2s;\n}\n\n.oa-loading .oa-check-box {\n border-color: transparent;\n background: transparent;\n}\n\n.oa-loading .oa-check-box .oa-spinner {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n transform: translateY(2px);\n}\n\n.oa-verified .oa-check-box {\n background: var(--oa-accent);\n border-color: var(--oa-accent);\n color: var(--oa-bg);\n}\n\n.oa-failed .oa-check-box {\n background: var(--oa-danger);\n border-color: var(--oa-danger);\n color: white;\n}\n\n.oa-retry .oa-check-box {\n background: var(--oa-danger);\n border-color: var(--oa-danger);\n color: white;\n}\n\n.oa-check-box svg {\n width: 14px;\n height: 14px;\n}\n\n.oa-check-box .oa-spinner svg {\n width: 18px;\n height: 18px;\n}\n\n.oa-label {\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 1;\n min-width: 0;\n}\n\n.oa-label-text {\n font-size: 13px;\n font-weight: 600;\n}\n\n.oa-right-section {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.oa-face-icon-wrap {\n width: 18px;\n height: 22px;\n color: var(--oa-text-muted);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.oa-face-icon-wrap .oa-face-icon-svg {\n width: 100%;\n height: 100%;\n}\n\n.oa-face-icon-wrap .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n animation: oa-idle-blink 5s ease-in-out infinite;\n}\n\n.oa-face-icon-wrap .oa-face-icon-svg {\n animation: oa-breathe 4s ease-in-out infinite;\n}\n\n.oa-branding-row {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n}\n\n.oa-branding-link {\n font-size: 10px;\n font-weight: 700;\n font-family: var(--oa-mono);\n color: var(--oa-text-muted);\n text-decoration: none;\n letter-spacing: -0.02em;\n cursor: pointer;\n}\n\n.oa-branding-link:hover {\n color: var(--oa-text);\n}\n\n.oa-links-row {\n display: flex;\n gap: 6px;\n justify-content: center;\n}\n\n.oa-links-row a {\n font-size: 9px;\n color: var(--oa-text-muted);\n text-decoration: none;\n opacity: 0.7;\n cursor: pointer;\n}\n\n.oa-links-row a:hover {\n opacity: 1;\n text-decoration: underline;\n}\n\n.oa-compact .oa-label-text {\n font-size: 11px;\n}\n\n.oa-compact .oa-face-icon-wrap {\n width: 16px;\n height: 20px;\n}\n\n/* ── Error banner (inline in checkbox) ───────── */\n\n.oa-error-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n margin-top: 6px;\n background: rgba(239, 68, 68, 0.08);\n border: 1px solid rgba(239, 68, 68, 0.2);\n border-radius: 8px;\n font-size: 12px;\n color: var(--oa-danger);\n animation: oa-fade-in 0.3s ease;\n}\n\n.oa-error-banner button {\n margin-left: auto;\n background: none;\n border: 1px solid var(--oa-danger);\n border-radius: 6px;\n color: var(--oa-danger);\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n cursor: pointer;\n font-family: var(--oa-font);\n flex-shrink: 0;\n}\n\n.oa-error-banner button:hover {\n background: rgba(239, 68, 68, 0.1);\n}\n\n/* ── Popup / Modal shell ─────────────────────── */\n\n.oa-popup {\n position: fixed;\n z-index: 100000;\n background: var(--oa-bg);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n box-shadow: 0 20px 60px rgba(0,0,0,0.4),\n 0 0 0 1px rgba(0,0,0,0.08);\n width: 340px;\n max-height: 90vh;\n overflow: hidden;\n animation: oa-popup-in 0.25s ease;\n display: flex;\n flex-direction: column;\n}\n\n.oa-modal-overlay {\n position: fixed;\n inset: 0;\n z-index: 99999;\n background: rgba(0,0,0,0.65);\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oa-fade-in 0.2s ease;\n backdrop-filter: blur(6px);\n}\n\n.oa-modal {\n background: var(--oa-bg);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n width: 360px;\n max-width: 95vw;\n max-height: 95vh;\n overflow: hidden;\n animation: oa-slide-in 0.3s ease;\n display: flex;\n flex-direction: column;\n}\n\n/* ── Header ──────────────────────────────────── */\n\n.oa-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n border-bottom: 1px solid var(--oa-border);\n flex-shrink: 0;\n}\n\n.oa-logo {\n font-family: var(--oa-mono);\n font-size: 0.85rem;\n letter-spacing: -0.03em;\n color: var(--oa-text-muted);\n text-decoration: none;\n cursor: pointer;\n}\n\n.oa-logo:hover {\n color: var(--oa-text);\n}\n\n.oa-logo strong {\n color: var(--oa-text);\n font-weight: 700;\n}\n\n.oa-badge {\n font-size: 0.55rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--oa-accent);\n background: var(--oa-accent-dim);\n padding: 2px 6px;\n border-radius: 100px;\n margin-left: 6px;\n}\n\n.oa-title {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.oa-close-btn {\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n color: var(--oa-text-muted);\n transition: background 0.15s, color 0.15s;\n}\n\n.oa-close-btn:hover {\n background: var(--oa-border);\n color: var(--oa-text);\n}\n\n.oa-close-btn svg {\n width: 16px;\n height: 16px;\n}\n\n/* ── Body (viewport) ─────────────────────────── */\n\n.oa-body {\n flex: 1;\n position: relative;\n overflow: hidden;\n}\n\n/* ── Hero / start screen ─────────────────────── */\n\n.oa-hero {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n padding: 2rem 1.2rem 1.2rem;\n background: var(--oa-surface);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n margin: 10px;\n animation: oa-fade-in 0.4s ease;\n}\n\n.oa-hero-icon {\n width: 80px;\n height: 96px;\n color: var(--oa-text-muted);\n}\n\n.oa-hero-icon .oa-face-svg.oa-idle {\n animation: oa-breathe 4s ease-in-out infinite;\n}\n\n.oa-hero-icon .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n animation: oa-idle-blink 5s ease-in-out infinite;\n}\n\n.oa-hero-status {\n color: var(--oa-text-muted);\n font-size: 0.8rem;\n font-weight: 500;\n text-align: center;\n min-height: 1.4em;\n}\n\n.oa-hero-privacy {\n font-size: 0.68rem;\n color: var(--oa-text-muted);\n text-align: center;\n line-height: 1.5;\n max-width: 260px;\n opacity: 0.7;\n}\n\n.oa-hero-privacy svg {\n width: 10px;\n height: 10px;\n vertical-align: -2px;\n margin-right: 2px;\n}\n\n/* ── Start / Retry button ────────────────────── */\n\n.oa-actions {\n display: flex;\n justify-content: center;\n padding: 0 14px 14px;\n flex-shrink: 0;\n}\n\n.oa-btn {\n font-family: var(--oa-font);\n padding: 0.55rem 1.5rem;\n border: none;\n border-radius: 10px;\n font-size: 0.8rem;\n font-weight: 600;\n cursor: pointer;\n background: var(--oa-accent);\n color: var(--oa-bg);\n transition: transform 0.12s, opacity 0.15s;\n width: 100%;\n max-width: 240px;\n}\n\n.oa-btn:hover { opacity: 0.88; }\n.oa-btn:active { transform: scale(0.97); }\n\n/* ── Video area ──────────────────────────────── */\n\n.oa-video-area {\n position: relative;\n width: 100%;\n aspect-ratio: 3/4;\n max-height: 55vh;\n background: var(--oa-surface);\n overflow: hidden;\n border-radius: var(--oa-radius);\n margin: 10px;\n width: calc(100% - 20px);\n border: 1px solid var(--oa-border);\n animation: oa-fade-in 0.3s ease;\n}\n\n.oa-video-area video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transform: scaleX(-1);\n}\n\n/* ── Face guide overlay ──────────────────────── */\n\n.oa-face-guide {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 80%;\n max-width: 360px;\n aspect-ratio: 5/6;\n perspective: 400px;\n color: rgba(255, 255, 255, 0.45);\n pointer-events: none;\n z-index: 2;\n transition: opacity 0.4s ease;\n}\n\n.oa-face-guide .oa-face-svg {\n width: 100%;\n height: 100%;\n transform-origin: center center;\n filter: drop-shadow(\n 0 0 16px rgba(15, 23, 42, 0.16)\n );\n}\n\n.oa-face-guide .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n}\n\n.oa-face-guide[data-task=\"turn-left\"] .oa-face-svg {\n animation: oa-turn-left 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"turn-right\"] .oa-face-svg {\n animation: oa-turn-right 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"nod\"] .oa-face-svg {\n animation: oa-nod 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"blink-twice\"] .oa-eye {\n animation: oa-blink 2.4s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"move-closer\"] .oa-face-svg {\n animation: oa-closer 2.5s ease-in-out infinite;\n}\n\n/* ── Challenge HUD (bottom gradient overlay) ── */\n\n.oa-challenge-hud {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1rem 0.8rem 0.6rem;\n background: linear-gradient(\n to top,\n rgba(11, 13, 17, 0.92) 0%,\n rgba(11, 13, 17, 0) 100%\n );\n z-index: 3;\n pointer-events: none;\n}\n\n.oa-challenge-text {\n font-size: 0.85rem;\n font-weight: 600;\n text-align: center;\n color: var(--oa-text);\n text-shadow: 0 1px 6px rgba(0, 0, 0, 0.7);\n margin-bottom: 0.4rem;\n}\n\n.oa-challenge-bar {\n height: 3px;\n background: rgba(255, 255, 255, 0.1);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.oa-challenge-fill {\n height: 100%;\n background: var(--oa-accent);\n border-radius: 2px;\n transition: width 0.25s ease;\n}\n\n/* ── Video status (top gradient overlay) ─────── */\n\n.oa-video-status {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n padding: 0.8rem 0.8rem 1.2rem;\n background: linear-gradient(\n to bottom,\n rgba(11, 13, 17, 0.85) 0%,\n rgba(11, 13, 17, 0) 100%\n );\n z-index: 3;\n pointer-events: none;\n}\n\n.oa-video-status p {\n font-size: 0.75rem;\n font-weight: 500;\n text-align: center;\n color: var(--oa-text-muted);\n text-shadow: 0 1px 4px rgba(0, 0, 0, 0.5);\n}\n\n/* ── Result area ─────────────────────────────── */\n\n.oa-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n padding: 2rem 1.2rem;\n background: var(--oa-surface);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n margin: 10px;\n animation: oa-fade-in 0.4s ease;\n}\n\n.oa-result-icon {\n font-size: 2.4rem;\n line-height: 1;\n}\n\n.oa-result-text {\n font-size: 0.85rem;\n font-weight: 500;\n text-align: center;\n}\n\n.oa-result-pass { color: var(--oa-accent); }\n.oa-result-fail { color: var(--oa-danger); }\n.oa-result-retry { color: var(--oa-warn); }\n\n.oa-error-step {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.7rem;\n padding: 2rem 1.2rem;\n background: var(--oa-surface);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n margin: 10px;\n animation: oa-fade-in 0.4s ease;\n text-align: center;\n}\n\n.oa-error-step-icon {\n width: 3rem;\n height: 3rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 999px;\n background: rgba(239, 68, 68, 0.12);\n color: var(--oa-danger);\n font-size: 1.7rem;\n line-height: 1;\n}\n\n.oa-error-step-title {\n font-size: 1rem;\n font-weight: 700;\n color: var(--oa-text);\n}\n\n.oa-error-step-message {\n font-size: 0.84rem;\n line-height: 1.5;\n color: var(--oa-text-muted);\n max-width: 260px;\n}\n\n.oa-error-step-countdown {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--oa-danger);\n}\n\n.oa-hidden { display: none !important; }\n\n/* ── Animations ──────────────────────────────── */\n\n@keyframes oa-popup-in {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n}\n\n@keyframes oa-fade-in {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes oa-slide-in {\n from { opacity: 0; transform: translateY(16px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes oa-breathe {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.04); }\n}\n\n@keyframes oa-idle-blink {\n 0%, 42%, 48%, 100% { transform: scaleY(1); }\n 44%, 46% { transform: scaleY(0.05); }\n}\n\n@keyframes oa-turn-left {\n 0%, 100% { transform: rotateY(0); }\n 35%, 65% { transform: rotateY(-30deg); }\n}\n\n@keyframes oa-turn-right {\n 0%, 100% { transform: rotateY(0); }\n 35%, 65% { transform: rotateY(30deg); }\n}\n\n@keyframes oa-nod {\n 0%, 100% { transform: rotateX(0); }\n 30%, 50% { transform: rotateX(25deg); }\n}\n\n@keyframes oa-blink {\n 0%, 18%, 32%, 50%, 100% { transform: scaleY(1); }\n 22%, 28% { transform: scaleY(0.05); }\n 40%, 46% { transform: scaleY(0.05); }\n}\n\n@keyframes oa-closer {\n 0%, 100% { transform: scale(1); }\n 35%, 55% { transform: scale(1.3); }\n}\n`;\n\nexport function checkboxTemplate(labelText) {\n return `\n <div class=\"oa-widget-wrap\">\n <div class=\"oa-checkbox\" role=\"checkbox\"\n aria-checked=\"false\" tabindex=\"0\">\n <div class=\"oa-check-box\"></div>\n <div class=\"oa-label\">\n <span class=\"oa-label-text\">${labelText}</span>\n </div>\n <div class=\"oa-right-section\">\n <div class=\"oa-branding-row\">\n <div class=\"oa-face-icon-wrap\">\n ${FACE_ICON_SVG}\n </div>\n <a class=\"oa-branding-link\"\n href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\" rel=\"noopener\">OpenAge</a>\n </div>\n <div class=\"oa-links-row\">\n <a href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\"\n rel=\"noopener\">Terms</a>\n <a href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\"\n rel=\"noopener\">Privacy</a>\n </div>\n </div>\n </div>\n <div class=\"oa-error-slot\"></div>\n </div>\n `;\n}\n\nexport function heroTemplate(statusText) {\n return `\n <div class=\"oa-hero\">\n <div class=\"oa-hero-icon\">\n ${FACE_SVG.replace('class=\"oa-face-svg\"', 'class=\"oa-face-svg oa-idle\"')}\n </div>\n <p class=\"oa-hero-status\">${statusText}</p>\n <p class=\"oa-hero-privacy\">\n ${SHIELD_SVG}\n Open-source & privacy-focused.\n No photos or camera data leave your device.\n </p>\n </div>\n `;\n}\n\nexport function challengeTemplate() {\n return `\n <div class=\"oa-video-area\">\n <video autoplay playsinline muted></video>\n <div class=\"oa-face-guide\">\n ${FACE_GUIDE_SVG}\n </div>\n <div class=\"oa-challenge-hud oa-hidden\">\n <p class=\"oa-challenge-text\"></p>\n <div class=\"oa-challenge-bar\">\n <div class=\"oa-challenge-fill\"\n style=\"width:0%\"></div>\n </div>\n </div>\n <div class=\"oa-video-status\">\n <p></p>\n </div>\n </div>\n `;\n}\n\nexport function errorStepTemplate(message) {\n return `\n <div class=\"oa-error-step\">\n <div class=\"oa-error-step-icon\">✕</div>\n <div class=\"oa-error-step-title\">Verification stopped</div>\n <div class=\"oa-error-step-message\">${message}</div>\n <div class=\"oa-error-step-countdown\"></div>\n </div>\n `;\n}\n\nexport function resultTemplate(outcome, message) {\n const icons = {\n fail: '✕',\n retry: '↻',\n };\n const classes = {\n fail: 'oa-result-fail',\n retry: 'oa-result-retry',\n };\n return `\n <div class=\"oa-result ${classes[outcome] || ''}\">\n <div class=\"oa-result-icon\">\n ${icons[outcome] || '?'}\n </div>\n <div class=\"oa-result-text\">${message}</div>\n </div>\n `;\n}\n\nexport function errorBannerTemplate(message) {\n return `\n <div class=\"oa-error-banner\">\n <span>${message}</span>\n <button class=\"oa-retry-btn\">Retry</button>\n </div>\n `;\n}\n","export const VERSION = '1.0.0';\n\nexport const MEDIAPIPE_CDN = 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.17';\n\nexport const MEDIAPIPE_WASM = `${MEDIAPIPE_CDN}/wasm`;\n\nexport const MEDIAPIPE_VISION = `${MEDIAPIPE_CDN}/vision_bundle.mjs`;\n\nexport const MEDIAPIPE_MODEL =\n 'https://storage.googleapis.com/mediapipe-models/' +\n 'face_landmarker/face_landmarker/float16/1/' +\n 'face_landmarker.task';\n\nexport const FACEAPI_CDN =\n 'https://cdn.jsdelivr.net/npm/face-api.js@0.22.2/dist/face-api.min.js';\n\nexport const FACEAPI_MODEL_CDN =\n 'https://cdn.jsdelivr.net/gh/justadudewhohacks/face-api.js@master/weights';\n\nexport const MAX_RETRIES = 3;\nexport const ERROR_STEP_SECONDS = 5;\nexport const BURST_FRAMES = 5;\nexport const BURST_INTERVAL_MS = 200;\nexport const POSITION_CHECK_MS = 100;\nexport const MOTION_CAPTURE_MS = 3000;\nexport const MOTION_SAMPLE_MS = 100;\nexport const TOKEN_EXPIRY_S = 300;\nexport const STABLE_FRAMES_REQUIRED = 10;\n\nexport const TASK_TIMEOUT_MS = 8000;\nexport const MIN_TASK_TIME_MS = 500;\nexport const TASK_COUNT = 3;\nexport const REQUIRED_TASK_PASSES = 2;\n\nexport const POPUP_MIN_WIDTH = 340;\nexport const POPUP_MIN_HEIGHT = 520;\nexport const POPUP_MARGIN = 12;\n","import {\n STYLES,\n checkboxTemplate,\n heroTemplate,\n challengeTemplate,\n errorStepTemplate,\n resultTemplate,\n resolveTheme,\n watchTheme,\n SPINNER_SVG,\n CHECK_SVG,\n CLOSE_SVG,\n RETRY_SVG,\n} from './ui.js';\nimport { POPUP_MIN_WIDTH, POPUP_MIN_HEIGHT, POPUP_MARGIN } from './constants.js';\n\nlet widgetCounter = 0;\n\nexport class Widget {\n constructor(container, params) {\n this.id = `oa-${++widgetCounter}`;\n this.params = params;\n this.container = resolveContainer(container);\n this.anchorElement = null;\n this.state = 'idle';\n this.token = null;\n this.popup = null;\n this.shadow = null;\n this.elements = {};\n this.onChallenge = null;\n this.onStartClick = null;\n this.popupFrame = 0;\n this.themeCleanup = null;\n\n this.render();\n }\n\n render() {\n const host = document.createElement('div');\n host.id = this.id;\n this.shadow = host.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = STYLES;\n this.shadow.appendChild(style);\n\n const theme = resolveTheme(this.params.theme);\n host.setAttribute('data-theme', theme);\n this.themeCleanup = watchTheme(host, this.params.theme);\n\n if (this.params.size === 'invisible') {\n host.style.display = 'none';\n this.container.appendChild(host);\n this.host = host;\n return;\n }\n\n const label = 'I am of age';\n\n const wrapper = document.createElement('div');\n wrapper.innerHTML = checkboxTemplate(label);\n this.shadow.appendChild(wrapper.firstElementChild);\n\n const checkbox = this.shadow.querySelector('.oa-checkbox');\n\n if (this.params.size === 'compact') {\n checkbox.classList.add('oa-compact');\n }\n\n checkbox.addEventListener('click', (event) => {\n if (event.target.closest('a')) return;\n if (this.state === 'verified') return;\n if (this.state === 'loading') return;\n this.clearError();\n this.startChallenge();\n });\n\n checkbox.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n checkbox.click();\n }\n });\n\n this.elements.checkbox = checkbox;\n this.elements.checkBox = this.shadow.querySelector('.oa-check-box');\n this.elements.errorSlot = this.shadow.querySelector('.oa-error-slot');\n\n this.container.appendChild(host);\n this.host = host;\n }\n\n startChallenge() {\n this.setState('loading');\n\n if (this.onChallenge) {\n this.onChallenge(this);\n }\n }\n\n createPopupShell() {\n const theme = resolveTheme(this.params.theme);\n const popupHost = document.createElement('div');\n popupHost.setAttribute('data-theme', theme);\n const popupShadow = popupHost.attachShadow({\n mode: 'open',\n });\n\n const style = document.createElement('style');\n style.textContent = STYLES;\n popupShadow.appendChild(style);\n\n const themeCleanup = watchTheme(popupHost, this.params.theme);\n\n return {\n popupHost,\n popupShadow,\n themeCleanup,\n };\n }\n\n openPopup() {\n if (this.popup) return this.getVideo();\n\n const anchor = this.getPopupAnchor();\n\n if (!anchor) {\n return this.openModal();\n }\n\n const { popupHost, popupShadow, themeCleanup } = this.createPopupShell();\n\n const popup = document.createElement('div');\n popup.className = 'oa-popup';\n popup.innerHTML = this.buildPopupContent();\n popup.style.visibility = 'hidden';\n popup.style.pointerEvents = 'none';\n\n popupShadow.appendChild(popup);\n document.body.appendChild(popupHost);\n\n this.popup = {\n anchor,\n host: popupHost,\n root: popup,\n themeCleanup,\n };\n\n const anchorRect = anchor.getBoundingClientRect();\n const popupRect = popup.getBoundingClientRect();\n const position = findPopupPosition(anchorRect, popupRect);\n\n if (position.mode === 'modal') {\n popupHost.remove();\n themeCleanup?.();\n this.popup = null;\n return this.openModal();\n }\n\n this.bindPopupEvents(popup, popupShadow);\n this.updatePopupPosition();\n this.startPopupTracking();\n return this.getVideo();\n }\n\n openModal() {\n const { popupHost, popupShadow, themeCleanup } = this.createPopupShell();\n\n const overlay = document.createElement('div');\n overlay.className = 'oa-modal-overlay';\n\n const modal = document.createElement('div');\n modal.className = 'oa-modal';\n modal.innerHTML = this.buildPopupContent();\n\n overlay.appendChild(modal);\n popupShadow.appendChild(overlay);\n document.body.appendChild(popupHost);\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) this.closePopup();\n });\n\n this.popup = {\n host: popupHost,\n root: modal,\n overlay,\n themeCleanup,\n };\n this.bindPopupEvents(modal, popupShadow);\n return this.getVideo();\n }\n\n getPopupAnchor() {\n return this.anchorElement || this.elements.checkbox || this.host || null;\n }\n\n startPopupTracking() {\n if (!this.popup || this.popup.overlay) return;\n\n const schedule = () => {\n this.schedulePopupPosition();\n };\n\n const cleanups = [];\n const addWindowListener = (name, options) => {\n window.addEventListener(name, schedule, options);\n cleanups.push(() => {\n window.removeEventListener(name, schedule, options);\n });\n };\n\n addWindowListener('resize', { passive: true });\n addWindowListener('scroll', {\n capture: true,\n passive: true,\n });\n\n if (window.visualViewport) {\n const viewport = window.visualViewport;\n viewport.addEventListener('resize', schedule);\n viewport.addEventListener('scroll', schedule);\n cleanups.push(() => {\n viewport.removeEventListener('resize', schedule);\n viewport.removeEventListener('scroll', schedule);\n });\n }\n\n if (typeof ResizeObserver === 'function') {\n const observer = new ResizeObserver(() => {\n schedule();\n });\n observer.observe(this.popup.root);\n observer.observe(this.popup.anchor);\n observer.observe(document.documentElement);\n if (document.body) {\n observer.observe(document.body);\n }\n cleanups.push(() => observer.disconnect());\n }\n\n this.popup.cleanup = () => {\n if (this.popupFrame) {\n cancelAnimationFrame(this.popupFrame);\n this.popupFrame = 0;\n }\n for (const cleanup of cleanups) {\n cleanup();\n }\n };\n }\n\n schedulePopupPosition() {\n if (!this.popup || this.popup.overlay) return;\n if (this.popupFrame) return;\n\n this.popupFrame = requestAnimationFrame(() => {\n this.popupFrame = 0;\n this.updatePopupPosition();\n });\n }\n\n updatePopupPosition() {\n if (!this.popup || this.popup.overlay) return;\n\n const anchor = this.getPopupAnchor();\n if (!anchor || !anchor.isConnected) {\n this.closePopup();\n return;\n }\n\n this.popup.anchor = anchor;\n\n const anchorRect = anchor.getBoundingClientRect();\n const popupRect = this.popup.root.getBoundingClientRect();\n const position = findPopupPosition(anchorRect, popupRect);\n\n if (position.mode === 'modal') {\n this.closePopup();\n this.openModal();\n return;\n }\n\n const top = `${Math.round(position.top)}px`;\n const left = `${Math.round(position.left)}px`;\n\n if (this.popup.root.style.top !== top) {\n this.popup.root.style.top = top;\n }\n\n if (this.popup.root.style.left !== left) {\n this.popup.root.style.left = left;\n }\n\n this.popup.root.dataset.placement = position.placement;\n this.popup.root.style.visibility = 'visible';\n this.popup.root.style.pointerEvents = 'auto';\n }\n\n buildPopupContent() {\n return `\n <div class=\"oa-header\">\n <div class=\"oa-title\">\n <a class=\"oa-logo\"\n href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\" rel=\"noopener\">\n Open<strong>Age</strong>\n </a>\n <span class=\"oa-badge\">on-device</span>\n </div>\n <button class=\"oa-close-btn\"\n aria-label=\"Close\">\n ${CLOSE_SVG}\n </button>\n </div>\n <div class=\"oa-body\">\n ${heroTemplate('Initializing…')}\n </div>\n <div class=\"oa-actions oa-hidden\">\n <button class=\"oa-btn oa-start-btn\">\n Begin Verification\n </button>\n </div>\n `;\n }\n\n bindPopupEvents(root, shadow) {\n const closeBtn = root.querySelector('.oa-close-btn');\n if (closeBtn) {\n closeBtn.addEventListener('click', () => {\n this.closePopup();\n this.params.closeCallback?.();\n });\n }\n\n const startBtn = root.querySelector('.oa-start-btn');\n if (startBtn) {\n startBtn.addEventListener('click', () => {\n if (this.onStartClick) this.onStartClick();\n });\n }\n\n this.popupElements = {\n body: root.querySelector('.oa-body'),\n actions: root.querySelector('.oa-actions'),\n startBtn,\n heroStatus: root.querySelector('.oa-hero-status'),\n };\n }\n\n getVideo() {\n if (!this.popup) return null;\n return this.popup.root.querySelector('video');\n }\n\n showHero(statusText) {\n if (!this.popupElements?.body) return;\n this.popupElements.body.innerHTML = heroTemplate(statusText);\n this.popupElements.heroStatus = this.popupElements.body.querySelector('.oa-hero-status');\n this.hideActions();\n }\n\n showReady() {\n this.setHeroStatus('Ready to verify your age.');\n this.showActions('Begin Verification');\n }\n\n showCamera() {\n if (!this.popupElements?.body) return;\n this.popupElements.body.innerHTML = challengeTemplate();\n\n this.popupElements.video = this.popupElements.body.querySelector('video');\n this.popupElements.faceGuide = this.popupElements.body.querySelector('.oa-face-guide');\n this.popupElements.challengeHud =\n this.popupElements.body.querySelector('.oa-challenge-hud');\n this.popupElements.challengeText =\n this.popupElements.body.querySelector('.oa-challenge-text');\n this.popupElements.challengeFill =\n this.popupElements.body.querySelector('.oa-challenge-fill');\n this.popupElements.videoStatus =\n this.popupElements.body.querySelector('.oa-video-status p');\n\n this.hideActions();\n return this.popupElements.video;\n }\n\n showLiveness() {\n if (this.popupElements?.faceGuide) {\n this.popupElements.faceGuide.classList.remove('oa-hidden');\n }\n if (this.popupElements?.challengeHud) {\n this.popupElements.challengeHud.classList.remove('oa-hidden');\n }\n }\n\n setHeroStatus(text) {\n if (this.popupElements?.heroStatus) {\n this.popupElements.heroStatus.textContent = text;\n }\n }\n\n setVideoStatus(text) {\n if (this.popupElements?.videoStatus) {\n this.popupElements.videoStatus.textContent = text;\n }\n }\n\n setInstruction(text) {\n if (this.popupElements?.challengeText) {\n this.popupElements.challengeText.textContent = text;\n }\n }\n\n setStatus(text) {\n this.setVideoStatus(text);\n }\n\n setProgress(fraction) {\n if (this.popupElements?.challengeFill) {\n this.popupElements.challengeFill.style.width = `${Math.round(fraction * 100)}%`;\n }\n }\n\n setTask(taskId) {\n if (this.popupElements?.faceGuide) {\n this.popupElements.faceGuide.setAttribute('data-task', taskId || '');\n }\n }\n\n showActions(label) {\n if (!this.popupElements?.actions) return;\n this.popupElements.actions.classList.remove('oa-hidden');\n if (this.popupElements.startBtn) {\n this.popupElements.startBtn.textContent = label;\n }\n }\n\n hideActions() {\n if (this.popupElements?.actions) {\n this.popupElements.actions.classList.add('oa-hidden');\n }\n }\n\n showResult(outcome, message) {\n if (outcome === 'pass') {\n this.closePopup();\n this.setState('verified');\n return;\n }\n\n if (outcome === 'fail') {\n if (this.params.size === 'invisible') {\n if (this.popupElements?.body) {\n this.popupElements.body.innerHTML = resultTemplate(outcome, message);\n }\n this.hideActions();\n this.showActions('Try Again');\n } else {\n this.closePopup();\n this.setState('retry');\n }\n return;\n }\n\n if (outcome === 'retry') {\n if (this.params.size !== 'invisible') {\n this.closePopup();\n this.setState('retry');\n return;\n }\n\n if (this.popupElements?.body) {\n this.popupElements.body.innerHTML = resultTemplate(outcome, message);\n }\n this.hideActions();\n this.showActions('Try Again');\n }\n }\n\n showError(message) {\n if (!this.popupElements?.body) return;\n\n this.popupElements.body.innerHTML = errorStepTemplate(message);\n this.popupElements.errorCountdown =\n this.popupElements.body.querySelector('.oa-error-step-countdown');\n this.hideActions();\n }\n\n setErrorCountdown(seconds) {\n if (!this.popupElements?.errorCountdown) return;\n\n const unit = seconds === 1 ? 'second' : 'seconds';\n this.popupElements.errorCountdown.textContent = `Closing in ${seconds} ${unit}…`;\n }\n\n clearError() {\n if (this.elements.errorSlot) {\n this.elements.errorSlot.innerHTML = '';\n }\n }\n\n closePopup() {\n if (!this.popup) return;\n this.popup.cleanup?.();\n this.popup.themeCleanup?.();\n this.popup.host.remove();\n this.popup = null;\n this.popupElements = null;\n\n if (this.state === 'loading') {\n this.setState('idle');\n }\n }\n\n setState(newState) {\n this.state = newState;\n const cb = this.elements.checkbox;\n const box = this.elements.checkBox;\n if (!cb || !box) return;\n\n cb.classList.remove('oa-loading', 'oa-verified', 'oa-failed', 'oa-retry', 'oa-expired');\n cb.setAttribute('aria-checked', 'false');\n box.innerHTML = '';\n\n switch (newState) {\n case 'loading':\n cb.classList.add('oa-loading');\n box.innerHTML = `<span class=\"oa-spinner\">` + `${SPINNER_SVG}</span>`;\n break;\n case 'verified':\n cb.classList.add('oa-verified');\n cb.setAttribute('aria-checked', 'true');\n box.innerHTML = CHECK_SVG;\n break;\n case 'failed':\n cb.classList.add('oa-failed');\n box.innerHTML = '✕';\n break;\n case 'retry':\n cb.classList.add('oa-retry');\n box.innerHTML = RETRY_SVG;\n break;\n case 'expired':\n cb.classList.add('oa-expired');\n cb.setAttribute('aria-checked', 'false');\n break;\n default:\n break;\n }\n }\n\n getToken() {\n return this.token;\n }\n\n reset() {\n this.token = null;\n this.closePopup();\n this.setState('idle');\n }\n\n destroy() {\n this.closePopup();\n this.themeCleanup?.();\n this.host?.remove();\n }\n}\n\nexport function createModalWidget(params) {\n const widget = new Widget(document.createElement('div'), { ...params, size: 'invisible' });\n return widget;\n}\n\nfunction resolveContainer(container) {\n if (typeof container === 'string') {\n return document.querySelector(container);\n }\n return container;\n}\n\nfunction findPopupPosition(anchorRect, popupRect) {\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n const popupWidth = Math.max(popupRect.width || 0, POPUP_MIN_WIDTH);\n const popupHeight = Math.max(popupRect.height || 0, POPUP_MIN_HEIGHT);\n const availableWidth = viewport.width - POPUP_MARGIN * 2;\n const availableHeight = viewport.height - POPUP_MARGIN * 2;\n\n if (popupWidth > availableWidth || popupHeight > availableHeight) {\n return { mode: 'modal' };\n }\n\n const left = clampLeft(\n anchorRect.left + anchorRect.width / 2 - popupWidth / 2,\n viewport.width,\n popupWidth\n );\n\n const topBelow = anchorRect.bottom + POPUP_MARGIN;\n const topAbove = anchorRect.top - popupHeight - POPUP_MARGIN;\n const fitsBelow = topBelow + popupHeight <= viewport.height - POPUP_MARGIN;\n const fitsAbove = topAbove >= POPUP_MARGIN;\n\n if (fitsBelow || !fitsAbove) {\n return {\n mode: 'popup',\n placement: 'below',\n top: clampTop(topBelow, viewport.height, popupHeight),\n left,\n };\n }\n\n return {\n mode: 'popup',\n placement: 'above',\n top: clampTop(topAbove, viewport.height, popupHeight),\n left,\n };\n}\n\nfunction clampLeft(left, viewportWidth, popupWidth) {\n return Math.min(Math.max(POPUP_MARGIN, left), viewportWidth - popupWidth - POPUP_MARGIN);\n}\n\nfunction clampTop(top, viewportHeight, popupHeight) {\n return Math.min(Math.max(POPUP_MARGIN, top), viewportHeight - popupHeight - POPUP_MARGIN);\n}\n","import { MEDIAPIPE_CDN, MEDIAPIPE_WASM, MEDIAPIPE_VISION, MEDIAPIPE_MODEL } from './constants.js';\n\nlet FaceLandmarker = null;\nlet landmarker = null;\nlet lastTimestampMs = -1;\nlet visionModule = null;\n\nexport async function loadVision() {\n if (visionModule) return visionModule;\n visionModule = await import(MEDIAPIPE_VISION);\n FaceLandmarker = visionModule.FaceLandmarker;\n return visionModule;\n}\n\nexport async function loadModel() {\n const response = await fetch(MEDIAPIPE_MODEL);\n if (!response.ok) {\n throw new Error('Failed to load face landmarker model');\n }\n return new Uint8Array(await response.arrayBuffer());\n}\n\nexport async function initTracker(modelBuffer) {\n const vision = await loadVision();\n const resolver = await vision.FilesetResolver.forVisionTasks(MEDIAPIPE_WASM);\n\n if (landmarker) {\n landmarker.close();\n }\n lastTimestampMs = -1;\n\n landmarker = await FaceLandmarker.createFromOptions(resolver, {\n baseOptions: {\n modelAssetBuffer: new Uint8Array(modelBuffer),\n delegate: 'GPU',\n },\n runningMode: 'VIDEO',\n numFaces: 2,\n outputFaceBlendshapes: true,\n outputFacialTransformationMatrixes: true,\n });\n}\n\nexport function track(video, timestampMs) {\n if (!landmarker) return null;\n\n const normalized = normalizeTimestamp(timestampMs);\n const result = landmarker.detectForVideo(video, normalized);\n const faceCount = result.faceLandmarks?.length ?? 0;\n\n if (faceCount === 0) {\n return { faceCount: 0, timestampMs: normalized };\n }\n\n const landmarks = result.faceLandmarks[0];\n\n return {\n faceCount,\n timestampMs: normalized,\n landmarks,\n blendshapes: parseBlendshapes(result.faceBlendshapes?.[0]),\n headPose: extractHeadPose(result.facialTransformationMatrixes?.[0]),\n boundingBox: computeBoundingBox(landmarks),\n };\n}\n\nexport function destroyTracker() {\n if (landmarker) {\n landmarker.close();\n landmarker = null;\n }\n lastTimestampMs = -1;\n}\n\nexport function isTrackerReady() {\n return landmarker !== null;\n}\n\nfunction normalizeTimestamp(timestampMs) {\n const safe = Number.isFinite(timestampMs) ? timestampMs : performance.now();\n const whole = Math.floor(safe);\n const normalized = Math.max(whole, lastTimestampMs + 1);\n lastTimestampMs = normalized;\n return normalized;\n}\n\nfunction parseBlendshapes(blendshapeResult) {\n if (!blendshapeResult?.categories) return {};\n const map = {};\n for (const category of blendshapeResult.categories) {\n map[category.categoryName] = category.score;\n }\n return map;\n}\n\nfunction extractHeadPose(matrix) {\n if (!matrix?.data || matrix.data.length < 16) {\n return { yaw: 0, pitch: 0, roll: 0 };\n }\n const m = matrix.data;\n const deg = 180 / Math.PI;\n return {\n yaw: Math.atan2(m[8], m[10]) * deg,\n pitch: Math.asin(-Math.max(-1, Math.min(1, m[9]))) * deg,\n roll: Math.atan2(m[1], m[5]) * deg,\n };\n}\n\nfunction computeBoundingBox(landmarks) {\n let minX = 1,\n minY = 1,\n maxX = 0,\n maxY = 0;\n\n for (const point of landmarks) {\n if (point.x < minX) minX = point.x;\n if (point.y < minY) minY = point.y;\n if (point.x > maxX) maxX = point.x;\n if (point.y > maxY) maxY = point.y;\n }\n\n const width = maxX - minX;\n const height = maxY - minY;\n\n return {\n x: minX,\n y: minY,\n width,\n height,\n area: width * height,\n };\n}\n","import { track } from './face-tracker.js';\nimport { STABLE_FRAMES_REQUIRED, POSITION_CHECK_MS } from './constants.js';\n\nexport function startPositioning(video, callbacks) {\n let stableFrames = 0;\n let cancelled = false;\n\n const check = () => {\n if (cancelled) return;\n\n const result = track(video, performance.now());\n\n if (!result || result.faceCount === 0) {\n callbacks.onStatus?.('Look at the camera');\n stableFrames = 0;\n } else if (result.faceCount > 1) {\n callbacks.onStatus?.('Only one person please');\n stableFrames = 0;\n } else {\n callbacks.onStatus?.('Hold still…');\n stableFrames++;\n }\n\n if (stableFrames >= STABLE_FRAMES_REQUIRED) {\n callbacks.onReady?.();\n return;\n }\n\n setTimeout(check, POSITION_CHECK_MS);\n };\n\n check();\n\n return {\n cancel: () => {\n cancelled = true;\n },\n };\n}\n","import { FACEAPI_CDN, FACEAPI_MODEL_CDN } from './constants.js';\n\nlet initialized = false;\nlet faceapi = null;\n\nfunction loadScript(url) {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') {\n return reject(new Error('No DOM available'));\n }\n\n const existing = document.querySelector(`script[src=\"${url}\"]`);\n if (existing) {\n if (window.faceapi) return resolve(window.faceapi);\n existing.addEventListener('load', () => resolve(window.faceapi));\n return;\n }\n\n const script = document.createElement('script');\n script.src = url;\n script.crossOrigin = 'anonymous';\n script.onload = () => resolve(window.faceapi);\n script.onerror = () => reject(new Error(`Failed to load ${url}`));\n document.head.appendChild(script);\n });\n}\n\nexport async function initAgeEstimator() {\n if (initialized) return;\n\n faceapi = await loadScript(FACEAPI_CDN);\n\n await Promise.all([\n faceapi.nets.tinyFaceDetector.loadFromUri(FACEAPI_MODEL_CDN),\n faceapi.nets.faceLandmark68TinyNet.loadFromUri(FACEAPI_MODEL_CDN),\n faceapi.nets.ageGenderNet.loadFromUri(FACEAPI_MODEL_CDN),\n ]);\n\n initialized = true;\n}\n\nexport async function estimateAge(canvas) {\n if (!faceapi) {\n throw new Error('Age estimator not initialized');\n }\n\n const detection = await faceapi\n .detectSingleFace(\n canvas,\n new faceapi.TinyFaceDetectorOptions({\n inputSize: 224,\n })\n )\n .withFaceLandmarks(true)\n .withAgeAndGender();\n\n if (!detection) return null;\n\n return {\n age: detection.age,\n gender: detection.gender,\n confidence: detection.detection.score,\n };\n}\n\nexport async function estimateAgeBurst(frames) {\n const results = [];\n for (const frame of frames) {\n const result = await estimateAge(frame);\n if (result) results.push(result);\n }\n return results;\n}\n\nexport function isInitialized() {\n return initialized;\n}\n","import {\n TASK_TIMEOUT_MS,\n MIN_TASK_TIME_MS,\n TASK_COUNT,\n REQUIRED_TASK_PASSES,\n} from './constants.js';\n\nconst TASKS = [\n {\n id: 'turn-left',\n instruction: 'Turn your head to the left',\n check: (h) => detectYawShift(h, 20),\n },\n {\n id: 'turn-right',\n instruction: 'Turn your head to the right',\n check: (h) => detectYawShift(h, -20),\n },\n {\n id: 'nod',\n instruction: 'Nod your head down then up',\n check: (h) => detectNod(h),\n },\n {\n id: 'blink-twice',\n instruction: 'Blink twice',\n check: (h) => detectDoubleBlink(h),\n },\n {\n id: 'move-closer',\n instruction: 'Move closer then back',\n check: (h) => detectDistanceChange(h),\n },\n];\n\nexport function pickTasks(count = TASK_COUNT) {\n const shuffled = [...TASKS].sort(() => Math.random() - 0.5);\n return shuffled.slice(0, count);\n}\n\nexport function createSession(tasks) {\n return {\n tasks: tasks || pickTasks(),\n currentIndex: 0,\n history: [],\n taskStartTime: 0,\n completedTasks: 0,\n requiredPasses: REQUIRED_TASK_PASSES,\n failed: false,\n failReason: null,\n };\n}\n\nexport function processFrame(session, trackingResult) {\n if (session.failed || isComplete(session)) return;\n if (session.currentIndex >= session.tasks.length) return;\n if (!trackingResult || trackingResult.faceCount === 0) return;\n\n if (trackingResult.faceCount > 1) {\n session.failed = true;\n session.failReason = null;\n return;\n }\n\n const entry = {\n timestamp: trackingResult.timestampMs,\n headPose: trackingResult.headPose,\n blendshapes: trackingResult.blendshapes,\n boundingBox: trackingResult.boundingBox,\n };\n\n if (session.history.length === 0) {\n session.taskStartTime = trackingResult.timestampMs;\n }\n\n session.history.push(entry);\n\n const elapsed = trackingResult.timestampMs - session.taskStartTime;\n\n if (elapsed > TASK_TIMEOUT_MS) {\n advanceTask(session);\n return;\n }\n\n if (elapsed < MIN_TASK_TIME_MS) return;\n\n const task = session.tasks[session.currentIndex];\n if (!task.check(session.history)) return;\n\n if (isSuspicious(session.history)) {\n session.failed = true;\n session.failReason = null;\n return;\n }\n\n session.completedTasks++;\n advanceTask(session);\n}\n\nexport function isComplete(session) {\n return session.currentIndex >= session.tasks.length;\n}\n\nexport function isPassed(session) {\n return session.completedTasks >= session.requiredPasses;\n}\n\nexport function currentInstruction(session) {\n if (session.currentIndex >= session.tasks.length) {\n return null;\n }\n return session.tasks[session.currentIndex].instruction;\n}\n\nexport function currentTaskId(session) {\n if (session.currentIndex >= session.tasks.length) {\n return null;\n }\n return session.tasks[session.currentIndex].id;\n}\n\nexport function progress(session) {\n if (session.tasks.length === 0) return 1;\n return Math.min(session.currentIndex / session.tasks.length, 1);\n}\n\nfunction advanceTask(session) {\n session.currentIndex++;\n session.history = [];\n session.taskStartTime = 0;\n\n const remaining = session.tasks.length - session.currentIndex;\n const canStillPass = session.completedTasks + remaining >= session.requiredPasses;\n\n if (!canStillPass) {\n session.failed = true;\n session.failReason = null;\n }\n}\n\nfunction detectYawShift(history, targetDelta) {\n if (history.length < 5) return false;\n const baseYaw = history[0].headPose.yaw;\n const direction = Math.sign(targetDelta);\n const threshold = Math.abs(targetDelta);\n\n return history.some((entry) => {\n const delta = (entry.headPose.yaw - baseYaw) * direction;\n return delta > threshold;\n });\n}\n\nfunction detectNod(history) {\n if (history.length < 10) return false;\n const basePitch = history[0].headPose.pitch;\n let wentDown = false;\n let cameBack = false;\n\n for (const entry of history) {\n const delta = entry.headPose.pitch - basePitch;\n if (delta > 15) wentDown = true;\n if (wentDown && Math.abs(delta) < 8) cameBack = true;\n }\n\n return wentDown && cameBack;\n}\n\nfunction detectDoubleBlink(history) {\n if (history.length < 10) return false;\n let blinkCount = 0;\n let eyesClosed = false;\n\n for (const entry of history) {\n const left = entry.blendshapes.eyeBlinkLeft ?? 0;\n const right = entry.blendshapes.eyeBlinkRight ?? 0;\n const bothClosed = left > 0.6 && right > 0.6;\n\n if (bothClosed && !eyesClosed) {\n blinkCount++;\n eyesClosed = true;\n } else if (!bothClosed) {\n eyesClosed = false;\n }\n }\n\n return blinkCount >= 2;\n}\n\nfunction detectDistanceChange(history) {\n if (history.length < 10) return false;\n const baseArea = history[0].boundingBox.area;\n let wentCloser = false;\n let cameBack = false;\n\n for (const entry of history) {\n const ratio = entry.boundingBox.area / baseArea;\n if (ratio > 1.3) wentCloser = true;\n if (wentCloser && ratio < 1.15) cameBack = true;\n }\n\n return wentCloser && cameBack;\n}\n\nexport function isSuspicious(history) {\n if (history.length < 5) return false;\n\n const deltas = [];\n for (let i = 1; i < history.length; i++) {\n const dy = Math.abs(history[i].headPose.yaw - history[i - 1].headPose.yaw);\n const dp = Math.abs(history[i].headPose.pitch - history[i - 1].headPose.pitch);\n deltas.push(dy + dp);\n }\n\n if (deltas.every((d) => d < 0.1)) return true;\n\n const mean = deltas.reduce((a, b) => a + b, 0) / deltas.length;\n const variance = deltas.reduce((s, d) => s + (d - mean) ** 2, 0) / deltas.length;\n\n return variance < 0.01 && mean > 0.5;\n}\n","import { TOKEN_EXPIRY_S } from './constants.js';\n\nfunction base64UrlEncode(data) {\n const text = typeof data === 'string' ? data : String.fromCharCode(...new Uint8Array(data));\n return btoa(text).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(str) {\n const padded = str + '='.repeat((4 - (str.length % 4)) % 4);\n const binary = atob(padded.replace(/-/g, '+').replace(/_/g, '/'));\n return Uint8Array.from(binary, (c) => c.charCodeAt(0));\n}\n\nasync function getSigningKey() {\n const raw = crypto.getRandomValues(new Uint8Array(32));\n return crypto.subtle.importKey('raw', raw, { name: 'HMAC', hash: 'SHA-256' }, false, [\n 'sign',\n 'verify',\n ]);\n}\n\nlet cachedKey = null;\n\nasync function ensureKey() {\n if (!cachedKey) cachedKey = await getSigningKey();\n return cachedKey;\n}\n\nexport async function createToken(payload) {\n const key = await ensureKey();\n\n const header = base64UrlEncode(JSON.stringify({ alg: 'HS256', typ: 'JWT' }));\n\n const body = base64UrlEncode(\n JSON.stringify({\n ...payload,\n iat: Math.floor(Date.now() / 1000),\n exp: Math.floor(Date.now() / 1000) + TOKEN_EXPIRY_S,\n })\n );\n\n const data = new TextEncoder().encode(`${header}.${body}`);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n\n return `${header}.${body}.${base64UrlEncode(signature)}`;\n}\n\nexport async function verifyToken(token) {\n const key = await ensureKey();\n const [header, body, sig] = token.split('.');\n\n if (!header || !body || !sig) return null;\n\n let signature;\n let data;\n try {\n data = new TextEncoder().encode(`${header}.${body}`);\n signature = base64UrlDecode(sig);\n } catch {\n return null;\n }\n\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n if (!valid) return null;\n\n const decoded = JSON.parse(new TextDecoder().decode(base64UrlDecode(body)));\n\n if (decoded.exp && decoded.exp < Date.now() / 1000) {\n return null;\n }\n\n return decoded;\n}\n\nexport function decodeToken(token) {\n const [, body] = token.split('.');\n if (!body) return null;\n return JSON.parse(new TextDecoder().decode(base64UrlDecode(body)));\n}\n\nexport function createTransport(mode, options = {}) {\n if (mode === 'serverless') {\n return createServerlessTransport(options);\n }\n\n const baseUrl = mode === 'custom' ? options.server : 'https://api.openage.dev';\n\n return createServerTransport(baseUrl, options);\n}\n\nfunction createServerlessTransport(options) {\n return {\n async verify(payload) {\n const { estimatedAge, livenessOk } = payload;\n\n if (!livenessOk) {\n return { success: false, token: null };\n }\n\n const token = await createToken({\n estimatedAge,\n livenessOk: true,\n mode: 'serverless',\n });\n\n return { success: true, token };\n },\n close() {},\n };\n}\n\nfunction createServerTransport(baseUrl, options) {\n let session = null;\n let channel = null;\n\n return {\n async createSession() {\n const transports = [];\n if (typeof WebSocket !== 'undefined') {\n transports.push('websocket');\n }\n transports.push('poll');\n\n const response = await fetch(`${baseUrl}/api/session`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n sitekey: options.sitekey,\n action: options.action,\n supportedTransports: transports,\n }),\n });\n\n if (!response.ok) {\n throw new Error('Request failed');\n }\n\n session = await response.json();\n return session;\n },\n\n openChannel() {\n if (!session) {\n throw new Error('No session');\n }\n\n if (session.transport === 'websocket') {\n channel = createWsChannel(baseUrl, session.sessionId);\n } else {\n channel = createPollChannel(baseUrl, session.sessionId);\n }\n },\n\n async receive() {\n if (!channel) return null;\n return channel.receive();\n },\n\n async send(data) {\n if (!channel) return;\n return channel.send(data);\n },\n\n async sendAndReceive(data) {\n if (!channel) return null;\n return channel.sendAndReceive(data);\n },\n\n async verify(payload) {\n if (channel) {\n return this.verifyViaChannel(payload);\n }\n\n const response = await fetch(`${baseUrl}/verify`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n response: payload.token,\n sitekey: options.sitekey,\n action: options.action,\n }),\n });\n\n if (!response.ok) {\n return {\n success: false,\n token: null,\n };\n }\n\n return response.json();\n },\n\n async verifyViaChannel(payload) {\n await channel.send(payload);\n return channel.receive();\n },\n\n getSession() {\n return session;\n },\n\n close() {\n channel?.close();\n channel = null;\n session = null;\n },\n };\n}\n\nfunction createWsChannel(baseUrl, sessionId) {\n const wsUrl = baseUrl.replace(/^http/, 'ws').replace(/\\/$/, '');\n const url = `${wsUrl}/api/ws/${sessionId}`;\n const ws = new WebSocket(url);\n let pending = [];\n let ready = false;\n let closed = false;\n\n const waitReady = new Promise((resolve, reject) => {\n ws.onopen = () => {\n ready = true;\n resolve();\n };\n ws.onerror = () => {\n reject(new Error('Connection failed'));\n };\n });\n\n ws.onmessage = (event) => {\n const message = JSON.parse(event.data);\n const resolver = pending.shift();\n if (resolver) resolver(message);\n };\n\n ws.onclose = () => {\n closed = true;\n for (const resolver of pending) resolver(null);\n pending = [];\n };\n\n return {\n receive() {\n if (closed) return Promise.resolve(null);\n return new Promise((resolve) => {\n pending.push(resolve);\n });\n },\n async send(data) {\n await waitReady;\n ws.send(JSON.stringify(data));\n },\n async sendAndReceive(data) {\n await waitReady;\n ws.send(JSON.stringify(data));\n return this.receive();\n },\n close() {\n closed = true;\n ws.close();\n },\n };\n}\n\nfunction createPollChannel(baseUrl, sessionId) {\n return {\n async receive() {\n const response = await fetch(`${baseUrl}/api/poll/${sessionId}`);\n if (!response.ok) {\n throw new Error('Request failed');\n }\n return response.json();\n },\n async send(data) {\n const response = await fetch(`${baseUrl}/api/verify/${sessionId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n if (!response.ok) {\n throw new Error('Request failed');\n }\n },\n async sendAndReceive(data) {\n const response = await fetch(`${baseUrl}/api/verify/${sessionId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n if (!response.ok) {\n throw new Error('Request failed');\n }\n return response.json();\n },\n close() {},\n };\n}\n","let wasmModule = null;\nlet vmSession = null;\nlet challengeBundle = null;\nlet _faceData = null;\nlet _challengeParams = null;\nlet _bridge = null;\n\nfunction loadScript(url) {\n return new Promise((resolve, reject) => {\n const existing = document.querySelector(`script[src=\"${url}\"]`);\n if (existing) return resolve();\n\n const script = document.createElement('script');\n script.src = url;\n script.onload = resolve;\n script.onerror = () => {\n reject(new Error(`Failed to load ${url}`));\n };\n document.head.appendChild(script);\n });\n}\n\nexport async function initVM(session) {\n vmSession = session;\n\n await loadScript(session.wasmJs);\n\n const loaderModule = await import(session.loaderJs);\n wasmModule = await loaderModule.initModule(session.wasmBin);\n\n const initFn = session.exports.vm_init;\n const result = wasmModule[`_${initFn}`]();\n if (result !== 0) throw new Error('VM init failed');\n\n const bundleResponse = await fetch(session.challengeVmbc);\n challengeBundle = new Uint8Array(await bundleResponse.arrayBuffer());\n}\n\nexport async function decryptModel(session, modelId) {\n if (!wasmModule || !vmSession) {\n throw new Error('VM not loaded');\n }\n\n const modelInfo = session.models[modelId];\n if (!modelInfo) {\n throw new Error(`Unknown model: ${modelId}`);\n }\n\n const response = await fetch(modelInfo.url);\n if (!response.ok) {\n throw new Error(`Failed to fetch model: ${modelId}`);\n }\n\n const encrypted = new Uint8Array(await response.arrayBuffer());\n\n const decryptFn = session.exports.vm_decrypt_blob;\n const freeFn = session.exports.vm_free;\n const length = encrypted.length;\n\n const inputPtr = wasmModule._malloc(length);\n wasmModule.HEAPU8.set(encrypted, inputPtr);\n\n const outLenPtr = wasmModule._malloc(4);\n const outPtr = wasmModule[`_${decryptFn}`](inputPtr, length, outLenPtr);\n wasmModule._free(inputPtr);\n\n if (!outPtr) {\n wasmModule._free(outLenPtr);\n throw new Error(`Decryption failed: ${modelId}`);\n }\n\n const outLen = readU32(wasmModule, outLenPtr);\n wasmModule._free(outLenPtr);\n\n const result = new Uint8Array(outLen);\n result.set(wasmModule.HEAPU8.subarray(outPtr, outPtr + outLen));\n wasmModule[`_${freeFn}`](outPtr);\n return result.buffer;\n}\n\nfunction readU32(mod, ptr) {\n return (\n mod.HEAPU8[ptr] |\n (mod.HEAPU8[ptr + 1] << 8) |\n (mod.HEAPU8[ptr + 2] << 16) |\n (mod.HEAPU8[ptr + 3] << 24)\n );\n}\n\nfunction defineVmGlobal(name, getter) {\n try {\n delete window[name];\n } catch (_) {}\n Object.defineProperty(window, name, {\n get: getter,\n set() {},\n configurable: true,\n });\n}\n\nexport function setFaceData(faceData) {\n _faceData = faceData;\n defineVmGlobal('__vmFaceData', () => _faceData);\n}\n\nexport function setChallengeParams(params) {\n _challengeParams = params;\n defineVmGlobal('__vmChallenge', () => _challengeParams);\n}\n\nexport function registerBridge(bridge) {\n _bridge = Object.freeze({ ...bridge });\n defineVmGlobal('__vmBridge', () => _bridge);\n}\n\nexport function unregisterBridge() {\n _bridge = null;\n try {\n delete window.__vmBridge;\n } catch (_) {}\n}\n\nexport function executeChallenge() {\n if (!wasmModule || !challengeBundle) {\n throw new Error('VM not loaded');\n }\n\n const execFn = vmSession.exports.vm_exec_bytecode;\n const freeFn = vmSession.exports.vm_free;\n const length = challengeBundle.length;\n\n const inputPtr = wasmModule._malloc(length);\n wasmModule.HEAPU8.set(challengeBundle, inputPtr);\n\n const outLenPtr = wasmModule._malloc(4);\n const outPtr = wasmModule[`_${execFn}`](inputPtr, length, outLenPtr);\n wasmModule._free(inputPtr);\n\n if (!outPtr) {\n wasmModule._free(outLenPtr);\n const errFn = vmSession.exports.vm_last_error;\n let message = 'VM execution failed';\n if (errFn) {\n const errPtr = wasmModule[`_${errFn}`]();\n if (errPtr) {\n const detail = wasmModule.UTF8ToString(errPtr);\n if (detail) message = detail;\n }\n }\n throw new Error(message);\n }\n\n const outLen = readU32(wasmModule, outLenPtr);\n wasmModule._free(outLenPtr);\n\n const result = new Uint8Array(outLen);\n result.set(wasmModule.HEAPU8.subarray(outPtr, outPtr + outLen));\n wasmModule[`_${freeFn}`](outPtr);\n return result;\n}\n\nexport function toBase64(bytes) {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nexport function destroyVM() {\n if (!wasmModule || !vmSession) return;\n\n const destroyFn = vmSession.exports.vm_destroy;\n if (destroyFn) {\n wasmModule[`_${destroyFn}`]();\n }\n\n wasmModule = null;\n vmSession = null;\n challengeBundle = null;\n _faceData = null;\n _challengeParams = null;\n _bridge = null;\n\n for (const name of ['__vmFaceData', '__vmChallenge', '__vmBridge']) {\n try {\n delete window[name];\n } catch (_) {}\n }\n}\n\nexport function isVMLoaded() {\n return wasmModule !== null && vmSession !== null;\n}\n\nconst decryptedCache = new Map();\n\nasync function decryptAndCache(session, modelId) {\n if (decryptedCache.has(modelId)) {\n return decryptedCache.get(modelId);\n }\n\n const buffer = await decryptModel(session, modelId);\n decryptedCache.set(modelId, buffer);\n return buffer;\n}\n\nexport async function ensureModels(session, onProgress) {\n await decryptAndCache(session, 'mediapipe');\n onProgress?.(1);\n}\n\nexport async function getMediaPipeModelBuffer(session) {\n return decryptAndCache(session, 'mediapipe');\n}\n\nexport function clearModelCache() {\n decryptedCache.clear();\n}\n","import { loadVision, loadModel, initTracker, track, destroyTracker } from './face-tracker.js';\nimport { startPositioning } from './positioning.js';\nimport { initAgeEstimator, estimateAgeBurst } from './age-estimator.js';\nimport {\n createSession as createLivenessSession,\n processFrame,\n isComplete,\n isPassed,\n currentInstruction,\n currentTaskId,\n progress,\n} from './liveness.js';\nimport { createTransport } from './transport.js';\nimport {\n initVM,\n setFaceData,\n setChallengeParams,\n executeChallenge as execVM,\n registerBridge,\n unregisterBridge,\n destroyVM,\n toBase64,\n ensureModels,\n getMediaPipeModelBuffer,\n clearModelCache,\n} from './vm-client.js';\nimport {\n BURST_FRAMES,\n BURST_INTERVAL_MS,\n ERROR_STEP_SECONDS,\n MAX_RETRIES,\n MOTION_CAPTURE_MS,\n MOTION_SAMPLE_MS,\n} from './constants.js';\n\nlet stream = null;\nlet videoElement = null;\n\nconst CAMERA_CONSTRAINTS = {\n video: {\n facingMode: 'user',\n width: { ideal: 640 },\n height: { ideal: 480 },\n },\n};\n\nexport function startCamera(video) {\n return navigator.mediaDevices.getUserMedia(CAMERA_CONSTRAINTS).then((s) => {\n stream = s;\n video.srcObject = stream;\n videoElement = video;\n\n return new Promise((resolve) => {\n video.onloadedmetadata = () => {\n video.play();\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n });\n };\n });\n });\n}\n\nexport function captureFrame() {\n if (!videoElement) return null;\n\n const canvas = document.createElement('canvas');\n canvas.width = videoElement.videoWidth;\n canvas.height = videoElement.videoHeight;\n\n const context = canvas.getContext('2d');\n context.drawImage(videoElement, 0, 0);\n return canvas;\n}\n\nexport function stopCamera() {\n if (stream) {\n stream.getTracks().forEach((track) => track.stop());\n stream = null;\n }\n if (videoElement) {\n videoElement.srcObject = null;\n videoElement = null;\n }\n}\n\nexport function isCameraActive() {\n return stream !== null && videoElement !== null;\n}\n\nfunction computeAge(ageResults) {\n if (!ageResults || ageResults.length === 0) return null;\n\n const ages = ageResults.map((r) => r.age).sort((a, b) => a - b);\n\n const trimmed = ages.length >= 3 ? ages.slice(1, -1) : ages;\n\n return trimmed.reduce((s, a) => s + a, 0) / trimmed.length;\n}\n\nconst TASK_LABELS = {\n 'turn-left': 'Turn your head left',\n 'turn-right': 'Turn your head right',\n nod: 'Nod your head',\n 'blink-twice': 'Blink twice',\n 'move-closer': 'Move closer then back',\n};\n\nfunction sleep(ms) {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nfunction resolveChallengeErrorMessage(error) {\n const name = typeof error?.name === 'string' ? error.name : '';\n const message = typeof error?.message === 'string' ? error.message : String(error || '');\n const normalized = `${name} ${message}`.toLowerCase();\n\n if (\n name === 'NotFoundError' ||\n /request is not allowed by the user agent or the platform in the current context/.test(\n normalized\n ) ||\n /requested device not found|device not found|no camera|could not start video source/.test(\n normalized\n )\n ) {\n return 'No camera available. Plug in a camera and try again.';\n }\n\n if (\n name === 'NotAllowedError' ||\n name === 'PermissionDeniedError' ||\n /permission|camera access|access denied/.test(normalized)\n ) {\n return 'Camera access was blocked. Allow camera access and try again.';\n }\n\n if (/positioning timeout/.test(normalized)) {\n return 'Face positioning timed out. Reopen the check and try again.';\n }\n\n return 'Verification failed. Please try again.';\n}\n\nasync function showErrorStep(widget, error) {\n const message = resolveChallengeErrorMessage(error);\n\n if (!widget.popup) {\n widget.openPopup?.();\n }\n\n widget.showError?.(message);\n\n for (let seconds = ERROR_STEP_SECONDS; seconds > 0; seconds--) {\n if (!widget.popup) break;\n widget.setErrorCountdown?.(seconds);\n await sleep(1000);\n }\n\n widget.closePopup?.();\n widget.setState?.('retry');\n}\n\nasync function handleChallengeError(widget, emitter, error) {\n console.log('Error during challenge:', error);\n await showErrorStep(widget, error);\n emitter.emit('error', error, widget.id);\n widget.params.errorCallback?.(error);\n}\n\nexport async function runChallenge(widget, emitter) {\n const mode = widget.params.mode || 'serverless';\n\n if (mode !== 'serverless' && !widget.params.sitekey) {\n const err = new Error('Configuration error');\n widget.showResult?.('fail', 'Verification failed');\n emitter.emit('error', err, widget.id);\n widget.params.errorCallback?.(err);\n return;\n }\n\n if (mode === 'serverless') {\n return runServerless(widget, emitter);\n }\n return runServer(widget, emitter);\n}\n\nasync function runServerless(widget, emitter) {\n const params = widget.params;\n let retryCount = 0;\n let modelBuffer = null;\n\n try {\n widget.openPopup();\n widget.setHeroStatus('Loading…');\n\n await Promise.all([loadVision(), initAgeEstimator()]);\n\n modelBuffer = await loadModel();\n widget.showReady();\n\n await waitForStart(widget);\n await startCameraFlow(widget, modelBuffer);\n\n const transport = createTransport('serverless', params);\n\n const attempt = async () => {\n widget.showLiveness();\n widget.setInstruction('');\n widget.setVideoStatus('Verifying…');\n\n const session = createLivenessSession();\n await runLivenessLoop(widget.popupElements.video, session, widget);\n\n if (session.failed || !isPassed(session)) {\n return { outcome: 'retry' };\n }\n\n widget.setInstruction('Hold still…');\n widget.setVideoStatus('Processing…');\n const frames = await captureFrameBurst(BURST_FRAMES, BURST_INTERVAL_MS);\n\n const ageResults = await estimateAgeBurst(frames);\n const estimatedAge = computeAge(ageResults);\n\n const result = await transport.verify({\n estimatedAge,\n livenessOk: true,\n });\n\n return {\n outcome: result.token ? 'pass' : 'fail',\n token: result.token,\n };\n };\n\n let result = await attempt();\n\n while (result.outcome === 'retry' && retryCount < MAX_RETRIES) {\n retryCount++;\n widget.showResult('retry', 'Please try again');\n await waitForStart(widget);\n await startCameraFlow(widget, modelBuffer);\n result = await attempt();\n }\n\n cleanupLocal();\n emitResult(widget, emitter, result);\n } catch (error) {\n cleanupLocal();\n await handleChallengeError(widget, emitter, error);\n }\n}\n\nasync function runServer(widget, emitter) {\n const params = widget.params;\n\n try {\n widget.openPopup();\n widget.setHeroStatus('Connecting…');\n\n const transport = createTransport(params.mode, params);\n const session = await transport.createSession();\n\n widget.setHeroStatus('Loading…');\n await initVM(session);\n\n widget.setHeroStatus('Preparing…');\n await ensureModels(session, () => {});\n\n await loadVision();\n const buf = await getMediaPipeModelBuffer(session);\n await initTracker(buf);\n\n registerBridge({\n trackFace: () => {\n const video = widget.popupElements?.video;\n if (!video) return 'null';\n const r = track(video, performance.now());\n if (!r) return 'null';\n return JSON.stringify({\n ts: r.timestampMs ?? performance.now(),\n faceCount: r.faceCount,\n headPose: r.headPose || null,\n blendshapes: r.blendshapes || null,\n boundingBox: r.boundingBox || null,\n });\n },\n captureFrame: () => (captureFrame() ? 'true' : 'null'),\n });\n\n widget.showReady();\n await waitForStart(widget);\n\n const video = widget.showCamera();\n widget.setVideoStatus('Requesting camera…');\n await startCamera(video);\n exposeMirrorVideo(video);\n\n widget.setVideoStatus('Position your face');\n await waitForPositioning(video, widget);\n\n widget.showLiveness();\n transport.openChannel();\n\n let challenge = await transport.receive();\n const rounds = session.rounds;\n\n for (let i = 0; i < rounds; i++) {\n if (!challenge) {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n if (challenge.type === 'verdict') {\n cleanupVM(transport);\n emitVerdict(widget, emitter, challenge);\n return;\n }\n\n if (challenge.type === 'timeout') {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n widget.setVideoStatus(`Step ${i + 1} of ${rounds}`);\n\n const task = challenge.token?.task;\n widget.setInstruction(TASK_LABELS[task] ?? 'Look at the camera');\n widget.setTask(task);\n widget.setProgress(i / rounds);\n\n const faceData = await captureMotion(widget);\n setFaceData(faceData);\n setChallengeParams(challenge.token);\n\n let vmOut;\n try {\n vmOut = execVM();\n } catch {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n const payload = {\n token: challenge.token,\n tokenSignature: challenge.tokenSignature,\n response: toBase64(vmOut),\n };\n\n const result = await transport.sendAndReceive(payload);\n\n if (!result) {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n if (result.complete) {\n cleanupVM(transport);\n emitVerdict(widget, emitter, result);\n return;\n }\n\n if (result.hint) {\n widget.setVideoStatus(result.hint);\n await sleep(1000);\n }\n\n challenge = result.nextChallenge || null;\n }\n\n cleanupVM(transport);\n } catch (error) {\n cleanupVM();\n await handleChallengeError(widget, emitter, error);\n }\n}\n\nfunction emitVerdict(widget, emitter, response) {\n const verdict = response?.verdict || response;\n const token = verdict?.token || null;\n const params = widget.params;\n\n if (token) {\n widget.token = token;\n widget.showResult('pass', 'Verified');\n emitter.emit('verified', token, widget.id);\n params.callback?.(token);\n return;\n }\n\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n params.errorCallback?.('failed');\n}\n\nasync function captureMotion(widget) {\n const video = widget.popupElements?.video;\n const history = [];\n const start = performance.now();\n\n while (performance.now() - start < MOTION_CAPTURE_MS) {\n const r = track(video, performance.now());\n if (r && r.faceCount === 1) {\n history.push({\n ts: r.timestampMs,\n headPose: r.headPose,\n blendshapes: r.blendshapes,\n boundingBox: r.boundingBox,\n });\n }\n await sleep(MOTION_SAMPLE_MS);\n }\n\n return {\n faceCount: history.length > 0 ? 1 : 0,\n motionHistory: history,\n };\n}\n\nfunction emitResult(widget, emitter, result) {\n const params = widget.params;\n\n if (result.outcome === 'pass') {\n widget.token = result.token || null;\n widget.showResult('pass', 'Verified');\n emitter.emit('verified', result.token, widget.id);\n params.callback?.(result.token);\n } else {\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n params.errorCallback?.('failed');\n }\n}\n\nfunction waitForStart(widget) {\n return new Promise((resolve) => {\n widget.onStartClick = () => {\n widget.onStartClick = null;\n resolve();\n };\n });\n}\n\nasync function startCameraFlow(widget, modelBuffer) {\n const video = widget.showCamera();\n widget.setVideoStatus('Requesting camera…');\n await startCamera(video);\n\n widget.setVideoStatus('Preparing…');\n await initTracker(modelBuffer);\n\n widget.setVideoStatus('Position your face');\n await waitForPositioning(video, widget);\n}\n\nfunction waitForPositioning(video, widget) {\n return new Promise((resolve, reject) => {\n const handle = startPositioning(video, {\n onStatus: (text) => widget.setVideoStatus(text),\n onReady: () => resolve(),\n });\n\n setTimeout(() => {\n handle.cancel();\n reject(new Error('Positioning timeout'));\n }, 30000);\n });\n}\n\nasync function runLivenessLoop(video, session, widget) {\n return new Promise((resolve) => {\n const loop = () => {\n const tracking = track(video, performance.now());\n if (tracking) processFrame(session, tracking);\n\n widget.setInstruction(currentInstruction(session) || 'Done');\n widget.setTask(currentTaskId(session));\n widget.setProgress(progress(session));\n widget.setVideoStatus(\n `Check ` +\n `${Math.min(session.currentIndex + 1, session.tasks.length)}` +\n ` of ${session.tasks.length}`\n );\n\n if (session.failed || isComplete(session)) {\n resolve();\n return;\n }\n\n requestAnimationFrame(loop);\n };\n\n requestAnimationFrame(loop);\n });\n}\n\nasync function captureFrameBurst(count, interval) {\n const frames = [];\n for (let i = 0; i < count; i++) {\n const frame = captureFrame();\n if (frame) frames.push(frame);\n if (i < count - 1) await sleep(interval);\n }\n return frames;\n}\n\nfunction cleanupLocal() {\n stopCamera();\n destroyTracker();\n}\n\nfunction cleanupVM(transport) {\n stopCamera();\n removeMirrorVideo();\n destroyTracker();\n unregisterBridge();\n destroyVM();\n clearModelCache();\n transport?.close();\n}\n\nfunction exposeMirrorVideo(source) {\n removeMirrorVideo();\n if (!source?.srcObject) return;\n const mirror = document.createElement('video');\n mirror.id = '__openage_mirror';\n mirror.srcObject = source.srcObject;\n mirror.autoplay = true;\n mirror.muted = true;\n mirror.playsInline = true;\n mirror.style.cssText =\n 'position:fixed;width:1px;height:1px;' + 'opacity:0;pointer-events:none;z-index:-1;';\n document.body.appendChild(mirror);\n}\n\nfunction removeMirrorVideo() {\n document.getElementById('__openage_mirror')?.remove();\n}\n","import { Widget, createModalWidget } from './widget.js';\nimport { runChallenge } from './challenge.js';\nimport { verifyToken, decodeToken } from './transport.js';\nimport { VERSION } from './constants.js';\n\nexport class EventEmitter {\n constructor() {\n this.listeners = new Map();\n }\n\n on(event, handler) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event).add(handler);\n return this;\n }\n\n off(event, handler) {\n const handlers = this.listeners.get(event);\n if (handlers) handlers.delete(handler);\n return this;\n }\n\n once(event, handler) {\n const wrapper = (...args) => {\n this.off(event, wrapper);\n handler(...args);\n };\n wrapper._original = handler;\n return this.on(event, wrapper);\n }\n\n emit(event, ...args) {\n const handlers = this.listeners.get(event);\n if (!handlers) return;\n for (const handler of [...handlers]) {\n handler(...args);\n }\n }\n\n removeAllListeners(event) {\n if (event) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n return this;\n }\n}\n\nconst emitter = new EventEmitter();\nconst widgets = new Map();\n\nfunction normalizeParams(params) {\n const globalConfig = typeof window !== 'undefined' ? window.openage || {} : {};\n\n return {\n mode: 'serverless',\n theme: 'auto',\n size: 'normal',\n minAge: 18,\n ...globalConfig,\n ...params,\n };\n}\n\nfunction startWidget(widget) {\n widget.onChallenge = () => {\n emitter.emit('opened', widget.id);\n runChallenge(widget, emitter);\n };\n}\n\nfunction render(container, params = {}) {\n const normalized = normalizeParams(params);\n const widget = new Widget(container, normalized);\n widgets.set(widget.id, widget);\n startWidget(widget);\n return widget.id;\n}\n\nfunction open(params = {}) {\n const normalized = normalizeParams(params);\n const widget = createModalWidget(normalized);\n widget.anchorElement = normalized.anchorElement || null;\n widgets.set(widget.id, widget);\n\n widget.onChallenge = () => {\n emitter.emit('opened', widget.id);\n runChallenge(widget, emitter);\n };\n\n widget.startChallenge();\n return widget.id;\n}\n\nfunction bind(element, params = {}) {\n const normalized = normalizeParams(params);\n const target = typeof element === 'string' ? document.querySelector(element) : element;\n\n if (!target) {\n throw new Error('OpenAge: element not found');\n }\n\n let isReplayingClick = false;\n let activeWidgetId = null;\n\n const replayTargetClick = () => {\n isReplayingClick = true;\n try {\n target.click();\n } finally {\n isReplayingClick = false;\n }\n };\n\n const clearActiveWidget = () => {\n activeWidgetId = null;\n };\n\n const handler = (event) => {\n if (isReplayingClick || activeWidgetId) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation?.();\n\n const widgetId = open({\n ...normalized,\n anchorElement: target,\n callback: (token) => {\n normalized.callback?.(token);\n clearActiveWidget();\n replayTargetClick();\n },\n errorCallback: (error) => {\n clearActiveWidget();\n normalized.errorCallback?.(error);\n },\n closeCallback: () => {\n clearActiveWidget();\n normalized.closeCallback?.();\n },\n });\n\n activeWidgetId = widgetId;\n\n return widgetId;\n };\n\n target.addEventListener('click', handler, true);\n\n return () => {\n target.removeEventListener('click', handler, true);\n };\n}\n\nfunction reset(widgetId) {\n widgets.get(widgetId)?.reset();\n}\n\nfunction remove(widgetId) {\n const widget = widgets.get(widgetId);\n if (!widget) return;\n widget.destroy();\n widgets.delete(widgetId);\n}\n\nfunction getToken(widgetId) {\n return widgets.get(widgetId)?.getToken() || null;\n}\n\nfunction execute(widgetId) {\n const widget = widgets.get(widgetId);\n if (!widget) return;\n widget.startChallenge();\n}\n\nfunction challenge(params = {}) {\n return new Promise((resolve, reject) => {\n open({\n ...params,\n callback: (token) => resolve(token),\n errorCallback: (error) => reject(typeof error === 'string' ? new Error(error) : error),\n closeCallback: () => reject(new Error('User dismissed')),\n });\n });\n}\n\nfunction on(event, handler) {\n emitter.on(event, handler);\n}\n\nfunction off(event, handler) {\n emitter.off(event, handler);\n}\n\nfunction once(event, handler) {\n emitter.once(event, handler);\n}\n\nfunction autoRender() {\n if (typeof document === 'undefined') return;\n\n const globalConfig = typeof window !== 'undefined' ? window.openage || {} : {};\n\n if (globalConfig.render === 'explicit') return;\n\n const elements = document.querySelectorAll('.openage');\n\n for (const element of elements) {\n const params = {\n sitekey: element.dataset.sitekey,\n theme: element.dataset.theme,\n size: element.dataset.size,\n action: element.dataset.action,\n mode: element.dataset.mode,\n server: element.dataset.server,\n };\n\n if (element.dataset.callback) {\n params.callback = (token) => {\n const fn = window[element.dataset.callback];\n if (typeof fn === 'function') fn(token);\n };\n }\n\n if (element.dataset.errorCallback) {\n params.errorCallback = (error) => {\n const fn = window[element.dataset.errorCallback];\n if (typeof fn === 'function') fn(error);\n };\n }\n\n if (element.dataset.expiredCallback) {\n params.expiredCallback = () => {\n const fn = window[element.dataset.expiredCallback];\n if (typeof fn === 'function') fn();\n };\n }\n\n if (element.dataset.bind) {\n const target = document.getElementById(element.dataset.bind);\n if (target) {\n bind(target, params);\n continue;\n }\n }\n\n render(element, params);\n }\n\n const onloadName = document.currentScript?.dataset?.onload;\n if (onloadName && typeof window[onloadName] === 'function') {\n window[onloadName]();\n }\n}\n\nif (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoRender);\n } else {\n autoRender();\n }\n}\n\nconst OpenAge = {\n render,\n open,\n bind,\n reset,\n remove,\n getToken,\n execute,\n challenge,\n on,\n off,\n once,\n verify: verifyToken,\n decode: decodeToken,\n version: VERSION,\n};\n\nexport default OpenAge;\nexport {\n render,\n open,\n bind,\n reset,\n remove,\n getToken,\n execute,\n challenge,\n on,\n off,\n once,\n verifyToken as verify,\n decodeToken as decode,\n VERSION as version,\n};\n"],"names":["loadScript","createLivenessSession","execVM"],"mappings":"AAAO,MAAM,QAAQ,GAAG,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC;;AAEA,MAAM,aAAa,GAAG,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC;;AAEA,MAAM,cAAc,GAAG,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC;;AAEA,MAAM,SAAS,GAAG,CAAC;AAC1B;AACA;AACA;AACA,MAAM,CAAC;;AAEA,MAAM,SAAS,GAAG,CAAC;AAC1B;AACA;AACA;AACA;AACA,MAAM,CAAC;;AAEA,MAAM,SAAS,GAAG,CAAC;AAC1B;AACA;AACA;AACA,MAAM,CAAC;;AAEA,MAAM,WAAW,GAAG,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC;;AAEA,MAAM,UAAU,GAAG,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC;;AAEA,SAAS,YAAY,CAAC,KAAK,EAAE;AACpC,IAAI,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE,OAAO,KAAK;AAC3D,IAAI,OAAO,gBAAgB,EAAE;AAC7B;;AAEO,SAAS,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;AACxC,IAAI,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE;AAC/C,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;;AAEvC,IAAI,MAAM,MAAM,GAAG,MAAM;AACzB,QAAQ,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAC3D,IAAI,CAAC;;AAEL,IAAI,MAAM,QAAQ,GAAG,EAAE;;AAEvB,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,8BAA8B,EAAE,+BAA+B,CAAC,EAAE;AAC3F,QAAQ,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC;AACtD,QAAQ,IAAI,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3C,IAAI;;AAEJ,IAAI,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE;AAChD,QAAQ,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC;AACrD,QAAQ,MAAM,OAAO,GAAG;AACxB,YAAY,UAAU,EAAE,IAAI;AAC5B,YAAY,eAAe,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC;AAC7D,SAAS;;AAET,QAAQ,IAAI,QAAQ,CAAC,eAAe,EAAE;AACtC,YAAY,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;AAC/D,QAAQ;;AAER,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;AAC3B,YAAY,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;AACpD,QAAQ;;AAER,QAAQ,QAAQ,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;AAClD,IAAI;;AAEJ,IAAI,OAAO,MAAM;AACjB,QAAQ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AACxC,YAAY,OAAO,EAAE;AACrB,QAAQ;AACR,IAAI,CAAC;AACL;;AAEA,SAAS,gBAAgB,GAAG;AAC5B,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO,MAAM;;AAEpD,IAAI,MAAM,aAAa,GAAG,oBAAoB,EAAE;AAChD,IAAI,IAAI,aAAa,EAAE,OAAO,aAAa;;AAE3C,IAAI,MAAM,WAAW,GAAG,kBAAkB,EAAE;AAC5C,IAAI,IAAI,WAAW,EAAE,OAAO,WAAW;;AAEvC,IAAI,OAAO,MAAM;AACjB;;AAEA,SAAS,kBAAkB,GAAG;AAC9B,IAAI,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;AACjD,QAAQ,OAAO,IAAI;AACnB,IAAI;;AAEJ,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,EAAE;AACnE,QAAQ,OAAO,MAAM;AACrB,IAAI;;AAEJ,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC,OAAO,EAAE;AACpE,QAAQ,OAAO,OAAO;AACtB,IAAI;;AAEJ,IAAI,OAAO,IAAI;AACf;;AAEA,SAAS,oBAAoB,GAAG;AAChC,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,OAAO,IAAI;;AAEpD,IAAI,KAAK,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;AACrE,QAAQ,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC;AAC5C,QAAQ,IAAI,KAAK,EAAE,OAAO,KAAK;AAC/B,IAAI;;AAEJ,IAAI,OAAO,IAAI;AACf;;AAEA,SAAS,aAAa,CAAC,OAAO,EAAE;AAChC,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,UAAU,EAAE;AACnE,QAAQ,OAAO,IAAI;AACnB,IAAI;;AAEJ,IAAI,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC;AAC/C,IAAI,IAAI,QAAQ,EAAE,OAAO,QAAQ;;AAEjC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACnD,IAAI,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,IAAI,IAAI,MAAM,EAAE,OAAO,MAAM;;AAE7B,IAAI,OAAO,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC;AACvD;;AAEA,SAAS,iBAAiB,CAAC,OAAO,EAAE;AACpC,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC;AACxD,IAAI,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,MAAM,EAAE;AACvD,QAAQ,OAAO,SAAS;AACxB,IAAI;;AAEJ,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;AACvC,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,OAAO,IAAI;;AAElD,IAAI,IAAI,iCAAiC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC3D,QAAQ,OAAO,MAAM;AACrB,IAAI;;AAEJ,IAAI,IAAI,oCAAoC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC9D,QAAQ,OAAO,OAAO;AACtB,IAAI;;AAEJ,IAAI,OAAO,IAAI;AACf;;AAEA,SAAS,gBAAgB,CAAC,KAAK,EAAE;AACjC,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,EAAE,OAAO,IAAI;;AAEjD,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE;AAC1C,IAAI,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/C,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;;AAEjD,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,MAAM;AAC3C,IAAI,IAAI,QAAQ,IAAI,CAAC,OAAO,EAAE,OAAO,OAAO;;AAE5C,IAAI,OAAO,IAAI;AACf;;AAEA,SAAS,oBAAoB,CAAC,KAAK,EAAE;AACrC,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,aAAa,EAAE,OAAO,IAAI;;AAEtD,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC;AAClD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI;;AAE3B,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC;AACzB,SAAS,KAAK,CAAC,GAAG;AAClB,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;AACnB,SAAS,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;;AAEtD,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxD,QAAQ,OAAO,IAAI;AACnB,IAAI;;AAEJ,IAAI,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK;AACpC,IAAI,MAAM,UAAU,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI;;AAEpE,IAAI,IAAI,UAAU,IAAI,GAAG,EAAE,OAAO,MAAM;AACxC,IAAI,IAAI,UAAU,IAAI,GAAG,EAAE,OAAO,OAAO;;AAEzC,IAAI,OAAO,IAAI;AACf;;AAEA,SAAS,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE;AAC1C,IAAI,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;AACjD,QAAQ,OAAO,IAAI;AACnB,IAAI;;AAEJ,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;;AAE/C,IAAI,IAAI,OAAO,UAAU,CAAC,gBAAgB,KAAK,UAAU,EAAE;AAC3D,QAAQ,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACvD,QAAQ,OAAO,MAAM;AACrB,YAAY,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9D,QAAQ,CAAC;AACT,IAAI;;AAEJ,IAAI,IAAI,OAAO,UAAU,CAAC,WAAW,KAAK,UAAU,EAAE;AACtD,QAAQ,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC;AACxC,QAAQ,OAAO,MAAM;AACrB,YAAY,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC/C,QAAQ,CAAC;AACT,IAAI;;AAEJ,IAAI,OAAO,IAAI;AACf;;AAEO,MAAM,MAAM,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AA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"}
|
|
1
|
+
{"version":3,"file":"openage.esm.js","sources":["../src/ui.js","../src/constants.js","../src/widget.js","../src/face-tracker.js","../src/positioning.js","../src/age-estimator.js","../src/liveness.js","../src/transport.js","../src/vm-client.js","../src/challenge.js","../src/index.js"],"sourcesContent":["export const FACE_SVG = `<svg viewBox=\"0 0 100 120\"\n fill=\"none\" class=\"oa-face-svg\">\n <ellipse cx=\"50\" cy=\"55\" rx=\"35\" ry=\"45\"\n stroke=\"currentColor\" stroke-width=\"1.8\"/>\n <ellipse cx=\"36\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <ellipse cx=\"64\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <line x1=\"50\" y1=\"52\" x2=\"48\" y2=\"62\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"/>\n <path d=\"M40 72 Q50 79 60 72\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" fill=\"none\"/>\n</svg>`;\n\nexport const FACE_ICON_SVG = `<svg viewBox=\"0 0 100 120\"\n fill=\"none\" class=\"oa-face-icon-svg\">\n <ellipse cx=\"50\" cy=\"55\" rx=\"35\" ry=\"45\"\n stroke=\"currentColor\" stroke-width=\"2\"/>\n <ellipse cx=\"36\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <ellipse cx=\"64\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <line x1=\"50\" y1=\"52\" x2=\"48\" y2=\"62\"\n stroke=\"currentColor\" stroke-width=\"1.65\"\n stroke-linecap=\"round\"/>\n <path d=\"M40 72 Q50 79 60 72\"\n stroke=\"currentColor\" stroke-width=\"1.65\"\n stroke-linecap=\"round\" fill=\"none\"/>\n</svg>`;\n\nexport const FACE_GUIDE_SVG = `<svg viewBox=\"0 0 100 120\"\n fill=\"none\" class=\"oa-face-svg\">\n <ellipse cx=\"50\" cy=\"55\" rx=\"35\" ry=\"45\"\n stroke=\"currentColor\" stroke-width=\"1.8\"\n stroke-dasharray=\"6 4\"/>\n <ellipse cx=\"36\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <ellipse cx=\"64\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <line x1=\"50\" y1=\"52\" x2=\"48\" y2=\"62\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"/>\n <path d=\"M40 72 Q50 79 60 72\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" fill=\"none\"/>\n</svg>`;\n\nexport const CHECK_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\"/>\n</svg>`;\n\nexport const CLOSE_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n</svg>`;\n\nexport const RETRY_SVG = `<svg viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\">\n <path d=\"m14.955 7.986.116.01a1 1 0 0 1 .85 1.13 8 8 0 0 1-13.374 4.728l-.84.84c-.63.63-1.707.184-1.707-.707V10h3.987c.89 0 1.337 1.077.707 1.707l-.731.731a6 6 0 0 0 8.347-.264 6 6 0 0 0 1.63-3.33 1 1 0 0 1 1.131-.848zM11.514.813a8 8 0 0 1 1.942 1.336l.837-.837c.63-.63 1.707-.184 1.707.707V6h-3.981c-.89 0-1.337-1.077-.707-1.707l.728-.729a6 6 0 0 0-9.98 3.591 1 1 0 1 1-1.98-.281A8 8 0 0 1 11.514.813\"/>\n</svg>`;\n\nexport const SPINNER_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" opacity=\"0.2\"/>\n <path d=\"M12 2 A10 10 0 0 1 22 12\"\n stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\"\n type=\"rotate\" from=\"0 12 12\" to=\"360 12 12\"\n dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n</svg>`;\n\nexport const SHIELD_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M12 2l8 4v6c0 5.5-3.8 10-8 12\n C7.8 22 4 17.5 4 12V6l8-4z\"/>\n <path d=\"M9 12l2 2 4-4\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>`;\n\nexport function resolveTheme(theme) {\n if (theme === 'light' || theme === 'dark') return theme;\n return resolveAutoTheme();\n}\n\nexport function watchTheme(host, theme) {\n if (theme === 'light' || theme === 'dark') return;\n if (typeof window === 'undefined') return;\n\n const update = () => {\n host.setAttribute('data-theme', resolveAutoTheme());\n };\n\n const cleanups = [];\n\n for (const query of ['(prefers-color-scheme: dark)', '(prefers-color-scheme: light)']) {\n const cleanup = watchMediaQuery(query, update);\n if (cleanup) cleanups.push(cleanup);\n }\n\n if (typeof MutationObserver === 'function') {\n const observer = new MutationObserver(update);\n const options = {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'style'],\n };\n\n if (document.documentElement) {\n observer.observe(document.documentElement, options);\n }\n\n if (document.body) {\n observer.observe(document.body, options);\n }\n\n cleanups.push(() => observer.disconnect());\n }\n\n return () => {\n for (const cleanup of cleanups) {\n cleanup();\n }\n };\n}\n\nfunction resolveAutoTheme() {\n if (typeof window === 'undefined') return 'dark';\n\n const documentTheme = resolveDocumentTheme();\n if (documentTheme) return documentTheme;\n\n const systemTheme = resolveSystemTheme();\n if (systemTheme) return systemTheme;\n\n return 'dark';\n}\n\nfunction resolveSystemTheme() {\n if (typeof window.matchMedia !== 'function') {\n return null;\n }\n\n if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n\n if (window.matchMedia('(prefers-color-scheme: light)').matches) {\n return 'light';\n }\n\n return null;\n}\n\nfunction resolveDocumentTheme() {\n if (typeof document === 'undefined') return null;\n\n for (const element of [document.documentElement, document.body]) {\n const theme = readThemeHint(element);\n if (theme) return theme;\n }\n\n return null;\n}\n\nfunction readThemeHint(element) {\n if (!element || typeof window.getComputedStyle !== 'function') {\n return null;\n }\n\n const explicit = readExplicitTheme(element);\n if (explicit) return explicit;\n\n const styles = window.getComputedStyle(element);\n const scheme = parseColorScheme(styles.colorScheme);\n if (scheme) return scheme;\n\n return parseBackgroundTheme(styles.backgroundColor);\n}\n\nfunction readExplicitTheme(element) {\n const attrTheme = element.getAttribute('data-theme');\n if (attrTheme === 'light' || attrTheme === 'dark') {\n return attrTheme;\n }\n\n const className = element.className;\n if (typeof className !== 'string') return null;\n\n if (/\\bdark\\b|theme-dark|dark-theme/i.test(className)) {\n return 'dark';\n }\n\n if (/\\blight\\b|theme-light|light-theme/i.test(className)) {\n return 'light';\n }\n\n return null;\n}\n\nfunction parseColorScheme(value) {\n if (!value || value === 'normal') return null;\n\n const normalized = value.toLowerCase();\n const hasDark = normalized.includes('dark');\n const hasLight = normalized.includes('light');\n\n if (hasDark && !hasLight) return 'dark';\n if (hasLight && !hasDark) return 'light';\n\n return null;\n}\n\nfunction parseBackgroundTheme(value) {\n if (!value || value === 'transparent') return null;\n\n const match = value.match(/rgba?\\(([^)]+)\\)/i);\n if (!match) return null;\n\n const parts = match[1]\n .split(',')\n .slice(0, 3)\n .map((part) => Number.parseFloat(part.trim()));\n\n if (parts.length !== 3 || parts.some(Number.isNaN)) {\n return null;\n }\n\n const [red, green, blue] = parts;\n const brightness = (red * 299 + green * 587 + blue * 114) / 1000;\n\n if (brightness <= 140) return 'dark';\n if (brightness >= 180) return 'light';\n\n return null;\n}\n\nfunction watchMediaQuery(query, listener) {\n if (typeof window.matchMedia !== 'function') {\n return null;\n }\n\n const mediaQuery = window.matchMedia(query);\n\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', listener);\n return () => {\n mediaQuery.removeEventListener('change', listener);\n };\n }\n\n if (typeof mediaQuery.addListener === 'function') {\n mediaQuery.addListener(listener);\n return () => {\n mediaQuery.removeListener(listener);\n };\n }\n\n return null;\n}\n\nexport const STYLES = `\n:host {\n --oa-bg: #0b0d11;\n --oa-surface: #14161d;\n --oa-border: #1f2230;\n --oa-text: #e8e8ed;\n --oa-text-muted: #7a7d8c;\n --oa-accent: #4ae68a;\n --oa-accent-dim: rgba(74, 230, 138, 0.12);\n --oa-danger: #ef4444;\n --oa-warn: #f59e0b;\n --oa-radius: 16px;\n --oa-font: 'DM Sans', system-ui, -apple-system,\n sans-serif;\n --oa-mono: 'Space Mono', monospace;\n\n display: block;\n font-family: var(--oa-font);\n color: var(--oa-text);\n line-height: 1.4;\n}\n\n:host([data-theme=\"light\"]) {\n --oa-bg: #f8f9fb;\n --oa-surface: #ffffff;\n --oa-border: #e2e4ea;\n --oa-text: #1a1c24;\n --oa-text-muted: #6b6e7b;\n --oa-accent: #22c55e;\n --oa-accent-dim: rgba(34, 197, 94, 0.1);\n}\n\n* { box-sizing: border-box; margin: 0; padding: 0; }\n\n/* ── Checkbox ────────────────────────────────── */\n\n.oa-checkbox {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n background: var(--oa-surface);\n border: 2px solid var(--oa-border);\n border-radius: var(--oa-radius);\n cursor: pointer;\n user-select: none;\n transition: border-color 0.2s, box-shadow 0.2s;\n}\n\n.oa-checkbox:hover {\n border-color: var(--oa-text-muted);\n}\n\n.oa-checkbox.oa-verified {\n border-color: var(--oa-accent);\n cursor: default;\n}\n\n.oa-checkbox.oa-failed {\n border-color: var(--oa-danger);\n}\n\n.oa-checkbox.oa-retry {\n border-color: var(--oa-danger);\n}\n\n.oa-checkbox.oa-expired {\n border-color: var(--oa-warn);\n}\n\n.oa-checkbox.oa-loading {\n align-items: center;\n}\n\n.oa-check-box {\n width: 24px;\n height: 24px;\n border: 2px solid var(--oa-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.2s;\n}\n\n.oa-loading .oa-check-box {\n border-color: transparent;\n background: transparent;\n}\n\n.oa-loading .oa-check-box .oa-spinner {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n transform: translateY(2px);\n}\n\n.oa-verified .oa-check-box {\n background: var(--oa-accent);\n border-color: var(--oa-accent);\n color: var(--oa-bg);\n}\n\n.oa-failed .oa-check-box {\n background: var(--oa-danger);\n border-color: var(--oa-danger);\n color: white;\n}\n\n.oa-retry .oa-check-box {\n background: var(--oa-danger);\n border-color: var(--oa-danger);\n color: white;\n}\n\n.oa-check-box svg {\n width: 14px;\n height: 14px;\n}\n\n.oa-check-box .oa-spinner svg {\n width: 18px;\n height: 18px;\n}\n\n.oa-label {\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 1;\n min-width: 0;\n}\n\n.oa-label-text {\n font-size: 13px;\n font-weight: 600;\n}\n\n.oa-right-section {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.oa-face-icon-wrap {\n width: 18px;\n height: 22px;\n color: var(--oa-text-muted);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.oa-face-icon-wrap .oa-face-icon-svg {\n width: 100%;\n height: 100%;\n}\n\n.oa-face-icon-wrap .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n animation: oa-idle-blink 5s ease-in-out infinite;\n}\n\n.oa-face-icon-wrap .oa-face-icon-svg {\n animation: oa-breathe 4s ease-in-out infinite;\n}\n\n.oa-branding-row {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n}\n\n.oa-branding-link {\n font-size: 10px;\n font-weight: 700;\n font-family: var(--oa-mono);\n color: var(--oa-text-muted);\n text-decoration: none;\n letter-spacing: -0.02em;\n cursor: pointer;\n}\n\n.oa-branding-link:hover {\n color: var(--oa-text);\n}\n\n.oa-links-row {\n display: flex;\n gap: 6px;\n justify-content: center;\n}\n\n.oa-links-row a {\n font-size: 9px;\n color: var(--oa-text-muted);\n text-decoration: none;\n opacity: 0.7;\n cursor: pointer;\n}\n\n.oa-links-row a:hover {\n opacity: 1;\n text-decoration: underline;\n}\n\n.oa-compact .oa-label-text {\n font-size: 11px;\n}\n\n.oa-compact .oa-face-icon-wrap {\n width: 16px;\n height: 20px;\n}\n\n/* ── Error banner (inline in checkbox) ───────── */\n\n.oa-error-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n margin-top: 6px;\n background: rgba(239, 68, 68, 0.08);\n border: 1px solid rgba(239, 68, 68, 0.2);\n border-radius: 8px;\n font-size: 12px;\n color: var(--oa-danger);\n animation: oa-fade-in 0.3s ease;\n}\n\n.oa-error-banner button {\n margin-left: auto;\n background: none;\n border: 1px solid var(--oa-danger);\n border-radius: 6px;\n color: var(--oa-danger);\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n cursor: pointer;\n font-family: var(--oa-font);\n flex-shrink: 0;\n}\n\n.oa-error-banner button:hover {\n background: rgba(239, 68, 68, 0.1);\n}\n\n/* ── Popup / Modal shell ─────────────────────── */\n\n.oa-popup {\n position: fixed;\n z-index: 100000;\n background: var(--oa-bg);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n box-shadow: 0 20px 60px rgba(0,0,0,0.4),\n 0 0 0 1px rgba(0,0,0,0.08);\n width: 340px;\n max-height: 90vh;\n overflow: hidden;\n animation: oa-popup-in 0.25s ease;\n display: flex;\n flex-direction: column;\n}\n\n.oa-inline-shell {\n background: var(--oa-bg);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n box-shadow: 0 20px 60px rgba(0,0,0,0.18),\n 0 0 0 1px rgba(0,0,0,0.06);\n width: min(100%, 360px);\n max-width: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n}\n\n.oa-modal-overlay {\n position: fixed;\n inset: 0;\n z-index: 99999;\n background: rgba(0,0,0,0.65);\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oa-fade-in 0.2s ease;\n backdrop-filter: blur(6px);\n}\n\n.oa-modal {\n background: var(--oa-bg);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n width: 360px;\n max-width: 95vw;\n max-height: 95vh;\n overflow: hidden;\n animation: oa-slide-in 0.3s ease;\n display: flex;\n flex-direction: column;\n}\n\n/* ── Header ──────────────────────────────────── */\n\n.oa-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n border-bottom: 1px solid var(--oa-border);\n flex-shrink: 0;\n}\n\n.oa-logo {\n font-family: var(--oa-mono);\n font-size: 0.85rem;\n letter-spacing: -0.03em;\n color: var(--oa-text-muted);\n text-decoration: none;\n cursor: pointer;\n}\n\n.oa-logo:hover {\n color: var(--oa-text);\n}\n\n.oa-logo strong {\n color: var(--oa-text);\n font-weight: 700;\n}\n\n.oa-badge {\n font-size: 0.55rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--oa-accent);\n background: var(--oa-accent-dim);\n padding: 2px 6px;\n border-radius: 100px;\n margin-left: 6px;\n}\n\n.oa-title {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.oa-close-btn {\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n color: var(--oa-text-muted);\n transition: background 0.15s, color 0.15s;\n}\n\n.oa-close-btn:hover {\n background: var(--oa-border);\n color: var(--oa-text);\n}\n\n.oa-close-btn svg {\n width: 16px;\n height: 16px;\n}\n\n/* ── Body (viewport) ─────────────────────────── */\n\n.oa-body {\n flex: 1;\n position: relative;\n overflow: hidden;\n}\n\n/* ── Hero / start screen ─────────────────────── */\n\n.oa-hero {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n padding: 2rem 1.2rem 1.2rem;\n background: var(--oa-surface);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n margin: 10px;\n animation: oa-fade-in 0.4s ease;\n}\n\n.oa-hero-icon {\n width: 80px;\n height: 96px;\n color: var(--oa-text-muted);\n}\n\n.oa-hero-icon .oa-face-svg.oa-idle {\n animation: oa-breathe 4s ease-in-out infinite;\n}\n\n.oa-hero-icon .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n animation: oa-idle-blink 5s ease-in-out infinite;\n}\n\n.oa-hero-status {\n color: var(--oa-text-muted);\n font-size: 0.8rem;\n font-weight: 500;\n text-align: center;\n min-height: 1.4em;\n}\n\n.oa-hero-privacy {\n font-size: 0.68rem;\n color: var(--oa-text-muted);\n text-align: center;\n line-height: 1.5;\n max-width: 260px;\n opacity: 0.7;\n}\n\n.oa-hero-privacy svg {\n width: 10px;\n height: 10px;\n vertical-align: -2px;\n margin-right: 2px;\n}\n\n/* ── Start / Retry button ────────────────────── */\n\n.oa-actions {\n display: flex;\n justify-content: center;\n padding: 0 14px 14px;\n flex-shrink: 0;\n}\n\n.oa-btn {\n font-family: var(--oa-font);\n padding: 0.55rem 1.5rem;\n border: none;\n border-radius: 10px;\n font-size: 0.8rem;\n font-weight: 600;\n cursor: pointer;\n background: var(--oa-accent);\n color: var(--oa-bg);\n transition: transform 0.12s, opacity 0.15s;\n width: 100%;\n max-width: 240px;\n}\n\n.oa-btn:hover { opacity: 0.88; }\n.oa-btn:active { transform: scale(0.97); }\n\n/* ── Video area ──────────────────────────────── */\n\n.oa-video-area {\n position: relative;\n width: 100%;\n aspect-ratio: 3/4;\n max-height: 55vh;\n background: var(--oa-surface);\n overflow: hidden;\n border-radius: var(--oa-radius);\n margin: 10px;\n width: calc(100% - 20px);\n border: 1px solid var(--oa-border);\n animation: oa-fade-in 0.3s ease;\n}\n\n.oa-video-area video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transform: scaleX(-1);\n}\n\n/* ── Face guide overlay ──────────────────────── */\n\n.oa-face-guide {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 80%;\n max-width: 360px;\n aspect-ratio: 5/6;\n perspective: 400px;\n color: rgba(255, 255, 255, 0.45);\n pointer-events: none;\n z-index: 2;\n transition: opacity 0.4s ease;\n}\n\n.oa-face-guide .oa-face-svg {\n width: 100%;\n height: 100%;\n transform-origin: center center;\n filter: drop-shadow(\n 0 0 16px rgba(15, 23, 42, 0.16)\n );\n}\n\n.oa-face-guide .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n}\n\n.oa-face-guide[data-task=\"turn-left\"] .oa-face-svg {\n animation: oa-turn-left 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"turn-right\"] .oa-face-svg {\n animation: oa-turn-right 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"nod\"] .oa-face-svg {\n animation: oa-nod 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"blink-twice\"] .oa-eye {\n animation: oa-blink 2.4s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"move-closer\"] .oa-face-svg {\n animation: oa-closer 2.5s ease-in-out infinite;\n}\n\n/* ── Challenge HUD (bottom gradient overlay) ── */\n\n.oa-challenge-hud {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1rem 0.8rem 0.6rem;\n background: linear-gradient(\n to top,\n rgba(11, 13, 17, 0.92) 0%,\n rgba(11, 13, 17, 0) 100%\n );\n z-index: 3;\n pointer-events: none;\n}\n\n.oa-challenge-text {\n font-size: 0.85rem;\n font-weight: 600;\n text-align: center;\n color: var(--oa-text);\n text-shadow: 0 1px 6px rgba(0, 0, 0, 0.7);\n margin-bottom: 0.4rem;\n}\n\n.oa-challenge-bar {\n height: 3px;\n background: rgba(255, 255, 255, 0.1);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.oa-challenge-fill {\n height: 100%;\n background: var(--oa-accent);\n border-radius: 2px;\n transition: width 0.25s ease;\n}\n\n/* ── Video status (top gradient overlay) ─────── */\n\n.oa-video-status {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n padding: 0.8rem 0.8rem 1.2rem;\n background: linear-gradient(\n to bottom,\n rgba(11, 13, 17, 0.85) 0%,\n rgba(11, 13, 17, 0) 100%\n );\n z-index: 3;\n pointer-events: none;\n}\n\n.oa-video-status p {\n font-size: 0.75rem;\n font-weight: 500;\n text-align: center;\n color: var(--oa-text-muted);\n text-shadow: 0 1px 4px rgba(0, 0, 0, 0.5);\n}\n\n/* ── Result area ─────────────────────────────── */\n\n.oa-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n padding: 2rem 1.2rem;\n background: var(--oa-surface);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n margin: 10px;\n animation: oa-fade-in 0.4s ease;\n}\n\n.oa-result-icon {\n font-size: 2.4rem;\n line-height: 1;\n}\n\n.oa-result-text {\n font-size: 0.85rem;\n font-weight: 500;\n text-align: center;\n}\n\n.oa-result-pass { color: var(--oa-accent); }\n.oa-result-fail { color: var(--oa-danger); }\n.oa-result-retry { color: var(--oa-warn); }\n\n.oa-error-step {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.7rem;\n padding: 2rem 1.2rem;\n background: var(--oa-surface);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n margin: 10px;\n animation: oa-fade-in 0.4s ease;\n text-align: center;\n}\n\n.oa-error-step-icon {\n width: 3rem;\n height: 3rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 999px;\n background: rgba(239, 68, 68, 0.12);\n color: var(--oa-danger);\n font-size: 1.7rem;\n line-height: 1;\n}\n\n.oa-error-step-title {\n font-size: 1rem;\n font-weight: 700;\n color: var(--oa-text);\n}\n\n.oa-error-step-message {\n font-size: 0.84rem;\n line-height: 1.5;\n color: var(--oa-text-muted);\n max-width: 260px;\n}\n\n.oa-error-step-countdown {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--oa-danger);\n}\n\n.oa-hidden { display: none !important; }\n\n/* ── Animations ──────────────────────────────── */\n\n@keyframes oa-popup-in {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n}\n\n@keyframes oa-fade-in {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes oa-slide-in {\n from { opacity: 0; transform: translateY(16px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes oa-breathe {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.04); }\n}\n\n@keyframes oa-idle-blink {\n 0%, 42%, 48%, 100% { transform: scaleY(1); }\n 44%, 46% { transform: scaleY(0.05); }\n}\n\n@keyframes oa-turn-left {\n 0%, 100% { transform: rotateY(0); }\n 35%, 65% { transform: rotateY(-30deg); }\n}\n\n@keyframes oa-turn-right {\n 0%, 100% { transform: rotateY(0); }\n 35%, 65% { transform: rotateY(30deg); }\n}\n\n@keyframes oa-nod {\n 0%, 100% { transform: rotateX(0); }\n 30%, 50% { transform: rotateX(25deg); }\n}\n\n@keyframes oa-blink {\n 0%, 18%, 32%, 50%, 100% { transform: scaleY(1); }\n 22%, 28% { transform: scaleY(0.05); }\n 40%, 46% { transform: scaleY(0.05); }\n}\n\n@keyframes oa-closer {\n 0%, 100% { transform: scale(1); }\n 35%, 55% { transform: scale(1.3); }\n}\n`;\n\nexport function checkboxTemplate(labelText) {\n return `\n <div class=\"oa-widget-wrap\">\n <div class=\"oa-checkbox\" role=\"checkbox\"\n aria-checked=\"false\" tabindex=\"0\">\n <div class=\"oa-check-box\"></div>\n <div class=\"oa-label\">\n <span class=\"oa-label-text\">${labelText}</span>\n </div>\n <div class=\"oa-right-section\">\n <div class=\"oa-branding-row\">\n <div class=\"oa-face-icon-wrap\">\n ${FACE_ICON_SVG}\n </div>\n <a class=\"oa-branding-link\"\n href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\" rel=\"noopener\">OpenAge</a>\n </div>\n <div class=\"oa-links-row\">\n <a href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\"\n rel=\"noopener\">Terms</a>\n <a href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\"\n rel=\"noopener\">Privacy</a>\n </div>\n </div>\n </div>\n <div class=\"oa-error-slot\"></div>\n </div>\n `;\n}\n\nexport function heroTemplate(statusText) {\n return `\n <div class=\"oa-hero\">\n <div class=\"oa-hero-icon\">\n ${FACE_SVG.replace('class=\"oa-face-svg\"', 'class=\"oa-face-svg oa-idle\"')}\n </div>\n <p class=\"oa-hero-status\">${statusText}</p>\n <p class=\"oa-hero-privacy\">\n ${SHIELD_SVG}\n Open-source & privacy-focused.\n No photos or camera data leave your device.\n </p>\n </div>\n `;\n}\n\nexport function challengeTemplate() {\n return `\n <div class=\"oa-video-area\">\n <video autoplay playsinline muted></video>\n <div class=\"oa-face-guide\">\n ${FACE_GUIDE_SVG}\n </div>\n <div class=\"oa-challenge-hud oa-hidden\">\n <p class=\"oa-challenge-text\"></p>\n <div class=\"oa-challenge-bar\">\n <div class=\"oa-challenge-fill\"\n style=\"width:0%\"></div>\n </div>\n </div>\n <div class=\"oa-video-status\">\n <p></p>\n </div>\n </div>\n `;\n}\n\nexport function errorStepTemplate(message) {\n return `\n <div class=\"oa-error-step\">\n <div class=\"oa-error-step-icon\">✕</div>\n <div class=\"oa-error-step-title\">Verification stopped</div>\n <div class=\"oa-error-step-message\">${message}</div>\n <div class=\"oa-error-step-countdown\"></div>\n </div>\n `;\n}\n\nexport function resultTemplate(outcome, message) {\n const icons = {\n fail: '✕',\n retry: '↻',\n };\n const classes = {\n fail: 'oa-result-fail',\n retry: 'oa-result-retry',\n };\n return `\n <div class=\"oa-result ${classes[outcome] || ''}\">\n <div class=\"oa-result-icon\">\n ${icons[outcome] || '?'}\n </div>\n <div class=\"oa-result-text\">${message}</div>\n </div>\n `;\n}\n\nexport function errorBannerTemplate(message) {\n return `\n <div class=\"oa-error-banner\">\n <span>${message}</span>\n <button class=\"oa-retry-btn\">Retry</button>\n </div>\n `;\n}\n","export const VERSION = '1.0.0';\n\nexport const MEDIAPIPE_CDN = 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.17';\n\nexport const MEDIAPIPE_WASM = `${MEDIAPIPE_CDN}/wasm`;\n\nexport const MEDIAPIPE_VISION = `${MEDIAPIPE_CDN}/vision_bundle.mjs`;\n\nexport const MEDIAPIPE_MODEL =\n 'https://storage.googleapis.com/mediapipe-models/' +\n 'face_landmarker/face_landmarker/float16/1/' +\n 'face_landmarker.task';\n\nexport const FACEAPI_CDN = 'https://cdn.jsdelivr.net/npm/face-api.js@0.22.2/dist/face-api.min.js';\n\nexport const FACEAPI_MODEL_CDN =\n 'https://cdn.jsdelivr.net/gh/justadudewhohacks/face-api.js@master/weights';\n\nexport const MAX_RETRIES = 3;\nexport const ERROR_STEP_SECONDS = 5;\nexport const BURST_FRAMES = 5;\nexport const BURST_INTERVAL_MS = 200;\nexport const POSITION_CHECK_MS = 100;\nexport const MOTION_CAPTURE_MS = 3000;\nexport const MOTION_SAMPLE_MS = 100;\nexport const TOKEN_EXPIRY_S = 300;\nexport const STABLE_FRAMES_REQUIRED = 10;\n\nexport const TASK_TIMEOUT_MS = 8000;\nexport const MIN_TASK_TIME_MS = 500;\nexport const TASK_COUNT = 3;\nexport const REQUIRED_TASK_PASSES = 2;\n\nexport const POPUP_MIN_WIDTH = 340;\nexport const POPUP_MIN_HEIGHT = 520;\nexport const POPUP_MARGIN = 12;\n","import {\n STYLES,\n checkboxTemplate,\n heroTemplate,\n challengeTemplate,\n errorStepTemplate,\n resultTemplate,\n resolveTheme,\n watchTheme,\n SPINNER_SVG,\n CHECK_SVG,\n CLOSE_SVG,\n RETRY_SVG,\n} from './ui.js';\nimport { POPUP_MIN_WIDTH, POPUP_MIN_HEIGHT, POPUP_MARGIN } from './constants.js';\n\nlet widgetCounter = 0;\n\nexport class Widget {\n constructor(container, params) {\n this.id = `oa-${++widgetCounter}`;\n this.params = params;\n this.container = resolveContainer(container);\n this.anchorElement = null;\n this.state = 'idle';\n this.token = null;\n this.popup = null;\n this.shadow = null;\n this.elements = {};\n this.popupElements = null;\n this.onChallenge = null;\n this.onStartClick = null;\n this.popupFrame = 0;\n this.themeCleanup = null;\n\n this.render();\n }\n\n render() {\n const host = document.createElement('div');\n host.id = this.id;\n this.shadow = host.attachShadow({ mode: 'open' });\n this.host = host;\n\n const style = document.createElement('style');\n style.textContent = STYLES;\n this.shadow.appendChild(style);\n\n const theme = resolveTheme(this.params.theme);\n host.setAttribute('data-theme', theme);\n this.themeCleanup = watchTheme(host, this.params.theme);\n\n if (this.params.size === 'invisible') {\n host.style.display = 'none';\n this.container.appendChild(host);\n return;\n }\n\n if (this.isInlineLayout()) {\n this.renderInlineShell();\n this.container.appendChild(host);\n return;\n }\n\n const label = 'I am of age';\n\n const wrapper = document.createElement('div');\n wrapper.innerHTML = checkboxTemplate(label);\n this.shadow.appendChild(wrapper.firstElementChild);\n\n const checkbox = this.shadow.querySelector('.oa-checkbox');\n\n if (this.params.size === 'compact') {\n checkbox.classList.add('oa-compact');\n }\n\n checkbox.addEventListener('click', (event) => {\n if (event.target.closest('a')) return;\n if (this.state === 'verified') return;\n if (this.state === 'loading') return;\n this.clearError();\n this.startChallenge();\n });\n\n checkbox.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n checkbox.click();\n }\n });\n\n this.elements.checkbox = checkbox;\n this.elements.checkBox = this.shadow.querySelector('.oa-check-box');\n this.elements.errorSlot = this.shadow.querySelector('.oa-error-slot');\n\n this.container.appendChild(host);\n }\n\n isInlineLayout() {\n return this.params.layout === 'inline';\n }\n\n renderInlineShell() {\n const inlineShell = document.createElement('div');\n inlineShell.className = 'oa-inline-shell';\n inlineShell.innerHTML = this.buildPopupContent({ closeable: false });\n this.shadow.appendChild(inlineShell);\n\n this.popup = {\n host: this.host,\n root: inlineShell,\n inline: true,\n };\n\n this.bindPopupEvents(inlineShell);\n }\n\n resetInlineShell() {\n if (!this.popup?.root) return;\n\n this.popup.root.innerHTML = this.buildPopupContent({ closeable: false });\n this.bindPopupEvents(this.popup.root);\n }\n\n startChallenge() {\n this.setState('loading');\n\n if (this.onChallenge) {\n this.onChallenge(this);\n }\n }\n\n createPopupShell() {\n const theme = resolveTheme(this.params.theme);\n const popupHost = document.createElement('div');\n popupHost.setAttribute('data-theme', theme);\n const popupShadow = popupHost.attachShadow({\n mode: 'open',\n });\n\n const style = document.createElement('style');\n style.textContent = STYLES;\n popupShadow.appendChild(style);\n\n const themeCleanup = watchTheme(popupHost, this.params.theme);\n\n return {\n popupHost,\n popupShadow,\n themeCleanup,\n };\n }\n\n openPopup() {\n if (this.isInlineLayout()) {\n if (!this.popup) {\n this.renderInlineShell();\n }\n\n return this.getVideo();\n }\n\n if (this.popup) return this.getVideo();\n\n const anchor = this.getPopupAnchor();\n\n if (!anchor) {\n return this.openModal();\n }\n\n const { popupHost, popupShadow, themeCleanup } = this.createPopupShell();\n\n const popup = document.createElement('div');\n popup.className = 'oa-popup';\n popup.innerHTML = this.buildPopupContent();\n popup.style.visibility = 'hidden';\n popup.style.pointerEvents = 'none';\n\n popupShadow.appendChild(popup);\n document.body.appendChild(popupHost);\n\n this.popup = {\n anchor,\n host: popupHost,\n root: popup,\n themeCleanup,\n };\n\n const anchorRect = anchor.getBoundingClientRect();\n const popupRect = popup.getBoundingClientRect();\n const position = findPopupPosition(anchorRect, popupRect);\n\n if (position.mode === 'modal') {\n popupHost.remove();\n themeCleanup?.();\n this.popup = null;\n return this.openModal();\n }\n\n this.bindPopupEvents(popup, popupShadow);\n this.updatePopupPosition();\n this.startPopupTracking();\n return this.getVideo();\n }\n\n openModal() {\n const { popupHost, popupShadow, themeCleanup } = this.createPopupShell();\n\n const overlay = document.createElement('div');\n overlay.className = 'oa-modal-overlay';\n\n const modal = document.createElement('div');\n modal.className = 'oa-modal';\n modal.innerHTML = this.buildPopupContent();\n\n overlay.appendChild(modal);\n popupShadow.appendChild(overlay);\n document.body.appendChild(popupHost);\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) this.closePopup();\n });\n\n this.popup = {\n host: popupHost,\n root: modal,\n overlay,\n themeCleanup,\n };\n this.bindPopupEvents(modal, popupShadow);\n return this.getVideo();\n }\n\n getPopupAnchor() {\n return this.anchorElement || this.elements.checkbox || this.host || null;\n }\n\n startPopupTracking() {\n if (!this.popup || this.popup.overlay) return;\n\n const schedule = () => {\n this.schedulePopupPosition();\n };\n\n const cleanups = [];\n const addWindowListener = (name, options) => {\n window.addEventListener(name, schedule, options);\n cleanups.push(() => {\n window.removeEventListener(name, schedule, options);\n });\n };\n\n addWindowListener('resize', { passive: true });\n addWindowListener('scroll', {\n capture: true,\n passive: true,\n });\n\n if (window.visualViewport) {\n const viewport = window.visualViewport;\n viewport.addEventListener('resize', schedule);\n viewport.addEventListener('scroll', schedule);\n cleanups.push(() => {\n viewport.removeEventListener('resize', schedule);\n viewport.removeEventListener('scroll', schedule);\n });\n }\n\n if (typeof ResizeObserver === 'function') {\n const observer = new ResizeObserver(() => {\n schedule();\n });\n observer.observe(this.popup.root);\n observer.observe(this.popup.anchor);\n observer.observe(document.documentElement);\n if (document.body) {\n observer.observe(document.body);\n }\n cleanups.push(() => observer.disconnect());\n }\n\n this.popup.cleanup = () => {\n if (this.popupFrame) {\n cancelAnimationFrame(this.popupFrame);\n this.popupFrame = 0;\n }\n for (const cleanup of cleanups) {\n cleanup();\n }\n };\n }\n\n schedulePopupPosition() {\n if (!this.popup || this.popup.overlay) return;\n if (this.popupFrame) return;\n\n this.popupFrame = requestAnimationFrame(() => {\n this.popupFrame = 0;\n this.updatePopupPosition();\n });\n }\n\n updatePopupPosition() {\n if (!this.popup || this.popup.overlay) return;\n\n const anchor = this.getPopupAnchor();\n if (!anchor || !anchor.isConnected) {\n this.closePopup();\n return;\n }\n\n this.popup.anchor = anchor;\n\n const anchorRect = anchor.getBoundingClientRect();\n const popupRect = this.popup.root.getBoundingClientRect();\n const position = findPopupPosition(anchorRect, popupRect);\n\n if (position.mode === 'modal') {\n this.closePopup();\n this.openModal();\n return;\n }\n\n const top = `${Math.round(position.top)}px`;\n const left = `${Math.round(position.left)}px`;\n\n if (this.popup.root.style.top !== top) {\n this.popup.root.style.top = top;\n }\n\n if (this.popup.root.style.left !== left) {\n this.popup.root.style.left = left;\n }\n\n this.popup.root.dataset.placement = position.placement;\n this.popup.root.style.visibility = 'visible';\n this.popup.root.style.pointerEvents = 'auto';\n }\n\n buildPopupContent({ closeable = true } = {}) {\n return `\n <div class=\"oa-header\">\n <div class=\"oa-title\">\n <a class=\"oa-logo\"\n href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\" rel=\"noopener\">\n Open<strong>Age</strong>\n </a>\n <span class=\"oa-badge\">on-device</span>\n </div>\n ${\n closeable\n ? `<button class=\"oa-close-btn\"\n aria-label=\"Close\">\n ${CLOSE_SVG}\n </button>`\n : ''\n }\n </div>\n <div class=\"oa-body\">\n ${heroTemplate('Initializing…')}\n </div>\n <div class=\"oa-actions oa-hidden\">\n <button class=\"oa-btn oa-start-btn\">\n Begin Verification\n </button>\n </div>\n `;\n }\n\n bindPopupEvents(root) {\n const closeBtn = root.querySelector('.oa-close-btn');\n if (closeBtn) {\n closeBtn.addEventListener('click', () => {\n this.closePopup();\n this.params.closeCallback?.();\n });\n }\n\n const startBtn = root.querySelector('.oa-start-btn');\n if (startBtn) {\n startBtn.addEventListener('click', () => {\n if (this.onStartClick) this.onStartClick();\n });\n }\n\n this.popupElements = {\n body: root.querySelector('.oa-body'),\n actions: root.querySelector('.oa-actions'),\n startBtn,\n heroStatus: root.querySelector('.oa-hero-status'),\n };\n }\n\n getVideo() {\n if (!this.popup) return null;\n return this.popup.root.querySelector('video');\n }\n\n showHero(statusText) {\n if (!this.popupElements?.body) return;\n this.popupElements.body.innerHTML = heroTemplate(statusText);\n this.popupElements.heroStatus = this.popupElements.body.querySelector('.oa-hero-status');\n this.hideActions();\n }\n\n showReady() {\n this.setHeroStatus('Ready to verify your age.');\n this.showActions('Begin Verification');\n }\n\n showCamera() {\n if (!this.popupElements?.body) return;\n this.popupElements.body.innerHTML = challengeTemplate();\n\n this.popupElements.video = this.popupElements.body.querySelector('video');\n this.popupElements.faceGuide = this.popupElements.body.querySelector('.oa-face-guide');\n this.popupElements.challengeHud =\n this.popupElements.body.querySelector('.oa-challenge-hud');\n this.popupElements.challengeText =\n this.popupElements.body.querySelector('.oa-challenge-text');\n this.popupElements.challengeFill =\n this.popupElements.body.querySelector('.oa-challenge-fill');\n this.popupElements.videoStatus =\n this.popupElements.body.querySelector('.oa-video-status p');\n\n this.hideActions();\n return this.popupElements.video;\n }\n\n showLiveness() {\n if (this.popupElements?.faceGuide) {\n this.popupElements.faceGuide.classList.remove('oa-hidden');\n }\n if (this.popupElements?.challengeHud) {\n this.popupElements.challengeHud.classList.remove('oa-hidden');\n }\n }\n\n setHeroStatus(text) {\n if (this.popupElements?.heroStatus) {\n this.popupElements.heroStatus.textContent = text;\n }\n }\n\n setVideoStatus(text) {\n if (this.popupElements?.videoStatus) {\n this.popupElements.videoStatus.textContent = text;\n }\n }\n\n setInstruction(text) {\n if (this.popupElements?.challengeText) {\n this.popupElements.challengeText.textContent = text;\n }\n }\n\n setStatus(text) {\n this.setVideoStatus(text);\n }\n\n setProgress(fraction) {\n if (this.popupElements?.challengeFill) {\n this.popupElements.challengeFill.style.width = `${Math.round(fraction * 100)}%`;\n }\n }\n\n setTask(taskId) {\n if (this.popupElements?.faceGuide) {\n this.popupElements.faceGuide.setAttribute('data-task', taskId || '');\n }\n }\n\n showActions(label) {\n if (!this.popupElements?.actions) return;\n this.popupElements.actions.classList.remove('oa-hidden');\n if (this.popupElements.startBtn) {\n this.popupElements.startBtn.textContent = label;\n }\n }\n\n hideActions() {\n if (this.popupElements?.actions) {\n this.popupElements.actions.classList.add('oa-hidden');\n }\n }\n\n showResult(outcome, message) {\n if (this.isInlineLayout()) {\n if (!this.popupElements?.body) return;\n\n this.popupElements.body.innerHTML = resultTemplate(outcome, message);\n this.hideActions();\n\n if (outcome === 'pass') {\n this.setState('verified');\n return;\n }\n\n this.setState(outcome === 'fail' ? 'failed' : 'retry');\n this.showActions('Try Again');\n return;\n }\n\n if (outcome === 'pass') {\n this.closePopup();\n this.setState('verified');\n return;\n }\n\n if (outcome === 'fail') {\n if (this.params.size === 'invisible') {\n if (this.popupElements?.body) {\n this.popupElements.body.innerHTML = resultTemplate(outcome, message);\n }\n this.hideActions();\n this.showActions('Try Again');\n } else {\n this.closePopup();\n this.setState('retry');\n }\n return;\n }\n\n if (outcome === 'retry') {\n if (this.params.size !== 'invisible') {\n this.closePopup();\n this.setState('retry');\n return;\n }\n\n if (this.popupElements?.body) {\n this.popupElements.body.innerHTML = resultTemplate(outcome, message);\n }\n this.hideActions();\n this.showActions('Try Again');\n }\n }\n\n showError(message) {\n if (!this.popupElements?.body) return;\n\n this.popupElements.body.innerHTML = errorStepTemplate(message);\n this.popupElements.errorCountdown = this.popupElements.body.querySelector(\n '.oa-error-step-countdown'\n );\n this.hideActions();\n }\n\n setErrorCountdown(seconds) {\n if (!this.popupElements?.errorCountdown) return;\n\n const unit = seconds === 1 ? 'second' : 'seconds';\n this.popupElements.errorCountdown.textContent = `Closing in ${seconds} ${unit}…`;\n }\n\n clearError() {\n if (this.elements.errorSlot) {\n this.elements.errorSlot.innerHTML = '';\n }\n }\n\n closePopup() {\n if (!this.popup) return;\n\n if (this.popup.inline) {\n this.popup.cleanup?.();\n if (this.popupFrame) {\n cancelAnimationFrame(this.popupFrame);\n this.popupFrame = 0;\n }\n this.resetInlineShell();\n\n if (this.state === 'loading') {\n this.setState('idle');\n }\n\n return;\n }\n\n this.popup.cleanup?.();\n this.popup.themeCleanup?.();\n this.popup.host.remove();\n this.popup = null;\n this.popupElements = null;\n\n if (this.state === 'loading') {\n this.setState('idle');\n }\n }\n\n setState(newState) {\n this.state = newState;\n const cb = this.elements.checkbox;\n const box = this.elements.checkBox;\n if (!cb || !box) return;\n\n cb.classList.remove('oa-loading', 'oa-verified', 'oa-failed', 'oa-retry', 'oa-expired');\n cb.setAttribute('aria-checked', 'false');\n box.innerHTML = '';\n\n switch (newState) {\n case 'loading':\n cb.classList.add('oa-loading');\n box.innerHTML = `<span class=\"oa-spinner\">` + `${SPINNER_SVG}</span>`;\n break;\n case 'verified':\n cb.classList.add('oa-verified');\n cb.setAttribute('aria-checked', 'true');\n box.innerHTML = CHECK_SVG;\n break;\n case 'failed':\n cb.classList.add('oa-failed');\n box.innerHTML = '✕';\n break;\n case 'retry':\n cb.classList.add('oa-retry');\n box.innerHTML = RETRY_SVG;\n break;\n case 'expired':\n cb.classList.add('oa-expired');\n cb.setAttribute('aria-checked', 'false');\n break;\n default:\n break;\n }\n }\n\n getToken() {\n return this.token;\n }\n\n reset() {\n this.token = null;\n this.closePopup();\n this.setState('idle');\n }\n\n destroy() {\n this.closePopup();\n this.themeCleanup?.();\n this.host?.remove();\n }\n}\n\nexport function createModalWidget(params) {\n const widget = new Widget(document.createElement('div'), { ...params, size: 'invisible' });\n return widget;\n}\n\nfunction resolveContainer(container) {\n if (typeof container === 'string') {\n return document.querySelector(container);\n }\n return container;\n}\n\nfunction findPopupPosition(anchorRect, popupRect) {\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n const popupWidth = Math.max(popupRect.width || 0, POPUP_MIN_WIDTH);\n const popupHeight = Math.max(popupRect.height || 0, POPUP_MIN_HEIGHT);\n const availableWidth = viewport.width - POPUP_MARGIN * 2;\n const availableHeight = viewport.height - POPUP_MARGIN * 2;\n\n if (popupWidth > availableWidth || popupHeight > availableHeight) {\n return { mode: 'modal' };\n }\n\n const left = clampLeft(\n anchorRect.left + anchorRect.width / 2 - popupWidth / 2,\n viewport.width,\n popupWidth\n );\n\n const topBelow = anchorRect.bottom + POPUP_MARGIN;\n const topAbove = anchorRect.top - popupHeight - POPUP_MARGIN;\n const fitsBelow = topBelow + popupHeight <= viewport.height - POPUP_MARGIN;\n const fitsAbove = topAbove >= POPUP_MARGIN;\n\n if (fitsBelow || !fitsAbove) {\n return {\n mode: 'popup',\n placement: 'below',\n top: clampTop(topBelow, viewport.height, popupHeight),\n left,\n };\n }\n\n return {\n mode: 'popup',\n placement: 'above',\n top: clampTop(topAbove, viewport.height, popupHeight),\n left,\n };\n}\n\nfunction clampLeft(left, viewportWidth, popupWidth) {\n return Math.min(Math.max(POPUP_MARGIN, left), viewportWidth - popupWidth - POPUP_MARGIN);\n}\n\nfunction clampTop(top, viewportHeight, popupHeight) {\n return Math.min(Math.max(POPUP_MARGIN, top), viewportHeight - popupHeight - POPUP_MARGIN);\n}\n","import { MEDIAPIPE_CDN, MEDIAPIPE_WASM, MEDIAPIPE_VISION, MEDIAPIPE_MODEL } from './constants.js';\n\nlet FaceLandmarker = null;\nlet landmarker = null;\nlet lastTimestampMs = -1;\nlet visionModule = null;\n\nexport async function loadVision() {\n if (visionModule) return visionModule;\n visionModule = await import(MEDIAPIPE_VISION);\n FaceLandmarker = visionModule.FaceLandmarker;\n return visionModule;\n}\n\nexport async function loadModel() {\n const response = await fetch(MEDIAPIPE_MODEL);\n if (!response.ok) {\n throw new Error('Failed to load face landmarker model');\n }\n return new Uint8Array(await response.arrayBuffer());\n}\n\nexport async function initTracker(modelBuffer) {\n const vision = await loadVision();\n const resolver = await vision.FilesetResolver.forVisionTasks(MEDIAPIPE_WASM);\n\n if (landmarker) {\n landmarker.close();\n }\n lastTimestampMs = -1;\n\n landmarker = await FaceLandmarker.createFromOptions(resolver, {\n baseOptions: {\n modelAssetBuffer: new Uint8Array(modelBuffer),\n delegate: 'GPU',\n },\n runningMode: 'VIDEO',\n numFaces: 2,\n outputFaceBlendshapes: true,\n outputFacialTransformationMatrixes: true,\n });\n}\n\nexport function track(video, timestampMs) {\n if (!landmarker) return null;\n\n const normalized = normalizeTimestamp(timestampMs);\n const result = landmarker.detectForVideo(video, normalized);\n const faceCount = result.faceLandmarks?.length ?? 0;\n\n if (faceCount === 0) {\n return { faceCount: 0, timestampMs: normalized };\n }\n\n const landmarks = result.faceLandmarks[0];\n\n return {\n faceCount,\n timestampMs: normalized,\n landmarks,\n blendshapes: parseBlendshapes(result.faceBlendshapes?.[0]),\n headPose: extractHeadPose(result.facialTransformationMatrixes?.[0]),\n boundingBox: computeBoundingBox(landmarks),\n };\n}\n\nexport function destroyTracker() {\n if (landmarker) {\n landmarker.close();\n landmarker = null;\n }\n lastTimestampMs = -1;\n}\n\nexport function isTrackerReady() {\n return landmarker !== null;\n}\n\nfunction normalizeTimestamp(timestampMs) {\n const safe = Number.isFinite(timestampMs) ? timestampMs : performance.now();\n const whole = Math.floor(safe);\n const normalized = Math.max(whole, lastTimestampMs + 1);\n lastTimestampMs = normalized;\n return normalized;\n}\n\nfunction parseBlendshapes(blendshapeResult) {\n if (!blendshapeResult?.categories) return {};\n const map = {};\n for (const category of blendshapeResult.categories) {\n map[category.categoryName] = category.score;\n }\n return map;\n}\n\nfunction extractHeadPose(matrix) {\n if (!matrix?.data || matrix.data.length < 16) {\n return { yaw: 0, pitch: 0, roll: 0 };\n }\n const m = matrix.data;\n const deg = 180 / Math.PI;\n return {\n yaw: Math.atan2(m[8], m[10]) * deg,\n pitch: Math.asin(-Math.max(-1, Math.min(1, m[9]))) * deg,\n roll: Math.atan2(m[1], m[5]) * deg,\n };\n}\n\nfunction computeBoundingBox(landmarks) {\n let minX = 1,\n minY = 1,\n maxX = 0,\n maxY = 0;\n\n for (const point of landmarks) {\n if (point.x < minX) minX = point.x;\n if (point.y < minY) minY = point.y;\n if (point.x > maxX) maxX = point.x;\n if (point.y > maxY) maxY = point.y;\n }\n\n const width = maxX - minX;\n const height = maxY - minY;\n\n return {\n x: minX,\n y: minY,\n width,\n height,\n area: width * height,\n };\n}\n","import { track } from './face-tracker.js';\nimport { STABLE_FRAMES_REQUIRED, POSITION_CHECK_MS } from './constants.js';\n\nexport function startPositioning(video, callbacks) {\n let stableFrames = 0;\n let cancelled = false;\n\n const check = () => {\n if (cancelled) return;\n\n const result = track(video, performance.now());\n\n if (!result || result.faceCount === 0) {\n callbacks.onStatus?.('Look at the camera');\n stableFrames = 0;\n } else if (result.faceCount > 1) {\n callbacks.onStatus?.('Only one person please');\n stableFrames = 0;\n } else {\n callbacks.onStatus?.('Hold still…');\n stableFrames++;\n }\n\n if (stableFrames >= STABLE_FRAMES_REQUIRED) {\n callbacks.onReady?.();\n return;\n }\n\n setTimeout(check, POSITION_CHECK_MS);\n };\n\n check();\n\n return {\n cancel: () => {\n cancelled = true;\n },\n };\n}\n","import { FACEAPI_CDN, FACEAPI_MODEL_CDN } from './constants.js';\n\nlet initialized = false;\nlet faceapi = null;\n\nfunction loadScript(url) {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') {\n return reject(new Error('No DOM available'));\n }\n\n const existing = document.querySelector(`script[src=\"${url}\"]`);\n if (existing) {\n if (window.faceapi) return resolve(window.faceapi);\n existing.addEventListener('load', () => resolve(window.faceapi));\n return;\n }\n\n const script = document.createElement('script');\n script.src = url;\n script.crossOrigin = 'anonymous';\n script.onload = () => resolve(window.faceapi);\n script.onerror = () => reject(new Error(`Failed to load ${url}`));\n document.head.appendChild(script);\n });\n}\n\nexport async function initAgeEstimator() {\n if (initialized) return;\n\n faceapi = await loadScript(FACEAPI_CDN);\n\n await Promise.all([\n faceapi.nets.tinyFaceDetector.loadFromUri(FACEAPI_MODEL_CDN),\n faceapi.nets.faceLandmark68TinyNet.loadFromUri(FACEAPI_MODEL_CDN),\n faceapi.nets.ageGenderNet.loadFromUri(FACEAPI_MODEL_CDN),\n ]);\n\n initialized = true;\n}\n\nexport async function estimateAge(canvas) {\n if (!faceapi) {\n throw new Error('Age estimator not initialized');\n }\n\n const detection = await faceapi\n .detectSingleFace(\n canvas,\n new faceapi.TinyFaceDetectorOptions({\n inputSize: 224,\n })\n )\n .withFaceLandmarks(true)\n .withAgeAndGender();\n\n if (!detection) return null;\n\n return {\n age: detection.age,\n gender: detection.gender,\n confidence: detection.detection.score,\n };\n}\n\nexport async function estimateAgeBurst(frames) {\n const results = [];\n for (const frame of frames) {\n const result = await estimateAge(frame);\n if (result) results.push(result);\n }\n return results;\n}\n\nexport function isInitialized() {\n return initialized;\n}\n","import {\n TASK_TIMEOUT_MS,\n MIN_TASK_TIME_MS,\n TASK_COUNT,\n REQUIRED_TASK_PASSES,\n} from './constants.js';\n\nconst TASKS = [\n {\n id: 'turn-left',\n instruction: 'Turn your head to the left',\n check: (h) => detectYawShift(h, 20),\n },\n {\n id: 'turn-right',\n instruction: 'Turn your head to the right',\n check: (h) => detectYawShift(h, -20),\n },\n {\n id: 'nod',\n instruction: 'Nod your head down then up',\n check: (h) => detectNod(h),\n },\n {\n id: 'blink-twice',\n instruction: 'Blink twice',\n check: (h) => detectDoubleBlink(h),\n },\n {\n id: 'move-closer',\n instruction: 'Move closer then back',\n check: (h) => detectDistanceChange(h),\n },\n];\n\nexport function pickTasks(count = TASK_COUNT) {\n const shuffled = [...TASKS].sort(() => Math.random() - 0.5);\n return shuffled.slice(0, count);\n}\n\nexport function createSession(tasks) {\n return {\n tasks: tasks || pickTasks(),\n currentIndex: 0,\n history: [],\n taskStartTime: 0,\n completedTasks: 0,\n requiredPasses: REQUIRED_TASK_PASSES,\n failed: false,\n failReason: null,\n };\n}\n\nexport function processFrame(session, trackingResult) {\n if (session.failed || isComplete(session)) return;\n if (session.currentIndex >= session.tasks.length) return;\n if (!trackingResult || trackingResult.faceCount === 0) return;\n\n if (trackingResult.faceCount > 1) {\n session.failed = true;\n session.failReason = null;\n return;\n }\n\n const entry = {\n timestamp: trackingResult.timestampMs,\n headPose: trackingResult.headPose,\n blendshapes: trackingResult.blendshapes,\n boundingBox: trackingResult.boundingBox,\n };\n\n if (session.history.length === 0) {\n session.taskStartTime = trackingResult.timestampMs;\n }\n\n session.history.push(entry);\n\n const elapsed = trackingResult.timestampMs - session.taskStartTime;\n\n if (elapsed > TASK_TIMEOUT_MS) {\n advanceTask(session);\n return;\n }\n\n if (elapsed < MIN_TASK_TIME_MS) return;\n\n const task = session.tasks[session.currentIndex];\n if (!task.check(session.history)) return;\n\n if (isSuspicious(session.history)) {\n session.failed = true;\n session.failReason = null;\n return;\n }\n\n session.completedTasks++;\n advanceTask(session);\n}\n\nexport function isComplete(session) {\n return session.currentIndex >= session.tasks.length;\n}\n\nexport function isPassed(session) {\n return session.completedTasks >= session.requiredPasses;\n}\n\nexport function currentInstruction(session) {\n if (session.currentIndex >= session.tasks.length) {\n return null;\n }\n return session.tasks[session.currentIndex].instruction;\n}\n\nexport function currentTaskId(session) {\n if (session.currentIndex >= session.tasks.length) {\n return null;\n }\n return session.tasks[session.currentIndex].id;\n}\n\nexport function progress(session) {\n if (session.tasks.length === 0) return 1;\n return Math.min(session.currentIndex / session.tasks.length, 1);\n}\n\nfunction advanceTask(session) {\n session.currentIndex++;\n session.history = [];\n session.taskStartTime = 0;\n\n const remaining = session.tasks.length - session.currentIndex;\n const canStillPass = session.completedTasks + remaining >= session.requiredPasses;\n\n if (!canStillPass) {\n session.failed = true;\n session.failReason = null;\n }\n}\n\nfunction detectYawShift(history, targetDelta) {\n if (history.length < 5) return false;\n const baseYaw = history[0].headPose.yaw;\n const direction = Math.sign(targetDelta);\n const threshold = Math.abs(targetDelta);\n\n return history.some((entry) => {\n const delta = (entry.headPose.yaw - baseYaw) * direction;\n return delta > threshold;\n });\n}\n\nfunction detectNod(history) {\n if (history.length < 10) return false;\n const basePitch = history[0].headPose.pitch;\n let wentDown = false;\n let cameBack = false;\n\n for (const entry of history) {\n const delta = entry.headPose.pitch - basePitch;\n if (delta > 15) wentDown = true;\n if (wentDown && Math.abs(delta) < 8) cameBack = true;\n }\n\n return wentDown && cameBack;\n}\n\nfunction detectDoubleBlink(history) {\n if (history.length < 10) return false;\n let blinkCount = 0;\n let eyesClosed = false;\n\n for (const entry of history) {\n const left = entry.blendshapes.eyeBlinkLeft ?? 0;\n const right = entry.blendshapes.eyeBlinkRight ?? 0;\n const bothClosed = left > 0.6 && right > 0.6;\n\n if (bothClosed && !eyesClosed) {\n blinkCount++;\n eyesClosed = true;\n } else if (!bothClosed) {\n eyesClosed = false;\n }\n }\n\n return blinkCount >= 2;\n}\n\nfunction detectDistanceChange(history) {\n if (history.length < 10) return false;\n const baseArea = history[0].boundingBox.area;\n let wentCloser = false;\n let cameBack = false;\n\n for (const entry of history) {\n const ratio = entry.boundingBox.area / baseArea;\n if (ratio > 1.3) wentCloser = true;\n if (wentCloser && ratio < 1.15) cameBack = true;\n }\n\n return wentCloser && cameBack;\n}\n\nexport function isSuspicious(history) {\n if (history.length < 5) return false;\n\n const deltas = [];\n for (let i = 1; i < history.length; i++) {\n const dy = Math.abs(history[i].headPose.yaw - history[i - 1].headPose.yaw);\n const dp = Math.abs(history[i].headPose.pitch - history[i - 1].headPose.pitch);\n deltas.push(dy + dp);\n }\n\n if (deltas.every((d) => d < 0.1)) return true;\n\n const mean = deltas.reduce((a, b) => a + b, 0) / deltas.length;\n const variance = deltas.reduce((s, d) => s + (d - mean) ** 2, 0) / deltas.length;\n\n return variance < 0.01 && mean > 0.5;\n}\n","import { TOKEN_EXPIRY_S } from './constants.js';\n\nfunction base64UrlEncode(data) {\n const text = typeof data === 'string' ? data : String.fromCharCode(...new Uint8Array(data));\n return btoa(text).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(str) {\n const padded = str + '='.repeat((4 - (str.length % 4)) % 4);\n const binary = atob(padded.replace(/-/g, '+').replace(/_/g, '/'));\n return Uint8Array.from(binary, (c) => c.charCodeAt(0));\n}\n\nasync function getSigningKey() {\n const raw = crypto.getRandomValues(new Uint8Array(32));\n return crypto.subtle.importKey('raw', raw, { name: 'HMAC', hash: 'SHA-256' }, false, [\n 'sign',\n 'verify',\n ]);\n}\n\nlet cachedKey = null;\n\nasync function ensureKey() {\n if (!cachedKey) cachedKey = await getSigningKey();\n return cachedKey;\n}\n\nexport async function createToken(payload) {\n const key = await ensureKey();\n\n const header = base64UrlEncode(JSON.stringify({ alg: 'HS256', typ: 'JWT' }));\n\n const body = base64UrlEncode(\n JSON.stringify({\n ...payload,\n iat: Math.floor(Date.now() / 1000),\n exp: Math.floor(Date.now() / 1000) + TOKEN_EXPIRY_S,\n })\n );\n\n const data = new TextEncoder().encode(`${header}.${body}`);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n\n return `${header}.${body}.${base64UrlEncode(signature)}`;\n}\n\nexport async function verifyToken(token) {\n const key = await ensureKey();\n const [header, body, sig] = token.split('.');\n\n if (!header || !body || !sig) return null;\n\n let signature;\n let data;\n try {\n data = new TextEncoder().encode(`${header}.${body}`);\n signature = base64UrlDecode(sig);\n } catch {\n return null;\n }\n\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n if (!valid) return null;\n\n const decoded = JSON.parse(new TextDecoder().decode(base64UrlDecode(body)));\n\n if (decoded.exp && decoded.exp < Date.now() / 1000) {\n return null;\n }\n\n return decoded;\n}\n\nexport function decodeToken(token) {\n const [, body] = token.split('.');\n if (!body) return null;\n return JSON.parse(new TextDecoder().decode(base64UrlDecode(body)));\n}\n\nexport function createTransport(mode, options = {}) {\n if (mode === 'serverless') {\n return createServerlessTransport(options);\n }\n\n const baseUrl = mode === 'custom' ? options.server : 'https://api.openage.dev';\n\n return createServerTransport(baseUrl, options);\n}\n\nfunction createServerlessTransport(options) {\n return {\n async verify(payload) {\n const { estimatedAge, livenessOk } = payload;\n\n if (!livenessOk) {\n return { success: false, token: null };\n }\n\n const token = await createToken({\n estimatedAge,\n livenessOk: true,\n mode: 'serverless',\n });\n\n return { success: true, token };\n },\n close() {},\n };\n}\n\nfunction createServerTransport(baseUrl, options) {\n let session = null;\n let channel = null;\n\n return {\n async createSession() {\n const transports = [];\n if (typeof WebSocket !== 'undefined') {\n transports.push('websocket');\n }\n transports.push('poll');\n\n const response = await fetch(`${baseUrl}/api/session`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n sitekey: options.sitekey,\n action: options.action,\n supportedTransports: transports,\n }),\n });\n\n if (!response.ok) {\n throw new Error('Request failed');\n }\n\n session = await response.json();\n return session;\n },\n\n openChannel() {\n if (!session) {\n throw new Error('No session');\n }\n\n if (session.transport === 'websocket') {\n channel = createWsChannel(baseUrl, session.sessionId);\n } else {\n channel = createPollChannel(baseUrl, session.sessionId);\n }\n },\n\n async receive() {\n if (!channel) return null;\n return channel.receive();\n },\n\n async send(data) {\n if (!channel) return;\n return channel.send(data);\n },\n\n async sendAndReceive(data) {\n if (!channel) return null;\n return channel.sendAndReceive(data);\n },\n\n async verify(payload) {\n if (channel) {\n return this.verifyViaChannel(payload);\n }\n\n const response = await fetch(`${baseUrl}/verify`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n response: payload.token,\n sitekey: options.sitekey,\n action: options.action,\n }),\n });\n\n if (!response.ok) {\n return {\n success: false,\n token: null,\n };\n }\n\n return response.json();\n },\n\n async verifyViaChannel(payload) {\n await channel.send(payload);\n return channel.receive();\n },\n\n getSession() {\n return session;\n },\n\n close() {\n channel?.close();\n channel = null;\n session = null;\n },\n };\n}\n\nfunction createWsChannel(baseUrl, sessionId) {\n const wsUrl = baseUrl.replace(/^http/, 'ws').replace(/\\/$/, '');\n const url = `${wsUrl}/api/ws/${sessionId}`;\n const ws = new WebSocket(url);\n let pending = [];\n let ready = false;\n let closed = false;\n\n const waitReady = new Promise((resolve, reject) => {\n ws.onopen = () => {\n ready = true;\n resolve();\n };\n ws.onerror = () => {\n reject(new Error('Connection failed'));\n };\n });\n\n ws.onmessage = (event) => {\n const message = JSON.parse(event.data);\n const resolver = pending.shift();\n if (resolver) resolver(message);\n };\n\n ws.onclose = () => {\n closed = true;\n for (const resolver of pending) resolver(null);\n pending = [];\n };\n\n return {\n receive() {\n if (closed) return Promise.resolve(null);\n return new Promise((resolve) => {\n pending.push(resolve);\n });\n },\n async send(data) {\n await waitReady;\n ws.send(JSON.stringify(data));\n },\n async sendAndReceive(data) {\n await waitReady;\n ws.send(JSON.stringify(data));\n return this.receive();\n },\n close() {\n closed = true;\n ws.close();\n },\n };\n}\n\nfunction createPollChannel(baseUrl, sessionId) {\n return {\n async receive() {\n const response = await fetch(`${baseUrl}/api/poll/${sessionId}`);\n if (!response.ok) {\n throw new Error('Request failed');\n }\n return response.json();\n },\n async send(data) {\n const response = await fetch(`${baseUrl}/api/verify/${sessionId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n if (!response.ok) {\n throw new Error('Request failed');\n }\n },\n async sendAndReceive(data) {\n const response = await fetch(`${baseUrl}/api/verify/${sessionId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n if (!response.ok) {\n throw new Error('Request failed');\n }\n return response.json();\n },\n close() {},\n };\n}\n","let wasmModule = null;\nlet vmSession = null;\nlet challengeBundle = null;\nlet _faceData = null;\nlet _challengeParams = null;\nlet _bridge = null;\n\nfunction loadScript(url) {\n return new Promise((resolve, reject) => {\n const existing = document.querySelector(`script[src=\"${url}\"]`);\n if (existing) return resolve();\n\n const script = document.createElement('script');\n script.src = url;\n script.onload = resolve;\n script.onerror = () => {\n reject(new Error(`Failed to load ${url}`));\n };\n document.head.appendChild(script);\n });\n}\n\nexport async function initVM(session) {\n vmSession = session;\n\n await loadScript(session.wasmJs);\n\n const loaderModule = await import(session.loaderJs);\n wasmModule = await loaderModule.initModule(session.wasmBin);\n\n const initFn = session.exports.vm_init;\n const result = wasmModule[`_${initFn}`]();\n if (result !== 0) throw new Error('VM init failed');\n\n const bundleResponse = await fetch(session.challengeVmbc);\n challengeBundle = new Uint8Array(await bundleResponse.arrayBuffer());\n}\n\nexport async function decryptModel(session, modelId) {\n if (!wasmModule || !vmSession) {\n throw new Error('VM not loaded');\n }\n\n const modelInfo = session.models[modelId];\n if (!modelInfo) {\n throw new Error(`Unknown model: ${modelId}`);\n }\n\n const response = await fetch(modelInfo.url);\n if (!response.ok) {\n throw new Error(`Failed to fetch model: ${modelId}`);\n }\n\n const encrypted = new Uint8Array(await response.arrayBuffer());\n\n const decryptFn = session.exports.vm_decrypt_blob;\n const freeFn = session.exports.vm_free;\n const length = encrypted.length;\n\n const inputPtr = wasmModule._malloc(length);\n wasmModule.HEAPU8.set(encrypted, inputPtr);\n\n const outLenPtr = wasmModule._malloc(4);\n const outPtr = wasmModule[`_${decryptFn}`](inputPtr, length, outLenPtr);\n wasmModule._free(inputPtr);\n\n if (!outPtr) {\n wasmModule._free(outLenPtr);\n throw new Error(`Decryption failed: ${modelId}`);\n }\n\n const outLen = readU32(wasmModule, outLenPtr);\n wasmModule._free(outLenPtr);\n\n const result = new Uint8Array(outLen);\n result.set(wasmModule.HEAPU8.subarray(outPtr, outPtr + outLen));\n wasmModule[`_${freeFn}`](outPtr);\n return result.buffer;\n}\n\nfunction readU32(mod, ptr) {\n return (\n mod.HEAPU8[ptr] |\n (mod.HEAPU8[ptr + 1] << 8) |\n (mod.HEAPU8[ptr + 2] << 16) |\n (mod.HEAPU8[ptr + 3] << 24)\n );\n}\n\nfunction defineVmGlobal(name, getter) {\n try {\n delete window[name];\n } catch (_) {}\n Object.defineProperty(window, name, {\n get: getter,\n set() {},\n configurable: true,\n });\n}\n\nexport function setFaceData(faceData) {\n _faceData = faceData;\n defineVmGlobal('__vmFaceData', () => _faceData);\n}\n\nexport function setChallengeParams(params) {\n _challengeParams = params;\n defineVmGlobal('__vmChallenge', () => _challengeParams);\n}\n\nexport function registerBridge(bridge) {\n _bridge = Object.freeze({ ...bridge });\n defineVmGlobal('__vmBridge', () => _bridge);\n}\n\nexport function unregisterBridge() {\n _bridge = null;\n try {\n delete window.__vmBridge;\n } catch (_) {}\n}\n\nexport function executeChallenge() {\n if (!wasmModule || !challengeBundle) {\n throw new Error('VM not loaded');\n }\n\n const execFn = vmSession.exports.vm_exec_bytecode;\n const freeFn = vmSession.exports.vm_free;\n const length = challengeBundle.length;\n\n const inputPtr = wasmModule._malloc(length);\n wasmModule.HEAPU8.set(challengeBundle, inputPtr);\n\n const outLenPtr = wasmModule._malloc(4);\n const outPtr = wasmModule[`_${execFn}`](inputPtr, length, outLenPtr);\n wasmModule._free(inputPtr);\n\n if (!outPtr) {\n wasmModule._free(outLenPtr);\n const errFn = vmSession.exports.vm_last_error;\n let message = 'VM execution failed';\n if (errFn) {\n const errPtr = wasmModule[`_${errFn}`]();\n if (errPtr) {\n const detail = wasmModule.UTF8ToString(errPtr);\n if (detail) message = detail;\n }\n }\n throw new Error(message);\n }\n\n const outLen = readU32(wasmModule, outLenPtr);\n wasmModule._free(outLenPtr);\n\n const result = new Uint8Array(outLen);\n result.set(wasmModule.HEAPU8.subarray(outPtr, outPtr + outLen));\n wasmModule[`_${freeFn}`](outPtr);\n return result;\n}\n\nexport function toBase64(bytes) {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nexport function destroyVM() {\n if (!wasmModule || !vmSession) return;\n\n const destroyFn = vmSession.exports.vm_destroy;\n if (destroyFn) {\n wasmModule[`_${destroyFn}`]();\n }\n\n wasmModule = null;\n vmSession = null;\n challengeBundle = null;\n _faceData = null;\n _challengeParams = null;\n _bridge = null;\n\n for (const name of ['__vmFaceData', '__vmChallenge', '__vmBridge']) {\n try {\n delete window[name];\n } catch (_) {}\n }\n}\n\nexport function isVMLoaded() {\n return wasmModule !== null && vmSession !== null;\n}\n\nconst decryptedCache = new Map();\n\nasync function decryptAndCache(session, modelId) {\n if (decryptedCache.has(modelId)) {\n return decryptedCache.get(modelId);\n }\n\n const buffer = await decryptModel(session, modelId);\n decryptedCache.set(modelId, buffer);\n return buffer;\n}\n\nexport async function ensureModels(session, onProgress) {\n await decryptAndCache(session, 'mediapipe');\n onProgress?.(1);\n}\n\nexport async function getMediaPipeModelBuffer(session) {\n return decryptAndCache(session, 'mediapipe');\n}\n\nexport function clearModelCache() {\n decryptedCache.clear();\n}\n","import { loadVision, loadModel, initTracker, track, destroyTracker } from './face-tracker.js';\nimport { startPositioning } from './positioning.js';\nimport { initAgeEstimator, estimateAgeBurst } from './age-estimator.js';\nimport {\n createSession as createLivenessSession,\n processFrame,\n isComplete,\n isPassed,\n currentInstruction,\n currentTaskId,\n progress,\n} from './liveness.js';\nimport { createTransport } from './transport.js';\nimport {\n initVM,\n setFaceData,\n setChallengeParams,\n executeChallenge as execVM,\n registerBridge,\n unregisterBridge,\n destroyVM,\n toBase64,\n ensureModels,\n getMediaPipeModelBuffer,\n clearModelCache,\n} from './vm-client.js';\nimport {\n BURST_FRAMES,\n BURST_INTERVAL_MS,\n ERROR_STEP_SECONDS,\n MAX_RETRIES,\n MOTION_CAPTURE_MS,\n MOTION_SAMPLE_MS,\n} from './constants.js';\n\nlet stream = null;\nlet videoElement = null;\n\nconst CAMERA_CONSTRAINTS = {\n video: {\n facingMode: 'user',\n width: { ideal: 640 },\n height: { ideal: 480 },\n },\n};\n\nexport function startCamera(video) {\n return navigator.mediaDevices.getUserMedia(CAMERA_CONSTRAINTS).then((s) => {\n stream = s;\n video.srcObject = stream;\n videoElement = video;\n\n return new Promise((resolve) => {\n video.onloadedmetadata = () => {\n video.play();\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n });\n };\n });\n });\n}\n\nexport function captureFrame() {\n if (!videoElement) return null;\n\n const canvas = document.createElement('canvas');\n canvas.width = videoElement.videoWidth;\n canvas.height = videoElement.videoHeight;\n\n const context = canvas.getContext('2d');\n context.drawImage(videoElement, 0, 0);\n return canvas;\n}\n\nexport function stopCamera() {\n if (stream) {\n stream.getTracks().forEach((track) => track.stop());\n stream = null;\n }\n if (videoElement) {\n videoElement.srcObject = null;\n videoElement = null;\n }\n}\n\nexport function isCameraActive() {\n return stream !== null && videoElement !== null;\n}\n\nfunction computeAge(ageResults) {\n if (!ageResults || ageResults.length === 0) return null;\n\n const ages = ageResults.map((r) => r.age).sort((a, b) => a - b);\n\n const trimmed = ages.length >= 3 ? ages.slice(1, -1) : ages;\n\n return trimmed.reduce((s, a) => s + a, 0) / trimmed.length;\n}\n\nconst TASK_LABELS = {\n 'turn-left': 'Turn your head left',\n 'turn-right': 'Turn your head right',\n nod: 'Nod your head',\n 'blink-twice': 'Blink twice',\n 'move-closer': 'Move closer then back',\n};\n\nfunction sleep(ms) {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nfunction resolveChallengeErrorMessage(error) {\n const name = typeof error?.name === 'string' ? error.name : '';\n const message = typeof error?.message === 'string' ? error.message : String(error || '');\n const normalized = `${name} ${message}`.toLowerCase();\n\n if (\n name === 'NotFoundError' ||\n /request is not allowed by the user agent or the platform in the current context/.test(\n normalized\n ) ||\n /requested device not found|device not found|no camera|could not start video source/.test(\n normalized\n )\n ) {\n return 'No camera available. Plug in a camera and try again.';\n }\n\n if (\n name === 'NotAllowedError' ||\n name === 'PermissionDeniedError' ||\n /permission|camera access|access denied/.test(normalized)\n ) {\n return 'Camera access was blocked. Allow camera access and try again.';\n }\n\n if (/positioning timeout/.test(normalized)) {\n return 'Face positioning timed out. Reopen the check and try again.';\n }\n\n return 'Verification failed. Please try again.';\n}\n\nfunction isInlineLayout(widget) {\n return widget?.params?.layout === 'inline';\n}\n\nasync function showErrorStep(widget, error) {\n const message = resolveChallengeErrorMessage(error);\n\n if (isInlineLayout(widget)) {\n widget.showResult?.('retry', message);\n return;\n }\n\n if (!widget.popup) {\n widget.openPopup?.();\n }\n\n widget.showError?.(message);\n\n for (let seconds = ERROR_STEP_SECONDS; seconds > 0; seconds--) {\n if (!widget.popup) break;\n widget.setErrorCountdown?.(seconds);\n await sleep(1000);\n }\n\n widget.closePopup?.();\n widget.setState?.('retry');\n}\n\nasync function handleChallengeError(widget, emitter, error) {\n console.log('Error during challenge:', error);\n await showErrorStep(widget, error);\n emitter.emit('error', error, widget.id);\n widget.params.errorCallback?.(error);\n}\n\nexport async function runChallenge(widget, emitter) {\n const mode = widget.params.mode || 'serverless';\n\n if (mode !== 'serverless' && !widget.params.sitekey) {\n const err = new Error('Configuration error');\n widget.showResult?.('fail', 'Verification failed');\n emitter.emit('error', err, widget.id);\n widget.params.errorCallback?.(err);\n return;\n }\n\n if (mode === 'serverless') {\n return runServerless(widget, emitter);\n }\n return runServer(widget, emitter);\n}\n\nasync function runServerless(widget, emitter) {\n const params = widget.params;\n let retryCount = 0;\n let modelBuffer = null;\n\n try {\n widget.openPopup();\n widget.setHeroStatus('Loading…');\n\n await Promise.all([loadVision(), initAgeEstimator()]);\n\n modelBuffer = await loadModel();\n\n if (isInlineLayout(widget)) {\n await startCameraFlow(widget, modelBuffer);\n } else {\n widget.showReady();\n await waitForStart(widget);\n await startCameraFlow(widget, modelBuffer);\n }\n\n const transport = createTransport('serverless', params);\n\n const attempt = async () => {\n widget.showLiveness();\n widget.setInstruction('');\n widget.setVideoStatus('Verifying…');\n\n const session = createLivenessSession();\n await runLivenessLoop(widget.popupElements.video, session, widget);\n\n if (session.failed || !isPassed(session)) {\n return { outcome: 'retry' };\n }\n\n widget.setInstruction('Hold still…');\n widget.setVideoStatus('Processing…');\n const frames = await captureFrameBurst(BURST_FRAMES, BURST_INTERVAL_MS);\n\n const ageResults = await estimateAgeBurst(frames);\n const estimatedAge = computeAge(ageResults);\n\n const result = await transport.verify({\n estimatedAge,\n livenessOk: true,\n });\n\n return {\n outcome: result.token ? 'pass' : 'fail',\n token: result.token,\n };\n };\n\n let result = await attempt();\n\n while (result.outcome === 'retry' && retryCount < MAX_RETRIES) {\n retryCount++;\n widget.showResult('retry', 'Please try again');\n await waitForStart(widget);\n await startCameraFlow(widget, modelBuffer);\n result = await attempt();\n }\n\n cleanupLocal();\n emitResult(widget, emitter, result);\n } catch (error) {\n cleanupLocal();\n await handleChallengeError(widget, emitter, error);\n }\n}\n\nasync function runServer(widget, emitter) {\n const params = widget.params;\n\n try {\n widget.openPopup();\n widget.setHeroStatus('Connecting…');\n\n const transport = createTransport(params.mode, params);\n const session = await transport.createSession();\n\n widget.setHeroStatus('Loading…');\n await initVM(session);\n\n widget.setHeroStatus('Preparing…');\n await ensureModels(session, () => {});\n\n await loadVision();\n const buf = await getMediaPipeModelBuffer(session);\n await initTracker(buf);\n\n registerBridge({\n trackFace: () => {\n const video = widget.popupElements?.video;\n if (!video) return 'null';\n const r = track(video, performance.now());\n if (!r) return 'null';\n return JSON.stringify({\n ts: r.timestampMs ?? performance.now(),\n faceCount: r.faceCount,\n headPose: r.headPose || null,\n blendshapes: r.blendshapes || null,\n boundingBox: r.boundingBox || null,\n });\n },\n captureFrame: () => (captureFrame() ? 'true' : 'null'),\n });\n\n let video;\n\n if (isInlineLayout(widget)) {\n video = widget.showCamera();\n } else {\n widget.showReady();\n await waitForStart(widget);\n video = widget.showCamera();\n }\n\n widget.setVideoStatus('Requesting camera…');\n await startCamera(video);\n exposeMirrorVideo(video);\n\n widget.setVideoStatus('Position your face');\n await waitForPositioning(video, widget);\n\n widget.showLiveness();\n transport.openChannel();\n\n let challenge = await transport.receive();\n const rounds = session.rounds;\n\n for (let i = 0; i < rounds; i++) {\n if (!challenge) {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n if (challenge.type === 'verdict') {\n cleanupVM(transport);\n emitVerdict(widget, emitter, challenge);\n return;\n }\n\n if (challenge.type === 'timeout') {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n widget.setVideoStatus(`Step ${i + 1} of ${rounds}`);\n\n const task = challenge.token?.task;\n widget.setInstruction(TASK_LABELS[task] ?? 'Look at the camera');\n widget.setTask(task);\n widget.setProgress(i / rounds);\n\n const faceData = await captureMotion(widget);\n setFaceData(faceData);\n setChallengeParams(challenge.token);\n\n let vmOut;\n try {\n vmOut = execVM();\n } catch {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n const payload = {\n token: challenge.token,\n tokenSignature: challenge.tokenSignature,\n response: toBase64(vmOut),\n };\n\n const result = await transport.sendAndReceive(payload);\n\n if (!result) {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n if (result.complete) {\n cleanupVM(transport);\n emitVerdict(widget, emitter, result);\n return;\n }\n\n if (result.hint) {\n widget.setVideoStatus(result.hint);\n await sleep(1000);\n }\n\n challenge = result.nextChallenge || null;\n }\n\n cleanupVM(transport);\n } catch (error) {\n cleanupVM();\n await handleChallengeError(widget, emitter, error);\n }\n}\n\nfunction emitVerdict(widget, emitter, response) {\n const verdict = response?.verdict || response;\n const token = verdict?.token || null;\n const params = widget.params;\n\n if (token) {\n widget.token = token;\n widget.showResult('pass', 'Verified');\n emitter.emit('verified', token, widget.id);\n params.callback?.(token);\n return;\n }\n\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n params.errorCallback?.('failed');\n}\n\nasync function captureMotion(widget) {\n const video = widget.popupElements?.video;\n const history = [];\n const start = performance.now();\n\n while (performance.now() - start < MOTION_CAPTURE_MS) {\n const r = track(video, performance.now());\n if (r && r.faceCount === 1) {\n history.push({\n ts: r.timestampMs,\n headPose: r.headPose,\n blendshapes: r.blendshapes,\n boundingBox: r.boundingBox,\n });\n }\n await sleep(MOTION_SAMPLE_MS);\n }\n\n return {\n faceCount: history.length > 0 ? 1 : 0,\n motionHistory: history,\n };\n}\n\nfunction emitResult(widget, emitter, result) {\n const params = widget.params;\n\n if (result.outcome === 'pass') {\n widget.token = result.token || null;\n widget.showResult('pass', 'Verified');\n emitter.emit('verified', result.token, widget.id);\n params.callback?.(result.token);\n } else {\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n params.errorCallback?.('failed');\n }\n}\n\nfunction waitForStart(widget) {\n return new Promise((resolve) => {\n widget.onStartClick = () => {\n widget.onStartClick = null;\n resolve();\n };\n });\n}\n\nasync function startCameraFlow(widget, modelBuffer) {\n const video = widget.showCamera();\n widget.setVideoStatus('Requesting camera…');\n await startCamera(video);\n\n widget.setVideoStatus('Preparing…');\n await initTracker(modelBuffer);\n\n widget.setVideoStatus('Position your face');\n await waitForPositioning(video, widget);\n}\n\nfunction waitForPositioning(video, widget) {\n return new Promise((resolve, reject) => {\n const handle = startPositioning(video, {\n onStatus: (text) => widget.setVideoStatus(text),\n onReady: () => resolve(),\n });\n\n setTimeout(() => {\n handle.cancel();\n reject(new Error('Positioning timeout'));\n }, 30000);\n });\n}\n\nasync function runLivenessLoop(video, session, widget) {\n return new Promise((resolve) => {\n const loop = () => {\n const tracking = track(video, performance.now());\n if (tracking) processFrame(session, tracking);\n\n widget.setInstruction(currentInstruction(session) || 'Done');\n widget.setTask(currentTaskId(session));\n widget.setProgress(progress(session));\n widget.setVideoStatus(\n `Check ` +\n `${Math.min(session.currentIndex + 1, session.tasks.length)}` +\n ` of ${session.tasks.length}`\n );\n\n if (session.failed || isComplete(session)) {\n resolve();\n return;\n }\n\n requestAnimationFrame(loop);\n };\n\n requestAnimationFrame(loop);\n });\n}\n\nasync function captureFrameBurst(count, interval) {\n const frames = [];\n for (let i = 0; i < count; i++) {\n const frame = captureFrame();\n if (frame) frames.push(frame);\n if (i < count - 1) await sleep(interval);\n }\n return frames;\n}\n\nfunction cleanupLocal() {\n stopCamera();\n destroyTracker();\n}\n\nfunction cleanupVM(transport) {\n stopCamera();\n removeMirrorVideo();\n destroyTracker();\n unregisterBridge();\n destroyVM();\n clearModelCache();\n transport?.close();\n}\n\nfunction exposeMirrorVideo(source) {\n removeMirrorVideo();\n if (!source?.srcObject) return;\n const mirror = document.createElement('video');\n mirror.id = '__openage_mirror';\n mirror.srcObject = source.srcObject;\n mirror.autoplay = true;\n mirror.muted = true;\n mirror.playsInline = true;\n mirror.style.cssText =\n 'position:fixed;width:1px;height:1px;' + 'opacity:0;pointer-events:none;z-index:-1;';\n document.body.appendChild(mirror);\n}\n\nfunction removeMirrorVideo() {\n document.getElementById('__openage_mirror')?.remove();\n}\n","import { Widget, createModalWidget } from './widget.js';\nimport { runChallenge } from './challenge.js';\nimport { verifyToken, decodeToken } from './transport.js';\nimport { VERSION } from './constants.js';\n\nexport class EventEmitter {\n constructor() {\n this.listeners = new Map();\n }\n\n on(event, handler) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event).add(handler);\n return this;\n }\n\n off(event, handler) {\n const handlers = this.listeners.get(event);\n if (handlers) handlers.delete(handler);\n return this;\n }\n\n once(event, handler) {\n const wrapper = (...args) => {\n this.off(event, wrapper);\n handler(...args);\n };\n wrapper._original = handler;\n return this.on(event, wrapper);\n }\n\n emit(event, ...args) {\n const handlers = this.listeners.get(event);\n if (!handlers) return;\n for (const handler of [...handlers]) {\n handler(...args);\n }\n }\n\n removeAllListeners(event) {\n if (event) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n return this;\n }\n}\n\nconst emitter = new EventEmitter();\nconst widgets = new Map();\n\nfunction normalizeLayout(layout) {\n if (layout === 'inline' || layout === 'embed' || layout === 'embedded') {\n return 'inline';\n }\n\n return 'widget';\n}\n\nfunction normalizeParams(params) {\n const globalConfig = typeof window !== 'undefined' ? window.openage || {} : {};\n const layout = normalizeLayout(\n params.layout ?? params.display ?? globalConfig.layout ?? globalConfig.display\n );\n\n return {\n mode: 'serverless',\n theme: 'auto',\n size: 'normal',\n minAge: 18,\n ...globalConfig,\n ...params,\n layout,\n };\n}\n\nfunction startWidget(widget) {\n widget.onChallenge = () => {\n emitter.emit('opened', widget.id);\n runChallenge(widget, emitter);\n };\n\n if (widget.params.layout === 'inline') {\n widget.startChallenge();\n }\n}\n\nfunction render(container, params = {}) {\n const normalized = normalizeParams(params);\n const widget = new Widget(container, normalized);\n widgets.set(widget.id, widget);\n startWidget(widget);\n return widget.id;\n}\n\nfunction open(params = {}) {\n const normalized = normalizeParams(params);\n const widget = createModalWidget(normalized);\n widget.anchorElement = normalized.anchorElement || null;\n widgets.set(widget.id, widget);\n\n widget.onChallenge = () => {\n emitter.emit('opened', widget.id);\n runChallenge(widget, emitter);\n };\n\n widget.startChallenge();\n return widget.id;\n}\n\nfunction bind(element, params = {}) {\n const normalized = normalizeParams(params);\n const target = typeof element === 'string' ? document.querySelector(element) : element;\n\n if (!target) {\n throw new Error('OpenAge: element not found');\n }\n\n let isReplayingClick = false;\n let activeWidgetId = null;\n\n const replayTargetClick = () => {\n isReplayingClick = true;\n try {\n target.click();\n } finally {\n isReplayingClick = false;\n }\n };\n\n const clearActiveWidget = () => {\n activeWidgetId = null;\n };\n\n const handler = (event) => {\n if (isReplayingClick || activeWidgetId) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation?.();\n\n const widgetId = open({\n ...normalized,\n anchorElement: target,\n callback: (token) => {\n normalized.callback?.(token);\n clearActiveWidget();\n replayTargetClick();\n },\n errorCallback: (error) => {\n clearActiveWidget();\n normalized.errorCallback?.(error);\n },\n closeCallback: () => {\n clearActiveWidget();\n normalized.closeCallback?.();\n },\n });\n\n activeWidgetId = widgetId;\n\n return widgetId;\n };\n\n target.addEventListener('click', handler, true);\n\n return () => {\n target.removeEventListener('click', handler, true);\n };\n}\n\nfunction reset(widgetId) {\n widgets.get(widgetId)?.reset();\n}\n\nfunction remove(widgetId) {\n const widget = widgets.get(widgetId);\n if (!widget) return;\n widget.destroy();\n widgets.delete(widgetId);\n}\n\nfunction getToken(widgetId) {\n return widgets.get(widgetId)?.getToken() || null;\n}\n\nfunction execute(widgetId) {\n const widget = widgets.get(widgetId);\n if (!widget) return;\n widget.startChallenge();\n}\n\nfunction challenge(params = {}) {\n return new Promise((resolve, reject) => {\n open({\n ...params,\n callback: (token) => resolve(token),\n errorCallback: (error) => reject(typeof error === 'string' ? new Error(error) : error),\n closeCallback: () => reject(new Error('User dismissed')),\n });\n });\n}\n\nfunction on(event, handler) {\n emitter.on(event, handler);\n}\n\nfunction off(event, handler) {\n emitter.off(event, handler);\n}\n\nfunction once(event, handler) {\n emitter.once(event, handler);\n}\n\nfunction autoRender() {\n if (typeof document === 'undefined') return;\n\n const globalConfig = typeof window !== 'undefined' ? window.openage || {} : {};\n\n if (globalConfig.render === 'explicit') return;\n\n const elements = document.querySelectorAll('.openage');\n\n for (const element of elements) {\n const params = {\n sitekey: element.dataset.sitekey,\n theme: element.dataset.theme,\n size: element.dataset.size,\n action: element.dataset.action,\n mode: element.dataset.mode,\n layout: element.dataset.layout || element.dataset.display,\n server: element.dataset.server,\n };\n\n if (element.dataset.callback) {\n params.callback = (token) => {\n const fn = window[element.dataset.callback];\n if (typeof fn === 'function') fn(token);\n };\n }\n\n if (element.dataset.errorCallback) {\n params.errorCallback = (error) => {\n const fn = window[element.dataset.errorCallback];\n if (typeof fn === 'function') fn(error);\n };\n }\n\n if (element.dataset.expiredCallback) {\n params.expiredCallback = () => {\n const fn = window[element.dataset.expiredCallback];\n if (typeof fn === 'function') fn();\n };\n }\n\n if (element.dataset.bind) {\n const target = document.getElementById(element.dataset.bind);\n if (target) {\n bind(target, params);\n continue;\n }\n }\n\n render(element, params);\n }\n\n const onloadName = document.currentScript?.dataset?.onload;\n if (onloadName && typeof window[onloadName] === 'function') {\n window[onloadName]();\n }\n}\n\nif (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoRender);\n } else {\n autoRender();\n }\n}\n\nconst OpenAge = {\n render,\n open,\n bind,\n reset,\n remove,\n getToken,\n execute,\n challenge,\n on,\n off,\n once,\n verify: verifyToken,\n decode: decodeToken,\n version: VERSION,\n};\n\nexport default OpenAge;\nexport {\n render,\n open,\n bind,\n reset,\n remove,\n getToken,\n execute,\n challenge,\n on,\n off,\n once,\n verifyToken as verify,\n decodeToken as decode,\n VERSION as version,\n};\n"],"names":["loadScript","createLivenessSession","execVM"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;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"}
|