Overview
A bright, botanical HTML template for herbal tea boutiques, wellness blend shops, tea subscriptions and tasting bars. Infusia ships three home pages, a light and a dark theme, right-to-left support, and tea logic that is worked out rather than typed in: a blend builder that prices the tin as you choose, a caffeine meter, a wellness finder that ranks the blends, a steep timer that counts each infusion, a monthly tin subscription with skip and pause, a wholesale estimator, the boutique’s live open status and a shop with tin sizes, a bag, coupon, delivery and tax.
What’s included
- 3 home pages, each with its own scroll moment: botanical line drawings that draw their stems, leaves and flowers in with the scroll; the wellness wheel, four moods round a ring that turns mood by mood with the matching blend in the centre; and botanical cut-outs (hibiscus petals, mint, lemon) floating on three depths
- Light and dark mode on one switch in every header, remembered between visits and applied before the page paints
- Right-to-left stylesheets and a flag language picker in every header: a right-to-left language turns any page around
- WebGL layers — Watercolour Bloom, petal-shaped pigment blooms spreading and fading at the band edges, and a hibiscus opening and closing in light in the footer — tinted by the theme colours
- Blend builder: a base, up to three of 15 botanicals, a 50 g or 100 g tin and your own name on the label, with the price, the caffeine meter, the steep and the moods it serves, live
- Wellness finder: sleep, focus, digestion or immunity, the time of day and the caffeine you want, ranking the 12 house blends with a match and the reasons
- Steep guide: a steep timer with infusions a minute longer each, and a steep chart in °C or °F for any number of cups
- The Tea Club: three plans at a flat rate per tin, a four-step sign-up that never blocks until the last step, and the next six tins with skip and pause, shared with My Account
- Wholesale estimator by the kilogram with three volume tiers, and a tasting-box enquiry
- The shop: moods, base, price, sort and search, a product page with tin sizes, bag, coupon, free-delivery meter, tax, checkout with an order number, wishlist
- The steep tag: hover a blend and a tea-bag tag swings out printed with its steep time and water temperature
- Petal Spiral preloader, Stir In reveals with a leaf rule under every title, Swiper sliders and Fancybox popups
- Fully responsive, written to validate, with no console errors
Getting Started
Thank you for choosing Infusia. Follow the steps below to get your site live.
1. Open locally
Unzip the downloaded package and open infusia/index.html in any modern browser (Chrome, Firefox, Edge,
Safari). No build tools or server are required — the builder, finder, timer, club and shop all work straight from
the files.
2. Deploy to a server
Upload the contents of the infusia/ folder to your hosting provider using an FTP client (such as FileZilla)
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 controlled by CSS variables — see
Colors & Fonts. Hours, bases, botanicals, blends, the club and the shop rules live in
one place — see Tea Logic.
assets/img/ with your own photography at the
same dimensions for the best result. Loose-leaf shots look best square; page titles look best on a light table with an
empty middle, where the title sits.
File Structure
Below is an overview of the key files and folders included in this template.
index.html / homepage-2.html / homepage-3.html | Three home pages: Herbal Boutique (botanical drawings), Wellness Blends (the wellness wheel), Blend Studio (botanical cut-outs, framed) |
blends.html | The house tea menu with mood tabs, a base filter and search |
blend-builder.html | The blend builder: base, up to three botanicals, tin, name; price, caffeine meter, steep and the tin’s label live |
wellness-finder.html | Three questions (mood, time of day, caffeine) ranking the blends, and the four moods’ botanicals |
steep-guide.html | The steep timer with infusions, the steep chart in °C / °F for any number of cups, the four bases |
tea-club.html | The club’s plans, a four-step sign-up, the next six tins with skip and pause, questions |
shop.html / product-single.html / cart.html / checkout.html / wishlist.html | The shop: moods, base, price, sort and search; a blend with its tin sizes; bag, checkout, wishlist |
about.html / team.html / team-details.html | The boutique’s story, its figures and values; the herbalists; a profile |
botanicals.html / botanical-details.html | The fifteen botanicals with mood filters and search; one botanical drawn in and its blends |
gallery.html / wholesale.html / faq.html | The gallery with filters; the wholesale estimator by the kilogram; questions with search |
blog.html / blog-details.html | The journal with five post formats and search; an article with share and comments |
contact.html | Contact cards with the boutique’s live status and the tasting bar, the week’s hours, map and the contact form |
login.html / register.html / forgot-password.html / my-account.html | Account pages; My Account with the club’s tins, saved blends, orders and details |
coming-soon.html / 404.html | Countdown to the second tasting bar, error page |
sendmail.php | AJAX mail handler for the contact and comment forms (see Contact Form) |
assets/css/style.css | All custom styles, numbered Table of CSS (18 sections) |
assets/css/responsive.css | Desktop-first breakpoints 1399 / 1199 / 991 / 767 / 575, plus wide screens from 1600 and 1960 |
assets/css/style.rtl.css / responsive.rtl.css | The right-to-left twins (see RTL) |
assets/css/plugins/ | Bootstrap (LTR and RTL), Swiper, Fancybox (vendor CSS) |
assets/js/main.js | All custom scripts, numbered JS INDEX (39 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.css | Font Awesome Free, loaded locally |
Folder Structure
The package unzips to two folders: Documentation/ (this guide) and infusia/, the template.
Every page sits in the template’s root; everything the pages load sits under assets/:
infusia/
├── *.html the 30 pages, all in the root (see File Structure)
├── sendmail.php the AJAX mail handler for the forms
└── assets/
├── css/
│ ├── style.css all custom styles, numbered Table of CSS
│ ├── style.rtl.css the right-to-left twin of style.css
│ ├── responsive.css breakpoints 1399 / 1199 / 991 / 767 / 575
│ ├── responsive.rtl.css the right-to-left twin of responsive.css
│ ├── fontawesome-all.css Font Awesome Free, loaded locally
│ └── plugins/ vendor stylesheets
│ ├── bootstrap.min.css
│ ├── bootstrap.rtl.min.css Bootstrap for right-to-left pages
│ ├── jquery.fancybox.min.css
│ └── swiper-bundle.min.css
├── js/
│ ├── main.js all custom scripts, numbered JS INDEX (39 blocks)
│ └── plugins/ vendor scripts
│ ├── bootstrap.bundle.min.js
│ ├── gsap.min.js
│ ├── jquery-3.7.1.min.js
│ ├── jquery.fancybox.min.js
│ ├── ScrollTrigger.min.js
│ └── swiper-bundle.min.js
├── fonts/
│ └── theme-icons/ the sun and moon of the theme switch
├── webfonts/ Font Awesome Free font files
└── img/ images, one folder per section
├── avatars/ 2 files
├── banner/ 5 files
├── blog/ 8 files
├── cutouts/ 6 files
├── flags/ 6 files
├── gallery/ 21 files
├── hero/ 4 files
├── home/ 13 files
├── icons/ 66 files
├── leaf/ 12 files
├── logo/ 10 files
├── menu/ 3 files
├── shop/ 12 files
├── team/ 4 files
└── textures/ 3 files
To publish the site, upload the contents of infusia/ to your web root. Photos keep their folder,
file name and size when you replace them, so no page needs editing.
Colors & Fonts
The whole design is driven by CSS variables declared at the top of style.css. Change a token once and every
section, button and card updates. Colours used with transparency have an -rgb twin (for example
--nf-sage-rgb) — change both together.
--nf-sage--nf-sage-deep--nf-sage-text--nf-hibiscus--nf-hibiscus-text--nf-honey--nf-bg--nf-mist--nf-mist-2--nf-night--nf-heading--nf-textSage fills the buttons, the split panels, the plan heads and the leaf rule under every title; the sage panels set their
type in deep ink for contrast, and small sage text uses the darker Sage Text. Hibiscus is the small accent: the badges,
the steep tag’s rule, the wellness marker and the footer flower. Mist is the band ground under Infusia’s own
vine pattern; Night is the one dark band of each home and the night footer. --nf-bg, --nf-surface,
--nf-mist, --nf-heading and --nf-text are the semantic names the components use —
the dark theme swaps those (see Light & Dark Mode).
Fonts
Two Google Fonts are loaded in the head of each page: Roboto Condensed (light, uppercase, widely
tracked headings, navigation and prices) and Roboto (body, buttons and labels). Swap them by editing the
Google Fonts link and the --nf-ff-head / --nf-ff-body variables.
Logo
The logo is a fan of five leaf-petals rising from one point — four sage leaves and a hibiscus petal in the centre —
over INFUSIA in tracked Roboto Condensed capitals and a HERBAL TEA BLENDS line. It ships as ready-made PNG files in
assets/img/logo/:
logo.png/logo-light.png— the stacked logo, for light and dark grounds (the centred headers, the footer)logo-row.png/logo-row-light.png— the row logo, for the sticky bar, small screens and the mobile menupetal-1.png…petal-5.png— the fan’s five petals, which the Petal Spiral preloader assemblesfavicon.png— the browser tab icon
The logo’s lettering appears only inside the images. To use your own logo, replace these files; the header sizes the logo by its height, so a wider or narrower file needs no CSS change.
Light & Dark Mode
Every header (and the mobile menu) has a theme switch. The choice is saved in the browser under the key
infusia-theme and applied by a one-line script in the <head> before the page paints, so a
dark visitor never sees a light flash. The switch sets data-theme="dark" on the <html> tag.
--nf-bg--nf-surface--nf-mist--nf-heading- Tokens — the dark values sit in one block,
[data-theme="dark"] { … }, right after:rootinstyle.css. Change a dark colour there. - Bands that stay dark — sections with the class
is-night(the moods, the wellness wheel, the steep timer, the night footer) are dark in both themes. A light card placed inside one takesnf-on-lightto keep its own ink. - Photographs — the white tea-table photographs of the heroes and page titles sit under a night wash in the dark theme, so their copy stays readable.
- Illustrated icons — each icon ships in a deep-sage and a mist ink; the right one shows by theme and ground on its own.
- Start dark — to open the site dark for first-time visitors, add
data-theme="dark"to the<html>tag of each page; the switch still works and is still remembered.
Tea Logic
The figures on every page come from one data block, JS block 09 Tea Data near the
top of main.js (var TEA), with the engine that prices, steeps and doses caffeine right under it.
Edit it once and the cards, menus, prices, timers and totals follow. Prices are in US dollars; times are minutes after
midnight (540 = 9:00 am).
hours / barCloses | The boutique’s opening and closing time for each weekday (0 = Sunday); the tasting bar pours until barCloses minutes before close. The open-now lines and every hours list read it. |
bases | The four bases: price per 50 g, caffeine per cup (mg), water temperature, minutes, grams per cup and infusions. |
botanicals | The 15 botanicals: the price each adds per 50 g, the moods it serves, its notes, origin, part and Latin name, and extra minutes for roots and bark. |
moods | Sleep, focus, digestion and immunity: the finder’s questions, the wheel’s ring and the mood cards. |
blends | The 12 house blends: base, botanicals, moods, photos, rating and an optional sale share. Their prices, caffeine and steep are worked out by the same engine as the builder. |
club | The Tea Club: the flat rate per tin ($12 for 50 g, $21 for 100 g), the ship day (the first Tuesday of the month), the three plans and the blend of each month. |
wholesale | The volume tiers by kilograms a month, each a share of the 100 g tin price times ten, and the cups a kilogram pours. |
shop / team | The shop rules: free delivery from $40, otherwise $5.50 (express $12), tax 8%, coupon STEEP10 for 10% off; and the herbalists. |
How a tin is priced
A tin is its base’s price per 50 g plus each botanical’s share; a 100 g tin is 1.8 times the 50 g tin. Each
botanical takes 15% of the spoon from the base, so the caffeine falls as botanicals are added; roots and bark add a
minute to the steep. The house blends and the builder use the same three functions: tinPrice(),
caffeineOf() and steepOf().
The wellness finder
Each blend scores 6 when the chosen mood is its first, 4 when it serves it; one more for each of its botanicals that serves the mood; then the caffeine answer and the time of day reward or rule out the leaf (no caffeine after dark). The best three show with their match out of 14 and the reasons.
The Tea Club
A month’s price is the tins in the plan times the club’s flat rate; delivery is free. The schedule lists the
next six first Tuesdays with that month’s blend. Skip and pause are kept in the browser (infusia-club-v1)
and shared by the Tea Club page and My Account; connect block 32 Tea Club to your own
subscription system to take real members.
How the shop totals
STEEP10:
$53.40 − $5.34, delivery $0.00, tax $3.84 — $51.90.The bag, the wishlist, the applied coupon, the blends built in the builder and the saved blends are kept in the
browser (localStorage), so they follow the visitor from page to page. The first visit starts with a small
demo bag and wishlist so every shop page has something to show; to start empty, set the two demo lists in
doShop() (block 30 Tea Shop) to []. Checkout and the club confirm on
screen — connect them to your own systems to take real orders.
WebGL Layers
Two small WebGL shaders draw the moving layers: the bloom — Watercolour Bloom, petal-shaped pigment blooms that spread, dry darker at their rim and fade at the left and right edges of the night bands, the page titles, coming soon and 404 — and the hibiscus — the footer’s brand object, five veined petals opening and closing slowly round a staminal column, in light. Each is one canvas:
<canvas class="nf-gl" data-gl="bloom" aria-hidden="true"></canvas>
- Colours — each layer reads three colours and an opacity from CSS variables on its canvas or
section:
--gl-1,--gl-2,--gl-3and--gl-alpha. The theme switch repaints them. - Performance — a layer only runs while its section is on screen and the tab is visible. Visitors who prefer reduced motion get one still frame. Without WebGL, the section’s own background shows.
- Remove one — delete the canvas; nothing else depends on it.
RTL (Right To Left)
Infusia is RTL-ready: the layout with its paddings and margins, the sliders and the animations all mirror. Right to
left comes from the stylesheets, not from separate pages: the language picker (a flag and a code) in every header lists
the languages that read left to right and right to left. Choosing Arabic stores the language and the direction (keys
infusia-lang and infusia-dir) and reloads; the one-line script in <head> then
sets dir="rtl" and swaps the three stylesheets for the files named in their data-rtl attribute
before the page paints. Nothing is translated — you bring your own right-to-left copy. To make a page right to left
for good:
1. Set The Direction
Add dir="rtl" to the page’s <html> tag (and set lang to your language):
<html lang="en" class="no-js" dir="rtl">
2. Swap Three Stylesheets
assets/css/plugins/bootstrap.min.css | → assets/css/plugins/bootstrap.rtl.min.css |
assets/css/style.css | → assets/css/style.rtl.css |
assets/css/responsive.css | → assets/css/responsive.rtl.css |
The scripts read the direction from the dir attribute: the sliders and the Stir In reveal (cards swing from
the other corner) follow it on their own. Slide counters, the steep timer and the caffeine scale still read left to right.
style.rtl.css and responsive.rtl.css are mirrored
twins of the LTR files, made with RTLCSS. A few hand-made rules at the end of style.rtl.css keep what must
not mirror. If you change style.css, regenerate the twin with npx rtlcss style.css style.rtl.css
and copy those last rules back to its end.JavaScript Guide
All custom behaviour lives in assets/js/main.js, wrapped in a jQuery IIFE and organised into 39 numbered
blocks (see the JS INDEX comment at the top of the file):
- 01–08 — Preloader, Sticky Header, Offcanvas Menu, Scroll Reveals, Back To Top, Anchor Scroll, Light & Dark Mode, Direction, WebGL Textures. The core every page shares: the Petal Spiral preloader, the header, the Stir In reveals, the theme and direction switch and the WebGL layers.
- 09–10 — Tea Data, Tea Drawings. Tea Data holds every figure and the pricing, caffeine and steeping engine; Tea Drawings holds the botanical line drawings Home 1 draws in.
- 11–18 — Custom Select, Counters & Rings, Hero Sliders, Card Sliders, Accordion, Filter Tabs, Grid Search, Newsletter. Shared components: selects, counters, sliders, accordions, filters, search, newsletter.
- 19–25 — Tea Clock, Botanical Drawings, Wellness Wheel, Steep Card, Botanical Cut-outs, Mini Builder, Steep Timer. The boutique’s clock and the home pages’ moments: the drawings, the wellness wheel, the steep card, the cut-outs, the mini builder and the steep timer.
- 26–39 — Blend Builder, Wellness Finder, Steep Chart, Contact Form, Tea Shop, Account Forms, Tea Club, Article Tools, Demo Forms, Launch Countdown, Tea Menu, Wholesale Estimator, My Account, FAQ Search. The feature pages: the blend builder, the wellness finder, the steep chart, contact, the shop, accounts, the Tea Club, the article tools, demo forms, the countdown, the tea menu, wholesale, My Account and FAQ search.
Each block is a self-contained doSomething() function that safely skips pages where its section is not
present — you can delete any block you do not need. Every animation respects prefers-reduced-motion
automatically: content appears in its final state, the drawings appear drawn and the cut-outs rest in place.
nf-stir to a photo or card so it swings into place from a slight
turn about its lower corner, nf-fade to text so it rises softly, and nf-rule for the leaf rule
that draws under a title. data-delay="0.2" staggers any of them; cards in a row stagger on their own.data-depth="1 | 2 | 3" float on their own loops and follow the pointer and the scroll by
depth. None of them pins the page.doLaunchCountdown().Images
The download package ships with neutral placeholder images so you can see every layout at the correct dimensions.
Replace them with your own photos using the same file names, or update the src attributes. Images are
grouped inside assets/img/:
img/avatars/ | Small round portraits for comments and avatar groups — 2 files: 105×105, 80×80 |
img/banner/ | Wide page-title photographs (white tea tables) — 5 files: 2767×1297, 2781×1297 |
img/blog/ | Journal photographs — 8 files: 1300×696 |
img/cutouts/ | Hibiscus petals, mint leaves and a lemon wheel for Home 3 (transparent PNG, included) — 6 files: 600×600, 440×600 |
img/flags/ | The language picker’s flags (SVG, included) — 6 files: SVG |
img/gallery/ | Tea-table photographs for the gallery and the home grids — 21 files: 1000×1000, 1300×800, 2331×1434, 1496×1496, 1287×1287 |
img/hero/ | Home hero photographs — 4 files: 2767×1853, 1920×1100, 2915×1070, 1920×900 |
img/home/ | Split-panel and tile photographs — 13 files: 1000×570, 1276×773, 1353×771, 1518×771, 1200×1200, 1663×832, … |
img/icons/ | Illustrated botanical and steeping icons, each in a deep-sage and a mist ink (included) — 66 files: 160×160, 128×128 |
img/leaf/ | Small round loose-leaf photos for the tea menu and lists — 12 files: 76×76 |
img/logo/ | Logo (stacked and row, light and dark), favicon and the preloader’s five petals — 10 files: 128×240, 271×172, 472×104, 64×64 |
img/menu/ | Home previews in the mega menu — 3 files: 560×350 |
img/shop/ | Loose-leaf blend photographs — 12 files: 800×800 |
img/team/ | The herbalists’ portraits — 4 files: 252×252, 604×604 |
img/textures/ | Infusia’s vine tiles for the mist, sage and night grounds (included) — 3 files: 1040×1040 |
The logo files, the illustrated icons, the vine tiles, the botanical cut-outs and the language flags are included and ready to use. All demo photography shown on the live preview is for preview purposes only and is not included in the download.
Contact Form
The contact form and the comment form post to sendmail.php, a lightweight AJAX mail handler. The success
or error message appears under the button without reloading the page. The newsletter, the club sign-up, the wholesale
enquiry, checkout, login, register and forgot-password forms are demo forms: they confirm on screen and are ready to
connect to your own systems. To activate the mail handler on your server:
1. Set your email address
Open sendmail.php and replace the placeholder recipient at the top of the file with your own address:
$email = 'example@example.com';
2. Upload to a PHP host
The form needs a server with PHP mail() support (virtually every shared host). It will not send from your
local computer or from a static-only host — there the form shows a friendly “upload to a PHP-enabled
host” notice instead.
3. Optional: enable Google reCAPTCHA v3
Invisible reCAPTCHA v3 spam protection is already built into the handler. It stays dormant until the form submits a token — that is why no badge or checkbox appears out of the box. To switch it on:
- Create v3 keys (a site key and a secret key) for your domain in the Google reCAPTCHA admin console
- In
sendmail.php, replaceYOUR_RECAPTCHA_V3_SECRET_KEYwith your secret key - In
contact.html, add a hidden token field inside the form and load the reCAPTCHA script with your site key just before</body>:
<!-- inside the form -->
<input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response">
<!-- before the closing </body> tag -->
<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>
Once the token field is present, sendmail.php verifies every submission with Google and rejects low-score
(bot) requests.
Credits
This template is built using the following open-source libraries and resources.
- Bootstrap 5.3.3
- jQuery 3.7.1
- Swiper 11
- GSAP 3 + ScrollTrigger
- Fancybox 3.5
- Font Awesome Free
- RTLCSS
- Google Fonts: Roboto Condensed, Roboto
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.