@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,286 @@
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 for Adult Websites &amp; Apps | Token of Trust</title>
8
+ <meta name="description" content="Stay compliant with UK, US &amp; global laws using Token of Trust's fast, privacy-safe age verification for adult sites — ID, biometric estimation &amp; database checks.">
9
+ <link rel="canonical" href="https://tokenoftrust.com/industries/adult-content-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 for Adult Websites — Token of Trust">
14
+ <meta property="og:description" content="Privacy-first age verification built for compliance and conversion — meet UK Online Safety Act, GDPR, CCPA and 20+ U.S. state laws without losing users.">
15
+ <meta property="og:url" content="https://tokenoftrust.com/industries/adult-content-age-verification/">
16
+ <meta name="twitter:card" content="summary_large_image">
17
+ <meta name="twitter:title" content="Age Verification for Adult Websites">
18
+ <meta name="twitter:description" content="Privacy-first age verification that keeps adult sites legal — and users on-site.">
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 for Adult Websites & Apps",
34
+ "url": "https://tokenoftrust.com/industries/adult-content-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 href="/product/">Platform</a></li>
51
+ <li><a class="active" href="/solutions/" aria-current="page">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">
68
+ <a href="/">Home</a><span class="sep">&rsaquo;</span>
69
+ <a href="/solutions/">Industries</a><span class="sep">&rsaquo;</span>
70
+ <span>Adult Websites &amp; Apps</span>
71
+ </nav>
72
+
73
+ <section class="hero" aria-labelledby="hero-heading">
74
+ <div class="container">
75
+ <span class="eyebrow"><span class="dot"></span>Adult Websites &amp; Apps</span>
76
+ <h1 id="hero-heading">Keep your adult site <span class="grad">live and legal</span> with smarter age checks.</h1>
77
+ <p class="lede">
78
+ Protect your brand with age verification built for compliance <em>and</em> conversion.
79
+ Token of Trust helps adult sites meet regulatory requirements without scaring off users
80
+ or adding friction.
81
+ </p>
82
+ <div class="cta-row">
83
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
84
+ <a class="btn btn-line" href="/contact/">Contact Sales</a>
85
+ </div>
86
+ </div>
87
+ </section>
88
+
89
+ <div class="proof">
90
+ <div class="container">
91
+ <span><b>UK Online Safety Act</b> compliant</span><span class="sep">·</span>
92
+ <span><b>GDPR-ready</b> &amp; CCPA-aligned</span><span class="sep">·</span>
93
+ <span>Coverage across <b>all U.S. states</b> with active AV laws</span>
94
+ </div>
95
+ </div>
96
+
97
+ <section aria-labelledby="split-heading">
98
+ <div class="container">
99
+ <div class="split reveal">
100
+ <div class="split-copy">
101
+ <span class="kicker">The challenge</span>
102
+ <h2 id="split-heading">Regulation is rising. So are the risks.</h2>
103
+ <p>
104
+ New laws are here — and they're not slowing down. In the UK, the Online Safety Act is
105
+ now in full force, requiring strict age verification for adult content. In the U.S.,
106
+ 20+ states have rolled out their own laws, each with different requirements. Most age
107
+ verification tools are built for compliance only, not for keeping your users happy.
108
+ </p>
109
+ <a class="btn btn-line" href="/product/age-assurance/age-verification/">Explore age verification</a>
110
+ </div>
111
+ <ul class="check-list">
112
+ <li><b>Traffic loss</b><span>Poor verification UX can push paying users to competitors.</span></li>
113
+ <li><b>Legal exposure</b><span>Noncompliance can mean site blocking, lawsuits, and fines.</span></li>
114
+ <li><b>Privacy concerns</b><span>Legacy solutions store sensitive data, putting your users — and your
115
+ brand — at risk.</span></li>
116
+ </ul>
117
+ </div>
118
+ </div>
119
+ </section>
120
+
121
+ <section aria-labelledby="sol-heading">
122
+ <div class="container">
123
+ <div class="split rev reveal">
124
+ <div class="split-copy">
125
+ <span class="kicker">The solution</span>
126
+ <h2 id="sol-heading">Privacy-first age verification that works everywhere you operate</h2>
127
+ <p>
128
+ With Token of Trust, you can implement flexible, region-compliant age assurance without
129
+ storing sensitive user data — so you stay legal and trusted, everywhere you operate.
130
+ </p>
131
+ <a class="btn btn-line" href="/solutions/">See all industries</a>
132
+ </div>
133
+ <ul class="check-list">
134
+ <li><b>Location-aware routing</b><span>Match the right verification method to each visitor's location
135
+ automatically.</span></li>
136
+ <li><b>Comply without a rebuild</b><span>Meet every jurisdiction without rebuilding your site.</span></li>
137
+ <li><b>Protect conversion</b><span>Maintain conversion rates with fast, low-friction checks.</span></li>
138
+ </ul>
139
+ </div>
140
+ </div>
141
+ </section>
142
+
143
+ <section aria-labelledby="feat-heading">
144
+ <div class="container">
145
+ <div class="center reveal">
146
+ <span class="kicker">Tailored for compliance &amp; conversion</span>
147
+ <h2 id="feat-heading">Age verification designed around your audience</h2>
148
+ <p class="section-lede">One verification core, configured for the rules and users of adult platforms.</p>
149
+ </div>
150
+ <div class="feature-grid three">
151
+ <article class="feat-card accent reveal">
152
+ <h3>Privacy-first verification options</h3>
153
+ <p>Choose from biometric age estimation, minimal-retention ID checks, or database lookups — all designed
154
+ to meet local laws while keeping user friction low.</p>
155
+ </article>
156
+ <article class="feat-card accent reveal">
157
+ <h3>Full-spectrum regulatory coverage</h3>
158
+ <p>Compliant with the UK Online Safety Act, GDPR, CCPA, and 20+ U.S. state age-verification laws — with
159
+ ongoing updates as regulations change.</p>
160
+ </article>
161
+ <article class="feat-card accent reveal">
162
+ <h3>Hands-on compliance support</h3>
163
+ <p>From setup to audits, our team works alongside yours to keep your platform legal, trusted, and optimized
164
+ for conversions.</p>
165
+ </article>
166
+ </div>
167
+ </div>
168
+ </section>
169
+
170
+ <section aria-labelledby="steps-heading">
171
+ <div class="container">
172
+ <div class="center reveal">
173
+ <span class="kicker">How it works</span>
174
+ <h2 id="steps-heading">From compliance gap to launch</h2>
175
+ </div>
176
+ <div class="steps three">
177
+ <div class="step reveal"><span class="num">1</span><h3>Compliance review</h3><p>We assess your current
178
+ verification flow and flag any compliance gaps, mapping your exposure under UK, U.S. state, and global
179
+ privacy laws.</p></div>
180
+ <div class="step reveal"><span class="num">2</span><h3>Custom blueprint</h3><p>You get a tailored plan
181
+ with the right verification methods for your audience and region — from biometric estimation to minimal-retention
182
+ ID checks.</p></div>
183
+ <div class="step reveal"><span class="num">3</span><h3>Implementation &amp; support</h3><p>We help you
184
+ integrate, test, and launch — and keep you ahead of law changes as your long-term compliance partner.</p></div>
185
+ </div>
186
+ </div>
187
+ </section>
188
+
189
+ <section aria-labelledby="faq-heading">
190
+ <div class="container">
191
+ <div class="center reveal">
192
+ <span class="kicker">FAQ</span>
193
+ <h2 id="faq-heading">Frequently asked questions</h2>
194
+ </div>
195
+ <div class="faq reveal">
196
+ <details><summary>Will age verification hurt my traffic or conversions?</summary><p>Not with Token of Trust.
197
+ Our privacy-first methods keep the process quick and seamless, so legitimate users complete verification
198
+ without dropping off.</p></details>
199
+ <details><summary>Do you store my users' sensitive information?</summary><p>We only store verification
200
+ documents for as long as needed to complete the review and meet compliance requirements — typically 30
201
+ to 90 days. All data is encrypted, protected by strict security standards, and never shared without explicit
202
+ permission. Once the retention period ends, it's securely deleted.</p></details>
203
+ <details><summary>Which laws does Token of Trust cover?</summary><p>Token of Trust helps adult content
204
+ platforms meet age-verification requirements under the UK Online Safety Act, GDPR, CCPA, and 20+ U.S. state
205
+ laws. We track regulatory changes and update your verification process automatically, so you stay compliant
206
+ everywhere you operate.</p></details>
207
+ <details><summary>Can you handle UK, U.S., and other regional laws at the same time?</summary><p>Yes. Our
208
+ system detects a visitor's location and applies the correct verification method automatically, so you meet
209
+ local requirements without adding steps for users in regions that don't require them.</p></details>
210
+ <details><summary>How fast can we be live before enforcement hits?</summary><p>Most sites launch in days,
211
+ not weeks. We integrate quickly, test thoroughly, and train your team so you're ready before deadlines
212
+ — avoiding legal risk and loss of traffic.</p></details>
213
+ <details><summary>Will you work with my existing content platform or billing system?</summary><p>Yes. We
214
+ integrate with major CMS platforms and payment systems used by adult sites, as well as API options for
215
+ fully custom builds.</p></details>
216
+ <details><summary>What happens when the laws change again?</summary><p>We monitor new and changing age-verification
217
+ laws — in the UK, U.S. states, and beyond — and update your verification process automatically, so you
218
+ never have to scramble to keep up.</p></details>
219
+ <details><summary>Can you verify users without asking for IDs?</summary><p>Yes. Depending on your jurisdiction,
220
+ we offer privacy-first methods like biometric age estimation or database checks — options that reduce friction
221
+ and protect user trust.</p></details>
222
+ <details><summary>What if my audience is global?</summary><p>We support global age verification with jurisdiction-specific
223
+ flows, ensuring compliance in each country or state where you operate — without creating bottlenecks for
224
+ your audience.</p></details>
225
+ </div>
226
+ </div>
227
+ </section>
228
+
229
+ <section aria-labelledby="cta-heading">
230
+ <div class="container">
231
+ <div class="cta-band reveal">
232
+ <span class="kicker">Compliance without the click-away risk</span>
233
+ <h2 id="cta-heading">Keep users on your site — and on the right side of the rules</h2>
234
+ <p>From UK mandates to the U.S. patchwork of state laws, we keep your adult platform compliant while keeping
235
+ conversion high. Start free, or talk to our team.</p>
236
+ <div class="cta-row cta-center">
237
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
238
+ <a class="btn btn-line" href="/contact/">Contact Sales</a>
239
+ </div>
240
+ </div>
241
+ </div>
242
+ </section>
243
+ </main>
244
+
245
+ <footer class="site">
246
+ <div class="container">
247
+ <div class="foot-grid">
248
+ <div>
249
+ <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>
250
+ <p class="foot-note">Customer verification and compliance for regulated ecommerce. 256-bit SSL. We will
251
+ NEVER sell your data. GDPR · CCPA · PIPEDA.</p>
252
+ </div>
253
+ <nav aria-label="Platform footer"><h3>Platform</h3><ul>
254
+ <li><a href="/product/verification/">Identity Verification</a></li>
255
+ <li><a href="/product/age-assurance/">Age Assurance</a></li>
256
+ <li><a href="/product/fraud-prevention/">Fraud Prevention</a></li>
257
+ <li><a href="/product/">All products</a></li>
258
+ </ul></nav>
259
+ <nav aria-label="Industries footer"><h3>Industries</h3><ul>
260
+ <li><a href="/solutions/">All industries</a></li>
261
+ <li><a href="/vlp-cigars-and-tobacco/">Tobacco &amp; Vape</a></li>
262
+ <li><a href="/vlp-alcohol/">Wine &amp; Spirits</a></li>
263
+ <li><a href="/industries/cannabis/">Cannabis</a></li>
264
+ </ul></nav>
265
+ <nav aria-label="Company footer"><h3>Company</h3><ul>
266
+ <li><a href="/company/">Company</a></li>
267
+ <li><a href="/careers/">Careers</a></li>
268
+ <li><a href="/pricing/">Pricing</a></li>
269
+ <li><a href="/contact/">Contact Sales</a></li>
270
+ </ul></nav>
271
+ </div>
272
+ <p class="copyright">© 2026 Token of Trust®. All rights reserved.</p>
273
+ </div>
274
+ </footer>
275
+
276
+ <script>
277
+ (function(){
278
+ var burger = document.getElementById('hamburger');
279
+ var nav = document.getElementById('primaryNav');
280
+ burger.addEventListener('click', function(){ var open = nav.classList.toggle('open'); burger.setAttribute('aria-expanded', open ? 'true' : 'false'); });
281
+ var io = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); }, {threshold:.12});
282
+ document.querySelectorAll('.reveal').forEach(function(el){ io.observe(el); });
283
+ })();
284
+ </script>
285
+ </body>
286
+ </html>
@@ -0,0 +1,277 @@
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>Cannabis &amp; Hemp Tax Compliance | Token of Trust</title>
8
+ <meta name="description" content="Verify age, identity, and tax eligibility in one privacy-first platform. Token of Trust automates cannabis and hemp excise and sales tax so you stay audit-ready across state lines.">
9
+ <link rel="canonical" href="https://tokenoftrust.com/industries/cannabis/">
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="Cannabis & Hemp Tax Compliance — Token of Trust">
14
+ <meta property="og:description" content="Automate cannabis excise and sales tax, verify age and identity, and scale your cannabis ecommerce across state lines — all in one privacy-first platform.">
15
+ <meta property="og:url" content="https://tokenoftrust.com/industries/cannabis/">
16
+ <meta name="twitter:card" content="summary_large_image">
17
+ <meta name="twitter:title" content="Cannabis & Hemp Tax Compliance">
18
+ <meta name="twitter:description" content="Verify age and identity and automate cannabis tax compliance in one platform.">
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": "Cannabis & Hemp Tax Compliance",
34
+ "url": "https://tokenoftrust.com/industries/cannabis/"
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 href="/product/">Platform</a></li>
51
+ <li><a class="active" href="/solutions/" aria-current="page">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">
68
+ <a href="/">Home</a><span class="sep">&rsaquo;</span>
69
+ <a href="/solutions/">Industries</a><span class="sep">&rsaquo;</span>
70
+ <span>Cannabis</span>
71
+ </nav>
72
+
73
+ <section class="hero" aria-labelledby="hero-heading">
74
+ <div class="container">
75
+ <span class="eyebrow"><span class="dot"></span>Cannabis &amp; Hemp</span>
76
+ <h1 id="hero-heading">Simplify cannabis &amp; hemp <span class="grad">tax compliance.</span></h1>
77
+ <p class="lede">
78
+ Verify age, identity, and tax eligibility — all in one seamless, privacy-first platform.
79
+ Grow your cannabis ecommerce business across state lines without tax headaches. Token of
80
+ Trust automates excise and sales tax compliance so you can stay audit-ready, reduce risk,
81
+ and scale faster.
82
+ </p>
83
+ <div class="cta-row">
84
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
85
+ <a class="btn btn-line" href="/contact/">Contact Sales</a>
86
+ </div>
87
+ </div>
88
+ </section>
89
+
90
+ <div class="proof">
91
+ <div class="container">
92
+ <span>Verify <b>age &amp; identity</b></span><span class="sep">·</span>
93
+ <span>Automated <b>excise &amp; sales tax</b></span><span class="sep">·</span>
94
+ <span>Privacy-first &amp; <b>audit-ready</b></span>
95
+ </div>
96
+ </div>
97
+
98
+ <section aria-labelledby="split-heading">
99
+ <div class="container">
100
+ <div class="split reveal">
101
+ <div class="split-copy">
102
+ <span class="kicker">The challenge</span>
103
+ <h2 id="split-heading">Why cannabis &amp; hemp tax compliance is so complex</h2>
104
+ <p>
105
+ A single product can trigger multiple tax rates — depending on what it is, where it's
106
+ sold, and how strong it is. Excise tax. Sales tax. Use tax. Jurisdictional rules.
107
+ Potency-based logic. Automation applies the right tax logic across every sale channel
108
+ and keeps your business audit-ready.
109
+ </p>
110
+ <a class="btn btn-line" href="/solutions/">See all industries</a>
111
+ </div>
112
+ <ul class="check-list">
113
+ <li><b>Product-based differences</b><span>Flower, edibles, vapes, tinctures, and topicals often follow
114
+ separate tax rules; THC vs. CBD trigger separate classifications.</span></li>
115
+ <li><b>Location &amp; transaction rules</b><span>States tax by price, weight, or potency; local taxes
116
+ can add 2–5%; online, delivery, and in-store sales may each differ.</span></li>
117
+ <li><b>Multiple tax models at once</b><span>Percentage-of-price, weight-based, and potency-based taxes
118
+ often overlap, from 6% to 37% depending on the state.</span></li>
119
+ </ul>
120
+ </div>
121
+ </div>
122
+ </section>
123
+
124
+ <section aria-labelledby="diff-heading">
125
+ <div class="container">
126
+ <div class="center reveal">
127
+ <span class="kicker">Know the difference</span>
128
+ <h2 id="diff-heading">Cannabis excise tax vs. sales tax</h2>
129
+ <p class="section-lede">In the cannabis and hemp industry, most transactions are taxed twice — through
130
+ both excise tax and sales &amp; use tax. Understanding how each works is key to staying compliant.</p>
131
+ </div>
132
+ <div class="feature-grid two">
133
+ <article class="feat-card accent reveal">
134
+ <h3>Excise tax</h3>
135
+ <p>Cannabis-specific tax applied before or during the sale. Covers THC flower, concentrates, vapes, tinctures,
136
+ and intoxicating hemp cannabinoids. Calculated by price, weight, or potency depending on the state —
137
+ often built into the product price and remitted by the retailer or distributor.</p>
138
+ </article>
139
+ <article class="feat-card accent reveal">
140
+ <h3>Sales &amp; use tax</h3>
141
+ <p>Retail-focused tax added at checkout. Applies to most consumer purchases, including hemp-derived CBD,
142
+ and is based on retail price — often stacked on top of excise tax. "Use tax" applies when sales tax isn't
143
+ collected (e.g., out-of-state transactions).</p>
144
+ </article>
145
+ </div>
146
+ </div>
147
+ </section>
148
+
149
+ <section aria-labelledby="feat-heading">
150
+ <div class="container">
151
+ <div class="center reveal">
152
+ <span class="kicker">One platform, every check</span>
153
+ <h2 id="feat-heading">Age, identity, and tax — automated together</h2>
154
+ <p class="section-lede">Configure the same verification and compliance core for the rules of every state
155
+ you sell in.</p>
156
+ </div>
157
+ <div class="feature-grid three">
158
+ <article class="feat-card accent reveal">
159
+ <h3>Age &amp; identity verification</h3>
160
+ <p>Confirm every buyer is eligible before checkout with privacy-first age and identity checks built for
161
+ age-restricted retail.</p>
162
+ </article>
163
+ <article class="feat-card accent reveal">
164
+ <h3>Automated tax logic</h3>
165
+ <p>Apply the right excise, sales, and use tax across products, jurisdictions, and channels — keeping
166
+ calculations accurate and your business audit-ready.</p>
167
+ </article>
168
+ <article class="feat-card accent reveal">
169
+ <h3>Privacy-first by design</h3>
170
+ <p>256-bit SSL, minimal data retention, and GDPR-aligned handling — we never sell your data.</p>
171
+ </article>
172
+ </div>
173
+ </div>
174
+ </section>
175
+
176
+ <section aria-labelledby="steps-heading">
177
+ <div class="container">
178
+ <div class="center reveal">
179
+ <span class="kicker">Take the complexity out of compliance</span>
180
+ <h2 id="steps-heading">How we simplify your tax footprint</h2>
181
+ </div>
182
+ <div class="steps three">
183
+ <div class="step reveal"><span class="num">1</span><h3>Review your catalog</h3><p>We look at your product
184
+ catalog and state footprint to map how every SKU is defined and taxed in each jurisdiction.</p></div>
185
+ <div class="step reveal"><span class="num">2</span><h3>Configure tax logic</h3><p>We apply percentage-of-price,
186
+ weight-based, and potency-based rules — plus local add-ons — so the right tax is calculated on every sale.</p></div>
187
+ <div class="step reveal"><span class="num">3</span><h3>Stay audit-ready</h3><p>Verification and tax records
188
+ are captured and retained, keeping you compliant and audit-ready as you scale across state lines.</p></div>
189
+ </div>
190
+ </div>
191
+ </section>
192
+
193
+ <section aria-labelledby="faq-heading">
194
+ <div class="container">
195
+ <div class="center reveal">
196
+ <span class="kicker">FAQ</span>
197
+ <h2 id="faq-heading">Frequently asked questions</h2>
198
+ </div>
199
+ <div class="faq reveal">
200
+ <details><summary>What is the difference between cannabis excise tax and sales tax?</summary><p>Excise
201
+ tax is cannabis-specific and may be based on price, weight, or THC potency. Sales tax applies broadly to
202
+ retail purchases and is often stacked on top of excise tax. Many states require both.</p></details>
203
+ <details><summary>Are hemp-derived products like CBD taxed the same as cannabis?</summary><p>Not always.
204
+ Non-intoxicating CBD may be exempt in some states or taxed like a standard consumer product under sales
205
+ tax. Intoxicating hemp cannabinoids (e.g., Δ8-THC, Δ10-THC) are often taxed like marijuana and may trigger
206
+ excise tax.</p></details>
207
+ <details><summary>Do medical and recreational cannabis have different tax rules?</summary><p>Yes. Recreational
208
+ cannabis typically carries full excise and sales tax, while medical cannabis may qualify for reduced or
209
+ exempt rates depending on the state.</p></details>
210
+ <details><summary>How do local taxes affect cannabis and hemp sales?</summary><p>Cities and counties often
211
+ add their own cannabis-specific excise taxes (2–5% of the sale price). These stack on top of state excise
212
+ and sales taxes, creating multiple layers of compliance.</p></details>
213
+ <details><summary>When does sales &amp; use tax apply in cannabis and hemp sales?</summary><p>Use tax applies
214
+ when sales tax wasn't collected at purchase — for example, an out-of-state CBD order shipped into a taxable
215
+ state. Businesses are responsible for tracking and remitting it.</p></details>
216
+ </div>
217
+ </div>
218
+ </section>
219
+
220
+ <section aria-labelledby="cta-heading">
221
+ <div class="container">
222
+ <div class="cta-band reveal">
223
+ <span class="kicker">It's a lot — but it doesn't have to be</span>
224
+ <h2 id="cta-heading">Take the complexity out of compliance</h2>
225
+ <p>Let's take a look at your product catalog and state footprint. We'll show you how Token of Trust can
226
+ simplify your tax compliance — and verify age and identity in the same flow.</p>
227
+ <div class="cta-row cta-center">
228
+ <a class="btn btn-green" href="https://app.tokenoftrust.com">Start For Free</a>
229
+ <a class="btn btn-line" href="/contact/">Contact Sales</a>
230
+ </div>
231
+ </div>
232
+ </div>
233
+ </section>
234
+ </main>
235
+
236
+ <footer class="site">
237
+ <div class="container">
238
+ <div class="foot-grid">
239
+ <div>
240
+ <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>
241
+ <p class="foot-note">Customer verification and compliance for regulated ecommerce. 256-bit SSL. We will
242
+ NEVER sell your data. GDPR · CCPA · PIPEDA.</p>
243
+ </div>
244
+ <nav aria-label="Platform footer"><h3>Platform</h3><ul>
245
+ <li><a href="/product/verification/">Identity Verification</a></li>
246
+ <li><a href="/product/age-assurance/">Age Assurance</a></li>
247
+ <li><a href="/product/fraud-prevention/">Fraud Prevention</a></li>
248
+ <li><a href="/product/">All products</a></li>
249
+ </ul></nav>
250
+ <nav aria-label="Industries footer"><h3>Industries</h3><ul>
251
+ <li><a href="/solutions/">All industries</a></li>
252
+ <li><a href="/vlp-cigars-and-tobacco/">Tobacco &amp; Vape</a></li>
253
+ <li><a href="/vlp-alcohol/">Wine &amp; Spirits</a></li>
254
+ <li><a href="/industries/cannabis/">Cannabis</a></li>
255
+ </ul></nav>
256
+ <nav aria-label="Company footer"><h3>Company</h3><ul>
257
+ <li><a href="/company/">Company</a></li>
258
+ <li><a href="/careers/">Careers</a></li>
259
+ <li><a href="/pricing/">Pricing</a></li>
260
+ <li><a href="/contact/">Contact Sales</a></li>
261
+ </ul></nav>
262
+ </div>
263
+ <p class="copyright">© 2026 Token of Trust®. All rights reserved.</p>
264
+ </div>
265
+ </footer>
266
+
267
+ <script>
268
+ (function(){
269
+ var burger = document.getElementById('hamburger');
270
+ var nav = document.getElementById('primaryNav');
271
+ burger.addEventListener('click', function(){ var open = nav.classList.toggle('open'); burger.setAttribute('aria-expanded', open ? 'true' : 'false'); });
272
+ var io = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); }, {threshold:.12});
273
+ document.querySelectorAll('.reveal').forEach(function(el){ io.observe(el); });
274
+ })();
275
+ </script>
276
+ </body>
277
+ </html>