@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,265 @@
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 Verification System — Online Age Checks | Token of Trust</title>
8
+ <meta name="description" content="Verify customer age without friction. 90% of verifications clear in under 5 seconds, with coverage in 251 countries and quick install for Shopify, WooCommerce and more.">
9
+ <link rel="canonical" href="https://tokenoftrust.com/product/age-assurance/age-verification/">
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 Verification System — Token of Trust">
14
+ <meta property="og:description" content="Verify customer age without friction. 90% of verifications clear in under 5 seconds, with coverage in 251 countries.">
15
+ <meta property="og:url" content="https://tokenoftrust.com/product/age-assurance/age-verification/">
16
+ <meta name="twitter:card" content="summary_large_image">
17
+ <meta name="twitter:title" content="Token of Trust — Age Verification">
18
+ <meta name="twitter:description" content="Verify customer age without friction — most checks clear in under 5 seconds.">
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 Verification System — Token of Trust",
34
+ "url": "https://tokenoftrust.com/product/age-assurance/age-verification/"
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 Verification</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">Age verification <span class="grad">without friction.</span></h1>
80
+ <p class="lede">
81
+ Comply with minimum-age legal standards while keeping checkout fast. Token of Trust confirms a
82
+ customer's age from data you already have — and steps up to a document check only when it's needed.
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>Compatible with <b>Shopify, WooCommerce</b> 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 Token of Trust</span>
103
+ <h2 id="feat-heading">Verify age without slowing customers down</h2>
104
+ <p class="section-lede">Build age-verification flows on what you already know, and reserve heavier checks
105
+ for the moments that actually call for them.</p>
106
+ </div>
107
+ <div class="feature-grid three">
108
+ <article class="feat-card accent reveal">
109
+ <h3>Set a minimum age for orders</h3>
110
+ <p>Enforce minimum-age legal standards on age-restricted products, with rules that match your jurisdictions.</p>
111
+ </article>
112
+ <article class="feat-card reveal">
113
+ <h3>Coverage in 251 countries</h3>
114
+ <p>Verify customers around the world, with age-data verification available across dozens of countries.</p>
115
+ </article>
116
+ <article class="feat-card reveal">
117
+ <h3>Automated decisions</h3>
118
+ <p>Most verifications resolve automatically — 90% clear in under 5 seconds — so buyers keep moving.</p>
119
+ </article>
120
+ <article class="feat-card reveal">
121
+ <h3>Preset verification flows</h3>
122
+ <p>Choose from preset flows or configure your own to balance assurance against friction.</p>
123
+ </article>
124
+ <article class="feat-card reveal">
125
+ <h3>Fast-track loyal customers</h3>
126
+ <p>Recognize customers who have verified before and let them skip straight through.</p>
127
+ </article>
128
+ <article class="feat-card reveal">
129
+ <h3>Quick install</h3>
130
+ <p>Complete installation within about 20 minutes on supported platforms like Shopify and WooCommerce.</p>
131
+ </article>
132
+ </div>
133
+ </div>
134
+ </section>
135
+
136
+ <section aria-labelledby="how-heading" class="alt-bg">
137
+ <div class="container">
138
+ <div class="center reveal">
139
+ <span class="kicker">How it works</span>
140
+ <h2 id="how-heading">Four steps to a verified customer</h2>
141
+ </div>
142
+ <div class="steps three reveal">
143
+ <div class="step"><span class="num">1</span><h3>Submit details</h3><p>The customer submits their details
144
+ to Token of Trust during checkout or onboarding.</p></div>
145
+ <div class="step"><span class="num">2</span><h3>Fast-track returning buyers</h3><p>Loyal customers with
146
+ a prior verification are fast-tracked without repeating the process.</p></div>
147
+ <div class="step"><span class="num">3</span><h3>Check new users</h3><p>New users are verified against age
148
+ data — or, when needed, a document scan.</p></div>
149
+ <div class="step"><span class="num">4</span><h3>Verify and proceed</h3><p>Once age is confirmed, the customer
150
+ continues seamlessly.</p></div>
151
+ </div>
152
+ </div>
153
+ </section>
154
+
155
+ <section aria-labelledby="privacy-heading">
156
+ <div class="container">
157
+ <div class="reassure-row two">
158
+ <div class="reassurance reveal">
159
+ <h3>Verify more customers</h3>
160
+ <p>Automated decisions and returning-customer fast-tracking mean fewer drop-offs and more completed,
161
+ compliant checkouts.</p>
162
+ </div>
163
+ <div class="reassurance reveal">
164
+ <h3>Fostering trust through privacy</h3>
165
+ <p>Verification is handled on Token of Trust's secure platform. We will never sell your data — GDPR ·
166
+ CCPA · PIPEDA.</p>
167
+ </div>
168
+ </div>
169
+ </div>
170
+ </section>
171
+
172
+ <section aria-labelledby="faq-heading" class="alt-bg">
173
+ <div class="container">
174
+ <div class="center reveal">
175
+ <span class="kicker">FAQ</span>
176
+ <h2 id="faq-heading">Frequently asked questions</h2>
177
+ </div>
178
+ <div class="faq reveal">
179
+ <details><summary>How fast is age verification?</summary><p>90% of verifications are cleared in less than
180
+ 5 seconds.</p></details>
181
+ <details><summary>Which platforms are supported?</summary><p>Token of Trust is compatible with Shopify,
182
+ WooCommerce, and more, with installation completed within about 20 minutes on supported platforms.</p></details>
183
+ <details><summary>How wide is coverage?</summary><p>Verification coverage spans 251 countries.</p></details>
184
+ <details><summary>What if a customer can't be verified from data?</summary><p>You can configure flows that
185
+ step up to a document check only when it's needed.</p></details>
186
+ </div>
187
+ </div>
188
+ </section>
189
+
190
+ <section aria-labelledby="siblings-heading">
191
+ <div class="container">
192
+ <div class="center reveal">
193
+ <span class="kicker">More age assurance</span>
194
+ <h2 id="siblings-heading">Explore the rest of age assurance</h2>
195
+ </div>
196
+ <div class="feature-grid two reveal">
197
+ <article class="feat-card">
198
+ <h3><a class="card-link" href="/product/age-assurance/age-estimation/">Facial age estimation</a></h3>
199
+ <p>Estimate age in seconds from a quick, private face scan — no documents required.</p>
200
+ </article>
201
+ <article class="feat-card">
202
+ <h3><a class="card-link" href="/product/age-assurance/age-gate/">Age gate</a></h3>
203
+ <p>Add a compliant age gate to your website and storefront across leading platforms.</p>
204
+ </article>
205
+ </div>
206
+ </div>
207
+ </section>
208
+
209
+ <section class="alt-bg" aria-labelledby="cta-heading">
210
+ <div class="container">
211
+ <div class="cta-band reveal">
212
+ <span class="kicker">Free trial · No credit card needed</span>
213
+ <h2 id="cta-heading">Ready to safely acquire new customers?</h2>
214
+ <p>Start verifying age without adding friction. Start free, or talk to sales.</p>
215
+ <div class="cta-row cta-center">
216
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
217
+ <a class="btn btn-line" href="/contact/">Contact Sales</a>
218
+ </div>
219
+ </div>
220
+ </div>
221
+ </section>
222
+ </main>
223
+
224
+ <footer class="site">
225
+ <div class="container">
226
+ <div class="foot-grid">
227
+ <div>
228
+ <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>
229
+ <p class="foot-note">Customer verification and compliance for regulated ecommerce. 256-bit SSL. We will
230
+ NEVER sell your data. GDPR · CCPA · PIPEDA.</p>
231
+ </div>
232
+ <nav aria-label="Platform footer"><h3>Platform</h3><ul>
233
+ <li><a href="/product/verification/">Identity Verification</a></li>
234
+ <li><a href="/product/age-assurance/">Age Assurance</a></li>
235
+ <li><a href="/product/fraud-prevention/">Fraud Prevention</a></li>
236
+ <li><a href="/product/">All products</a></li>
237
+ </ul></nav>
238
+ <nav aria-label="Industries footer"><h3>Industries</h3><ul>
239
+ <li><a href="/solutions/">All industries</a></li>
240
+ <li><a href="/vlp-cigars-and-tobacco/">Tobacco &amp; Vape</a></li>
241
+ <li><a href="/vlp-alcohol/">Wine &amp; Spirits</a></li>
242
+ <li><a href="/industries/cannabis/">Cannabis</a></li>
243
+ </ul></nav>
244
+ <nav aria-label="Company footer"><h3>Company</h3><ul>
245
+ <li><a href="/company/">Company</a></li>
246
+ <li><a href="/careers/">Careers</a></li>
247
+ <li><a href="/pricing/">Pricing</a></li>
248
+ <li><a href="/contact/">Contact Sales</a></li>
249
+ </ul></nav>
250
+ </div>
251
+ <p class="copyright">© 2026 Token of Trust®. All rights reserved.</p>
252
+ </div>
253
+ </footer>
254
+
255
+ <script>
256
+ (function(){
257
+ var burger = document.getElementById('hamburger');
258
+ var nav = document.getElementById('primaryNav');
259
+ burger.addEventListener('click', function(){ var open = nav.classList.toggle('open'); burger.setAttribute('aria-expanded', open ? 'true' : 'false'); });
260
+ var io = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); }, {threshold:.12});
261
+ document.querySelectorAll('.reveal').forEach(function(el){ io.observe(el); });
262
+ })();
263
+ </script>
264
+ </body>
265
+ </html>
@@ -0,0 +1,173 @@
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 Assurance — Age Verification, Estimation &amp; Gate | Token of Trust</title>
8
+ <meta name="description" content="Meet age laws without wrecking conversion — age verification, privacy-first age estimation, and a customizable age gate for age-restricted ecommerce.">
9
+ <link rel="canonical" href="https://tokenoftrust.com/product/age-assurance/">
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 Assurance">
14
+ <meta property="og:description" content="Age verification, estimation, and gating for age-restricted products.">
15
+ <meta property="og:url" content="https://tokenoftrust.com/product/age-assurance/">
16
+ <meta name="twitter:card" content="summary_large_image">
17
+ <meta name="twitter:title" content="Token of Trust — Age Assurance">
18
+ <meta name="twitter:description" content="Sell age-restricted products with confidence.">
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": "CollectionPage",
33
+ "name": "Age Assurance",
34
+ "url": "https://tokenoftrust.com/product/age-assurance/"
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="container crumbs" aria-label="Breadcrumb"><a href="/">Home</a><span class="sep">›</span><a href="/product/">Platform</a><span class="sep">›</span>Age
68
+ Assurance</nav>
69
+
70
+ <section class="hero" aria-labelledby="hero-heading">
71
+ <div class="container">
72
+ <span class="eyebrow"><span class="dot"></span>Age assurance</span>
73
+ <h1 id="hero-heading">Sell age-restricted products <span class="grad">with confidence.</span></h1>
74
+ <p class="lede">Meet age laws without wrecking conversion — from a light-touch gate to document-grade proof,
75
+ all from one integration.</p>
76
+ <div class="cta-row">
77
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
78
+ <a class="btn btn-line" href="/contact/">Book Demo</a>
79
+ </div>
80
+ </div>
81
+ </section>
82
+
83
+ <div class="proof" aria-label="Coverage and trust signals">
84
+ <div class="container">
85
+ <span><b>200+</b> countries covered</span>
86
+ <span class="sep" aria-hidden="true">·</span>
87
+ <span><b>GDPR · CCPA · PIPEDA</b> compliant</span>
88
+ <span class="sep" aria-hidden="true">·</span>
89
+ <span><b>256-bit SSL</b> encryption</span>
90
+ <span class="sep" aria-hidden="true">·</span>
91
+ <span>We will <b>never sell your data</b></span>
92
+ </div>
93
+ </div>
94
+
95
+ <section aria-labelledby="age-heading">
96
+ <div class="container">
97
+ <div class="center reveal">
98
+ <span class="kicker">Age assurance methods</span>
99
+ <h2 id="age-heading">Choose the right level of proof</h2>
100
+ <p class="section-lede">Balance compliance and conversion with the age-assurance method that fits each
101
+ product and market.</p>
102
+ </div>
103
+ <div class="feature-grid three">
104
+ <article class="feat-card accent reveal"><h3>Age Verification</h3><p>Document- and data-backed proof of
105
+ age for regulated checkouts.</p><a class="card-link" href="/product/age-assurance/age-verification/">Explore
106
+ &rarr;</a></article>
107
+ <article class="feat-card accent reveal"><h3>Age Estimation</h3><p>Privacy-first facial age estimation
108
+ in seconds, nothing stored.</p><a class="card-link" href="/product/age-assurance/age-estimation/">Explore
109
+ &rarr;</a></article>
110
+ <article class="feat-card accent reveal"><h3>Age Gate</h3><p>Customizable age and location gate for your
111
+ storefront.</p><a class="card-link" href="/product/age-assurance/age-gate/">Explore &rarr;</a></article>
112
+ </div>
113
+ </div>
114
+ </section>
115
+
116
+ <section aria-labelledby="cta-heading">
117
+ <div class="container">
118
+ <div class="cta-band reveal">
119
+ <span class="kicker">Get started</span>
120
+ <h2 id="cta-heading">Build trust into every transaction</h2>
121
+ <p>Start free — no credit card needed. Or talk to our team about an age-assurance workflow for your products
122
+ and jurisdictions.</p>
123
+ <div class="cta-row">
124
+ <a class="btn btn-ent" href="https://app.tokenoftrust.com">Start For Free</a>
125
+ <a class="btn btn-line" href="/contact/">Contact Sales</a>
126
+ </div>
127
+ </div>
128
+ </div>
129
+ </section>
130
+ </main>
131
+
132
+ <footer class="site">
133
+ <div class="container">
134
+ <div class="foot-grid">
135
+ <div>
136
+ <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>
137
+ <p class="foot-note">Customer verification and compliance for regulated ecommerce. 256-bit SSL. We will
138
+ NEVER sell your data. GDPR · CCPA · PIPEDA.</p>
139
+ </div>
140
+ <nav aria-label="Platform footer"><h3>Platform</h3><ul>
141
+ <li><a href="/product/verification/">Identity Verification</a></li>
142
+ <li><a href="/product/age-assurance/">Age Assurance</a></li>
143
+ <li><a href="/product/fraud-prevention/">Fraud Prevention</a></li>
144
+ <li><a href="/product/">All products</a></li>
145
+ </ul></nav>
146
+ <nav aria-label="Industries footer"><h3>Industries</h3><ul>
147
+ <li><a href="/solutions/">All industries</a></li>
148
+ <li><a href="/vlp-cigars-and-tobacco/">Tobacco &amp; Vape</a></li>
149
+ <li><a href="/vlp-alcohol/">Wine &amp; Spirits</a></li>
150
+ <li><a href="/industries/cannabis/">Cannabis</a></li>
151
+ </ul></nav>
152
+ <nav aria-label="Company footer"><h3>Company</h3><ul>
153
+ <li><a href="/company/">Company</a></li>
154
+ <li><a href="/careers/">Careers</a></li>
155
+ <li><a href="/pricing/">Pricing</a></li>
156
+ <li><a href="/contact/">Contact Sales</a></li>
157
+ </ul></nav>
158
+ </div>
159
+ <p class="copyright">© 2026 Token of Trust®. All rights reserved.</p>
160
+ </div>
161
+ </footer>
162
+
163
+ <script>
164
+ (function(){
165
+ var burger = document.getElementById('hamburger');
166
+ var nav = document.getElementById('primaryNav');
167
+ burger.addEventListener('click', function(){ var open = nav.classList.toggle('open'); burger.setAttribute('aria-expanded', open ? 'true' : 'false'); });
168
+ var io = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); }, {threshold:.12});
169
+ document.querySelectorAll('.reveal').forEach(function(el){ io.observe(el); });
170
+ })();
171
+ </script>
172
+ </body>
173
+ </html>