@tokenoftrust/storefront-runner 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/LICENSE +58 -0
  2. package/README.md +40 -0
  3. package/apps/storefront/.dev.vars.example +41 -0
  4. package/apps/storefront/.env.example +24 -0
  5. package/apps/storefront/astro.config.mjs +245 -0
  6. package/apps/storefront/env.d.ts +155 -0
  7. package/apps/storefront/lib/ensure-preview-reconcile-secret.sh +31 -0
  8. package/apps/storefront/lib/resolve-cf-token.sh +48 -0
  9. package/apps/storefront/lib/resolve-tot-credentials.sh +69 -0
  10. package/apps/storefront/migrations/0000_baseline.sql +54 -0
  11. package/apps/storefront/migrations/0001_products_fts.sql +9 -0
  12. package/apps/storefront/migrations/README.md +54 -0
  13. package/apps/storefront/migrations/meta/0000_snapshot.json +347 -0
  14. package/apps/storefront/migrations/meta/0001_snapshot.json +347 -0
  15. package/apps/storefront/migrations/meta/_journal.json +20 -0
  16. package/apps/storefront/package.json +41 -0
  17. package/apps/storefront/public/brand/northwind-logo-dark.svg +4 -0
  18. package/apps/storefront/public/brand/northwind-logo-light.svg +4 -0
  19. package/apps/storefront/public/brand/northwind-og.svg +13 -0
  20. package/apps/storefront/public/favicon.svg +5 -0
  21. package/apps/storefront/public/js/dashboard-team.js +147 -0
  22. package/apps/storefront/public/js/dashboard-vendor-search.js +115 -0
  23. package/apps/storefront/src/components/Badge.astro +34 -0
  24. package/apps/storefront/src/components/Breadcrumbs.astro +45 -0
  25. package/apps/storefront/src/components/CollectionCard.astro +56 -0
  26. package/apps/storefront/src/components/EmptyState.astro +35 -0
  27. package/apps/storefront/src/components/Img.astro +68 -0
  28. package/apps/storefront/src/components/ProductCard.astro +228 -0
  29. package/apps/storefront/src/components/Section.astro +39 -0
  30. package/apps/storefront/src/components/Seo.astro +70 -0
  31. package/apps/storefront/src/components/WidgetFrame.astro +34 -0
  32. package/apps/storefront/src/components/auth/AuthBadge.astro +44 -0
  33. package/apps/storefront/src/components/chrome/AnnouncementBar.astro +108 -0
  34. package/apps/storefront/src/components/chrome/MegaMenu.astro +26 -0
  35. package/apps/storefront/src/components/chrome/NavDropdown.astro +116 -0
  36. package/apps/storefront/src/components/chrome/SiteFooter.astro +181 -0
  37. package/apps/storefront/src/components/chrome/SiteHeader.astro +181 -0
  38. package/apps/storefront/src/components/chrome/UtilityNav.astro +79 -0
  39. package/apps/storefront/src/components/commerce/FoxyLoader.astro +23 -0
  40. package/apps/storefront/src/components/commerce/PriceDisplay.astro +91 -0
  41. package/apps/storefront/src/components/commerce/ProductCarousel.astro +197 -0
  42. package/apps/storefront/src/components/commerce/ProductGrid.astro +75 -0
  43. package/apps/storefront/src/components/commerce/RatingStars.astro +58 -0
  44. package/apps/storefront/src/components/compliance/NicotineWarning.astro +33 -0
  45. package/apps/storefront/src/components/home/Hero.astro +164 -0
  46. package/apps/storefront/src/components/islands/AgeGate.tsx +105 -0
  47. package/apps/storefront/src/components/islands/ImageGallery.tsx +237 -0
  48. package/apps/storefront/src/components/islands/IsolatedAgeGate.tsx +73 -0
  49. package/apps/storefront/src/components/islands/MobileNav.tsx +239 -0
  50. package/apps/storefront/src/components/islands/QuickView.tsx +138 -0
  51. package/apps/storefront/src/components/islands/RecentlyViewed.tsx +122 -0
  52. package/apps/storefront/src/components/islands/SavedList.tsx +99 -0
  53. package/apps/storefront/src/components/islands/SearchTypeahead.tsx +248 -0
  54. package/apps/storefront/src/components/islands/VariantSelector.tsx +378 -0
  55. package/apps/storefront/src/components/marketing/CardGrid.astro +72 -0
  56. package/apps/storefront/src/components/marketing/CodeSample.astro +20 -0
  57. package/apps/storefront/src/components/marketing/CtaBand.astro +24 -0
  58. package/apps/storefront/src/components/marketing/Faq.astro +37 -0
  59. package/apps/storefront/src/components/marketing/Integrations.astro +63 -0
  60. package/apps/storefront/src/components/marketing/MarketingBlocks.astro +53 -0
  61. package/apps/storefront/src/components/marketing/MarketingCtas.astro +48 -0
  62. package/apps/storefront/src/components/marketing/MarketingHero.astro +72 -0
  63. package/apps/storefront/src/components/marketing/ProofStrip.astro +37 -0
  64. package/apps/storefront/src/components/marketing/SplitCompare.astro +53 -0
  65. package/apps/storefront/src/components/marketing/Steps.astro +36 -0
  66. package/apps/storefront/src/components/marketing/Testimonials.astro +38 -0
  67. package/apps/storefront/src/components/marketing/TrustBar.astro +22 -0
  68. package/apps/storefront/src/components/nav/Footer.astro +148 -0
  69. package/apps/storefront/src/components/nav/Header.astro +190 -0
  70. package/apps/storefront/src/components/plp/ActiveFilters.astro +79 -0
  71. package/apps/storefront/src/components/plp/FacetSidebar.astro +146 -0
  72. package/apps/storefront/src/components/plp/Pagination.astro +99 -0
  73. package/apps/storefront/src/components/plp/SortSelect.astro +64 -0
  74. package/apps/storefront/src/config/devTenants.ts +16 -0
  75. package/apps/storefront/src/config/kvTenantResolver.ts +87 -0
  76. package/apps/storefront/src/config/resolver.ts +46 -0
  77. package/apps/storefront/src/config/tenants.ts +193 -0
  78. package/apps/storefront/src/layouts/Layout.astro +303 -0
  79. package/apps/storefront/src/lib/analytics/index.ts +47 -0
  80. package/apps/storefront/src/lib/auth/brokerAssertion.ts +136 -0
  81. package/apps/storefront/src/lib/auth/devAuth.ts +90 -0
  82. package/apps/storefront/src/lib/auth/gatePage.ts +81 -0
  83. package/apps/storefront/src/lib/auth/identityToken.ts +341 -0
  84. package/apps/storefront/src/lib/auth/loginGate.ts +107 -0
  85. package/apps/storefront/src/lib/auth/route.ts +146 -0
  86. package/apps/storefront/src/lib/auth/session.ts +203 -0
  87. package/apps/storefront/src/lib/auth/totAccessClient.ts +503 -0
  88. package/apps/storefront/src/lib/basePath.ts +41 -0
  89. package/apps/storefront/src/lib/cfImage.ts +55 -0
  90. package/apps/storefront/src/lib/chrome/model.ts +65 -0
  91. package/apps/storefront/src/lib/colors.ts +97 -0
  92. package/apps/storefront/src/lib/content-edit/client.ts +230 -0
  93. package/apps/storefront/src/lib/content-edit/index.ts +14 -0
  94. package/apps/storefront/src/lib/content-edit/route.ts +25 -0
  95. package/apps/storefront/src/lib/content-edit/types.ts +19 -0
  96. package/apps/storefront/src/lib/cspStaticHashes.ts +24 -0
  97. package/apps/storefront/src/lib/d1/catalog.ts +289 -0
  98. package/apps/storefront/src/lib/dashboard/staffAdmission.ts +43 -0
  99. package/apps/storefront/src/lib/dashboard/staffVendorAccess.ts +449 -0
  100. package/apps/storefront/src/lib/dashboard/tenantSelection.ts +136 -0
  101. package/apps/storefront/src/lib/dashboard/vendorQuery.ts +61 -0
  102. package/apps/storefront/src/lib/demoGate.ts +113 -0
  103. package/apps/storefront/src/lib/dev/ai-widget-client.js +127 -0
  104. package/apps/storefront/src/lib/dev/cliSignInCode.ts +132 -0
  105. package/apps/storefront/src/lib/diag/redact.ts +20 -0
  106. package/apps/storefront/src/lib/edgeCache.ts +128 -0
  107. package/apps/storefront/src/lib/email/magicLinkInviteEmail.ts +62 -0
  108. package/apps/storefront/src/lib/env.ts +60 -0
  109. package/apps/storefront/src/lib/fixtures/sampleProducts.ts +130 -0
  110. package/apps/storefront/src/lib/format.ts +29 -0
  111. package/apps/storefront/src/lib/foxyCommerce.ts +49 -0
  112. package/apps/storefront/src/lib/imageAttrs.ts +55 -0
  113. package/apps/storefront/src/lib/jsonld.ts +136 -0
  114. package/apps/storefront/src/lib/maintenance.ts +71 -0
  115. package/apps/storefront/src/lib/memoryKv.ts +32 -0
  116. package/apps/storefront/src/lib/messaging/messagesClient.ts +143 -0
  117. package/apps/storefront/src/lib/placeholder.ts +99 -0
  118. package/apps/storefront/src/lib/previewReload.ts +125 -0
  119. package/apps/storefront/src/lib/rawMarketingHtml.ts +133 -0
  120. package/apps/storefront/src/lib/search/index.ts +74 -0
  121. package/apps/storefront/src/lib/sections.ts +129 -0
  122. package/apps/storefront/src/lib/securityHeaders.ts +31 -0
  123. package/apps/storefront/src/lib/storyblok/content-model.ts +289 -0
  124. package/apps/storefront/src/lib/storyblok/provider.ts +524 -0
  125. package/apps/storefront/src/lib/tenantRouting.ts +91 -0
  126. package/apps/storefront/src/lib/tot/ToTClient.ts +177 -0
  127. package/apps/storefront/src/lib/tot/d1Client.ts +62 -0
  128. package/apps/storefront/src/lib/tot/query.ts +187 -0
  129. package/apps/storefront/src/lib/tot/totClientInterface.ts +30 -0
  130. package/apps/storefront/src/lib/url.ts +119 -0
  131. package/apps/storefront/src/lib/wishlist.ts +63 -0
  132. package/apps/storefront/src/middleware/index.ts +413 -0
  133. package/apps/storefront/src/pages/404.astro +61 -0
  134. package/apps/storefront/src/pages/[...slug].astro +90 -0
  135. package/apps/storefront/src/pages/api/auth/logout.ts +21 -0
  136. package/apps/storefront/src/pages/api/auth/magic-exchange.ts +107 -0
  137. package/apps/storefront/src/pages/api/auth/send.ts +85 -0
  138. package/apps/storefront/src/pages/api/auth/verify.ts +135 -0
  139. package/apps/storefront/src/pages/api/cache-purge.ts +44 -0
  140. package/apps/storefront/src/pages/api/content-edit/ai-edit.ts +64 -0
  141. package/apps/storefront/src/pages/api/csp-report.ts +25 -0
  142. package/apps/storefront/src/pages/api/dashboard/enter-vendor.ts +124 -0
  143. package/apps/storefront/src/pages/api/dashboard/vendor-search.ts +120 -0
  144. package/apps/storefront/src/pages/api/dev/cli-signin-code.ts +44 -0
  145. package/apps/storefront/src/pages/api/newsletter.ts +104 -0
  146. package/apps/storefront/src/pages/api/request-access.ts +172 -0
  147. package/apps/storefront/src/pages/auth/login.astro +149 -0
  148. package/apps/storefront/src/pages/auth/magic.astro +105 -0
  149. package/apps/storefront/src/pages/capabilities.astro +292 -0
  150. package/apps/storefront/src/pages/collections/[handle].astro +154 -0
  151. package/apps/storefront/src/pages/collections/index.astro +59 -0
  152. package/apps/storefront/src/pages/dashboard/[appDomain]/index.astro +100 -0
  153. package/apps/storefront/src/pages/dashboard/[appDomain]/team.astro +154 -0
  154. package/apps/storefront/src/pages/dashboard/index.astro +160 -0
  155. package/apps/storefront/src/pages/dev.astro +653 -0
  156. package/apps/storefront/src/pages/index.astro +290 -0
  157. package/apps/storefront/src/pages/llms.txt.ts +92 -0
  158. package/apps/storefront/src/pages/products/[handle].astro +443 -0
  159. package/apps/storefront/src/pages/robots.txt.ts +24 -0
  160. package/apps/storefront/src/pages/saved.astro +35 -0
  161. package/apps/storefront/src/pages/search.astro +150 -0
  162. package/apps/storefront/src/pages/sitemap.xml.ts +78 -0
  163. package/apps/storefront/src/pages/style-guide/[tenant]/[theme].astro +646 -0
  164. package/apps/storefront/src/pages/style-guide/[tenant]/index.astro +85 -0
  165. package/apps/storefront/src/pages/style-guide/index.astro +94 -0
  166. package/apps/storefront/src/pages/tenants/[id]/[...path].ts +57 -0
  167. package/apps/storefront/src/styles/global.css +277 -0
  168. package/apps/storefront/src/themes/reference.ts +61 -0
  169. package/apps/storefront/src/themes/schema.ts +111 -0
  170. package/apps/storefront/src/themes/tenants/index.ts +51 -0
  171. package/apps/storefront/tsconfig.json +16 -0
  172. package/apps/storefront/vitest.config.ts +22 -0
  173. package/apps/storefront/wrangler.toml +175 -0
  174. package/package.json +23 -0
  175. package/packages/public-runtime/LICENSE +58 -0
  176. package/packages/public-runtime/package.json +22 -0
  177. package/packages/public-runtime/src/binary-path.ts +68 -0
  178. package/packages/public-runtime/src/capabilities.ts +89 -0
  179. package/packages/public-runtime/src/catalog-api.ts +81 -0
  180. package/packages/public-runtime/src/catalog-d1.ts +192 -0
  181. package/packages/public-runtime/src/csp.ts +109 -0
  182. package/packages/public-runtime/src/customization-preview.ts +197 -0
  183. package/packages/public-runtime/src/customization-reconcile.ts +63 -0
  184. package/packages/public-runtime/src/customization-runtime.ts +157 -0
  185. package/packages/public-runtime/src/customization-scripts.ts +64 -0
  186. package/packages/public-runtime/src/customization-versioning.ts +95 -0
  187. package/packages/public-runtime/src/foxy.ts +184 -0
  188. package/packages/public-runtime/src/index.ts +30 -0
  189. package/packages/public-runtime/src/product.ts +159 -0
  190. package/packages/public-runtime/src/search.ts +45 -0
  191. package/packages/public-runtime/src/tenant-assets.ts +444 -0
  192. package/packages/public-runtime/src/tenant.ts +243 -0
  193. package/packages/public-runtime/tsconfig.json +8 -0
  194. package/packages/public-runtime/vitest.config.ts +8 -0
  195. package/pnpm-workspace.yaml +7 -0
  196. package/scripts/build/copy-tenant-assets.mjs +69 -0
  197. package/scripts/tot-dev.mjs +439 -0
  198. package/tenants/bigdvapor/content/blog.json +52 -0
  199. package/tenants/bigdvapor/content/chrome.html +149 -0
  200. package/tenants/bigdvapor/content/chrome.json +47 -0
  201. package/tenants/bigdvapor/content/home.html +463 -0
  202. package/tenants/bigdvapor/content/home.json +73 -0
  203. package/tenants/bigdvapor/content/pages/about.json +5 -0
  204. package/tenants/bigdvapor/content/pages/privacy.json +6 -0
  205. package/tenants/bigdvapor/content/pages/shipping-returns.json +6 -0
  206. package/tenants/bigdvapor/content/pages-html/blogs/news.html +86 -0
  207. package/tenants/bigdvapor/content/pages-html/pages/about-us.html +106 -0
  208. package/tenants/bigdvapor/content/pages-html/pages/contact-us.html +61 -0
  209. package/tenants/bigdvapor/content/pages-html/pages/privacy-policy.html +72 -0
  210. package/tenants/bigdvapor/content/pages-html/pages/shipping-returns.html +172 -0
  211. package/tenants/bigdvapor/content/themes/bigd-navy.json +109 -0
  212. package/tenants/bigdvapor/public/img/brands/adjust-vape-disposable.png +0 -0
  213. package/tenants/bigdvapor/public/img/brands/again-vape-disposable.png +0 -0
  214. package/tenants/bigdvapor/public/img/brands/al-fakher-vape-disposable.png +0 -0
  215. package/tenants/bigdvapor/public/img/brands/arro-vape-disposable.png +0 -0
  216. package/tenants/bigdvapor/public/img/brands/cookies-vape-disposable.png +0 -0
  217. package/tenants/bigdvapor/public/img/brands/core-vape-disposable.png +0 -0
  218. package/tenants/bigdvapor/public/img/brands/cyclone-vape-disposable.png +0 -0
  219. package/tenants/bigdvapor/public/img/brands/dinner-lady-vape-disposable.png +0 -0
  220. package/tenants/bigdvapor/public/img/brands/extre-bar-vape-disposable.png +0 -0
  221. package/tenants/bigdvapor/public/img/brands/fifty-bar-vape-disposable.jpg +0 -0
  222. package/tenants/bigdvapor/public/img/brands/firerose-vape-disposable.jpg +0 -0
  223. package/tenants/bigdvapor/public/img/brands/flavor-beast-vape-disposable.jpg +0 -0
  224. package/tenants/bigdvapor/public/img/brands/foger-vape-disposable.png +0 -0
  225. package/tenants/bigdvapor/public/img/brands/kk-energy-vape-disposable.png +0 -0
  226. package/tenants/bigdvapor/public/img/brands/kumi-vape-disposable.png +0 -0
  227. package/tenants/bigdvapor/public/img/brands/lost-vape-dispoable.png +0 -0
  228. package/tenants/bigdvapor/public/img/brands/melo-labs-vape-disposable.png +0 -0
  229. package/tenants/bigdvapor/public/img/brands/mixo-vape-disposable.webp +0 -0
  230. package/tenants/bigdvapor/public/img/brands/one-tank-vape-disposable.jpg +0 -0
  231. package/tenants/bigdvapor/public/img/brands/oxbar-vape-disposable.webp +0 -0
  232. package/tenants/bigdvapor/public/img/brands/pillow-talk-vape-disposable.jpg +0 -0
  233. package/tenants/bigdvapor/public/img/brands/pod-king-vape-disposable.jpg +0 -0
  234. package/tenants/bigdvapor/public/img/brands/raz-vape-disposable.png +0 -0
  235. package/tenants/bigdvapor/public/img/hero-texas.jpg +0 -0
  236. package/tenants/bigdvapor/public/img/og.jpg +0 -0
  237. package/tenants/bigdvapor/public/img/pages/AdobeStock_202106312_web.jpg +0 -0
  238. package/tenants/bigdvapor/public/img/pages/CREW_web.jpg +0 -0
  239. package/tenants/bigdvapor/public/img/pages/Hero-Image.jpg +0 -0
  240. package/tenants/bigdvapor/public/img/tiles/adjust.png +0 -0
  241. package/tenants/bigdvapor/public/img/tiles/again.png +0 -0
  242. package/tenants/bigdvapor/public/img/tiles/al-fakher.png +0 -0
  243. package/tenants/bigdvapor/public/img/tiles/arro.png +0 -0
  244. package/tenants/bigdvapor/public/img/tiles/cookies.png +0 -0
  245. package/tenants/bigdvapor/public/img/tiles/core.png +0 -0
  246. package/tenants/bigdvapor/public/img/tiles/cyclone.png +0 -0
  247. package/tenants/bigdvapor/public/img/tiles/disposables.svg +23 -0
  248. package/tenants/bigdvapor/public/logo-wordmark.png +0 -0
  249. package/tenants/bigdvapor/public/pages/home.css +118 -0
  250. package/tenants/bigdvapor/public/pages/mkt.css +185 -0
  251. package/tenants/bigdvapor/public/pages/page.css +148 -0
  252. package/tenants/bigdvapor/public/themes/bigd-navy.css +73 -0
  253. package/tenants/bigdvapor/theme.json +12 -0
  254. package/tenants/giantvapes/content/chrome.html +152 -0
  255. package/tenants/giantvapes/content/chrome.json +94 -0
  256. package/tenants/giantvapes/content/home.html +194 -0
  257. package/tenants/giantvapes/content/home.json +50 -0
  258. package/tenants/giantvapes/content/pages/about.json +10 -0
  259. package/tenants/giantvapes/content/pages/privacy.json +6 -0
  260. package/tenants/giantvapes/content/pages/shipping-returns.json +6 -0
  261. package/tenants/giantvapes/content/pages-html/blogs/news.html +68 -0
  262. package/tenants/giantvapes/content/pages-html/pages/about-us.html +95 -0
  263. package/tenants/giantvapes/content/pages-html/pages/contact-us.html +68 -0
  264. package/tenants/giantvapes/content/pages-html/pages/privacy-policy.html +65 -0
  265. package/tenants/giantvapes/content/pages-html/pages/shipping-returns.html +77 -0
  266. package/tenants/giantvapes/content/themes/giant-navy.json +73 -0
  267. package/tenants/giantvapes/public/img/hero-suicide-bunny.jpg +0 -0
  268. package/tenants/giantvapes/public/img/hero.webp +0 -0
  269. package/tenants/giantvapes/public/img/og.jpg +0 -0
  270. package/tenants/giantvapes/public/logo-wordmark.png +0 -0
  271. package/tenants/giantvapes/public/pages/home.css +120 -0
  272. package/tenants/giantvapes/public/pages/mkt.css +185 -0
  273. package/tenants/giantvapes/public/pages/page.css +155 -0
  274. package/tenants/giantvapes/public/themes/giant-navy.css +76 -0
  275. package/tenants/giantvapes/theme.json +39 -0
  276. package/tenants/home/content/chrome.json +11 -0
  277. package/tenants/home/content/home.html +304 -0
  278. package/tenants/home/content/home.json +13 -0
  279. package/tenants/home/public/js/storefront.js +210 -0
  280. package/tenants/home/public/logo-wordmark.png +0 -0
  281. package/tenants/home/public/pages/storefront.css +212 -0
  282. package/tenants/home/theme.json +6 -0
  283. package/tenants/tokenoftrust/.tot/config.json +9 -0
  284. package/tenants/tokenoftrust/content/chrome.json +55 -0
  285. package/tenants/tokenoftrust/content/home.html +723 -0
  286. package/tenants/tokenoftrust/content/home.json +233 -0
  287. package/tenants/tokenoftrust/content/pages-html/careers.html +231 -0
  288. package/tenants/tokenoftrust/content/pages-html/company.html +275 -0
  289. package/tenants/tokenoftrust/content/pages-html/contact/contact-sales.html +188 -0
  290. package/tenants/tokenoftrust/content/pages-html/contact/startup-apply.html +206 -0
  291. package/tenants/tokenoftrust/content/pages-html/contact.html +178 -0
  292. package/tenants/tokenoftrust/content/pages-html/industries/adult-content-age-verification.html +286 -0
  293. package/tenants/tokenoftrust/content/pages-html/industries/cannabis.html +277 -0
  294. package/tenants/tokenoftrust/content/pages-html/pact-act-pricing.html +289 -0
  295. package/tenants/tokenoftrust/content/pages-html/pricing.html +483 -0
  296. package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-estimation.html +278 -0
  297. package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-gate.html +279 -0
  298. package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-verification.html +265 -0
  299. package/tenants/tokenoftrust/content/pages-html/product/age-assurance.html +173 -0
  300. package/tenants/tokenoftrust/content/pages-html/product/compliance/aml.html +214 -0
  301. package/tenants/tokenoftrust/content/pages-html/product/compliance/pact-act.html +226 -0
  302. package/tenants/tokenoftrust/content/pages-html/product/fraud-prevention.html +254 -0
  303. package/tenants/tokenoftrust/content/pages-html/product/social-profile-verification.html +212 -0
  304. package/tenants/tokenoftrust/content/pages-html/product/tax/excise-tax.html +213 -0
  305. package/tenants/tokenoftrust/content/pages-html/product/verification/aml.html +259 -0
  306. package/tenants/tokenoftrust/content/pages-html/product/verification/biometric-selfie.html +305 -0
  307. package/tenants/tokenoftrust/content/pages-html/product/verification/coverage.html +254 -0
  308. package/tenants/tokenoftrust/content/pages-html/product/verification/document-verification.html +306 -0
  309. package/tenants/tokenoftrust/content/pages-html/product/verification/electronic-identity-verification.html +304 -0
  310. package/tenants/tokenoftrust/content/pages-html/product/verification/government-id-verification.html +308 -0
  311. package/tenants/tokenoftrust/content/pages-html/product/verification.html +183 -0
  312. package/tenants/tokenoftrust/content/pages-html/product.html +228 -0
  313. package/tenants/tokenoftrust/content/pages-html/resources/integrations/bigcommerce-integration.html +220 -0
  314. package/tenants/tokenoftrust/content/pages-html/resources/integrations/shopify-integration.html +221 -0
  315. package/tenants/tokenoftrust/content/pages-html/resources/integrations/wordpress.html +220 -0
  316. package/tenants/tokenoftrust/content/pages-html/resources/integrations.html +172 -0
  317. package/tenants/tokenoftrust/content/pages-html/resources/refer-a-friend-program.html +317 -0
  318. package/tenants/tokenoftrust/content/pages-html/resources.html +177 -0
  319. package/tenants/tokenoftrust/content/pages-html/reviews.html +273 -0
  320. package/tenants/tokenoftrust/content/pages-html/solutions.html +292 -0
  321. package/tenants/tokenoftrust/content/pages-html/vlp-alcohol.html +289 -0
  322. package/tenants/tokenoftrust/content/pages-html/vlp-cigars-and-tobacco.html +286 -0
  323. package/tenants/tokenoftrust/content/pages-html/vlp-firearm-accessories.html +267 -0
  324. package/tenants/tokenoftrust/content/pages-html/vlp-peptides.html +273 -0
  325. package/tenants/tokenoftrust/content/themes/tot-navy.json +88 -0
  326. package/tenants/tokenoftrust/public/favicon.png +0 -0
  327. package/tenants/tokenoftrust/public/logo-icon.png +0 -0
  328. package/tenants/tokenoftrust/public/logo-wordmark.png +0 -0
  329. package/tenants/tokenoftrust/public/pages/company.css +108 -0
  330. package/tenants/tokenoftrust/public/pages/home.css +457 -0
  331. package/tenants/tokenoftrust/public/pages/mkt.css +482 -0
  332. package/tenants/tokenoftrust/public/pages/pricing.css +214 -0
  333. package/tenants/tokenoftrust/public/pages/solutions.css +66 -0
  334. package/tenants/tokenoftrust/public/themes/tot-navy-1.0.0.css +136 -0
  335. package/tenants/tokenoftrust/public/themes/tot-navy.css +358 -0
  336. package/tenants/tokenoftrust/theme.json +31 -0
  337. package/tsconfig.base.json +20 -0
@@ -0,0 +1,278 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <link rel="icon" type="image/png" href="/tenants/tokenoftrust/favicon.png">
7
+ <title>Facial Age Estimation Software for Compliance | Token of Trust</title>
8
+ <meta name="description" content="Estimate a customer's age in seconds from a quick, private face scan. No data stored, compliant with privacy laws, and easy to integrate with Shopify, WooCommerce and more.">
9
+ <link rel="canonical" href="https://tokenoftrust.com/product/age-assurance/age-estimation/">
10
+ <meta name="robots" content="index,follow,max-image-preview:large">
11
+ <meta property="og:type" content="website">
12
+ <meta property="og:site_name" content="Token of Trust">
13
+ <meta property="og:title" content="Facial Age Estimation Software — Token of Trust">
14
+ <meta property="og:description" content="Estimate age in seconds from a quick, private face scan — no data stored and compliant with privacy laws.">
15
+ <meta property="og:url" content="https://tokenoftrust.com/product/age-assurance/age-estimation/">
16
+ <meta name="twitter:card" content="summary_large_image">
17
+ <meta name="twitter:title" content="Token of Trust — Facial Age Estimation">
18
+ <meta name="twitter:description" content="Estimate age in seconds from a quick, private face scan.">
19
+ <script type="application/ld+json">
20
+ {
21
+ "@context": "https://schema.org",
22
+ "@graph": [
23
+ {
24
+ "@type": "Organization",
25
+ "@id": "https://tokenoftrust.com/#org",
26
+ "name": "Token of Trust",
27
+ "url": "https://tokenoftrust.com/",
28
+ "logo": "/tenants/tokenoftrust/logo-icon.png",
29
+ "slogan": "Real Customers. Less Fraud. More Trust."
30
+ },
31
+ {
32
+ "@type": "WebPage",
33
+ "name": "Facial Age Estimation Software — Token of Trust",
34
+ "url": "https://tokenoftrust.com/product/age-assurance/age-estimation/"
35
+ }
36
+ ]
37
+ }
38
+ </script>
39
+ <link rel="stylesheet" href="/tenants/tokenoftrust/themes/tot-navy.css">
40
+ <link rel="stylesheet" href="/tenants/tokenoftrust/pages/mkt.css">
41
+ </head>
42
+ <body>
43
+ <a class="skip-link" href="#main">Skip to main content</a>
44
+
45
+ <header class="site">
46
+ <div class="container nav-row">
47
+ <a class="brand" href="/" aria-label="Token of Trust home"><img src="/tenants/tokenoftrust/logo-wordmark.png" alt="Token of Trust" width="156" height="34" style="height:34px;width:auto;display:block"></a>
48
+ <nav class="primary" id="primaryNav" aria-label="Primary">
49
+ <ul>
50
+ <li><a class="active" href="/product/" aria-current="page">Platform</a></li>
51
+ <li><a href="/solutions/">Industries</a></li>
52
+ <li><a href="/company/">Company</a></li>
53
+ <li><a href="/resources/">Resources</a></li>
54
+ <li><a href="/pricing/">Pricing</a></li>
55
+ <li><a href="https://app.tokenoftrust.com">Login</a></li>
56
+ </ul>
57
+ </nav>
58
+ <div class="nav-cta">
59
+ <a class="btn btn-line" href="/contact/">Book Demo</a>
60
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
61
+ <button class="hamburger" id="hamburger" aria-label="Toggle navigation menu" aria-expanded="false" aria-controls="primaryNav"><span></span><span></span><span></span></button>
62
+ </div>
63
+ </div>
64
+ </header>
65
+
66
+ <main id="main">
67
+ <nav class="crumbs" aria-label="Breadcrumb">
68
+ <div class="container">
69
+ <a href="/">Home</a><span class="sep">›</span>
70
+ <a href="/product/">Platform</a><span class="sep">›</span>
71
+ <a href="/product/age-assurance/">Age Assurance</a><span class="sep">›</span>
72
+ <span aria-current="page">Age Estimation</span>
73
+ </div>
74
+ </nav>
75
+
76
+ <section class="hero" aria-labelledby="hero-heading">
77
+ <div class="container">
78
+ <span class="eyebrow"><span class="dot"></span>Age Assurance</span>
79
+ <h1 id="hero-heading">Facial age estimation <span class="grad">in seconds.</span></h1>
80
+ <p class="lede">
81
+ Our secure facial age detector keeps children safe with fast, private age checks that comply with
82
+ privacy laws — estimate age in seconds, with no data stored.
83
+ </p>
84
+ <div class="cta-row">
85
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
86
+ <a class="btn btn-line" href="/contact/">Contact Sales</a>
87
+ </div>
88
+ </div>
89
+ </section>
90
+
91
+ <div class="proof">
92
+ <div class="container">
93
+ <span><b>Fast &amp; private:</b> estimate age in seconds, no data stored</span><span class="sep"></span>
94
+ <span><b>Protects children:</b> compliant with privacy laws</span><span class="sep"></span>
95
+ <span><b>Easy integration:</b> Shopify, WooCommerce and more</span>
96
+ </div>
97
+ </div>
98
+
99
+ <section aria-labelledby="feat-heading">
100
+ <div class="container">
101
+ <div class="center reveal">
102
+ <span class="kicker">Why facial age estimation</span>
103
+ <h2 id="feat-heading">Accurate, instant, and privacy-first</h2>
104
+ <p class="section-lede">A quick face scan estimates age without documents or manual review — streamlining
105
+ onboarding while protecting users.</p>
106
+ </div>
107
+ <div class="feature-grid three">
108
+ <article class="feat-card accent reveal">
109
+ <h3>Accurate across ethnicities</h3>
110
+ <p>Highly accurate age estimation designed to perform across ethnicities.</p>
111
+ </article>
112
+ <article class="feat-card reveal">
113
+ <h3>Instant results, no humans</h3>
114
+ <p>No manual reviewers — just fast, automated results in seconds.</p>
115
+ </article>
116
+ <article class="feat-card reveal">
117
+ <h3>Streamlined user journey</h3>
118
+ <p>Keep onboarding frictionless with a check that takes only seconds.</p>
119
+ </article>
120
+ </div>
121
+ </div>
122
+ </section>
123
+
124
+ <section aria-labelledby="how-heading" class="alt-bg">
125
+ <div class="container">
126
+ <div class="center reveal">
127
+ <span class="kicker">How facial age estimation works</span>
128
+ <h2 id="how-heading">Three steps, about five minutes to set up</h2>
129
+ </div>
130
+ <div class="steps three reveal">
131
+ <div class="step"><span class="num">1</span><h3>Quick face scan</h3><p>The user looks into their device's
132
+ camera and the face-age detector captures the check.</p></div>
133
+ <div class="step"><span class="num">2</span><h3>Instant age estimate</h3><p>Token of Trust analyzes the
134
+ face and estimates the user's age.</p></div>
135
+ <div class="step"><span class="num">3</span><h3>Seamless age checks</h3><p>Use the estimated age to control
136
+ access or personalize content.</p></div>
137
+ </div>
138
+ </div>
139
+ </section>
140
+
141
+ <section aria-labelledby="uses-heading">
142
+ <div class="container">
143
+ <div class="center reveal">
144
+ <span class="kicker">Where it's used</span>
145
+ <h2 id="uses-heading">Protect users and ensure compliance across industries</h2>
146
+ </div>
147
+ <div class="feature-grid two reveal">
148
+ <article class="feat-card">
149
+ <h3>eCommerce prescreen</h3>
150
+ <p>Quickly pre-screen users for age-restricted products before checkout.</p>
151
+ </article>
152
+ <article class="feat-card">
153
+ <h3>Online gaming</h3>
154
+ <p>Estimate user age before granting access to age-rated games.</p>
155
+ </article>
156
+ <article class="feat-card">
157
+ <h3>Social media platforms</h3>
158
+ <p>Estimate user age during registration and when accessing age-restricted features.</p>
159
+ </article>
160
+ <article class="feat-card">
161
+ <h3>Streaming services</h3>
162
+ <p>Personalize content recommendations based on a user's estimated age.</p>
163
+ </article>
164
+ </div>
165
+ </div>
166
+ </section>
167
+
168
+ <section aria-labelledby="privacy-heading" class="alt-bg">
169
+ <div class="container">
170
+ <div class="reassure-row two">
171
+ <div class="reassurance reveal">
172
+ <h3>Verify more customers</h3>
173
+ <p>Instant, automated estimation means fewer drop-offs and more completed, compliant sessions.</p>
174
+ </div>
175
+ <div class="reassurance reveal">
176
+ <h3>Fostering trust through privacy</h3>
177
+ <p>Age is estimated in seconds with no data stored, keeping checks compliant with privacy laws. We will
178
+ never sell your data — GDPR · CCPA · PIPEDA.</p>
179
+ </div>
180
+ </div>
181
+ </div>
182
+ </section>
183
+
184
+ <section aria-labelledby="faq-heading">
185
+ <div class="container">
186
+ <div class="center reveal">
187
+ <span class="kicker">FAQ</span>
188
+ <h2 id="faq-heading">Frequently asked questions</h2>
189
+ </div>
190
+ <div class="faq reveal">
191
+ <details><summary>How fast is facial age estimation?</summary><p>90% of our verifications take 5 seconds
192
+ or less.</p></details>
193
+ <details><summary>Is any data stored?</summary><p>No data is stored — age is estimated in seconds and the
194
+ check is compliant with privacy laws.</p></details>
195
+ <details><summary>Is it accurate across ethnicities?</summary><p>Yes — the estimation is designed to be
196
+ highly accurate across ethnicities.</p></details>
197
+ <details><summary>Which platforms does it integrate with?</summary><p>It works with Shopify, WooCommerce,
198
+ and more.</p></details>
199
+ </div>
200
+ </div>
201
+ </section>
202
+
203
+ <section aria-labelledby="siblings-heading" class="alt-bg">
204
+ <div class="container">
205
+ <div class="center reveal">
206
+ <span class="kicker">More age assurance</span>
207
+ <h2 id="siblings-heading">Explore the rest of age assurance</h2>
208
+ </div>
209
+ <div class="feature-grid two reveal">
210
+ <article class="feat-card">
211
+ <h3><a class="card-link" href="/product/age-assurance/age-verification/">Age verification</a></h3>
212
+ <p>Confirm age without friction — most checks clear in under 5 seconds.</p>
213
+ </article>
214
+ <article class="feat-card">
215
+ <h3><a class="card-link" href="/product/age-assurance/age-gate/">Age gate</a></h3>
216
+ <p>Add a compliant age gate to your website and storefront across leading platforms.</p>
217
+ </article>
218
+ </div>
219
+ </div>
220
+ </section>
221
+
222
+ <section aria-labelledby="cta-heading">
223
+ <div class="container">
224
+ <div class="cta-band reveal">
225
+ <span class="kicker">Free trial · No credit card needed</span>
226
+ <h2 id="cta-heading">Ready to safely acquire new customers?</h2>
227
+ <p>Add fast, private age estimation to your flow. Start free, or talk to sales.</p>
228
+ <div class="cta-row cta-center">
229
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
230
+ <a class="btn btn-line" href="/contact/">Contact Sales</a>
231
+ </div>
232
+ </div>
233
+ </div>
234
+ </section>
235
+ </main>
236
+
237
+ <footer class="site">
238
+ <div class="container">
239
+ <div class="foot-grid">
240
+ <div>
241
+ <a class="brand" href="/" aria-label="Token of Trust home"><img src="/tenants/tokenoftrust/logo-wordmark.png" alt="Token of Trust" width="156" height="34" style="height:34px;width:auto;display:block"></a>
242
+ <p class="foot-note">Customer verification and compliance for regulated ecommerce. 256-bit SSL. We will
243
+ NEVER sell your data. GDPR · CCPA · PIPEDA.</p>
244
+ </div>
245
+ <nav aria-label="Platform footer"><h3>Platform</h3><ul>
246
+ <li><a href="/product/verification/">Identity Verification</a></li>
247
+ <li><a href="/product/age-assurance/">Age Assurance</a></li>
248
+ <li><a href="/product/fraud-prevention/">Fraud Prevention</a></li>
249
+ <li><a href="/product/">All products</a></li>
250
+ </ul></nav>
251
+ <nav aria-label="Industries footer"><h3>Industries</h3><ul>
252
+ <li><a href="/solutions/">All industries</a></li>
253
+ <li><a href="/vlp-cigars-and-tobacco/">Tobacco &amp; Vape</a></li>
254
+ <li><a href="/vlp-alcohol/">Wine &amp; Spirits</a></li>
255
+ <li><a href="/industries/cannabis/">Cannabis</a></li>
256
+ </ul></nav>
257
+ <nav aria-label="Company footer"><h3>Company</h3><ul>
258
+ <li><a href="/company/">Company</a></li>
259
+ <li><a href="/careers/">Careers</a></li>
260
+ <li><a href="/pricing/">Pricing</a></li>
261
+ <li><a href="/contact/">Contact Sales</a></li>
262
+ </ul></nav>
263
+ </div>
264
+ <p class="copyright">© 2026 Token of Trust®. All rights reserved.</p>
265
+ </div>
266
+ </footer>
267
+
268
+ <script>
269
+ (function(){
270
+ var burger = document.getElementById('hamburger');
271
+ var nav = document.getElementById('primaryNav');
272
+ burger.addEventListener('click', function(){ var open = nav.classList.toggle('open'); burger.setAttribute('aria-expanded', open ? 'true' : 'false'); });
273
+ var io = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); }, {threshold:.12});
274
+ document.querySelectorAll('.reveal').forEach(function(el){ io.observe(el); });
275
+ })();
276
+ </script>
277
+ </body>
278
+ </html>
@@ -0,0 +1,279 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <link rel="icon" type="image/png" href="/tenants/tokenoftrust/favicon.png">
7
+ <title>Age Gate for Shopify, BigCommerce &amp; Others | Token of Trust</title>
8
+ <meta name="description" content="Set an age gate for your website that verifies age without friction. Automated checks work with leading platforms like Shopify, with 90% cleared in under 5 seconds.">
9
+ <link rel="canonical" href="https://tokenoftrust.com/product/age-assurance/age-gate/">
10
+ <meta name="robots" content="index,follow,max-image-preview:large">
11
+ <meta property="og:type" content="website">
12
+ <meta property="og:site_name" content="Token of Trust">
13
+ <meta property="og:title" content="Age Gate for Websites — Token of Trust">
14
+ <meta property="og:description" content="Set an age gate that verifies age without friction and works with leading platforms like Shopify.">
15
+ <meta property="og:url" content="https://tokenoftrust.com/product/age-assurance/age-gate/">
16
+ <meta name="twitter:card" content="summary_large_image">
17
+ <meta name="twitter:title" content="Token of Trust — Age Gate">
18
+ <meta name="twitter:description" content="Set an age gate that verifies age without friction.">
19
+ <script type="application/ld+json">
20
+ {
21
+ "@context": "https://schema.org",
22
+ "@graph": [
23
+ {
24
+ "@type": "Organization",
25
+ "@id": "https://tokenoftrust.com/#org",
26
+ "name": "Token of Trust",
27
+ "url": "https://tokenoftrust.com/",
28
+ "logo": "/tenants/tokenoftrust/logo-icon.png",
29
+ "slogan": "Real Customers. Less Fraud. More Trust."
30
+ },
31
+ {
32
+ "@type": "WebPage",
33
+ "name": "Age Gate for Websites — Token of Trust",
34
+ "url": "https://tokenoftrust.com/product/age-assurance/age-gate/"
35
+ }
36
+ ]
37
+ }
38
+ </script>
39
+ <link rel="stylesheet" href="/tenants/tokenoftrust/themes/tot-navy.css">
40
+ <link rel="stylesheet" href="/tenants/tokenoftrust/pages/mkt.css">
41
+ </head>
42
+ <body>
43
+ <a class="skip-link" href="#main">Skip to main content</a>
44
+
45
+ <header class="site">
46
+ <div class="container nav-row">
47
+ <a class="brand" href="/" aria-label="Token of Trust home"><img src="/tenants/tokenoftrust/logo-wordmark.png" alt="Token of Trust" width="156" height="34" style="height:34px;width:auto;display:block"></a>
48
+ <nav class="primary" id="primaryNav" aria-label="Primary">
49
+ <ul>
50
+ <li><a class="active" href="/product/" aria-current="page">Platform</a></li>
51
+ <li><a href="/solutions/">Industries</a></li>
52
+ <li><a href="/company/">Company</a></li>
53
+ <li><a href="/resources/">Resources</a></li>
54
+ <li><a href="/pricing/">Pricing</a></li>
55
+ <li><a href="https://app.tokenoftrust.com">Login</a></li>
56
+ </ul>
57
+ </nav>
58
+ <div class="nav-cta">
59
+ <a class="btn btn-line" href="/contact/">Book Demo</a>
60
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
61
+ <button class="hamburger" id="hamburger" aria-label="Toggle navigation menu" aria-expanded="false" aria-controls="primaryNav"><span></span><span></span><span></span></button>
62
+ </div>
63
+ </div>
64
+ </header>
65
+
66
+ <main id="main">
67
+ <nav class="crumbs" aria-label="Breadcrumb">
68
+ <div class="container">
69
+ <a href="/">Home</a><span class="sep">›</span>
70
+ <a href="/product/">Platform</a><span class="sep">›</span>
71
+ <a href="/product/age-assurance/">Age Assurance</a><span class="sep">›</span>
72
+ <span aria-current="page">Age Gate</span>
73
+ </div>
74
+ </nav>
75
+
76
+ <section class="hero" aria-labelledby="hero-heading">
77
+ <div class="container">
78
+ <span class="eyebrow"><span class="dot"></span>Age Assurance</span>
79
+ <h1 id="hero-heading">Set an age gate <span class="grad">for your website.</span></h1>
80
+ <p class="lede">
81
+ Verify age without friction. Automated age verification operates seamlessly with leading platforms
82
+ like Shopify — helping you comply with minimum-age legal standards.
83
+ </p>
84
+ <div class="cta-row">
85
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
86
+ <a class="btn btn-line" href="/contact/">Contact Sales</a>
87
+ </div>
88
+ </div>
89
+ </section>
90
+
91
+ <div class="proof">
92
+ <div class="container">
93
+ <span><b>90%</b> of verifications clear in under 5 seconds</span><span class="sep"></span>
94
+ <span>Coverage in <b>251 countries</b></span><span class="sep"></span>
95
+ <span>Install in about <b>20 minutes</b></span>
96
+ </div>
97
+ </div>
98
+
99
+ <section aria-labelledby="feat-heading">
100
+ <div class="container">
101
+ <div class="center reveal">
102
+ <span class="kicker">Why an age gate</span>
103
+ <h2 id="feat-heading">Verify age without friction</h2>
104
+ <p class="section-lede">Build age-verification flows on what you already know, and comply with minimum-age
105
+ legal standards across leading platforms.</p>
106
+ </div>
107
+ <div class="feature-grid three">
108
+ <article class="feat-card accent reveal">
109
+ <h3>Verification coverage in 251 countries</h3>
110
+ <p>Gate access for customers worldwide, with coverage spanning 251 countries.</p>
111
+ </article>
112
+ <article class="feat-card reveal">
113
+ <h3>Automated decisions</h3>
114
+ <p>Most checks resolve automatically — 90% clear in under 5 seconds.</p>
115
+ </article>
116
+ <article class="feat-card reveal">
117
+ <h3>Fast-track loyal customers</h3>
118
+ <p>Recognize customers who have verified before and let them pass straight through.</p>
119
+ </article>
120
+ </div>
121
+ </div>
122
+ </section>
123
+
124
+ <section aria-labelledby="how-heading" class="alt-bg">
125
+ <div class="container">
126
+ <div class="center reveal">
127
+ <span class="kicker">How it works</span>
128
+ <h2 id="how-heading">Four steps behind the gate</h2>
129
+ </div>
130
+ <div class="steps three reveal">
131
+ <div class="step"><span class="num">1</span><h3>Submit details</h3><p>The customer submits their details
132
+ to Token of Trust at the gate.</p></div>
133
+ <div class="step"><span class="num">2</span><h3>Fast-track returning buyers</h3><p>Loyal customers with
134
+ a prior verification are fast-tracked.</p></div>
135
+ <div class="step"><span class="num">3</span><h3>New users get a data check</h3><p>New users undergo a data
136
+ check to confirm their age.</p></div>
137
+ <div class="step"><span class="num">4</span><h3>Verify and proceed</h3><p>Once age is confirmed, the customer
138
+ passes the gate and continues.</p></div>
139
+ </div>
140
+ </div>
141
+ </section>
142
+
143
+ <section aria-labelledby="fraud-heading">
144
+ <div class="container">
145
+ <div class="center reveal">
146
+ <span class="kicker">Protecting your business</span>
147
+ <h2 id="fraud-heading">Fraud prevention solutions</h2>
148
+ </div>
149
+ <div class="feature-grid two reveal">
150
+ <article class="feat-card">
151
+ <h3>Chargebacks &amp; friendly fraud</h3>
152
+ <p>Reduce disputes by confirming who is really behind a transaction.</p>
153
+ </article>
154
+ <article class="feat-card">
155
+ <h3>Return abuse</h3>
156
+ <p>Curb repeat abuse of return policies with verified customer identity.</p>
157
+ </article>
158
+ <article class="feat-card">
159
+ <h3>Account takeover (ATO)</h3>
160
+ <p>Add assurance at sensitive moments to help stop account takeover.</p>
161
+ </article>
162
+ <article class="feat-card">
163
+ <h3>Promotional abuse</h3>
164
+ <p>Protect promotions from misuse by confirming genuine customers.</p>
165
+ </article>
166
+ </div>
167
+ </div>
168
+ </section>
169
+
170
+ <section aria-labelledby="privacy-heading" class="alt-bg">
171
+ <div class="container">
172
+ <div class="reassure-row two">
173
+ <div class="reassurance reveal">
174
+ <h3>Verify more customers</h3>
175
+ <p>Automated decisions and returning-customer fast-tracking mean fewer drop-offs at the gate and more
176
+ completed, compliant sessions.</p>
177
+ </div>
178
+ <div class="reassurance reveal">
179
+ <h3>Fostering trust through privacy</h3>
180
+ <p>Verification runs on Token of Trust's secure platform. We will never sell your data — GDPR · CCPA
181
+ · PIPEDA.</p>
182
+ </div>
183
+ </div>
184
+ </div>
185
+ </section>
186
+
187
+ <section aria-labelledby="faq-heading">
188
+ <div class="container">
189
+ <div class="center reveal">
190
+ <span class="kicker">FAQ</span>
191
+ <h2 id="faq-heading">Frequently asked questions</h2>
192
+ </div>
193
+ <div class="faq reveal">
194
+ <details><summary>Which platforms does the age gate support?</summary><p>Automated age verification works
195
+ with leading platforms like Shopify, BigCommerce, and others.</p></details>
196
+ <details><summary>How fast are checks?</summary><p>90% of verifications are cleared in less than 5 seconds.</p></details>
197
+ <details><summary>How long does install take?</summary><p>Installation takes about 20 minutes on supported
198
+ platforms.</p></details>
199
+ <details><summary>How wide is coverage?</summary><p>Verification coverage spans 251 countries.</p></details>
200
+ </div>
201
+ </div>
202
+ </section>
203
+
204
+ <section aria-labelledby="siblings-heading" class="alt-bg">
205
+ <div class="container">
206
+ <div class="center reveal">
207
+ <span class="kicker">More age assurance</span>
208
+ <h2 id="siblings-heading">Explore the rest of age assurance</h2>
209
+ </div>
210
+ <div class="feature-grid two reveal">
211
+ <article class="feat-card">
212
+ <h3><a class="card-link" href="/product/age-assurance/age-verification/">Age verification</a></h3>
213
+ <p>Confirm age without friction — most checks clear in under 5 seconds.</p>
214
+ </article>
215
+ <article class="feat-card">
216
+ <h3><a class="card-link" href="/product/age-assurance/age-estimation/">Facial age estimation</a></h3>
217
+ <p>Estimate age in seconds from a quick, private face scan — no documents required.</p>
218
+ </article>
219
+ </div>
220
+ </div>
221
+ </section>
222
+
223
+ <section aria-labelledby="cta-heading">
224
+ <div class="container">
225
+ <div class="cta-band reveal">
226
+ <span class="kicker">Free trial · No credit card needed</span>
227
+ <h2 id="cta-heading">Ready to safely acquire new customers?</h2>
228
+ <p>Add a compliant age gate that keeps customers moving. Start free, or talk to sales.</p>
229
+ <div class="cta-row cta-center">
230
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
231
+ <a class="btn btn-line" href="/contact/">Contact Sales</a>
232
+ </div>
233
+ </div>
234
+ </div>
235
+ </section>
236
+ </main>
237
+
238
+ <footer class="site">
239
+ <div class="container">
240
+ <div class="foot-grid">
241
+ <div>
242
+ <a class="brand" href="/" aria-label="Token of Trust home"><img src="/tenants/tokenoftrust/logo-wordmark.png" alt="Token of Trust" width="156" height="34" style="height:34px;width:auto;display:block"></a>
243
+ <p class="foot-note">Customer verification and compliance for regulated ecommerce. 256-bit SSL. We will
244
+ NEVER sell your data. GDPR · CCPA · PIPEDA.</p>
245
+ </div>
246
+ <nav aria-label="Platform footer"><h3>Platform</h3><ul>
247
+ <li><a href="/product/verification/">Identity Verification</a></li>
248
+ <li><a href="/product/age-assurance/">Age Assurance</a></li>
249
+ <li><a href="/product/fraud-prevention/">Fraud Prevention</a></li>
250
+ <li><a href="/product/">All products</a></li>
251
+ </ul></nav>
252
+ <nav aria-label="Industries footer"><h3>Industries</h3><ul>
253
+ <li><a href="/solutions/">All industries</a></li>
254
+ <li><a href="/vlp-cigars-and-tobacco/">Tobacco &amp; Vape</a></li>
255
+ <li><a href="/vlp-alcohol/">Wine &amp; Spirits</a></li>
256
+ <li><a href="/industries/cannabis/">Cannabis</a></li>
257
+ </ul></nav>
258
+ <nav aria-label="Company footer"><h3>Company</h3><ul>
259
+ <li><a href="/company/">Company</a></li>
260
+ <li><a href="/careers/">Careers</a></li>
261
+ <li><a href="/pricing/">Pricing</a></li>
262
+ <li><a href="/contact/">Contact Sales</a></li>
263
+ </ul></nav>
264
+ </div>
265
+ <p class="copyright">© 2026 Token of Trust®. All rights reserved.</p>
266
+ </div>
267
+ </footer>
268
+
269
+ <script>
270
+ (function(){
271
+ var burger = document.getElementById('hamburger');
272
+ var nav = document.getElementById('primaryNav');
273
+ burger.addEventListener('click', function(){ var open = nav.classList.toggle('open'); burger.setAttribute('aria-expanded', open ? 'true' : 'false'); });
274
+ var io = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); }, {threshold:.12});
275
+ document.querySelectorAll('.reveal').forEach(function(el){ io.observe(el); });
276
+ })();
277
+ </script>
278
+ </body>
279
+ </html>