@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.
- package/LICENSE +58 -0
- package/README.md +40 -0
- package/apps/storefront/.dev.vars.example +41 -0
- package/apps/storefront/.env.example +24 -0
- package/apps/storefront/astro.config.mjs +245 -0
- package/apps/storefront/env.d.ts +155 -0
- package/apps/storefront/lib/ensure-preview-reconcile-secret.sh +31 -0
- package/apps/storefront/lib/resolve-cf-token.sh +48 -0
- package/apps/storefront/lib/resolve-tot-credentials.sh +69 -0
- package/apps/storefront/migrations/0000_baseline.sql +54 -0
- package/apps/storefront/migrations/0001_products_fts.sql +9 -0
- package/apps/storefront/migrations/README.md +54 -0
- package/apps/storefront/migrations/meta/0000_snapshot.json +347 -0
- package/apps/storefront/migrations/meta/0001_snapshot.json +347 -0
- package/apps/storefront/migrations/meta/_journal.json +20 -0
- package/apps/storefront/package.json +41 -0
- package/apps/storefront/public/brand/northwind-logo-dark.svg +4 -0
- package/apps/storefront/public/brand/northwind-logo-light.svg +4 -0
- package/apps/storefront/public/brand/northwind-og.svg +13 -0
- package/apps/storefront/public/favicon.svg +5 -0
- package/apps/storefront/public/js/dashboard-team.js +147 -0
- package/apps/storefront/public/js/dashboard-vendor-search.js +115 -0
- package/apps/storefront/src/components/Badge.astro +34 -0
- package/apps/storefront/src/components/Breadcrumbs.astro +45 -0
- package/apps/storefront/src/components/CollectionCard.astro +56 -0
- package/apps/storefront/src/components/EmptyState.astro +35 -0
- package/apps/storefront/src/components/Img.astro +68 -0
- package/apps/storefront/src/components/ProductCard.astro +228 -0
- package/apps/storefront/src/components/Section.astro +39 -0
- package/apps/storefront/src/components/Seo.astro +70 -0
- package/apps/storefront/src/components/WidgetFrame.astro +34 -0
- package/apps/storefront/src/components/auth/AuthBadge.astro +44 -0
- package/apps/storefront/src/components/chrome/AnnouncementBar.astro +108 -0
- package/apps/storefront/src/components/chrome/MegaMenu.astro +26 -0
- package/apps/storefront/src/components/chrome/NavDropdown.astro +116 -0
- package/apps/storefront/src/components/chrome/SiteFooter.astro +181 -0
- package/apps/storefront/src/components/chrome/SiteHeader.astro +181 -0
- package/apps/storefront/src/components/chrome/UtilityNav.astro +79 -0
- package/apps/storefront/src/components/commerce/FoxyLoader.astro +23 -0
- package/apps/storefront/src/components/commerce/PriceDisplay.astro +91 -0
- package/apps/storefront/src/components/commerce/ProductCarousel.astro +197 -0
- package/apps/storefront/src/components/commerce/ProductGrid.astro +75 -0
- package/apps/storefront/src/components/commerce/RatingStars.astro +58 -0
- package/apps/storefront/src/components/compliance/NicotineWarning.astro +33 -0
- package/apps/storefront/src/components/home/Hero.astro +164 -0
- package/apps/storefront/src/components/islands/AgeGate.tsx +105 -0
- package/apps/storefront/src/components/islands/ImageGallery.tsx +237 -0
- package/apps/storefront/src/components/islands/IsolatedAgeGate.tsx +73 -0
- package/apps/storefront/src/components/islands/MobileNav.tsx +239 -0
- package/apps/storefront/src/components/islands/QuickView.tsx +138 -0
- package/apps/storefront/src/components/islands/RecentlyViewed.tsx +122 -0
- package/apps/storefront/src/components/islands/SavedList.tsx +99 -0
- package/apps/storefront/src/components/islands/SearchTypeahead.tsx +248 -0
- package/apps/storefront/src/components/islands/VariantSelector.tsx +378 -0
- package/apps/storefront/src/components/marketing/CardGrid.astro +72 -0
- package/apps/storefront/src/components/marketing/CodeSample.astro +20 -0
- package/apps/storefront/src/components/marketing/CtaBand.astro +24 -0
- package/apps/storefront/src/components/marketing/Faq.astro +37 -0
- package/apps/storefront/src/components/marketing/Integrations.astro +63 -0
- package/apps/storefront/src/components/marketing/MarketingBlocks.astro +53 -0
- package/apps/storefront/src/components/marketing/MarketingCtas.astro +48 -0
- package/apps/storefront/src/components/marketing/MarketingHero.astro +72 -0
- package/apps/storefront/src/components/marketing/ProofStrip.astro +37 -0
- package/apps/storefront/src/components/marketing/SplitCompare.astro +53 -0
- package/apps/storefront/src/components/marketing/Steps.astro +36 -0
- package/apps/storefront/src/components/marketing/Testimonials.astro +38 -0
- package/apps/storefront/src/components/marketing/TrustBar.astro +22 -0
- package/apps/storefront/src/components/nav/Footer.astro +148 -0
- package/apps/storefront/src/components/nav/Header.astro +190 -0
- package/apps/storefront/src/components/plp/ActiveFilters.astro +79 -0
- package/apps/storefront/src/components/plp/FacetSidebar.astro +146 -0
- package/apps/storefront/src/components/plp/Pagination.astro +99 -0
- package/apps/storefront/src/components/plp/SortSelect.astro +64 -0
- package/apps/storefront/src/config/devTenants.ts +16 -0
- package/apps/storefront/src/config/kvTenantResolver.ts +87 -0
- package/apps/storefront/src/config/resolver.ts +46 -0
- package/apps/storefront/src/config/tenants.ts +193 -0
- package/apps/storefront/src/layouts/Layout.astro +303 -0
- package/apps/storefront/src/lib/analytics/index.ts +47 -0
- package/apps/storefront/src/lib/auth/brokerAssertion.ts +136 -0
- package/apps/storefront/src/lib/auth/devAuth.ts +90 -0
- package/apps/storefront/src/lib/auth/gatePage.ts +81 -0
- package/apps/storefront/src/lib/auth/identityToken.ts +341 -0
- package/apps/storefront/src/lib/auth/loginGate.ts +107 -0
- package/apps/storefront/src/lib/auth/route.ts +146 -0
- package/apps/storefront/src/lib/auth/session.ts +203 -0
- package/apps/storefront/src/lib/auth/totAccessClient.ts +503 -0
- package/apps/storefront/src/lib/basePath.ts +41 -0
- package/apps/storefront/src/lib/cfImage.ts +55 -0
- package/apps/storefront/src/lib/chrome/model.ts +65 -0
- package/apps/storefront/src/lib/colors.ts +97 -0
- package/apps/storefront/src/lib/content-edit/client.ts +230 -0
- package/apps/storefront/src/lib/content-edit/index.ts +14 -0
- package/apps/storefront/src/lib/content-edit/route.ts +25 -0
- package/apps/storefront/src/lib/content-edit/types.ts +19 -0
- package/apps/storefront/src/lib/cspStaticHashes.ts +24 -0
- package/apps/storefront/src/lib/d1/catalog.ts +289 -0
- package/apps/storefront/src/lib/dashboard/staffAdmission.ts +43 -0
- package/apps/storefront/src/lib/dashboard/staffVendorAccess.ts +449 -0
- package/apps/storefront/src/lib/dashboard/tenantSelection.ts +136 -0
- package/apps/storefront/src/lib/dashboard/vendorQuery.ts +61 -0
- package/apps/storefront/src/lib/demoGate.ts +113 -0
- package/apps/storefront/src/lib/dev/ai-widget-client.js +127 -0
- package/apps/storefront/src/lib/dev/cliSignInCode.ts +132 -0
- package/apps/storefront/src/lib/diag/redact.ts +20 -0
- package/apps/storefront/src/lib/edgeCache.ts +128 -0
- package/apps/storefront/src/lib/email/magicLinkInviteEmail.ts +62 -0
- package/apps/storefront/src/lib/env.ts +60 -0
- package/apps/storefront/src/lib/fixtures/sampleProducts.ts +130 -0
- package/apps/storefront/src/lib/format.ts +29 -0
- package/apps/storefront/src/lib/foxyCommerce.ts +49 -0
- package/apps/storefront/src/lib/imageAttrs.ts +55 -0
- package/apps/storefront/src/lib/jsonld.ts +136 -0
- package/apps/storefront/src/lib/maintenance.ts +71 -0
- package/apps/storefront/src/lib/memoryKv.ts +32 -0
- package/apps/storefront/src/lib/messaging/messagesClient.ts +143 -0
- package/apps/storefront/src/lib/placeholder.ts +99 -0
- package/apps/storefront/src/lib/previewReload.ts +125 -0
- package/apps/storefront/src/lib/rawMarketingHtml.ts +133 -0
- package/apps/storefront/src/lib/search/index.ts +74 -0
- package/apps/storefront/src/lib/sections.ts +129 -0
- package/apps/storefront/src/lib/securityHeaders.ts +31 -0
- package/apps/storefront/src/lib/storyblok/content-model.ts +289 -0
- package/apps/storefront/src/lib/storyblok/provider.ts +524 -0
- package/apps/storefront/src/lib/tenantRouting.ts +91 -0
- package/apps/storefront/src/lib/tot/ToTClient.ts +177 -0
- package/apps/storefront/src/lib/tot/d1Client.ts +62 -0
- package/apps/storefront/src/lib/tot/query.ts +187 -0
- package/apps/storefront/src/lib/tot/totClientInterface.ts +30 -0
- package/apps/storefront/src/lib/url.ts +119 -0
- package/apps/storefront/src/lib/wishlist.ts +63 -0
- package/apps/storefront/src/middleware/index.ts +413 -0
- package/apps/storefront/src/pages/404.astro +61 -0
- package/apps/storefront/src/pages/[...slug].astro +90 -0
- package/apps/storefront/src/pages/api/auth/logout.ts +21 -0
- package/apps/storefront/src/pages/api/auth/magic-exchange.ts +107 -0
- package/apps/storefront/src/pages/api/auth/send.ts +85 -0
- package/apps/storefront/src/pages/api/auth/verify.ts +135 -0
- package/apps/storefront/src/pages/api/cache-purge.ts +44 -0
- package/apps/storefront/src/pages/api/content-edit/ai-edit.ts +64 -0
- package/apps/storefront/src/pages/api/csp-report.ts +25 -0
- package/apps/storefront/src/pages/api/dashboard/enter-vendor.ts +124 -0
- package/apps/storefront/src/pages/api/dashboard/vendor-search.ts +120 -0
- package/apps/storefront/src/pages/api/dev/cli-signin-code.ts +44 -0
- package/apps/storefront/src/pages/api/newsletter.ts +104 -0
- package/apps/storefront/src/pages/api/request-access.ts +172 -0
- package/apps/storefront/src/pages/auth/login.astro +149 -0
- package/apps/storefront/src/pages/auth/magic.astro +105 -0
- package/apps/storefront/src/pages/capabilities.astro +292 -0
- package/apps/storefront/src/pages/collections/[handle].astro +154 -0
- package/apps/storefront/src/pages/collections/index.astro +59 -0
- package/apps/storefront/src/pages/dashboard/[appDomain]/index.astro +100 -0
- package/apps/storefront/src/pages/dashboard/[appDomain]/team.astro +154 -0
- package/apps/storefront/src/pages/dashboard/index.astro +160 -0
- package/apps/storefront/src/pages/dev.astro +653 -0
- package/apps/storefront/src/pages/index.astro +290 -0
- package/apps/storefront/src/pages/llms.txt.ts +92 -0
- package/apps/storefront/src/pages/products/[handle].astro +443 -0
- package/apps/storefront/src/pages/robots.txt.ts +24 -0
- package/apps/storefront/src/pages/saved.astro +35 -0
- package/apps/storefront/src/pages/search.astro +150 -0
- package/apps/storefront/src/pages/sitemap.xml.ts +78 -0
- package/apps/storefront/src/pages/style-guide/[tenant]/[theme].astro +646 -0
- package/apps/storefront/src/pages/style-guide/[tenant]/index.astro +85 -0
- package/apps/storefront/src/pages/style-guide/index.astro +94 -0
- package/apps/storefront/src/pages/tenants/[id]/[...path].ts +57 -0
- package/apps/storefront/src/styles/global.css +277 -0
- package/apps/storefront/src/themes/reference.ts +61 -0
- package/apps/storefront/src/themes/schema.ts +111 -0
- package/apps/storefront/src/themes/tenants/index.ts +51 -0
- package/apps/storefront/tsconfig.json +16 -0
- package/apps/storefront/vitest.config.ts +22 -0
- package/apps/storefront/wrangler.toml +175 -0
- package/package.json +23 -0
- package/packages/public-runtime/LICENSE +58 -0
- package/packages/public-runtime/package.json +22 -0
- package/packages/public-runtime/src/binary-path.ts +68 -0
- package/packages/public-runtime/src/capabilities.ts +89 -0
- package/packages/public-runtime/src/catalog-api.ts +81 -0
- package/packages/public-runtime/src/catalog-d1.ts +192 -0
- package/packages/public-runtime/src/csp.ts +109 -0
- package/packages/public-runtime/src/customization-preview.ts +197 -0
- package/packages/public-runtime/src/customization-reconcile.ts +63 -0
- package/packages/public-runtime/src/customization-runtime.ts +157 -0
- package/packages/public-runtime/src/customization-scripts.ts +64 -0
- package/packages/public-runtime/src/customization-versioning.ts +95 -0
- package/packages/public-runtime/src/foxy.ts +184 -0
- package/packages/public-runtime/src/index.ts +30 -0
- package/packages/public-runtime/src/product.ts +159 -0
- package/packages/public-runtime/src/search.ts +45 -0
- package/packages/public-runtime/src/tenant-assets.ts +444 -0
- package/packages/public-runtime/src/tenant.ts +243 -0
- package/packages/public-runtime/tsconfig.json +8 -0
- package/packages/public-runtime/vitest.config.ts +8 -0
- package/pnpm-workspace.yaml +7 -0
- package/scripts/build/copy-tenant-assets.mjs +69 -0
- package/scripts/tot-dev.mjs +439 -0
- package/tenants/bigdvapor/content/blog.json +52 -0
- package/tenants/bigdvapor/content/chrome.html +149 -0
- package/tenants/bigdvapor/content/chrome.json +47 -0
- package/tenants/bigdvapor/content/home.html +463 -0
- package/tenants/bigdvapor/content/home.json +73 -0
- package/tenants/bigdvapor/content/pages/about.json +5 -0
- package/tenants/bigdvapor/content/pages/privacy.json +6 -0
- package/tenants/bigdvapor/content/pages/shipping-returns.json +6 -0
- package/tenants/bigdvapor/content/pages-html/blogs/news.html +86 -0
- package/tenants/bigdvapor/content/pages-html/pages/about-us.html +106 -0
- package/tenants/bigdvapor/content/pages-html/pages/contact-us.html +61 -0
- package/tenants/bigdvapor/content/pages-html/pages/privacy-policy.html +72 -0
- package/tenants/bigdvapor/content/pages-html/pages/shipping-returns.html +172 -0
- package/tenants/bigdvapor/content/themes/bigd-navy.json +109 -0
- package/tenants/bigdvapor/public/img/brands/adjust-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/again-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/al-fakher-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/arro-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/cookies-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/core-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/cyclone-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/dinner-lady-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/extre-bar-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/fifty-bar-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/firerose-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/flavor-beast-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/foger-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/kk-energy-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/kumi-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/lost-vape-dispoable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/melo-labs-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/mixo-vape-disposable.webp +0 -0
- package/tenants/bigdvapor/public/img/brands/one-tank-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/oxbar-vape-disposable.webp +0 -0
- package/tenants/bigdvapor/public/img/brands/pillow-talk-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/pod-king-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/raz-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/hero-texas.jpg +0 -0
- package/tenants/bigdvapor/public/img/og.jpg +0 -0
- package/tenants/bigdvapor/public/img/pages/AdobeStock_202106312_web.jpg +0 -0
- package/tenants/bigdvapor/public/img/pages/CREW_web.jpg +0 -0
- package/tenants/bigdvapor/public/img/pages/Hero-Image.jpg +0 -0
- package/tenants/bigdvapor/public/img/tiles/adjust.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/again.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/al-fakher.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/arro.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/cookies.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/core.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/cyclone.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/disposables.svg +23 -0
- package/tenants/bigdvapor/public/logo-wordmark.png +0 -0
- package/tenants/bigdvapor/public/pages/home.css +118 -0
- package/tenants/bigdvapor/public/pages/mkt.css +185 -0
- package/tenants/bigdvapor/public/pages/page.css +148 -0
- package/tenants/bigdvapor/public/themes/bigd-navy.css +73 -0
- package/tenants/bigdvapor/theme.json +12 -0
- package/tenants/giantvapes/content/chrome.html +152 -0
- package/tenants/giantvapes/content/chrome.json +94 -0
- package/tenants/giantvapes/content/home.html +194 -0
- package/tenants/giantvapes/content/home.json +50 -0
- package/tenants/giantvapes/content/pages/about.json +10 -0
- package/tenants/giantvapes/content/pages/privacy.json +6 -0
- package/tenants/giantvapes/content/pages/shipping-returns.json +6 -0
- package/tenants/giantvapes/content/pages-html/blogs/news.html +68 -0
- package/tenants/giantvapes/content/pages-html/pages/about-us.html +95 -0
- package/tenants/giantvapes/content/pages-html/pages/contact-us.html +68 -0
- package/tenants/giantvapes/content/pages-html/pages/privacy-policy.html +65 -0
- package/tenants/giantvapes/content/pages-html/pages/shipping-returns.html +77 -0
- package/tenants/giantvapes/content/themes/giant-navy.json +73 -0
- package/tenants/giantvapes/public/img/hero-suicide-bunny.jpg +0 -0
- package/tenants/giantvapes/public/img/hero.webp +0 -0
- package/tenants/giantvapes/public/img/og.jpg +0 -0
- package/tenants/giantvapes/public/logo-wordmark.png +0 -0
- package/tenants/giantvapes/public/pages/home.css +120 -0
- package/tenants/giantvapes/public/pages/mkt.css +185 -0
- package/tenants/giantvapes/public/pages/page.css +155 -0
- package/tenants/giantvapes/public/themes/giant-navy.css +76 -0
- package/tenants/giantvapes/theme.json +39 -0
- package/tenants/home/content/chrome.json +11 -0
- package/tenants/home/content/home.html +304 -0
- package/tenants/home/content/home.json +13 -0
- package/tenants/home/public/js/storefront.js +210 -0
- package/tenants/home/public/logo-wordmark.png +0 -0
- package/tenants/home/public/pages/storefront.css +212 -0
- package/tenants/home/theme.json +6 -0
- package/tenants/tokenoftrust/.tot/config.json +9 -0
- package/tenants/tokenoftrust/content/chrome.json +55 -0
- package/tenants/tokenoftrust/content/home.html +723 -0
- package/tenants/tokenoftrust/content/home.json +233 -0
- package/tenants/tokenoftrust/content/pages-html/careers.html +231 -0
- package/tenants/tokenoftrust/content/pages-html/company.html +275 -0
- package/tenants/tokenoftrust/content/pages-html/contact/contact-sales.html +188 -0
- package/tenants/tokenoftrust/content/pages-html/contact/startup-apply.html +206 -0
- package/tenants/tokenoftrust/content/pages-html/contact.html +178 -0
- package/tenants/tokenoftrust/content/pages-html/industries/adult-content-age-verification.html +286 -0
- package/tenants/tokenoftrust/content/pages-html/industries/cannabis.html +277 -0
- package/tenants/tokenoftrust/content/pages-html/pact-act-pricing.html +289 -0
- package/tenants/tokenoftrust/content/pages-html/pricing.html +483 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-estimation.html +278 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-gate.html +279 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-verification.html +265 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance.html +173 -0
- package/tenants/tokenoftrust/content/pages-html/product/compliance/aml.html +214 -0
- package/tenants/tokenoftrust/content/pages-html/product/compliance/pact-act.html +226 -0
- package/tenants/tokenoftrust/content/pages-html/product/fraud-prevention.html +254 -0
- package/tenants/tokenoftrust/content/pages-html/product/social-profile-verification.html +212 -0
- package/tenants/tokenoftrust/content/pages-html/product/tax/excise-tax.html +213 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/aml.html +259 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/biometric-selfie.html +305 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/coverage.html +254 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/document-verification.html +306 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/electronic-identity-verification.html +304 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/government-id-verification.html +308 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification.html +183 -0
- package/tenants/tokenoftrust/content/pages-html/product.html +228 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations/bigcommerce-integration.html +220 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations/shopify-integration.html +221 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations/wordpress.html +220 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations.html +172 -0
- package/tenants/tokenoftrust/content/pages-html/resources/refer-a-friend-program.html +317 -0
- package/tenants/tokenoftrust/content/pages-html/resources.html +177 -0
- package/tenants/tokenoftrust/content/pages-html/reviews.html +273 -0
- package/tenants/tokenoftrust/content/pages-html/solutions.html +292 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-alcohol.html +289 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-cigars-and-tobacco.html +286 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-firearm-accessories.html +267 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-peptides.html +273 -0
- package/tenants/tokenoftrust/content/themes/tot-navy.json +88 -0
- package/tenants/tokenoftrust/public/favicon.png +0 -0
- package/tenants/tokenoftrust/public/logo-icon.png +0 -0
- package/tenants/tokenoftrust/public/logo-wordmark.png +0 -0
- package/tenants/tokenoftrust/public/pages/company.css +108 -0
- package/tenants/tokenoftrust/public/pages/home.css +457 -0
- package/tenants/tokenoftrust/public/pages/mkt.css +482 -0
- package/tenants/tokenoftrust/public/pages/pricing.css +214 -0
- package/tenants/tokenoftrust/public/pages/solutions.css +66 -0
- package/tenants/tokenoftrust/public/themes/tot-navy-1.0.0.css +136 -0
- package/tenants/tokenoftrust/public/themes/tot-navy.css +358 -0
- package/tenants/tokenoftrust/theme.json +31 -0
- package/tsconfig.base.json +20 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "bigd-navy",
|
|
3
|
+
"role": "current",
|
|
4
|
+
"name": "Big D Vapor — Navy",
|
|
5
|
+
"description": "Faithful T0 clone of bigdvapor.com's Shopify theme: royal navy (#0030a0) on white with a red sale accent. Poppins display over Inter body. Token values mirror themes/bigd-navy.css so this guide re-skins the standard commerce + chrome components in-brand.",
|
|
6
|
+
"source": "bigdvapor.com (Shopify) reconstruction",
|
|
7
|
+
"stylesheet": "/tenants/bigdvapor/themes/bigd-navy.css",
|
|
8
|
+
"concept": { "id": "bigd-navy", "version": "1.0.0", "baseline": "1.0.0" },
|
|
9
|
+
"status": "approved",
|
|
10
|
+
"claimsPolicy": "Ratings, testimonials, badges, and guarantees in this guide are PLACEHOLDER / needs-review — never ship fabricated proof for Big D Vapor.",
|
|
11
|
+
"storyboard": {
|
|
12
|
+
"status": "draft",
|
|
13
|
+
"summary": "bigd-navy: royal navy (#0030a0) on white, red sale accent — a faithful clone of bigdvapor.com's Shopify theme. The home page defines the brand system + chrome; the subpages define editorial-split and contact-conversion patterns. This is the contract every remaining bigdvapor page follows.",
|
|
14
|
+
"inspirationPages": [
|
|
15
|
+
{
|
|
16
|
+
"slug": "/",
|
|
17
|
+
"role": "brand-system-and-chrome",
|
|
18
|
+
"captures": [
|
|
19
|
+
"brand arrival: navy full-color wordmark on white",
|
|
20
|
+
"chrome: FDA warning bar + red scrolling shipping marquee + utility nav",
|
|
21
|
+
"sticky header: logo + search + account + cart-count; mega-nav with NEW badge and carets",
|
|
22
|
+
"two-up hero, 3 promo cards, icon category tiles",
|
|
23
|
+
"footer: columns + newsletter + payment badges + compliance line"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"slug": "/pages/about-us",
|
|
28
|
+
"role": "editorial-split",
|
|
29
|
+
"captures": [
|
|
30
|
+
"page-hero image overlay heading",
|
|
31
|
+
"alternating story/mission/service split sections (copy + real photo)",
|
|
32
|
+
"trusted-brands + find-your-favorite category sections"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"slug": "/pages/contact-us",
|
|
37
|
+
"role": "contact-conversion",
|
|
38
|
+
"captures": [
|
|
39
|
+
"page hero + intro",
|
|
40
|
+
"contact-info blocks (call / email / Dallas TX)",
|
|
41
|
+
"contact form (name / email / phone / comment)"
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"preview": {
|
|
47
|
+
"componentVars": {
|
|
48
|
+
"--color-bg": "#ffffff",
|
|
49
|
+
"--color-surface": "#f4f7fc",
|
|
50
|
+
"--color-text": "#14181f",
|
|
51
|
+
"--color-muted": "#5a6472",
|
|
52
|
+
"--color-primary": "#0030a0",
|
|
53
|
+
"--color-primary-contrast": "#ffffff",
|
|
54
|
+
"--color-accent": "#0030a0",
|
|
55
|
+
"--color-border": "#e2e8f2",
|
|
56
|
+
"--color-success": "#1f8a4c",
|
|
57
|
+
"--color-sale": "#d81f2a",
|
|
58
|
+
"--radius-sm": "6px",
|
|
59
|
+
"--radius-md": "10px",
|
|
60
|
+
"--radius-lg": "16px",
|
|
61
|
+
"--radius-full": "999px",
|
|
62
|
+
"--shadow-sm": "0 1px 2px rgba(16,26,64,.06), 0 1px 3px rgba(16,26,64,.08)",
|
|
63
|
+
"--shadow-md": "0 6px 18px rgba(16,26,64,.10)",
|
|
64
|
+
"--shadow-lg": "0 18px 48px rgba(16,26,64,.16)",
|
|
65
|
+
"--container-max": "1240px",
|
|
66
|
+
"--font-display": "\"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, sans-serif",
|
|
67
|
+
"--font-body": "\"Inter\", system-ui, -apple-system, Segoe UI, Roboto, sans-serif",
|
|
68
|
+
"--font-mono": "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"tokens": {
|
|
72
|
+
"color": [
|
|
73
|
+
{ "name": "navy", "var": "--navy", "value": "#0030a0", "role": "Primary brand · buttons, sticky header, focus outline" },
|
|
74
|
+
{ "name": "navy-dark", "var": "--navy-dark", "value": "#002478", "role": "Navy hover / pressed on primary" },
|
|
75
|
+
{ "name": "navy-ink", "var": "--navy-ink", "value": "#001a5c", "role": "Deep navy · footer & dark sections background" },
|
|
76
|
+
{ "name": "ink", "var": "--ink", "value": "#14181f", "role": "Body text · headings" },
|
|
77
|
+
{ "name": "muted", "var": "--muted", "value": "#5a6472", "role": "Secondary text · muted" },
|
|
78
|
+
{ "name": "sale", "var": "--sale", "value": "#d81f2a", "role": "Sale / clearance price accent" },
|
|
79
|
+
{ "name": "ok", "var": "--ok", "value": "#1f8a4c", "role": "In-stock / availability accent (mkt.css)" },
|
|
80
|
+
{ "name": "bg", "var": "--bg", "value": "#ffffff", "role": "Page background (white)" },
|
|
81
|
+
{ "name": "surface", "var": "--surface", "value": "#f4f7fc", "role": "Raised surface / section tint" },
|
|
82
|
+
{ "name": "surface-2", "var": "--surface-2", "value": "#eaf0fb", "role": "Deeper surface / hover fill" },
|
|
83
|
+
{ "name": "border", "var": "--border", "value": "#e2e8f2", "role": "Hairline border / dividers" }
|
|
84
|
+
],
|
|
85
|
+
"type": {
|
|
86
|
+
"sans": "\"Inter\", system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif",
|
|
87
|
+
"display": "\"Poppins\", var(--font-body)",
|
|
88
|
+
"mono": "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",
|
|
89
|
+
"scale": [
|
|
90
|
+
{ "name": "h1", "value": "clamp(2rem, 4.6vw, 3.15rem)", "weight": 700 },
|
|
91
|
+
{ "name": "h2", "value": "clamp(1.6rem, 3.2vw, 2.35rem)", "weight": 700 },
|
|
92
|
+
{ "name": "h3", "value": "1.2rem", "weight": 700 },
|
|
93
|
+
{ "name": "body", "value": "1rem (16px min)", "weight": 400 },
|
|
94
|
+
{ "name": "small", "value": "0.875rem (14px floor)", "weight": 400 }
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
"space": [
|
|
98
|
+
{ "name": "s1", "value": "8px" }, { "name": "s2", "value": "16px" }, { "name": "s3", "value": "24px" },
|
|
99
|
+
{ "name": "s4", "value": "40px" }, { "name": "s5", "value": "64px" }, { "name": "s6", "value": "96px" }
|
|
100
|
+
],
|
|
101
|
+
"shape": [
|
|
102
|
+
{ "name": "radius-sm", "var": "--radius-sm", "value": "6px" },
|
|
103
|
+
{ "name": "radius", "var": "--radius", "value": "10px" },
|
|
104
|
+
{ "name": "radius-lg", "var": "--radius-lg", "value": "16px" },
|
|
105
|
+
{ "name": "shadow", "var": "--shadow-md", "value": "0 6px 18px rgba(16,26,64,.10)" },
|
|
106
|
+
{ "name": "tap-target", "var": "--tap", "value": "44px" }
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 294 294" height="294" width="294">
|
|
2
|
+
<mask height="294" width="294" y="0" x="0" maskUnits="userSpaceOnUse" style="mask-type:alpha" id="mask0_217_297">
|
|
3
|
+
<rect fill="#D9D9D9" height="294" width="294"></rect>
|
|
4
|
+
</mask>
|
|
5
|
+
<g mask="url(#mask0_217_297)">
|
|
6
|
+
</g>
|
|
7
|
+
<g clip-path="url(#clip0_217_297)">
|
|
8
|
+
<path fill="#E0E0E0" d="M175.684 90.332H106.789C98.1385 90.332 91.1316 97.376 91.1316 106.073V213.11C91.1316 221.807 98.1385 228.851 106.789 228.851H175.684C184.335 228.851 191.342 221.807 191.342 213.11V106.073C191.342 97.376 184.335 90.332 175.684 90.332Z"></path>
|
|
9
|
+
<path fill="#F5F5F5" d="M175.684 90.332C184.335 90.332 191.342 97.376 191.342 106.073V191.073H122.447C115.519 191.073 109.921 185.445 109.921 178.48V90.332H175.684Z"></path>
|
|
10
|
+
<path fill="#161AC4" d="M191.342 115.52H91.1316V203.668H191.342V115.52Z"></path>
|
|
11
|
+
<path fill="#367AFF" d="M109.921 178.482V115.52H191.342V191.075H122.447C115.519 191.075 109.921 185.448 109.921 178.482Z"></path>
|
|
12
|
+
<path fill="#E0E0E0" d="M175.684 65.1484H150.632L149.457 90.3336H175.684V65.1484Z"></path>
|
|
13
|
+
<path fill="#E0E0E0" d="M191.342 172.184H197.605C201.05 172.184 203.868 175.017 203.868 178.48V191.072C203.868 194.535 201.05 197.369 197.605 197.369H191.342V172.184Z"></path>
|
|
14
|
+
<path fill="#F41C35" d="M128.711 134.406L138.105 150.147H122.447L150.632 184.777L144.368 162.74H160.026L144.368 134.406H128.711Z"></path>
|
|
15
|
+
<path fill="black" d="M175.684 62C177.407 62 178.816 63.4167 178.816 65.1481V87.4606C187.858 88.9954 194.474 96.8657 194.474 106.074V169.037H197.605C202.812 169.037 207 173.248 207 178.481V191.074C207 196.308 202.812 200.519 197.605 200.519H194.474V213.111C194.474 223.539 186.058 232 175.684 232H106.789C96.4161 232 88 223.539 88 213.111V106.074C88 95.6458 96.4161 87.1852 106.789 87.1852H147.5V65.1481C147.5 63.4167 148.909 62 150.632 62M147.5 87.1852V68.2963H153.763V87.1852H147.5ZM153.763 68.2963V87.1852H160.026V68.2963H153.763ZM166.289 68.2963V87.1852H172.553V68.2963H166.289ZM175.684 93.4815H106.789C99.8609 93.4815 94.2632 99.1088 94.2632 106.074V112.37H188.211V106.074C188.211 99.1088 182.613 93.4815 175.684 93.4815ZM94.2632 118.667V200.519H188.211V118.667H94.2632ZM197.605 194.222C199.328 194.222 200.737 192.806 200.737 191.074V178.481C200.737 176.75 199.328 175.333 197.605 175.333H194.474V194.222H197.605ZM106.789 225.704H175.684C182.613 225.704 188.211 220.076 188.211 213.111V206.815H94.2632V213.111C94.2632 220.076 99.8609 225.704 106.789 225.704Z"></path>
|
|
16
|
+
<path fill="black" d="M162.727 164.353C162.179 165.297 161.122 165.887 160.026 165.887H148.518L153.646 183.911C154.115 185.563 153.137 187.334 151.493 187.806C150.279 188.161 148.988 187.728 148.205 186.783L120.02 152.154C118.924 150.816 119.12 148.809 120.451 147.707C120.999 147.235 121.704 146.999 122.447 146.999H132.586L126.049 136.019C125.148 134.524 125.657 132.596 127.106 131.691C127.575 131.415 128.163 131.258 128.711 131.258H144.368C145.504 131.258 146.561 131.887 147.109 132.871L162.766 161.205C163.315 162.188 163.275 163.369 162.727 164.353ZM142.529 137.554H134.23L140.767 148.533C141.667 150.029 141.159 151.957 139.71 152.862C139.24 153.137 138.653 153.295 138.105 153.295H129.063L143.468 171.003L141.354 163.605C140.885 161.952 141.824 160.181 143.507 159.709C143.781 159.631 144.055 159.591 144.368 159.591H154.703L142.529 137.554Z"></path>
|
|
17
|
+
</g>
|
|
18
|
+
<defs>
|
|
19
|
+
<clipPath id="clip0_217_297">
|
|
20
|
+
<rect transform="matrix(-1 0 0 1 207 62)" fill="white" height="170" width="119"></rect>
|
|
21
|
+
</clipPath>
|
|
22
|
+
</defs>
|
|
23
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
Big D Vapor — home page (pixel clone of www.bigdvapor.com, above-the-fold).
|
|
3
|
+
Section order + chrome mirror the live Shopify theme. Shared base in
|
|
4
|
+
themes/bigd-navy.css + pages/mkt.css. See playbook/site-migration/page-port.md §3.
|
|
5
|
+
========================================================================== */
|
|
6
|
+
|
|
7
|
+
/* --- Hero: TWO-UP (banner + promo tile), no overlay text ------------------ */
|
|
8
|
+
.hero2 { padding-block: clamp(16px, 2vw, 24px); }
|
|
9
|
+
.hero2 .container { display: grid; grid-template-columns: 2fr 1fr; gap: 16px; }
|
|
10
|
+
.hero2 a { display: block; border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-sm); }
|
|
11
|
+
.hero2 img { width: 100%; height: clamp(260px, 34vw, 420px); object-fit: cover; }
|
|
12
|
+
.hero2 .promo-tile { background: linear-gradient(135deg, #0b1020, var(--navy-ink)); }
|
|
13
|
+
|
|
14
|
+
/* --- 3 promo cards -------------------------------------------------------- */
|
|
15
|
+
.promos { padding-block: clamp(12px, 2vw, 20px); }
|
|
16
|
+
.promos .container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
|
|
17
|
+
.promo-card {
|
|
18
|
+
position: relative; min-height: 240px; border-radius: var(--radius-lg); overflow: hidden;
|
|
19
|
+
display: flex; flex-direction: column; justify-content: flex-start; padding: 28px; color: #fff;
|
|
20
|
+
}
|
|
21
|
+
.promo-card--blue { background: linear-gradient(160deg, #1466ff, var(--navy)); }
|
|
22
|
+
.promo-card--red { background: linear-gradient(160deg, #ff3b46, var(--sale)); }
|
|
23
|
+
.promo-card--img { background: #10131c; padding: 0; }
|
|
24
|
+
.promo-card--img img { width: 100%; height: 100%; object-fit: cover; }
|
|
25
|
+
.promo-card h3 { color: #fff; font-size: 1.7rem; }
|
|
26
|
+
.promo-card p { color: rgba(255,255,255,.88); margin-top: 4px; font-weight: 500; }
|
|
27
|
+
.promo-card .link { margin-top: 14px; font-family: var(--font-display); font-weight: 700; color: #fff; }
|
|
28
|
+
.promo-card .link::after { content: " ›"; }
|
|
29
|
+
|
|
30
|
+
/* --- Categories (icon cards, light-blue) ---------------------------------- */
|
|
31
|
+
.cats { padding-block: clamp(2rem, 4vw, 3.5rem); }
|
|
32
|
+
.cats h2 { text-align: center; margin-bottom: clamp(1.5rem, 3vw, 2.5rem); }
|
|
33
|
+
.cats .grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: clamp(12px, 1.6vw, 20px); }
|
|
34
|
+
.cat-icon-card {
|
|
35
|
+
display: flex; flex-direction: column; align-items: center; gap: 16px;
|
|
36
|
+
background: #fff; border: 1px solid var(--border); border-radius: var(--radius-lg);
|
|
37
|
+
padding: 26px 16px; text-align: center; transition: transform .14s, box-shadow .14s;
|
|
38
|
+
}
|
|
39
|
+
.cat-icon-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); }
|
|
40
|
+
.cat-icon-card .ico {
|
|
41
|
+
width: 92px; height: 92px; border-radius: 18px; background: var(--surface-2);
|
|
42
|
+
display: grid; place-items: center;
|
|
43
|
+
}
|
|
44
|
+
.cat-icon-card .ico svg { width: 52px; height: 52px; stroke: var(--navy); fill: none; stroke-width: 1.6; }
|
|
45
|
+
.cat-icon-card span { font-family: var(--font-display); font-weight: 700; color: var(--ink); }
|
|
46
|
+
|
|
47
|
+
/* --- Responsive ----------------------------------------------------------- */
|
|
48
|
+
@media (max-width: 900px) {
|
|
49
|
+
.hero2 .container { grid-template-columns: 1fr; }
|
|
50
|
+
.hero2 .promo-tile { display: none; }
|
|
51
|
+
.promos .container { grid-template-columns: 1fr; }
|
|
52
|
+
.cats .grid { grid-template-columns: repeat(3, 1fr); }
|
|
53
|
+
}
|
|
54
|
+
@media (max-width: 560px) {
|
|
55
|
+
.cats .grid { grid-template-columns: repeat(2, 1fr); }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* --- Footer newsletter ---------------------------------------------------- */
|
|
59
|
+
.footer-news { display: flex; gap: 8px; margin-top: 12px; max-width: 320px; }
|
|
60
|
+
.footer-news input { flex: 1; border: 1px solid rgba(255,255,255,.3); background: transparent; color: #fff; border-radius: 999px; padding: 10px 16px; font-size: .9rem; }
|
|
61
|
+
.footer-news input::placeholder { color: #a9b8e6; }
|
|
62
|
+
.footer-news button { background: #fff; color: var(--navy-ink); border: 0; border-radius: 999px; width: 42px; font-size: 1.1rem; font-weight: 700; cursor: pointer; }
|
|
63
|
+
.footer-col > p { color: #a9b8e6; font-size: .88rem; margin-top: 4px; }
|
|
64
|
+
|
|
65
|
+
/* --- Payment badges ------------------------------------------------------- */
|
|
66
|
+
.pay-badges { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
|
|
67
|
+
.pay-badges span { background: #fff; color: var(--navy-ink); font-size: .62rem; font-weight: 800; letter-spacing: .03em; padding: 6px 9px; border-radius: 5px; }
|
|
68
|
+
|
|
69
|
+
/* --- Product carousel (real catalog snapshot) ----------------------------- */
|
|
70
|
+
.shelf .sec-head { margin-bottom: 1.25rem; }
|
|
71
|
+
.pcarousel {
|
|
72
|
+
display: grid; grid-auto-flow: column; grid-auto-columns: minmax(200px, 1fr);
|
|
73
|
+
gap: clamp(12px, 1.6vw, 20px); overflow-x: auto; scroll-snap-type: x mandatory;
|
|
74
|
+
padding-bottom: 12px; scrollbar-width: thin;
|
|
75
|
+
}
|
|
76
|
+
.pcard { scroll-snap-align: start; }
|
|
77
|
+
.pcard a { display: block; background: #fff; border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; transition: transform .14s, box-shadow .14s, border-color .14s; }
|
|
78
|
+
.pcard a:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); border-color: var(--surface-2); }
|
|
79
|
+
.pcard__media { aspect-ratio: 1/1; background: var(--surface); display: grid; place-items: center; }
|
|
80
|
+
.pcard__media img { width: 100%; height: 100%; object-fit: contain; padding: 10px; }
|
|
81
|
+
.pcard__vendor { font-family: var(--font-display); font-size: .68rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); padding: 12px 14px 0; }
|
|
82
|
+
.pcard__title { font-family: var(--font-body); font-size: .9rem; font-weight: 600; line-height: 1.3; color: var(--ink); padding: 2px 14px 0; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
|
|
83
|
+
.pcard__price { font-family: var(--font-display); font-weight: 700; color: var(--navy); padding: 6px 14px 14px; }
|
|
84
|
+
.pcard__was { color: var(--muted); font-weight: 500; text-decoration: line-through; margin-right: 4px; }
|
|
85
|
+
|
|
86
|
+
/* --- Staff's Pick spotlight ----------------------------------------------- */
|
|
87
|
+
.spotlight { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(20px, 4vw, 48px); align-items: center; background: #fff; border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; }
|
|
88
|
+
.spotlight:hover { box-shadow: var(--shadow-md); }
|
|
89
|
+
.spotlight__media { aspect-ratio: 4/3; background: var(--surface); display: grid; place-items: center; }
|
|
90
|
+
.spotlight__media img { width: 100%; height: 100%; object-fit: contain; padding: 24px; }
|
|
91
|
+
.spotlight__body { padding: clamp(20px, 4vw, 40px) clamp(20px, 4vw, 40px) clamp(20px, 4vw, 40px) 0; }
|
|
92
|
+
.spotlight__body h3 { font-size: clamp(1.3rem, 2.6vw, 1.9rem); margin: 4px 0 10px; }
|
|
93
|
+
.spotlight__price { font-family: var(--font-display); font-weight: 700; font-size: 1.3rem; color: var(--navy); margin-bottom: 1.2rem; }
|
|
94
|
+
|
|
95
|
+
/* --- Shop by Brands grid -------------------------------------------------- */
|
|
96
|
+
.brandgrid { display: grid; grid-template-columns: repeat(6, 1fr); gap: clamp(10px, 1.4vw, 16px); }
|
|
97
|
+
.brandtile { display: grid; place-items: center; background: #fff; border: 1px solid var(--border); border-radius: var(--radius); min-height: 96px; padding: 14px; transition: transform .14s, box-shadow .14s, border-color .14s; }
|
|
98
|
+
.brandtile:hover { transform: translateY(-3px); box-shadow: var(--shadow-sm); border-color: var(--surface-2); }
|
|
99
|
+
.brandtile img { max-height: 56px; max-width: 100%; object-fit: contain; }
|
|
100
|
+
|
|
101
|
+
/* --- Blog cards ----------------------------------------------------------- */
|
|
102
|
+
.bloggrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(14px, 2vw, 24px); }
|
|
103
|
+
.blogcard { display: flex; flex-direction: column; background: #fff; border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; transition: transform .14s, box-shadow .14s; }
|
|
104
|
+
.blogcard:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); }
|
|
105
|
+
.blogcard__media { aspect-ratio: 16/9; background: linear-gradient(135deg, var(--surface-2), var(--surface)); }
|
|
106
|
+
.blogcard h3 { font-size: 1.02rem; line-height: 1.35; padding: 16px 18px 0; color: var(--ink); }
|
|
107
|
+
.blogcard .link-more { padding: 10px 18px 18px; }
|
|
108
|
+
|
|
109
|
+
.center { text-align: center; }
|
|
110
|
+
|
|
111
|
+
@media (max-width: 900px) {
|
|
112
|
+
.spotlight { grid-template-columns: 1fr; }
|
|
113
|
+
.spotlight__media { aspect-ratio: 16/10; }
|
|
114
|
+
.spotlight__body { padding: 0 24px 28px; }
|
|
115
|
+
.brandgrid { grid-template-columns: repeat(4, 1fr); }
|
|
116
|
+
.bloggrid { grid-template-columns: 1fr; }
|
|
117
|
+
}
|
|
118
|
+
@media (max-width: 560px) { .brandgrid { grid-template-columns: repeat(3, 1fr); } }
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
Big D Vapor — shared marketing component layer (mkt.css)
|
|
3
|
+
Reused across home + all marketing pages: layout, buttons, header/nav,
|
|
4
|
+
footer, section headers, tile + category grids, compliance strip.
|
|
5
|
+
Depends on tokens from themes/bigd-navy.css.
|
|
6
|
+
========================================================================== */
|
|
7
|
+
|
|
8
|
+
/* --- Layout --------------------------------------------------------------- */
|
|
9
|
+
.container { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: clamp(16px, 4vw, 40px); }
|
|
10
|
+
.section { padding-block: clamp(2.5rem, 6vw, 4.5rem); }
|
|
11
|
+
.section--tight { padding-block: clamp(1.75rem, 4vw, 3rem); }
|
|
12
|
+
.section--surface { background: var(--surface); }
|
|
13
|
+
|
|
14
|
+
/* --- Buttons -------------------------------------------------------------- */
|
|
15
|
+
.btn {
|
|
16
|
+
display: inline-flex; align-items: center; justify-content: center; gap: .5em;
|
|
17
|
+
font-family: var(--font-display); font-weight: 600; font-size: .95rem;
|
|
18
|
+
padding: .8em 1.6em; border-radius: 999px; border: 2px solid transparent;
|
|
19
|
+
transition: transform .12s ease, background .15s ease, color .15s ease, box-shadow .15s ease;
|
|
20
|
+
}
|
|
21
|
+
.btn:hover { transform: translateY(-1px); }
|
|
22
|
+
.btn-primary { background: var(--navy); color: #fff; }
|
|
23
|
+
.btn-primary:hover { background: var(--navy-dark); box-shadow: var(--shadow-md); }
|
|
24
|
+
.btn-line { border-color: #fff; color: #fff; }
|
|
25
|
+
.btn-line:hover { background: #fff; color: var(--navy); }
|
|
26
|
+
.btn-ghost { border-color: var(--border); color: var(--navy); background: #fff; }
|
|
27
|
+
.btn-ghost:hover { border-color: var(--navy); }
|
|
28
|
+
|
|
29
|
+
/* --- Announcement bar ----------------------------------------------------- */
|
|
30
|
+
.announce {
|
|
31
|
+
background: var(--navy); color: #fff; text-align: center;
|
|
32
|
+
font-size: .85rem; font-weight: 600; letter-spacing: .01em; padding: 9px 16px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* --- Top utility bar (shared chrome: FDA warning + marquee + utility nav) -- */
|
|
36
|
+
.topbar-warning {
|
|
37
|
+
background: #fff; border-bottom: 1px solid var(--border);
|
|
38
|
+
text-align: center; padding: 10px 16px;
|
|
39
|
+
}
|
|
40
|
+
.topbar-warning p { color: var(--ink); font-weight: 700; font-size: .82rem; letter-spacing: .01em; }
|
|
41
|
+
|
|
42
|
+
.announce-marquee { background: var(--sale); color: #fff; overflow: hidden; }
|
|
43
|
+
.announce-marquee__track {
|
|
44
|
+
display: flex; gap: 3rem; white-space: nowrap; width: max-content;
|
|
45
|
+
padding: 8px 0; font-size: .82rem; font-weight: 600;
|
|
46
|
+
animation: bdv-marquee 22s linear infinite;
|
|
47
|
+
}
|
|
48
|
+
.announce-marquee__track span { padding-inline: 1.5rem; }
|
|
49
|
+
@keyframes bdv-marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
|
|
50
|
+
@media (prefers-reduced-motion: reduce) {
|
|
51
|
+
.announce-marquee__track { animation: none; justify-content: center; width: 100%; }
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.utility-nav { border-bottom: 1px solid var(--border); background: #fff; }
|
|
55
|
+
.utility-nav .container { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-block: 8px; }
|
|
56
|
+
.utility-nav ul { display: flex; gap: 20px; }
|
|
57
|
+
.utility-nav a { font-size: .82rem; font-weight: 600; color: var(--ink); }
|
|
58
|
+
.utility-nav a:hover { color: var(--navy); }
|
|
59
|
+
.utility-nav__right { display: flex; align-items: center; gap: 16px; }
|
|
60
|
+
.utility-nav__right .sel { font-size: .8rem; color: var(--muted); }
|
|
61
|
+
.utility-nav__right .social { display: flex; gap: 12px; }
|
|
62
|
+
.utility-nav__right .social a svg { width: 16px; height: 16px; fill: var(--ink); }
|
|
63
|
+
|
|
64
|
+
/* --- Header / nav --------------------------------------------------------- */
|
|
65
|
+
.site-header { position: sticky; top: 0; z-index: 100; background: #fff; border-bottom: 1px solid var(--border); }
|
|
66
|
+
.header-row { display: flex; align-items: center; gap: clamp(12px, 2.5vw, 32px); padding-block: 14px; }
|
|
67
|
+
.brand img { height: 46px; width: auto; }
|
|
68
|
+
.primary-nav { flex: 1; }
|
|
69
|
+
.primary-nav > ul { display: flex; flex-wrap: wrap; align-items: center; gap: clamp(10px, 1.6vw, 22px); }
|
|
70
|
+
.primary-nav a { font-weight: 600; font-size: .92rem; color: var(--ink); padding: 6px 2px; border-bottom: 2px solid transparent; transition: color .15s, border-color .15s; }
|
|
71
|
+
.primary-nav a:hover { color: var(--navy); border-color: var(--navy); }
|
|
72
|
+
.primary-nav a.is-flag { color: var(--sale); }
|
|
73
|
+
.header-actions { display: flex; align-items: center; gap: 16px; }
|
|
74
|
+
.header-actions a { display: inline-flex; color: var(--ink); }
|
|
75
|
+
.header-actions a:hover { color: var(--navy); }
|
|
76
|
+
.header-actions svg { width: 24px; height: 24px; stroke: currentColor; fill: none; stroke-width: 1.8; }
|
|
77
|
+
.hamburger { display: none; flex-direction: column; gap: 5px; background: none; border: 0; padding: 6px; }
|
|
78
|
+
.hamburger span { width: 26px; height: 2px; background: var(--ink); border-radius: 2px; }
|
|
79
|
+
|
|
80
|
+
/* header search pill + account/cart badge (shared chrome) */
|
|
81
|
+
.site-header .header-row { gap: clamp(12px, 3vw, 40px); }
|
|
82
|
+
.header-search { flex: 1; max-width: 560px; position: relative; }
|
|
83
|
+
.header-search input {
|
|
84
|
+
width: 100%; border: 1px solid var(--border); border-radius: 999px;
|
|
85
|
+
padding: 11px 46px 11px 18px; font-size: .9rem; background: #fff; color: var(--ink);
|
|
86
|
+
}
|
|
87
|
+
.header-search input::placeholder { color: var(--muted); }
|
|
88
|
+
.header-search button { position: absolute; right: 6px; top: 50%; transform: translateY(-50%); background: none; border: 0; padding: 6px; }
|
|
89
|
+
.header-search svg { width: 20px; height: 20px; stroke: var(--navy); fill: none; stroke-width: 2; }
|
|
90
|
+
.header-actions .cart { position: relative; }
|
|
91
|
+
.header-actions .cart .count {
|
|
92
|
+
position: absolute; top: -6px; right: -8px; background: var(--navy); color: #fff;
|
|
93
|
+
font-size: .62rem; font-weight: 700; min-width: 16px; height: 16px; border-radius: 999px;
|
|
94
|
+
display: grid; place-items: center; padding: 0 4px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* primary nav: NEW badge + dropdown carets + second-row nav bar (shared chrome) */
|
|
98
|
+
.primary-nav a .new-badge {
|
|
99
|
+
display: inline-block; background: var(--sale); color: #fff; font-size: .58rem; font-weight: 800;
|
|
100
|
+
letter-spacing: .06em; padding: 2px 5px; border-radius: 4px; margin-left: 6px; vertical-align: middle;
|
|
101
|
+
}
|
|
102
|
+
.primary-nav a .caret { font-size: .7em; margin-left: 4px; opacity: .7; }
|
|
103
|
+
.primary-nav-bar { border-top: 1px solid var(--border); background: #fff; }
|
|
104
|
+
.primary-nav-bar .container { padding-block: 4px; }
|
|
105
|
+
.primary-nav-bar .primary-nav > ul { gap: clamp(10px, 1.4vw, 20px); }
|
|
106
|
+
.primary-nav-bar .primary-nav a { padding-block: 10px; }
|
|
107
|
+
|
|
108
|
+
/* --- Section headers ------------------------------------------------------ */
|
|
109
|
+
.sec-head { text-align: center; max-width: 62ch; margin: 0 auto clamp(1.5rem, 3vw, 2.5rem); }
|
|
110
|
+
.sec-head .eyebrow { display: inline-block; font-family: var(--font-display); font-weight: 700; font-size: .78rem; letter-spacing: .12em; text-transform: uppercase; color: var(--navy); margin-bottom: .55rem; }
|
|
111
|
+
.sec-head p { margin-top: .7rem; font-size: 1.02rem; }
|
|
112
|
+
.sec-head--between { display: flex; align-items: baseline; justify-content: space-between; text-align: left; max-width: none; gap: 16px; }
|
|
113
|
+
.link-more { font-family: var(--font-display); font-weight: 600; color: var(--navy); white-space: nowrap; }
|
|
114
|
+
.link-more:hover { text-decoration: underline; }
|
|
115
|
+
|
|
116
|
+
/* --- Brand / category tile grid ------------------------------------------- */
|
|
117
|
+
.tile-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: clamp(12px, 1.6vw, 20px); }
|
|
118
|
+
.tile {
|
|
119
|
+
display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px;
|
|
120
|
+
background: #fff; border: 1px solid var(--border); border-radius: var(--radius-lg);
|
|
121
|
+
padding: 26px 18px; min-height: 148px; text-align: center; transition: transform .14s, box-shadow .14s, border-color .14s;
|
|
122
|
+
}
|
|
123
|
+
.tile:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); border-color: var(--surface-2); }
|
|
124
|
+
.tile img { max-height: 66px; width: auto; object-fit: contain; }
|
|
125
|
+
.tile span { font-family: var(--font-display); font-weight: 600; font-size: .95rem; color: var(--ink); }
|
|
126
|
+
|
|
127
|
+
/* --- Category cards (shop by category) ------------------------------------ */
|
|
128
|
+
.cat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(14px, 2vw, 24px); }
|
|
129
|
+
.cat-card {
|
|
130
|
+
position: relative; display: flex; align-items: flex-end; overflow: hidden;
|
|
131
|
+
min-height: 190px; border-radius: var(--radius-lg); color: #fff;
|
|
132
|
+
background: linear-gradient(135deg, var(--navy), var(--navy-ink));
|
|
133
|
+
padding: 22px; transition: transform .14s, box-shadow .14s;
|
|
134
|
+
}
|
|
135
|
+
.cat-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); }
|
|
136
|
+
.cat-card::after { content: "→"; position: absolute; top: 20px; right: 22px; font-size: 1.3rem; opacity: .85; }
|
|
137
|
+
.cat-card h3 { color: #fff; font-size: 1.35rem; }
|
|
138
|
+
.cat-card p { color: rgba(255, 255, 255, .82); margin-top: 4px; font-size: .9rem; }
|
|
139
|
+
|
|
140
|
+
/* --- Compliance strip (source-copied legal text; not fabricated) ---------- */
|
|
141
|
+
.compliance-strip { background: var(--surface-2); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
|
|
142
|
+
.compliance-strip .container { padding-block: 14px; }
|
|
143
|
+
.compliance-strip p { color: var(--navy-ink); font-size: .82rem; font-weight: 600; text-align: center; letter-spacing: .01em; }
|
|
144
|
+
|
|
145
|
+
/* --- Footer --------------------------------------------------------------- */
|
|
146
|
+
.site-footer { background: var(--navy-ink); color: #dbe4fb; padding-block: clamp(2.5rem, 5vw, 4rem) 1.5rem; }
|
|
147
|
+
.footer-grid { display: grid; grid-template-columns: 1.4fr repeat(3, 1fr); gap: clamp(24px, 4vw, 56px); }
|
|
148
|
+
.footer-brand img { height: 40px; filter: brightness(0) invert(1); opacity: .95; }
|
|
149
|
+
.footer-brand p { color: #a9b8e6; margin-top: 14px; font-size: .9rem; max-width: 34ch; }
|
|
150
|
+
.footer-col h4 { color: #fff; font-size: .82rem; letter-spacing: .1em; text-transform: uppercase; margin-bottom: 14px; }
|
|
151
|
+
.footer-col ul { display: flex; flex-direction: column; gap: 9px; }
|
|
152
|
+
.footer-col a { color: #c3cff0; font-size: .92rem; }
|
|
153
|
+
.footer-col a:hover { color: #fff; text-decoration: underline; }
|
|
154
|
+
.footer-warning { margin-top: 34px; padding: 16px 18px; border: 1px solid rgba(255, 255, 255, .22); border-radius: var(--radius); }
|
|
155
|
+
.footer-warning strong { color: #fff; }
|
|
156
|
+
.footer-warning p { color: #c3cff0; font-size: .82rem; }
|
|
157
|
+
.footer-bottom { margin-top: 28px; padding-top: 18px; border-top: 1px solid rgba(255, 255, 255, .16); display: flex; flex-wrap: wrap; gap: 10px 24px; justify-content: space-between; align-items: center; }
|
|
158
|
+
.footer-bottom p, .footer-bottom a { color: #93a4d6; font-size: .82rem; }
|
|
159
|
+
|
|
160
|
+
/* --- Reveal-on-scroll ----------------------------------------------------- */
|
|
161
|
+
.reveal { opacity: 0; transform: translateY(18px); transition: opacity .5s ease, transform .5s ease; }
|
|
162
|
+
.reveal.in { opacity: 1; transform: none; }
|
|
163
|
+
|
|
164
|
+
/* --- Responsive ----------------------------------------------------------- */
|
|
165
|
+
@media (max-width: 900px) {
|
|
166
|
+
.header-search { order: 3; flex-basis: 100%; max-width: none; }
|
|
167
|
+
.utility-nav ul { gap: 12px; }
|
|
168
|
+
}
|
|
169
|
+
@media (max-width: 1000px) {
|
|
170
|
+
.tile-grid { grid-template-columns: repeat(3, 1fr); }
|
|
171
|
+
}
|
|
172
|
+
@media (max-width: 860px) {
|
|
173
|
+
.primary-nav { position: fixed; inset: 0 0 0 auto; width: min(80vw, 320px); background: #fff; box-shadow: var(--shadow-lg); transform: translateX(100%); transition: transform .25s ease; padding: 80px 24px 24px; overflow-y: auto; }
|
|
174
|
+
.primary-nav.open { transform: none; }
|
|
175
|
+
.primary-nav > ul { flex-direction: column; align-items: stretch; gap: 4px; }
|
|
176
|
+
.primary-nav a { display: block; padding: 12px 4px; border-bottom: 1px solid var(--border); }
|
|
177
|
+
.hamburger { display: flex; }
|
|
178
|
+
.cat-grid { grid-template-columns: 1fr 1fr; }
|
|
179
|
+
.footer-grid { grid-template-columns: 1fr 1fr; }
|
|
180
|
+
}
|
|
181
|
+
@media (max-width: 560px) {
|
|
182
|
+
.tile-grid { grid-template-columns: repeat(2, 1fr); }
|
|
183
|
+
.cat-grid { grid-template-columns: 1fr; }
|
|
184
|
+
.footer-grid { grid-template-columns: 1fr; }
|
|
185
|
+
}
|