Overview

Hempira template home pages

A calm, botanical HTML template for CBD and hemp wellness shops: oils, gummies, edibles, hemp flower and balms, every batch lab-tested. Hempira ships three home pages, a light and a dark theme, right-to-left support, an age gate, and shop logic that is worked out rather than typed in: the milligrams in every drop and serving, the lab certificate of every batch read against its label and the THC limit, subscribe and save by frequency, and store pickup with live ready times.

What’s included

  • 3 home pages, each with its own scroll moment: the lab certificate fills in line by line, a hemp leaf zooms into its cell structure, and a breathing circle swells and settles
  • 18 products in 5 ranges, each with its CBD per drop, gummy, square, gram or ml, its serving and its strength band
  • Lab results per batch (20 certificates): CBD against the label within 10%, delta-9 THC against the 0.3% limit, five safety panels
  • Strength guide with a calculator, the three bands and a table of every product
  • Subscribe and save (every 4 weeks 15%, every 6 weeks 12%, every 8 weeks 10%) with a suggested frequency and the next three dispatch days
  • Store pickup at 3 stores: stock per store, open-now lines and the time an order would be ready
  • Bag with a free-shipping meter, discount code, tax and a three-step checkout (delivery or pickup) with an order number; order tracking; an account with subscriptions to skip, pause or re-time
  • An age gate (21+) remembered in the browser, a product finder, a FAQ with search
  • Light and dark mode, right-to-left stylesheets with a flag language picker, a WebGL soft aurora and a single oil drop forming at a dropper in the footer
  • Focus Pull preloader, Exhale reveals, a leaf shadow on card hover, Swiper sliders and Fancybox galleries
  • Fully responsive, W3C-valid, zero console errors
📄 30 HTML files

Getting Started

Thank you for choosing Hempira. Follow the steps below to get your site live.

1. Open locally

Unzip the downloaded package and open hempira/index.html in any modern browser. No build tools or server are required — the shop, the bag, the strength calculator, the lab lookup, subscriptions and pickup all work straight from the files.

2. Deploy to a server

Upload the contents of the hempira/ folder to your hosting provider using an FTP client or your hosting control panel. Once uploaded, navigate to your domain and the template will load immediately.

3. Customise

All custom styling lives in assets/css/style.css (with a numbered Table of CSS at the top) and assets/css/responsive.css. Colours and fonts are CSS variables — see Colors & Fonts. Products, batches, stores, subscriptions and shop rules live in one place — see Shop Logic.

Tip: Packshots sit on sand tiles; keep new product photos on a plain light ground in the same proportions so the grid stays even.

File Structure

Below is an overview of the key files and folders included in this template.

index.html / homepage-2.html / homepage-3.htmlThree home pages: The Apothecary (night; the lab certificate fills in), CBD Store (a leaf zooms into its cell structure) and Hemp Shop (boxed; a breathing circle swells and settles)
shop.htmlEvery product with range, spectrum, strength band and sale filters, sort by price, strength or rating, and search
product-single.htmlA product: gallery, one-off or subscribe, the strength calculator, stock and ready time at each store, the batch’s lab figures, tabs
product-finder.htmlFour questions that score the products and show the best fits
subscribe.htmlSubscribe and save: picks, frequency with a suggested one, start date, the next three dispatch days
cart.html / checkout.html / wishlist.htmlThe bag with the free-shipping meter, the three-step checkout (delivery or store pickup) with an order number, the wishlist
order-tracking.htmlFind an order and see its stage, shipped or ready for pickup
lab-results.htmlLook up a batch code: the certificate with CBD against the label, THC against the limit, the safety panels; every batch in one table
strength-guide.htmlMilligrams per drop and per serving for every product, the three strength bands and the calculator
our-hemp.htmlFrom the farm to the bottle, the hemp plant drawn and labelled
stores.htmlThe three stores with open-now lines, hours, maps and pickup times
about.html / team.html / team-details.htmlThe story, numbers and team; a team member’s profile
gallery.html / reviews.htmlA filterable gallery; the reviews with the rating split
faq.htmlQuestions by topic with search
blog.html / blog-details.htmlThe journal (standard, video, audio, gallery and quote posts) and a post with comments
my-account.html / login.html / register.html / forgot-password.htmlThe account (orders, subscriptions to skip, pause or re-time) and the account forms
contact.htmlContact cards, the map and the contact form
coming-soon.html / 404.htmlA countdown to a new store; the error page
sendmail.phpAJAX mail handler for the contact form (see Contact Form)
assets/css/style.cssAll custom styles, numbered Table of CSS (18 sections)
assets/css/responsive.cssDesktop-first breakpoints 1399 / 1199 / 991 / 767 / 575, plus wide screens from 1600 and 1960
assets/css/style.rtl.css / responsive.rtl.cssThe right-to-left twins (see RTL)
assets/css/plugins/Bootstrap (LTR and RTL), Swiper, Fancybox (vendor CSS)
assets/js/main.jsAll custom scripts, numbered JS INDEX (37 blocks)
assets/js/plugins/jQuery, Bootstrap, Swiper, Fancybox, GSAP, ScrollTrigger
assets/img/Images, one folder per section (see Images)
assets/fonts/theme-icons/The sun and moon of the theme switch, loaded locally
assets/webfonts/ + assets/css/fontawesome-all.cssFont Awesome Free, loaded locally

Folder Structure

The package unzips to two folders: Documentation/ (this guide) and hempira/, the template.

hempira/
├── *.html                              the 30 pages, all in the root (see File Structure)
├── sendmail.php                        the AJAX mail handler for the contact form
└── assets/
    ├── css/
    │   ├── style.css / style.rtl.css   all custom styles (and the right-to-left twin)
    │   ├── responsive.css / .rtl.css   breakpoints 1399 / 1199 / 991 / 767 / 575
    │   ├── fontawesome-all.css         Font Awesome Free, loaded locally
    │   └── plugins/                    bootstrap (+ rtl), fancybox, swiper
    ├── js/
    │   ├── main.js                     all custom scripts, numbered JS INDEX (37 blocks)
    │   └── plugins/                    bootstrap, gsap, jquery, fancybox, ScrollTrigger, swiper
    ├── fonts/theme-icons/              the sun and moon of the theme switch
    ├── webfonts/                       Font Awesome Free font files
    └── img/                            images, one folder per section
        ├── art/                         11 files
        ├── banner/                      20 files
        ├── blog/                        5 files
        ├── faces/                       6 files
        ├── flags/                       6 files
        ├── gallery/                     14 files
        ├── icons/                       30 files
        ├── logo/                        5 files
        ├── menu/                        3 files
        ├── products/                    18 files
        └── team/                        6 files

Colors & Fonts

The whole design is driven by CSS variables declared at the top of style.css. Colours used with transparency have an -rgb twin (for example --hp-amber-rgb) — change both together.

Amber (buttons)--hp-amber
Amber Ink (links)--hp-amber-text
Amber Display--hp-display
Night--hp-night
Night Panel--hp-panel
Ivory Ground--hp-ivory
Sand Ground--hp-sand
Bone (text on night)--hp-bone
Leaf (passed)--hp-leaf
Rust (over a limit)--hp-rust
Heading--hp-heading
Body--hp-text

Night carries Home 1, the page titles, the night bands and the footer; ivory and sand are the light grounds and the product tiles. Amber fills the buttons (with night text) and the oil; its deeper partners write the large orange headline words and small amber text on light grounds. Leaf and rust are signals only: passed, under the limit and in stock; over a limit and sold out.

Fonts

Two Google Fonts: Prompt (headings, body, buttons, prices) and Castoro (its italic is the soft word inside a headline, the marquee and the big figures on the lab certificate). Swap them by editing the Google Fonts link and --hp-ff-head / --hp-ff-body / --hp-ff-serif.

Logo

The logo — a seven-leaflet hemp leaf with an oil drop in its centre leaflet beside the “HEMPIRA” wordmark — ships as PNG files in assets/img/logo/: logo.png (light grounds), logo-light.png (dark grounds and dark mode), the leaf alone (mark.png, mark-light.png) and favicon.png.

Light & Dark Mode

Every header (and the mobile menu) has a theme switch. The choice is saved under hempira-theme and applied by a one-line script in the <head> before the page paints. The switch sets data-theme="dark" on <html>.

Dark Ground--hp-bg
Dark Surface--hp-surface
Dark Sand Band--hp-sand-bg
Dark Heading--hp-heading
Dark Body--hp-text

The dark colours live in the [data-theme="dark"] block right after :root. The night bands and the footer stay dark in both themes; the line-art drawings and icons switch to their light ink.

Age Gate

On a first visit every page asks whether the visitor is 21 or older (to change the age, edit the gate’s text and minAge in the data block). “Yes” is remembered in the browser under hempira-age-v1; “No” shows a polite exit panel. The gate traps keyboard focus while open and appears after the preloader. Its markup is the .hp-age-gate block right after the footer on every page (JS block 20); delete that block from the pages to turn the gate off.

Note: the demo copy keeps benefit wording general (“part of your evening”, “a calm routine”). Check what your own market allows you to say about CBD before you publish product text.

Shop Logic

Every figure comes from one data block, JS block 09 Hempira Data (var HEMPIRA) near the top of main.js. Edit it once and the cards, calculators, certificates, prices, dates and totals follow.

Products and strength

Each product has its range, spectrum (full, broad or isolate), cbd (mg in the pack), units (how many drops, gummies, squares, cookies, cups, grams or ml the pack holds; 1 ml of oil = 20 drops), serving (units in one serving; 0 for skin care, shown per ml), price (and was when on sale), its batch code and its stock at each store. A serving falls into one of three bands: Gentle up to 10 mg, Balanced up to 25 mg, Strong above.

Worked examples: Full Spectrum Oil 1500 — 1500 mg in 600 drops is 2.5 mg a drop, so its 10-drop serving is 25 mg, balanced. Sunrise Gummies 10: 10 mg a gummy, gentle. Meadow Hemp Flower: 160 mg a gram, so a 0.25 g serving is 40 mg, strong. Hemp Face Cream 300: 6 mg per ml.

Lab results per batch

Each entry in batches is one certificate: the measured cbd and the label’s claim in the same terms (mg per ml, per gummy, per square, per cup, or % by weight for flower), thc (delta-9, % by weight), the minor cannabinoids, terpenes and a status. A batch matches its label when it is within 10% of the claim (tolerance); THC must be at or under thcLimit (0.3%). The lab’s name and the five safety panels are lab and panels.

Worked example: batch HP-2610-O1 measured 51.2 mg / ml against 50 on the label: +2.4%, matches the label; THC 0.18% is under the limit. Batch HP-2607-F1 read 0.34% THC, so it is shown as held back, never released for sale.

Subscribe and save

Every subscription line is the shelf price less the frequency’s saving (every 4 weeks 15%, every 6 weeks 12%, every 8 weeks 10%), in whole cents rounded half up. Full Spectrum Oil 1500 at $89.00 every four weeks is $75.65, about $174.03 saved a year. The page suggests the longest frequency that arrives before the first pack runs out at one serving a day: 60 days, so every 8 weeks. Subscriptions always ship free; customers skip, pause or re-time them on the account page.

Store pickup

Each store has its weekly hours (minutes from midnight, null when closed) and its stock of every product. An order is ready 60 minutes after it is placed in opening hours, rounded up to the next 15 minutes; outside hours, 60 minutes after the next opening. Orders are held for 5 days.

Worked example: at East Austin on a Tuesday (10:00 am–8:00 pm), an order placed at 2:05 pm is ready at 3:15 pm; one placed at 8:00 am is ready at 11:00 am.

Shipping, discount and tax

Orders placed before 2:00 pm Monday to Friday ship that day; later ones the next working day. Parcels arrive 2 days after dispatch (Sundays skipped). Shipping is $6.50, free from $60.00, on any subscription and on store pickup. The code CALM10 takes 10% off; tax is 8.25% of the goods after the discount.

Worked example: one Full Spectrum Oil 1500 ($89.00) with CALM10: $8.90 off, goods $80.10, free shipping, tax $6.61 — $86.71.

The bag, wishlist, discount code, orders, subscriptions and the pickup choice are kept in the browser (localStorage). The first visit starts with a small demo bag; set the demo lists in doShop() (block 29) to [] to start empty.

WebGL Layers

One small runner draws two fragment-shader layers: aurora — a soft, slow aurora of leaf green and amber behind the page titles, Home 1’s night bands, coming soon and 404 — and drop — the footer’s single oil drop, forming at the tip of a dropper, falling and settling, drawn as a metaball. Each is one canvas:

<canvas class="hp-gl" data-gl="aurora" aria-hidden="true"></canvas>

Colours come from --gl-1, --gl-2, --gl-3 and --gl-alpha on the section. A layer only runs while on screen; reduced motion gets one still frame.

RTL (Right To Left)

Right to left comes from the stylesheets, not from separate pages: the flag language picker lists the languages that read each way. Choosing Arabic stores the direction (hempira-dir) and reloads; the head script sets dir="rtl" and swaps the three stylesheets for the files named in their data-rtl attribute. Nothing is translated. To make a page right to left for good, add dir="rtl" to its <html> and load bootstrap.rtl.min.css, style.rtl.css and responsive.rtl.css in place of the three LTR files.

Editing: the RTL files are mirrored twins made with RTLCSS; a few hand-made rules at the end of style.rtl.css (after RTL fixes) keep what must not mirror. Regenerate with npx rtlcss style.css style.rtl.css and copy the fixes back.

JavaScript Guide

All custom behaviour lives in assets/js/main.js, organised into 37 numbered blocks:

  • 01–08 — Preloader, Sticky Header, Offcanvas Menu, Scroll Reveals, Back To Top, Anchor Scroll, Light & Dark Mode, Direction, WebGL Aurora & Oil Drop. The core every page shares: the Focus Pull preloader, the header, the Exhale reveals, the theme and direction switch and the WebGL aurora and oil drop.
  • 09–10 — Hempira Data, Store Engine & Clocks. Hempira Data holds every figure; the Store Engine works out strength per drop and per serving, reads lab certificates, prices subscriptions and runs the store hours, pickup and dispatch clocks.
  • 11–19 — Custom Select, Counters & Rings, Hero Sliders, Card Sliders, Accordion, Filter Tabs, Grid Search, Newsletter, Choice Cards. Shared components: selects, counters, sliders, accordions, filters, grid search, newsletter, choice cards.
  • 20–23 — Age Gate, Lab Certificate Fill, Leaf To Cell Zoom, Breathing Circle. The age gate and the three scroll moments: the lab certificate fills line by line, a leaf zooms into its cells, a breathing circle swells and settles.
  • 24–37 — Search, Strength Guide, Lab Results, Product Finder, Contact Form, Shop Engine, Account Forms, Article Tools, Demo Forms, Subscribe & Save, Order Tracking, My Account, Launch Countdown, FAQ Search. The feature pages: search, the strength guide, lab results, the product finder, contact, the shop (bag, checkout, wishlist), accounts, articles, demo forms, subscribe and save, order tracking, the account, the launch countdown and the FAQ.

Each block is a self-contained doSomething() that skips pages without its section. Every animation respects prefers-reduced-motion.

Reveals: hp-exhale on a card, photo or panel breathes it in — it fades up while settling from a slight zoom, and its ex-title eases from wide letter-spacing to its own; hp-fade and the children of hp-title rise softly into place. data-delay="0.2" staggers any of them.

Images

The package ships with neutral placeholder images at the correct dimensions. Replace them with your own using the same file names. Images are grouped inside assets/img/:

img/art/Line-art drawings: the hemp leaf, the CBD molecule, the hemp plant, the dropper, the lens and the leaf shadow (PNG, included) — 11 files: 1500×1558, 1000×497, 700×504, 168×1175, 970×1043, …
img/banner/Hero slides, photo bands, range photographs and page-title grounds — 20 files: 850×1022, 1920×660, 1400×488, 1400×956, 1400×770, …
img/blog/Journal posts — 5 files: 1400×837, 1381×967, 1400×1004, 1634×1165
img/faces/Round reviewer portraits (PNG) — 6 files: 120×120, 300×300, 280×280, 800×800, 340×340
img/flags/The language picker’s flags (SVG, included) — 6 files: SVG
img/gallery/Gallery, store and grower photos — 14 files: 1000×584, 880×1052, 904×602, 1400×1729, 1280×1423, …
img/icons/Line icons: ranges, lab, pickup, subscribe, day and evening (included) — 30 files: 128×128
img/logo/Logo, light logo, the leaf mark and the favicon (included) — 5 files: 256×256, 64×64, 441×104, 440×104
img/menu/Home previews in the mega menu — 3 files: 560×350
img/products/Packshots on sand tiles — 18 files: 880×1052, 880×966, 800×800, 730×870, 1400×1667, …
img/team/Team portraits — 6 files: 850×1034

The logo files, the line-art drawings, the icons and the language flags are included. All demo photography on the live preview is for preview purposes only and is not included in the download.

Contact Form

The contact form posts to sendmail.php, a lightweight AJAX mail handler; the message appears under the button without reloading the page. The newsletter, checkout, subscribe, comment and account forms are demo forms that confirm on screen. To activate the mail handler:

1. Set your email address

$email = 'example@example.com';

2. Upload to a PHP host

The form needs PHP mail() support. On a local computer or a static host it shows an “upload to a PHP-enabled host” notice instead.

3. Optional: enable Google reCAPTCHA v3

  • Create v3 keys for your domain in the Google reCAPTCHA admin console
  • In sendmail.php, replace YOUR_RECAPTCHA_V3_SECRET_KEY with your secret key
  • In contact.html, add a hidden token field inside the form and load the script with your site key:
<input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response">
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<script>
  grecaptcha.ready(function () {
    grecaptcha.execute('YOUR_SITE_KEY', { action: 'contact' }).then(function (token) {
      document.getElementById('g-recaptcha-response').value = token;
    });
  });
</script>

Credits

  • Bootstrap 5.3.3
  • jQuery 3.7.1
  • Swiper 11
  • GSAP 3 + ScrollTrigger
  • Fancybox 3.5
  • Font Awesome Free
  • RTLCSS
  • Google Fonts: Prompt, Castoro

All plugin files and icon fonts are loaded locally. The only external requests are the Google Fonts stylesheet, the Google Maps embeds and the video popup.

Support

If you have any questions or need help with the template, please reach out through the marketplace where you purchased the template: open the item there and send us your question from its support page. We aim to respond within 24–48 hours.