@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,482 @@
1
+ /* ============================================================================
2
+ Token of Trust — shared marketing-page components · tot-navy concept v1.1
3
+ ----------------------------------------------------------------------------
4
+ The reusable composition layer for ported marketing subpages. Base tokens,
5
+ reset, layout, typography, header/nav, footer, buttons, .proof, .kicker,
6
+ .eyebrow, trust slots, forms and the reveal animation live in the shared
7
+ THEME (tot-navy.css). THIS file adds the page-level building blocks every
8
+ ported page shares — hero variants, feature/card grids, media splits, steps,
9
+ stat rows, reassurance rows, FAQ, breadcrumb, CTA band and the nav active
10
+ pill — so individual pages need little or no page-local CSS.
11
+ Consumes the shared token layer (no :root re-declare). Primary CTAs route
12
+ through --color-cta. Do not minify — one rule per line, keep the headers.
13
+ ========================================================================== */
14
+
15
+ /* Nav active pill + footer note */
16
+ nav.primary a.active {
17
+ color: var(--teal-ink);
18
+ background: #eaf5f2;
19
+ padding: 6px 16px;
20
+ border-radius: 999px;
21
+ font-weight: 700;
22
+ }
23
+ .foot-note {
24
+ font-size: .88rem;
25
+ margin-top: 12px;
26
+ max-width: 34ch;
27
+ color: var(--muted);
28
+ }
29
+
30
+ /* Breadcrumb */
31
+ .crumbs {
32
+ padding-top: 28px;
33
+ font-size: .85rem;
34
+ color: var(--muted);
35
+ }
36
+ .crumbs a {
37
+ color: var(--teal-ink);
38
+ text-decoration: none;
39
+ font-weight: 600;
40
+ }
41
+ .crumbs a:hover {
42
+ color: var(--navy);
43
+ }
44
+ .crumbs .sep {
45
+ margin: 0 8px;
46
+ opacity: .5;
47
+ }
48
+
49
+ /* Hero (centred default; .hero-split for image heroes) */
50
+ .hero {
51
+ text-align: center;
52
+ padding: 64px 0 0;
53
+ }
54
+ .hero h1 {
55
+ margin: 16px auto;
56
+ max-width: 22ch;
57
+ }
58
+ .hero .lede {
59
+ max-width: 60ch;
60
+ margin: 0 auto;
61
+ }
62
+ .hero .cta-row {
63
+ justify-content: center;
64
+ margin-top: 28px;
65
+ }
66
+ .hero-split {
67
+ text-align: left;
68
+ }
69
+ .hero-split .container {
70
+ display: grid;
71
+ grid-template-columns: 1.05fr .95fr;
72
+ gap: 48px;
73
+ align-items: center;
74
+ }
75
+ .hero-split h1 {
76
+ margin: 14px 0;
77
+ max-width: 16ch;
78
+ }
79
+ .hero-split .lede {
80
+ margin: 0;
81
+ max-width: 52ch;
82
+ }
83
+ .hero-split .cta-row {
84
+ justify-content: flex-start;
85
+ }
86
+ .hero-media {
87
+ background: #fff;
88
+ border: 1px solid var(--line);
89
+ border-radius: var(--r);
90
+ box-shadow: var(--shadow);
91
+ overflow: hidden;
92
+ }
93
+ .hero-media img {
94
+ display: block;
95
+ width: 100%;
96
+ height: auto;
97
+ }
98
+
99
+ /* CTA variants over the shared .btn base */
100
+ .btn-ent {
101
+ background: var(--color-cta);
102
+ color: #fff;
103
+ box-shadow: 0 7px 20px rgba(21, 122, 74, .28);
104
+ }
105
+ .btn-ent:hover {
106
+ background: var(--color-cta-hover);
107
+ }
108
+
109
+ /* Feature / card grid */
110
+ .feature-grid {
111
+ display: grid;
112
+ grid-template-columns: repeat(3, 1fr);
113
+ gap: 24px;
114
+ margin-top: 44px;
115
+ }
116
+ .feature-grid.two {
117
+ grid-template-columns: repeat(2, 1fr);
118
+ }
119
+ .feature-grid.four {
120
+ grid-template-columns: repeat(4, 1fr);
121
+ }
122
+ .feat-card {
123
+ padding: 28px;
124
+ background: #fff;
125
+ border: 1px solid var(--line);
126
+ border-radius: var(--r);
127
+ transition: transform .2s, box-shadow .2s, border-color .2s;
128
+ }
129
+ .feat-card.accent {
130
+ border-top: 3px solid var(--teal);
131
+ }
132
+ .feat-card:hover {
133
+ transform: translateY(-4px);
134
+ box-shadow: var(--shadow);
135
+ border-color: var(--line-cool);
136
+ }
137
+ .feat-card h3 {
138
+ font-size: 1.14rem;
139
+ letter-spacing: -.01em;
140
+ color: var(--navy);
141
+ margin-bottom: 8px;
142
+ }
143
+ .feat-card p {
144
+ font-size: .93rem;
145
+ color: var(--muted);
146
+ }
147
+ .card-link {
148
+ display: inline-flex;
149
+ align-items: center;
150
+ min-height: var(--tap);
151
+ margin-top: 10px;
152
+ font-weight: 700;
153
+ font-size: .9rem;
154
+ color: var(--teal-ink);
155
+ text-decoration: none;
156
+ }
157
+ .card-link:hover {
158
+ color: var(--navy);
159
+ }
160
+
161
+ /* Media split (copy beside a panel / image / list) */
162
+ .split {
163
+ display: grid;
164
+ grid-template-columns: 1.05fr .95fr;
165
+ gap: 48px;
166
+ align-items: center;
167
+ }
168
+ .split.rev .split-copy {
169
+ order: 2;
170
+ }
171
+ .split-copy h2 {
172
+ margin-top: 6px;
173
+ }
174
+ .split-copy p {
175
+ color: var(--muted);
176
+ max-width: 48ch;
177
+ margin: 12px 0 24px;
178
+ }
179
+ .split-media {
180
+ background: #fff;
181
+ border: 1px solid var(--line);
182
+ border-radius: var(--r);
183
+ box-shadow: var(--shadow-soft);
184
+ overflow: hidden;
185
+ }
186
+ .split-media img {
187
+ display: block;
188
+ width: 100%;
189
+ height: auto;
190
+ }
191
+ .check-list {
192
+ list-style: none;
193
+ display: flex;
194
+ flex-direction: column;
195
+ gap: 14px;
196
+ background: #fff;
197
+ border: 1px solid var(--line);
198
+ border-radius: var(--r);
199
+ padding: 30px;
200
+ box-shadow: var(--shadow-soft);
201
+ }
202
+ .check-list li {
203
+ display: flex;
204
+ gap: 12px;
205
+ align-items: flex-start;
206
+ font-size: .96rem;
207
+ color: var(--ink);
208
+ }
209
+ .check-list li::before {
210
+ content: "\2713";
211
+ font-weight: 800;
212
+ flex-shrink: 0;
213
+ color: var(--green);
214
+ }
215
+ .check-list li b {
216
+ display: block;
217
+ }
218
+ .check-list li span {
219
+ font-size: .88rem;
220
+ color: var(--muted);
221
+ }
222
+
223
+ /* Steps (numbered how-it-works) */
224
+ .alt-bg {
225
+ background: #fff;
226
+ border-block: 1px solid var(--line);
227
+ }
228
+ .steps {
229
+ display: grid;
230
+ grid-template-columns: repeat(4, 1fr);
231
+ gap: 24px;
232
+ margin-top: 44px;
233
+ text-align: center;
234
+ }
235
+ .steps.three {
236
+ grid-template-columns: repeat(3, 1fr);
237
+ }
238
+ .step {
239
+ padding: 28px 22px;
240
+ background: var(--cream);
241
+ border: 1px solid var(--line);
242
+ border-radius: 18px;
243
+ }
244
+ .step .num {
245
+ font-size: .74rem;
246
+ font-weight: 800;
247
+ letter-spacing: .14em;
248
+ display: inline-grid;
249
+ place-items: center;
250
+ width: 40px;
251
+ height: 40px;
252
+ border-radius: 50%;
253
+ background: #eaf5f2;
254
+ color: var(--teal-ink);
255
+ }
256
+ .step h3 {
257
+ font-size: 1.02rem;
258
+ margin: 10px 0 6px;
259
+ color: var(--navy);
260
+ }
261
+ .step p {
262
+ font-size: .88rem;
263
+ color: var(--muted);
264
+ }
265
+
266
+ /* Stat row (big numbers) */
267
+ .stat-row {
268
+ display: grid;
269
+ grid-template-columns: repeat(4, 1fr);
270
+ gap: 24px;
271
+ margin-top: 40px;
272
+ text-align: center;
273
+ }
274
+ .stat-row.three {
275
+ grid-template-columns: repeat(3, 1fr);
276
+ }
277
+ .stat b {
278
+ display: block;
279
+ font-size: 2.4rem;
280
+ font-weight: 800;
281
+ letter-spacing: -.03em;
282
+ color: var(--navy);
283
+ }
284
+ .stat span {
285
+ font-size: .9rem;
286
+ color: var(--muted);
287
+ }
288
+
289
+ /* Reassurance row (trust / privacy callouts) */
290
+ .reassure-row {
291
+ display: grid;
292
+ grid-template-columns: repeat(3, 1fr);
293
+ gap: 18px;
294
+ margin-top: 40px;
295
+ }
296
+ .reassure-row.two {
297
+ grid-template-columns: repeat(2, 1fr);
298
+ }
299
+ .inline-links {
300
+ margin-top: 28px;
301
+ font-weight: 600;
302
+ text-align: center;
303
+ }
304
+ .inline-links a {
305
+ color: var(--teal-ink);
306
+ text-decoration: none;
307
+ }
308
+ .inline-links a:hover {
309
+ color: var(--navy);
310
+ }
311
+
312
+ /* FAQ (details/summary accordion) */
313
+ .faq {
314
+ max-width: 760px;
315
+ margin: 40px auto 0;
316
+ }
317
+ .faq details {
318
+ margin-bottom: 12px;
319
+ overflow: hidden;
320
+ background: #fff;
321
+ border: 1px solid var(--line);
322
+ border-radius: 14px;
323
+ }
324
+ .faq summary {
325
+ padding: 18px 20px;
326
+ font-weight: 700;
327
+ cursor: pointer;
328
+ list-style: none;
329
+ display: flex;
330
+ justify-content: space-between;
331
+ gap: 12px;
332
+ color: var(--navy);
333
+ }
334
+ .faq summary::-webkit-details-marker {
335
+ display: none;
336
+ }
337
+ .faq summary::after {
338
+ content: "+";
339
+ font-size: 1.3rem;
340
+ font-weight: 600;
341
+ color: var(--teal-ink);
342
+ transition: transform .2s;
343
+ }
344
+ .faq details[open] summary::after {
345
+ transform: rotate(45deg);
346
+ }
347
+ .faq details p {
348
+ padding: 0 20px 18px;
349
+ color: var(--muted);
350
+ }
351
+
352
+ /* CTA band */
353
+ .cta-band {
354
+ padding: 64px 40px;
355
+ text-align: center;
356
+ background: linear-gradient(135deg, var(--navy), var(--navy-2));
357
+ border-radius: 26px;
358
+ color: #fff;
359
+ }
360
+ .cta-band .kicker {
361
+ color: #7fe3b8;
362
+ }
363
+ .cta-band h2 {
364
+ color: #fff;
365
+ }
366
+ .cta-band p {
367
+ max-width: 52ch;
368
+ margin: 0 auto;
369
+ color: #b8c8de;
370
+ }
371
+ .cta-band .cta-row {
372
+ justify-content: center;
373
+ margin-top: 24px;
374
+ }
375
+ .cta-band .btn-line {
376
+ background: transparent;
377
+ color: #fff;
378
+ border-color: rgba(255, 255, 255, .5);
379
+ }
380
+ .cta-band .btn-line:hover {
381
+ border-color: #fff;
382
+ }
383
+
384
+ /* Prose block (long-form copy: careers, legal-shell, etc.) */
385
+ .prose {
386
+ max-width: 68ch;
387
+ margin: 0 auto;
388
+ color: var(--ink);
389
+ }
390
+ .prose h2 {
391
+ margin-top: 36px;
392
+ }
393
+ .prose h3 {
394
+ margin-top: 24px;
395
+ color: var(--navy);
396
+ }
397
+ .prose p {
398
+ margin-top: 12px;
399
+ color: var(--muted);
400
+ }
401
+ .prose ul {
402
+ margin: 12px 0 12px 22px;
403
+ color: var(--muted);
404
+ }
405
+ .prose li {
406
+ margin-top: 6px;
407
+ }
408
+
409
+ /* Logo strip caption */
410
+ .logo-note {
411
+ text-align: center;
412
+ font-size: .82rem;
413
+ letter-spacing: .1em;
414
+ text-transform: uppercase;
415
+ color: var(--muted);
416
+ font-weight: 800;
417
+ margin-bottom: 20px;
418
+ }
419
+
420
+ /* Responsive */
421
+ @media (max-width: 980px) {
422
+ .feature-grid, .feature-grid.four {
423
+ grid-template-columns: 1fr 1fr;
424
+ }
425
+ .steps, .stat-row {
426
+ grid-template-columns: repeat(2, 1fr);
427
+ }
428
+ .hero-split .container, .split {
429
+ grid-template-columns: 1fr;
430
+ gap: 28px;
431
+ }
432
+ .hero-split {
433
+ text-align: center;
434
+ }
435
+ .hero-split h1, .hero-split .lede {
436
+ max-width: none;
437
+ margin-inline: auto;
438
+ }
439
+ .hero-split .cta-row {
440
+ justify-content: center;
441
+ }
442
+ .split.rev .split-copy {
443
+ order: 0;
444
+ }
445
+ .reassure-row, .reassure-row.two {
446
+ grid-template-columns: 1fr;
447
+ }
448
+ }
449
+ @media (max-width: 560px) {
450
+ .feature-grid, .feature-grid.two, .feature-grid.four, .steps, .steps.three, .stat-row {
451
+ grid-template-columns: 1fr;
452
+ max-width: 440px;
453
+ margin-inline: auto;
454
+ }
455
+ }
456
+
457
+ /* Dark theme — literal light surfaces re-pointed at the card/tint layer */
458
+ @media (prefers-color-scheme: dark) {
459
+ :root:not([data-theme="light"]) {
460
+ nav.primary a.active { background: rgba(43, 179, 166, .16); }
461
+ .hero-media, .feat-card, .split-media, .check-list, .alt-bg, .faq details { background: var(--card); }
462
+ .step .num { background: rgba(43, 179, 166, .16); }
463
+ .crumbs a:hover, .feat-card h3, .card-link:hover, .step h3, .stat b,
464
+ .inline-links a:hover, .faq summary, .prose h3 { color: var(--ink); }
465
+ }
466
+ }
467
+ :root[data-theme="dark"] nav.primary a.active { background: rgba(43, 179, 166, .16); }
468
+ :root[data-theme="dark"] .hero-media,
469
+ :root[data-theme="dark"] .feat-card,
470
+ :root[data-theme="dark"] .split-media,
471
+ :root[data-theme="dark"] .check-list,
472
+ :root[data-theme="dark"] .alt-bg,
473
+ :root[data-theme="dark"] .faq details { background: var(--card); }
474
+ :root[data-theme="dark"] .step .num { background: rgba(43, 179, 166, .16); }
475
+ :root[data-theme="dark"] .crumbs a:hover,
476
+ :root[data-theme="dark"] .feat-card h3,
477
+ :root[data-theme="dark"] .card-link:hover,
478
+ :root[data-theme="dark"] .step h3,
479
+ :root[data-theme="dark"] .stat b,
480
+ :root[data-theme="dark"] .inline-links a:hover,
481
+ :root[data-theme="dark"] .faq summary,
482
+ :root[data-theme="dark"] .prose h3 { color: var(--ink); }
@@ -0,0 +1,214 @@
1
+ /* ============================================================================
2
+ Token of Trust — pricing page-local styles
3
+ ----------------------------------------------------------------------------
4
+ Base tokens, reset, layout, typography, header/nav, footer, the shared
5
+ button base (.btn) and generic chrome live in the shared theme
6
+ (tot-navy.css, concept v1.1). This file holds ONLY pricing-unique
7
+ components: the plan grid, tabbed panels, the tax card, the how-it-works
8
+ steps, the enterprise band and the pricing FAQ.
9
+ Consumes the shared token layer (do not re-declare :root); primary CTAs
10
+ route through the AA-hardened --color-cta. Do not minify — one rule per
11
+ line, keep the section headers.
12
+ ========================================================================== */
13
+
14
+ /* Hero + heading override (centred pricing hero) ------------------- */
15
+ .hero { text-align: center; padding: 72px 0 0; }
16
+ h1 { margin: 16px auto; max-width: 24ch; }
17
+ h1 .acc {
18
+ background: var(--grad);
19
+ -webkit-background-clip: text;
20
+ background-clip: text;
21
+ color: transparent;
22
+ }
23
+ .lede { max-width: 56ch; margin: 0 auto; }
24
+
25
+ /* Buttons (pricing CTA variants over the shared .btn base) --------- */
26
+ .btn-p { background: var(--color-cta); color: #fff; box-shadow: 0 7px 20px rgba(21, 122, 74, .28); }
27
+ .btn-p:hover { background: var(--color-cta-hover); }
28
+ .btn-s { background: #fff; color: var(--navy); border: 1.5px solid var(--line-cool); }
29
+ .btn-s:hover { border-color: var(--navy); }
30
+ .btn-tax, .btn-ent { background: var(--coral); color: #fff; }
31
+ .btn-tax:hover, .btn-ent:hover { background: #a5341f; }
32
+
33
+ /* Category tabs ---------------------------------------------------- */
34
+ .tabs {
35
+ display: inline-flex; padding: 6px; margin-top: 40px; gap: 4px;
36
+ flex-wrap: wrap; justify-content: center; background: #fff;
37
+ border: 1px solid var(--line); border-radius: 999px;
38
+ box-shadow: 0 6px 18px rgba(16, 41, 75, .06);
39
+ }
40
+ .tab {
41
+ border: 0; background: transparent; font-weight: 700; font-size: .9rem;
42
+ padding: 11px 22px; min-height: var(--tap); cursor: pointer; font-family: inherit;
43
+ color: var(--muted); border-radius: 999px;
44
+ transition: background .15s, color .15s, box-shadow .15s;
45
+ }
46
+ .tab[aria-selected="true"] { background: var(--navy); color: #fff; }
47
+
48
+ /* Plan grid -------------------------------------------------------- */
49
+ .plans-section { padding-top: 40px; }
50
+ .panel[hidden] { display: none; }
51
+ .plans {
52
+ display: grid; grid-template-columns: repeat(3, 1fr);
53
+ gap: 24px; align-items: start;
54
+ }
55
+ .plans.two { grid-template-columns: repeat(2, minmax(0, 420px)); justify-content: center; }
56
+ .plan {
57
+ padding: 36px; position: relative; background: #fff;
58
+ border: 1px solid var(--line); border-radius: var(--r);
59
+ transition: transform .2s, box-shadow .2s, border-color .2s;
60
+ }
61
+ .plan:hover { transform: translateY(-5px); box-shadow: var(--shadow); }
62
+ .plan.popular {
63
+ border: 2px solid transparent;
64
+ background: linear-gradient(#fff, #fff) padding-box, var(--grad) border-box;
65
+ box-shadow: var(--shadow);
66
+ }
67
+ .pop-badge {
68
+ position: absolute; top: -14px; left: 24px; font-size: .7rem; font-weight: 800;
69
+ letter-spacing: .08em; text-transform: uppercase; padding: 6px 14px;
70
+ background: var(--coral); color: #fff; border-radius: 999px;
71
+ }
72
+ .plan h3 { font-size: 1.22rem; letter-spacing: -.01em; color: var(--navy); }
73
+ .plan .for {
74
+ font-size: .72rem; font-weight: 800; letter-spacing: .1em;
75
+ text-transform: uppercase; margin: 6px 0 14px; color: var(--teal-ink);
76
+ }
77
+ .price { display: flex; align-items: baseline; gap: 6px; }
78
+ .price b { font-size: 2.5rem; letter-spacing: -.03em; font-weight: 800; color: var(--navy); }
79
+ .price span { font-weight: 600; }
80
+ .per { font-size: .86rem; margin-top: 4px; color: var(--muted); }
81
+ .plan hr { border: 0; margin: 24px 0; border-top: 1px solid var(--line); }
82
+ .plan ul { list-style: none; display: flex; flex-direction: column; gap: 12px; margin-bottom: 24px; }
83
+ .plan li { display: flex; gap: 10px; align-items: flex-start; font-size: .92rem; color: var(--muted); }
84
+ .plan li::before { content: "\2713"; font-weight: 800; flex-shrink: 0; color: var(--green); }
85
+ .plan .btn { width: 100%; text-align: center; }
86
+ .minitags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
87
+ .minitags span {
88
+ font-size: .72rem; font-weight: 700; padding: 4px 11px;
89
+ background: #eaf5f2; color: var(--navy); border-radius: 999px;
90
+ }
91
+
92
+ /* Tax card --------------------------------------------------------- */
93
+ .tax-card {
94
+ overflow: hidden; max-width: 920px; margin: 0 auto; background: #fff;
95
+ border: 1px solid var(--line); border-radius: 24px; box-shadow: var(--shadow);
96
+ }
97
+ .tax-card .bar { height: 6px; background: var(--grad); }
98
+ .tax-grid { display: grid; grid-template-columns: 1.4fr 1fr; }
99
+ .tax-left { padding: 40px; }
100
+ .tax-left .for {
101
+ font-size: .72rem; font-weight: 800; letter-spacing: .1em;
102
+ text-transform: uppercase; margin-bottom: 10px; color: var(--coral);
103
+ }
104
+ .tax-left h3 { font-size: 1.65rem; letter-spacing: -.02em; margin-bottom: 10px; color: var(--navy); }
105
+ .tax-left > p { margin-bottom: 24px; color: var(--muted); }
106
+ .tax-left ul { list-style: none; display: flex; flex-direction: column; gap: 14px; }
107
+ .tax-left li { display: flex; gap: 10px; }
108
+ .tax-left li::before { content: "\2713"; font-weight: 800; flex-shrink: 0; margin-top: 2px; color: var(--green); }
109
+ .tax-left li b { display: block; }
110
+ .tax-left li span { font-size: .87rem; color: var(--muted); }
111
+ .tax-right {
112
+ padding: 40px; display: flex; flex-direction: column; justify-content: center;
113
+ text-align: center; background: var(--navy); color: #dbe6f5;
114
+ }
115
+ .tax-right small {
116
+ font-size: .72rem; font-weight: 800; letter-spacing: .1em;
117
+ text-transform: uppercase; color: #8fa5c4;
118
+ }
119
+ .tax-right .price { justify-content: center; margin: 8px 0 4px; }
120
+ .tax-right .price b { color: #fff; }
121
+ .tax-right .price span { color: #8fa5c4; }
122
+ .tax-right .per, .tax-right .alt { color: #8fa5c4; }
123
+ .tax-right .btn { margin-top: 24px; }
124
+ .tax-right .alt { font-size: .85rem; margin-top: 12px; }
125
+ .tax-right .alt a { color: #7fe3b8; font-weight: 700; }
126
+
127
+ /* How it works — steps --------------------------------------------- */
128
+ .alt-bg { background: #fff; border-block: 1px solid var(--line); }
129
+ .steps {
130
+ display: grid; grid-template-columns: repeat(4, 1fr);
131
+ gap: 24px; margin-top: 40px; text-align: center;
132
+ }
133
+ .step { padding: 28px 22px; background: var(--cream); border: 1px solid var(--line); border-radius: 18px; }
134
+ .step .num {
135
+ font-size: .74rem; font-weight: 800; letter-spacing: .14em;
136
+ display: inline-grid; place-items: center; width: 40px; height: 40px;
137
+ border-radius: 50%; background: #eaf5f2; color: var(--teal-ink);
138
+ }
139
+ .step h3 { font-size: 1.02rem; margin: 8px 0 6px; color: var(--navy); }
140
+ .step p { font-size: .87rem; color: var(--muted); }
141
+
142
+ /* Enterprise band -------------------------------------------------- */
143
+ .ent-band {
144
+ padding: 64px 40px; text-align: center;
145
+ background: linear-gradient(135deg, var(--navy), var(--navy-2));
146
+ border-radius: 26px; color: #fff;
147
+ }
148
+ .ent-band .kicker { color: #7fe3b8; }
149
+ .ent-band h2 { color: #fff; }
150
+ .ent-band p { max-width: 52ch; margin: 0 auto; color: #b8c8de; }
151
+ .ent-band .btn { margin-top: 24px; }
152
+ .ent-band .btn-ent { background: var(--color-cta); }
153
+ .ent-band .btn-ent:hover { background: var(--color-cta-hover); }
154
+
155
+ /* Pricing FAQ ------------------------------------------------------ */
156
+ .faq { max-width: 760px; margin: 40px auto 0; }
157
+ .faq details {
158
+ margin-bottom: 12px; overflow: hidden; background: #fff;
159
+ border: 1px solid var(--line); border-radius: 14px;
160
+ }
161
+ .faq summary {
162
+ padding: 18px 20px; font-weight: 700; cursor: pointer; list-style: none;
163
+ display: flex; justify-content: space-between; gap: 12px; color: var(--navy);
164
+ }
165
+ .faq summary::-webkit-details-marker { display: none; }
166
+ .faq summary::after {
167
+ content: "+"; font-size: 1.3rem; font-weight: 600;
168
+ color: var(--teal-ink); transition: transform .2s;
169
+ }
170
+ .faq details[open] summary::after { transform: rotate(45deg); }
171
+ .faq details p { padding: 0 20px 18px; color: var(--muted); }
172
+
173
+ /* Nav active state + footer note (pricing-specific) ---------------- */
174
+ nav.primary a.active {
175
+ color: var(--teal-ink); background: #eaf5f2; padding: 6px 16px;
176
+ border-radius: 999px; font-weight: 700;
177
+ }
178
+ .foot-note { font-size: .88rem; margin-top: 12px; max-width: 34ch; color: var(--muted); }
179
+
180
+ /* Responsive ------------------------------------------------------ */
181
+ @media (max-width: 920px) {
182
+ .plans, .plans.two { grid-template-columns: 1fr; max-width: 440px; margin-inline: auto; }
183
+ .tax-grid { grid-template-columns: 1fr; }
184
+ .steps { grid-template-columns: repeat(2, 1fr); }
185
+ }
186
+ @media (max-width: 560px) {
187
+ .steps { grid-template-columns: 1fr; }
188
+ }
189
+
190
+ /* Dark theme — literal light surfaces + decorative tints */
191
+ @media (prefers-color-scheme: dark) {
192
+ :root:not([data-theme="light"]) {
193
+ .btn-s { background: var(--card); color: var(--ink); }
194
+ .tabs, .plan, .tax-card, .alt-bg, .faq details { background: var(--card); }
195
+ .plan.popular { background: linear-gradient(var(--card), var(--card)) padding-box, var(--grad) border-box; }
196
+ .minitags span, .step .num, nav.primary a.active { background: rgba(43, 179, 166, .16); color: var(--teal-ink); }
197
+ .plan h3, .price b, .tax-left h3, .step h3, .faq summary { color: var(--ink); }
198
+ }
199
+ }
200
+ :root[data-theme="dark"] .btn-s { background: var(--card); color: var(--ink); }
201
+ :root[data-theme="dark"] .tabs,
202
+ :root[data-theme="dark"] .plan,
203
+ :root[data-theme="dark"] .tax-card,
204
+ :root[data-theme="dark"] .alt-bg,
205
+ :root[data-theme="dark"] .faq details { background: var(--card); }
206
+ :root[data-theme="dark"] .plan.popular { background: linear-gradient(var(--card), var(--card)) padding-box, var(--grad) border-box; }
207
+ :root[data-theme="dark"] .minitags span,
208
+ :root[data-theme="dark"] .step .num,
209
+ :root[data-theme="dark"] nav.primary a.active { background: rgba(43, 179, 166, .16); color: var(--teal-ink); }
210
+ :root[data-theme="dark"] .plan h3,
211
+ :root[data-theme="dark"] .price b,
212
+ :root[data-theme="dark"] .tax-left h3,
213
+ :root[data-theme="dark"] .step h3,
214
+ :root[data-theme="dark"] .faq summary { color: var(--ink); }